cycles-quartz/docker/wasmd/README.md
Thane Thomson b2fba137c4
fix(docker/wasmd): Make test accounts accessible from within and outside container (#121)
Signed-off-by: Thane Thomson <connect@thanethomson.com>
2024-07-29 09:35:11 -04:00

119 lines
3.1 KiB
Markdown

# Quartz app wasmd image
This folder contains a `Dockerfile` that helps build a single-node [wasmd]
validator for use in testing your Quartz application.
It facilitates the creation of a Docker image with 4 accounts pre-loaded, each
having a small amount of `ucosm` preloaded from genesis for experimentation.
- `admin`
- `alice`
- `bob`
- `charlie`
These accounts' details are stored in clear text in the [accounts](./accounts/)
folder.
**Note: this image is _not_ intended to be used in production.**
## Running the image
From this directory, simply run:
```bash
make run
```
This will implicitly call `make build` to build the Docker image, and then run
it, binding to the following ports on the local machine:
- 1317
- 9090
- 26656
- 26657
It also implicitly creates a Docker volume called `wasmd_data` such that just
the contents of the `/root` directory in the container persist across restarts.
To wipe this volume and start from scratch, simply terminate the container and
run:
```bash
docker volume rm wasmd_data
```
## Building the image
To build the image without running it, simply run:
```bash
make
```
This will, by default, build a Docker image tagged `informaldev/wasmd:v0.44.0`.
## Transacting on behalf of the accounts
The accounts listed in the [`accounts`](./accounts/) folder are all already
imported into the `test` keyring within the Docker image. Once the container is
running, you can run the following to list them:
```bash
# Assumes the container is called "wasmd"
docker exec -it wasmd \
wasmd keys list --keyring-backend=test
```
## Importing the account keys
As previously mentioned, the [`accounts`](./accounts/) folder contains all of
the necessary material to construct the public/private keypairs of the accounts.
A convenient helper target is provided in [`Makefile`](./Makefile) to facilitate
importing of these accounts into a local `wasmd` configuration (i.e. on your
host machine, outside of the Docker container). This will allow you to transact
on behalf of any of those accounts from outside of the Docker container.
**NB**: For this to work, you will need the same version of `wasmd` installed on
your local machine as what is built into the `wasmd` Docker image.
```bash
make import-accounts
```
To check that the accounts have been imported correctly, on your host machine
run:
```bash
# List all keys available in your local wasmd configuration
wasmd keys list --keyring-backend=test
```
## Querying accounts in the container
To query, for example, the `admin` account's balance, where the `admin`
account's address is `wasm1mkrm9m8g0dzv5z73xg8yzlj6srqc72qru5xfv3`, once the
Docker container is running, in a separate terminal run:
```bash
# The first "wasmd" indicates the name of the running Docker container, whereas
# the second "wasmd" indicates the name of the command to run inside the
# container.
docker exec -it wasmd \
wasmd query bank balances wasm1mkrm9m8g0dzv5z73xg8yzlj6srqc72qru5xfv3
```
You should see output like:
```bash
balances:
- amount: "12000000000000"
denom: ucosm
- amount: "12000000000000"
denom: ustake
pagination:
next_key: null
total: "0"
```
[wasmd]: https://github.com/CosmWasm/wasmd