fix(docker/wasmd): Make test accounts accessible from within and outside container (#121)

Signed-off-by: Thane Thomson <connect@thanethomson.com>
This commit is contained in:
Thane Thomson 2024-07-29 09:35:11 -04:00 committed by GitHub
parent 2a4e7f5ec5
commit b2fba137c4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 64 additions and 3 deletions

View file

@ -3,7 +3,10 @@ ARG WASMD_VERSION=v0.44.0
FROM cosmwasm/wasmd:${WASMD_VERSION}
# Increase the amount of ucosm given to accounts
RUN sed -i 's/1000000000/12000000000000/g' /opt/setup_wasmd.sh
RUN <<EOF
sed -i 's/keyring-backend = "os"/keyring-backend = "test"/g' /root/.wasmd/config/client.toml
sed -i 's/1000000000/12000000000000/g' /opt/setup_wasmd.sh
EOF
# Set up wasmd. The account numbers correspond to those in the ./accounts/
# folder.
@ -13,6 +16,17 @@ RUN /opt/setup_wasmd.sh \
wasm1adcnk7lt6qst7p5d0g5607e28k77um7nxwxuqy \
wasm1jn34x50hy3my0a2mxwcx8fttgfxu2n5gpvu0ty
# Import the accounts' private keys into the image such that they can be used to
# initiate transactions from within the container.
COPY accounts /tmp/accounts
RUN <<EOF
tail -n 1 /tmp/accounts/admin.txt | wasmd keys add admin --recover --keyring-backend=test
tail -n 1 /tmp/accounts/alice.txt | wasmd keys add alice --recover --keyring-backend=test
tail -n 1 /tmp/accounts/bob.txt | wasmd keys add bob --recover --keyring-backend=test
tail -n 1 /tmp/accounts/charlie.txt | wasmd keys add charlie --recover --keyring-backend=test
rm -rf /tmp/accounts
EOF
# Configure the validator for single-node operation within a Docker container
RUN <<EOF
sed -i 's/keyring-backend = "os"/keyring-backend = "test"/g' /root/.wasmd/config/client.toml
@ -27,4 +41,4 @@ sed -i 's/max_body_bytes = 1000000$/max_body_bytes = 1000000000/g' /root/.wasmd/
sed -i 's/max_tx_bytes = 1048576$/max_tx_bytes = 104857600/g' /root/.wasmd/config/config.toml
EOF
CMD ["/opt/run_wasmd.sh"]
CMD ["/opt/run_wasmd.sh"]

View file

@ -35,4 +35,14 @@ delete-accounts:
wasmd keys delete -y alice
wasmd keys delete -y bob
wasmd keys delete -y charlie
.PHONY: delete-accounts
.PHONY: delete-accounts
# Imports the accounts for admin, alice, bob and charlie from the text files in
# the ./accounts/ folder. We assume that the mnemonic for each account is the
# last line of each of the text files.
import-accounts:
tail -n 1 accounts/admin.txt | wasmd keys add admin --recover --keyring-backend=test
tail -n 1 accounts/alice.txt | wasmd keys add alice --recover --keyring-backend=test
tail -n 1 accounts/bob.txt | wasmd keys add bob --recover --keyring-backend=test
tail -n 1 accounts/charlie.txt | wasmd keys add charlie --recover --keyring-backend=test
.PHONY: import-accounts

View file

@ -51,6 +51,43 @@ 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`