Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: cosmwasm plugin #2

Closed
wants to merge 43 commits into from
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
a17bada
Initialized with Ignite CLI
Aug 31, 2023
d30208b
started working on cosmwasm-plugin
Aug 31, 2023
0cd1607
added cosmwasm plugin for Ignite CLI
Aug 31, 2023
084e0f9
Written clearer instructions in README.md
Aug 31, 2023
9ae9622
using go's embed package to embed the template files in the plugin bi…
Sep 5, 2023
38af11e
removed 2 global variables, assigned chainName to the plugin instance…
Sep 8, 2023
b8ea91e
createFile calls made in a loop
Sep 8, 2023
a6c6f04
getChain() function removed for beeing obsolete
Sep 8, 2023
245a81d
added limitations in README.md
Sep 8, 2023
c46f39c
renaming plugin from cosmwasm-plugin -> cosmwasm
Sep 8, 2023
1332f8c
Hooks were removed from Manifest for beeing obsolete
Sep 8, 2023
3c10ada
removed some print statements
Sep 8, 2023
79f099d
removed long description and flags, added short description for cosmw…
Sep 8, 2023
f5cc05c
ExecuteHook functions refactored
Sep 8, 2023
65c25ba
added cosmwasm to gitignore
Sep 8, 2023
eecaa9b
added cosmwasm to gitignore
Sep 8, 2023
548b8fc
removed ioutil (deprecated dependancy)
Sep 15, 2023
440595f
set module name to github.com/ignite/plugins/cosmwasm , fix in README
Sep 15, 2023
27f2900
refactoring on chainName
Sep 15, 2023
be60f6c
removing function modifyExistingFiles(), not used
Sep 15, 2023
c84515a
changed print statements, when files are created to the user, new ver…
Sep 15, 2023
fc9fc29
function handleAddCommand() was reformated to method of plugin
Sep 15, 2023
a523a30
Applying .plush templates and genny for file generations
Sep 25, 2023
4a726bc
adding placeholders in app.go.plush to inject the WASM code
Sep 25, 2023
14efb7f
Merge branch 'ignite:main' into feat/cosmwasm-plugin
yerasyla Sep 25, 2023
d18c431
Merge branch 'feat/cosmwasm-plugin' of https://github.com/yerasyla/pl…
Sep 25, 2023
e9ba7b4
pull from main
Oct 9, 2023
78c053b
Implemented code injection with ASTs for first 5 placeholders
Oct 30, 2023
6c23e46
applied code injectin to app.go (with app6-10 plush files) using ASTs
Nov 1, 2023
e01e073
applied code injectin to app.go (with app11-14 plush files) using ASTs
Nov 3, 2023
f4a1fd5
applied code injectin to app.go (with app15.plush file) using ASTs
Nov 3, 2023
5099608
applied code injectin to app.go (with app16-18 plush file and deletin…
Nov 3, 2023
fef62f2
applied code injectin to app.go (with app19.plush file) using ASTs
Nov 3, 2023
6c8b433
applied code injectin to app.go (with app21-22 plush files) using ASTs
Nov 6, 2023
1dccb58
applied code injection to app.go (with app23.plush file) using ASTs
Nov 6, 2023
b0788d2
initial refactoring after injecting 23 plush files
Nov 6, 2023
ca7391e
bug fix, modified code injection in 3 locations
Nov 7, 2023
8b902fa
post merge commit
Nov 7, 2023
12ab470
Merge branch 'ignite:main' into feat/cosmwasm-plugin
yerasyla Nov 7, 2023
16fdb7f
update go workspace
Nov 8, 2023
d63692e
Merge branch 'ignite:main' into feat/cosmwasm-plugin
yerasyla Nov 14, 2023
1a6076a
fixing bug with importing dependancies
Nov 14, 2023
4fb0806
upgrading to wasmd v0.44.0, code refactoring
Nov 17, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cosmwasm-plugin/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cosmwasm-plugin
140 changes: 140 additions & 0 deletions cosmwasm-plugin/README.md
yerasyla marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# CosmWasm Plugin for Ignite CLI

**This repo contains** an Ignite CLI plugin that can help you to add CosmWasm module support for newly scaffolded app.

## Get started
First scaffold a chain with [Ignite CLI](https://docs.ignite.com).

1. Install Ignite CLI:
```
$ curl https://get.ignite.com/cli! | bash
```
2. Scaffold a chain
```
$ ignite scaffold chain planet
$ cd planet
```

3. Clone this repo locally

4. Add cosmwasm plugin within your project directory:
```
ignite plugin add /absolute/path/to/plugin/cosmwasm-plugin
```

or globally

```
ignite plugin add -g /absolute/path/to/plugin/osmwasm-plugin
```

5. Run command
```
$ ignite cosmwasm-plugin add
```

6. Launch your chain with CosmWasm support

```
$ ignite chain serve
```
`serve` command installs dependencies, builds, initializes, and starts your blockchain in development.


## Testing Smart-Contracts

Testing CosmWasm smart-contract capabilities in your chain, can be performed by following these steps:

0. Prerequisites: install [rust](https://www.rust-lang.org/tools/install) and [docker](https://www.docker.com/) (for smart-contact optimization)

1. Launch chain locally:
```
$ ignite chain serve
```

2. Prepare cosmwasm smart-contract for deployment
```
$ git clone https://github.com/CosmWasm/cw-examples
$ cd cw-examples
$ cd contracts/nameservice
$ RUSTFLAGS='-C link-arg=-s' cargo wasm
```

Optimize contract to reduce gas
```
$ docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/rust-optimizer:0.12.12
```

For ARM64 machines:
```
$ docker run --rm -v "$(pwd)":/code \
--mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \
--mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
cosmwasm/rust-optimizer-arm64:0.12.12
```

3. Deploy smart-contract to your chain
```
$ planetd tx wasm store artifacts/cw_nameservice.wasm --from alice --gas=10000000
```

4. Check your smart-contract on chain
```
$ planetd query wasm list-code
code_infos:
- code_id: "1"
creator: cosmos1a4w3vwxa8zhy57nyy9kw7zhdasr4ue4wld0zpn
data_hash: DF3C9BC1341322810523AABCA28CC3FCDCA021C85061743967CE3D20F5580093
pagination: {}

# download wasm and diff with origin
$ CODE_ID=$(planetd query wasm list-code --output json | jq -r '.code_infos[0].code_id')
$ planetd query wasm code $CODE_ID download.wasm
$ diff artifacts/cw_nameservice.wasm download.wasm
```

5. Instantiate smart-contract, in CosmWasm deployment and instantiation are 2 different steps

```
$ INIT='{"purchase_price":{"amount":"100","denom":"stake"},"transfer_price":{"amount":"999","denom":"stake"}}'
$ planetd tx wasm instantiate 1 "$INIT" --from alice --chain-id "planet" --label "awesome name service" --no-admin

$ CONTRACT=$(planetd query wasm list-contract-by-code $CODE_ID --output json | jq -r '.contracts[-1]')
# check contract state (you should get contract address)
$ planetd query wasm contract $CONTRACT
address: cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s0phg4d
contract_info:
code_id: "1"
creator: cosmos1a4w3vwxa8zhy57nyy9kw7zhdasr4ue4wld0zpn
label: awesome name service
```

6. Interact with smart-contract
```
# purchase name
$ planetd tx wasm execute $CONTRACT '{"register":{"name":"test"}}' --amount 100stake --from alice $TXFLAG -y

# query registered name (you should see your address as owner of the name)
$ NAME_QUERY='{"resolve_record": {"name": "test"}}'
$ planetd query wasm contract-state smart $CONTRACT "$NAME_QUERY" --output json
```

## Compatibility

| Ignite CLI | Cosmos SDK | IBC | wasmd |
|-------------|-------------|-----------|---------------------------------------------------------------|
| v0.27.1 | v0.47.4 | v7.2.0 | v0.41.0 |

## Learn more

- [Ignite CLI](https://ignite.com/cli)
- [Tutorials](https://docs.ignite.com/guide)
- [Ignite CLI docs](https://docs.ignite.com)
- [Cosmos SDK docs](https://docs.cosmos.network)
- [Developer Chat](https://discord.gg/ignite)
- [CosmWasm](https://cosmwasm.com/)
- [Wasm module](https://github.com/CosmWasm/wasmd)
- [CosmWasm Smart Contract Tutorial](https://medium.com/haderech-dev/smart-contract-tutorial-3-cosmwasm-805860c91a88)
190 changes: 190 additions & 0 deletions cosmwasm-plugin/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
module cosmwasm-plugin

go 1.19

require (
github.com/hashicorp/go-plugin v1.4.9
github.com/ignite/cli v0.26.2-0.20230504112712-4324e2ff958f
)

require (
cosmossdk.io/errors v1.0.0-beta.7 // indirect
cosmossdk.io/math v1.0.0 // indirect
filippo.io/edwards25519 v1.0.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.1 // indirect
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
github.com/Microsoft/go-winio v0.6.0 // indirect
github.com/Microsoft/hcsshim v0.9.4 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect
github.com/acomagu/bufpipe v1.0.3 // indirect
github.com/armon/go-metrics v0.4.1 // indirect
github.com/aymanbagabas/go-osc52 v1.0.3 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
github.com/cespare/xxhash v1.1.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/charmbracelet/lipgloss v0.6.0 // indirect
github.com/cloudflare/circl v1.1.0 // indirect
github.com/cometbft/cometbft v0.37.0 // indirect
github.com/cometbft/cometbft-db v0.7.0 // indirect
github.com/confio/ics23/go v0.9.0 // indirect
github.com/containerd/cgroups v1.0.3 // indirect
github.com/containerd/containerd v1.6.8 // indirect
github.com/cosmos/btcutil v1.0.5 // indirect
github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect
github.com/cosmos/cosmos-sdk v0.47.1 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogoproto v1.4.7 // indirect
github.com/cosmos/iavl v0.20.0 // indirect
github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/dgraph-io/badger/v2 v2.2007.4 // indirect
github.com/dgraph-io/ristretto v0.1.1 // indirect
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
github.com/docker/docker v20.10.19+incompatible // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
github.com/emicklei/proto v1.11.1 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/fatih/color v1.13.0 // indirect
github.com/fatih/structs v1.1.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-git/gcfg v1.5.0 // indirect
github.com/go-git/go-billy/v5 v5.4.0 // indirect
github.com/go-git/go-git/v5 v5.5.2 // indirect
github.com/go-kit/kit v0.12.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
github.com/gobuffalo/flect v0.3.0 // indirect
github.com/gobuffalo/genny/v2 v2.1.0 // indirect
github.com/gobuffalo/github_flavored_markdown v1.1.3 // indirect
github.com/gobuffalo/helpers v0.6.7 // indirect
github.com/gobuffalo/logger v1.0.7 // indirect
github.com/gobuffalo/packd v1.0.2 // indirect
github.com/gobuffalo/plush/v4 v4.1.16 // indirect
github.com/gobuffalo/tags/v3 v3.1.4 // indirect
github.com/gobuffalo/validate/v3 v3.3.3 // indirect
github.com/goccy/go-yaml v1.9.7 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gofrs/uuid v4.3.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.1.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.2 // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/gorilla/css v1.0.0 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/gtank/merlin v0.1.1 // indirect
github.com/gtank/ristretto255 v0.1.2 // indirect
github.com/hashicorp/go-hclog v1.2.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb // indirect
github.com/hdevalence/ed25519consensus v0.1.0 // indirect
github.com/huandu/skiplist v1.2.0 // indirect
github.com/iancoleman/strcase v0.2.0 // indirect
github.com/ignite/web v0.4.3 // indirect
github.com/imdario/mergo v0.3.13 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jmhodges/levigo v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
github.com/klauspost/compress v1.16.3 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/microcosm-cc/bluemonday v1.0.20 // indirect
github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/moby/moby v20.10.21+incompatible // indirect
github.com/moby/sys/mount v0.3.3 // indirect
github.com/moby/sys/mountinfo v0.6.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mtibben/percent v0.2.1 // indirect
github.com/muesli/reflow v0.3.0 // indirect
github.com/muesli/termenv v0.13.0 // indirect
github.com/nqd/flat v0.2.0 // indirect
github.com/oklog/run v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
github.com/opencontainers/runc v1.1.3 // indirect
github.com/otiai10/copy v1.9.0 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect
github.com/pjbgf/sha1cd v0.2.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.14.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/common v0.40.0 // indirect
github.com/prometheus/procfs v0.9.0 // indirect
github.com/radovskyb/watcher v1.0.7 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/rs/cors v1.8.3 // indirect
github.com/sasha-s/go-deadlock v0.3.1 // indirect
github.com/sergi/go-diff v1.2.0 // indirect
github.com/sirupsen/logrus v1.9.0 // indirect
github.com/skeema/knownhosts v1.1.0 // indirect
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d // indirect
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e // indirect
github.com/spf13/afero v1.9.3 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.6.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.15.0 // indirect
github.com/stretchr/testify v1.8.2 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect
github.com/tendermint/go-amino v0.16.0 // indirect
github.com/tidwall/btree v1.6.0 // indirect
github.com/xanzy/ssh-agent v0.3.3 // indirect
github.com/zondax/hid v0.9.1 // indirect
github.com/zondax/ledger-go v0.14.1 // indirect
go.etcd.io/bbolt v1.3.7 // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/term v0.6.0 // indirect
golang.org/x/text v0.8.0 // indirect
golang.org/x/tools v0.6.0 // indirect
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect
google.golang.org/grpc v1.53.0 // indirect
google.golang.org/protobuf v1.29.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
pgregory.net/rapid v0.5.5 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
Loading