- will be instantiated and called by uxd-contract (main contract)
- base on cw20-base. in fact calling delegating to cw20-base for all but instantiate
- built using cw-template
This is a basic implementation of a cw20 contract. It implements the CW20 spec and is designed to be deployed as is, or imported into other contracts to easily build cw20-compatible tokens with custom logic.
Implements:
- CW20 Base
- Mintable extension
- Allowances extension
You will need Rust 1.44.1+ with wasm32-unknown-unknown target installed.
You can run unit tests on this via:
cargo test
Once you are happy with the content, you can compile it to wasm via:
RUSTFLAGS='-C link-arg=-s' cargo wasm
cp ../../target/wasm32-unknown-unknown/release/cw20_base.wasm .
ls -l cw20_base.wasm
sha256sum cw20_base.wasm
Or for a production-ready (optimized) build, run a build command in the the repository root: https://github.com/CosmWasm/cw-plus#compiling.
You can also import much of the logic of this contract to build another ERC20-contract, such as a bonding curve, overiding or extending what you need.
Basically, you just need to write your handle function and import
cw20_base::contract::handle_transfer, etc and dispatch to them.
This allows you to use custom ExecuteMsg and QueryMsg with your additional
calls, but then use the underlying implementation for the standard cw20
messages you want to support. The same with QueryMsg. You could reuse instantiate
as it, but it is likely you will want to change it. And it is rather simple.
Look at cw20-staking for an example of how to "inherit"
all this token functionality and combine it with custom logic.
This is a template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it. To understand the framework better, please read the overview in the cosmwasm repo, and dig into the cosmwasm docs. This assumes you understand the theory and just want to get coding.
Assuming you have a recent version of rust and cargo (v1.58.1+) installed (via rustup), then the following should get you a new repo to start a contract:
Install cargo-generate and cargo-run-script. Unless you did that before, run this line now:
cargo install cargo-generate --features vendored-openssl
cargo install cargo-run-scriptNow, use it to create your new contract. Go to the folder in which you want to place it and run:
Latest: 1.0.0-beta6
cargo generate --git https://github.com/CosmWasm/cw-template.git --name PROJECT_NAMEOlder Version
Pass version as branch flag:
cargo generate --git https://github.com/CosmWasm/cw-template.git --branch <version> --name PROJECT_NAMEExample:
cargo generate --git https://github.com/CosmWasm/cw-template.git --branch 0.16 --name PROJECT_NAMEYou will now have a new folder called PROJECT_NAME (I hope you changed that to something else)
containing a simple working contract and build system that you can customize.
After generating, you have a initialized local git repo, but no commits, and no remote.
Go to a server (eg. github) and create a new upstream repo (called YOUR-GIT-URL below).
Then run the following:
# this is needed to create a valid Cargo.lock file (see below)
cargo check
git branch -M main
git add .
git commit -m 'Initial Commit'
git remote add origin YOUR-GIT-URL
git push -u origin mainWe have template configurations for both GitHub Actions and Circle CI in the generated project, so you can get up and running with CI right away.
One note is that the CI runs all cargo commands
with --locked to ensure it uses the exact same versions as you have locally. This also means
you must have an up-to-date Cargo.lock file, which is not auto-generated.
The first time you set up the project (or after adding any dep), you should ensure the
Cargo.lock file is updated, so the CI will test properly. This can be done simply by
running cargo check or cargo unit-test.
Once you have your custom repo, you should check out Developing to explain more on how to run tests and develop code. Or go through the online tutorial to get a better feel of how to develop.
Publishing contains useful information on how to publish your contract to the world, once you are ready to deploy it on a running blockchain. And Importing contains information about pulling in other contracts or crates that have been published.
Please replace this README file with information about your specific project. You can keep
the Developing.md and Publishing.md files as useful referenced, but please set some
proper description in the README.
Gitpod container-based development platform will be enabled on your project by default.
Workspace contains:
- rust: for builds
- wasmd: for local node setup and client
- jq: shell JSON manipulation tool
Follow Gitpod Getting Started and launch your workspace.