From d119949d5f72390f2a1361e1badea05b55ac43c9 Mon Sep 17 00:00:00 2001 From: Victor Pham Date: Tue, 28 Jun 2022 14:34:17 +0700 Subject: [PATCH] Map home dir of validator from host machine to container instead of let the data inside container + Sample of proposal (#26) * add sample gov proposal to change min gov proposal deposit amt * Mapping home dir of each validator to their own container (#25) --- all-in-one.sh | 8 ++-- blockchain-in-docker/1_prepare-genesis.sh | 3 ++ blockchain-in-docker/2_build-docker-image.sh | 8 ++++ blockchain-in-docker/README.md | 15 ++++++- .../evmos/1-gov_min_deposit_change.json | 20 +++++++++ .../gov-sample-proposals/evmos/1-sample.md | 41 +++++++++++++++++++ blockchain-in-docker/template.DockerfileX | 10 ++--- blockchain-in-docker/template.networkX.yml | 17 ++++++-- env.sh | 4 ++ hermes-as-ibc-relayer/create-relayer.sh | 4 +- 10 files changed, 112 insertions(+), 18 deletions(-) create mode 100644 blockchain-in-docker/gov-sample-proposals/evmos/1-gov_min_deposit_change.json create mode 100644 blockchain-in-docker/gov-sample-proposals/evmos/1-sample.md diff --git a/all-in-one.sh b/all-in-one.sh index 698d87e..40f09e0 100755 --- a/all-in-one.sh +++ b/all-in-one.sh @@ -137,16 +137,16 @@ fi echo "> [Load up token for IBC account on chain 1]" echo "Keyring: $KEYRING" if [ "$KEYRING" = "test" ]; then - docker exec -it vtevmos11 bash -c "$CHAIN_1_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_1_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_1_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_1_GAS_PRICE_DENOM_SYMBOL --home /.evmosd11 --node 'tcp://127.0.0.1:26657' --yes" + docker exec -it vtevmos11 bash -c "$CHAIN_1_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_1_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_1_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_1_GAS_PRICE_DENOM_SYMBOL --home /.evmosd1 --node 'tcp://127.0.0.1:26657' --yes" else - docker exec -it vtevmos11 bash -c "echo '$VAL_KEYRING_FILE_ENCRYPTION_PASSWORD' | $CHAIN_1_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_1_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_1_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_1_GAS_PRICE_DENOM_SYMBOL --home /.evmosd11 --node 'tcp://127.0.0.1:26657' --yes" + docker exec -it vtevmos11 bash -c "echo '$VAL_KEYRING_FILE_ENCRYPTION_PASSWORD' | $CHAIN_1_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_1_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_1_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_1_GAS_PRICE_DENOM_SYMBOL --home /.evmosd1 --node 'tcp://127.0.0.1:26657' --yes" fi [ $? -eq 0 ] || { echo >&2 "ERR AIO: Operation failed"; exit 1; } echo "> [Load up token for IBC account on chain 2]" if [ "$KEYRING" = "test" ]; then - docker exec -it vtevmos21 bash -c "$CHAIN_2_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_2_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_2_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_2_GAS_PRICE_DENOM_SYMBOL --home /.evmosd21 --node 'tcp://127.0.0.1:26657' --yes" + docker exec -it vtevmos21 bash -c "$CHAIN_2_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_2_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_2_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_2_GAS_PRICE_DENOM_SYMBOL --home /.evmosd2 --node 'tcp://127.0.0.1:26657' --yes" else - docker exec -it vtevmos21 bash -c "echo '$VAL_KEYRING_FILE_ENCRYPTION_PASSWORD' | $CHAIN_2_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_2_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_2_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_2_GAS_PRICE_DENOM_SYMBOL --home /.evmosd21 --node 'tcp://127.0.0.1:26657' --yes" + docker exec -it vtevmos21 bash -c "echo '$VAL_KEYRING_FILE_ENCRYPTION_PASSWORD' | $CHAIN_2_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_2_ADDR $(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_2_DENOM_EXPONENT)")$HERMES_CFG_CHAIN_2_GAS_PRICE_DENOM_SYMBOL --home /.evmosd2 --node 'tcp://127.0.0.1:26657' --yes" fi [ $? -eq 0 ] || { echo >&2 "ERR AIO: Operation failed"; exit 1; } diff --git a/blockchain-in-docker/1_prepare-genesis.sh b/blockchain-in-docker/1_prepare-genesis.sh index 3da06f3..0c0f039 100755 --- a/blockchain-in-docker/1_prepare-genesis.sh +++ b/blockchain-in-docker/1_prepare-genesis.sh @@ -249,6 +249,9 @@ if [ $DISABLE_CLAIM -eq 0 ]; then echo '- Claimn module account addr '$EVMOS_CLAIM_MODULE_ACCOUNT', total '$(bc <<< "$amount_to_claim / (10^$DENOM_EXPONENT)")' '$DENOM_SYMBOL cat $GENESIS_JSON | jq '.app_state["bank"]["balances"] += [{"address":"'$EVMOS_CLAIM_MODULE_ACCOUNT'","coins":[{"denom":"'$MIN_DENOM_SYMBOL'", "amount":"'$amount_to_claim'"}]}]' > $GENESIS_JSON_TMP && mv $GENESIS_JSON_TMP $GENESIS_JSON fi +## Gov deposit +echo '- Set minimum deposit to '$MINIMUM_GOV_DEPOSIT' '$DENOM_SYMBOL' by setting [app_state > gov > deposit_params > min_deposit[0] > amount]' +cat $GENESIS_JSON | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["amount"]="'$(bc <<< "$MINIMUM_GOV_DEPOSIT * (10^$DENOM_EXPONENT)")'"' > $GENESIS_JSON_TMP && mv $GENESIS_JSON_TMP $GENESIS_JSON # Update app.toml diff --git a/blockchain-in-docker/2_build-docker-image.sh b/blockchain-in-docker/2_build-docker-image.sh index ae2ef72..afd78a2 100755 --- a/blockchain-in-docker/2_build-docker-image.sh +++ b/blockchain-in-docker/2_build-docker-image.sh @@ -99,10 +99,16 @@ if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' "s,_p_src_dir_,$SOURCE_CODE_DIR,g" "$DOCKER_FILE" sed -i '' "s/_p_daemon_binary_/$DAEMON_BINARY_NAME/g" "$DOCKER_FILE" sed -i '' "s/_p_home_prefix_/$VAL_HOME_PREFIX/g" "$DOCKER_FILE" + sed -i '' "s/_p_user_name_/$USER/g" "$DOCKER_FILE" + sed -i '' "s/_p_user_id_/$(id -u)/g" "$DOCKER_FILE" + sed -i '' "s/_p_group_id_/$(id -g)/g" "$DOCKER_FILE" else sed -i "s,_p_src_dir_,$SOURCE_CODE_DIR,g" "$DOCKER_FILE" sed -i "s/_p_daemon_binary_/$DAEMON_BINARY_NAME/g" "$DOCKER_FILE" sed -i "s/_p_home_prefix_/$VAL_HOME_PREFIX/g" "$DOCKER_FILE" + sed -i "s/_p_user_name_/$USER/g" "$DOCKER_FILE" + sed -i "s/_p_user_id_/$(id -u)/g" "$DOCKER_FILE" + sed -i "s/_p_group_id_/$(id -g)/g" "$DOCKER_FILE" fi # Docker build @@ -122,6 +128,7 @@ if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' "s/_p_1317_/$PORT_1317/g" "$DOCKER_COMPOSE_FILE" sed -i '' "s/_p_26656_/$PORT_26656/g" "$DOCKER_COMPOSE_FILE" sed -i '' "s/_p_image_prefix_/$DOCKER_IMAGE_NAME_PREFIX/g" "$DOCKER_COMPOSE_FILE" + sed -i '' "s/_p_home_prefix_/$VAL_HOME_PREFIX/g" "$DOCKER_COMPOSE_FILE" else sed -i "s/_p_chain_no_/$CHAIN_NO/g" "$DOCKER_COMPOSE_FILE" sed -i "s/_p_26657_/$PORT_26657/g" "$DOCKER_COMPOSE_FILE" @@ -130,6 +137,7 @@ else sed -i "s/_p_1317_/$PORT_1317/g" "$DOCKER_COMPOSE_FILE" sed -i "s/_p_26656_/$PORT_26656/g" "$DOCKER_COMPOSE_FILE" sed -i "s/_p_image_prefix_/$DOCKER_IMAGE_NAME_PREFIX/g" "$DOCKER_COMPOSE_FILE" + sed -i "s/_p_home_prefix_/$VAL_HOME_PREFIX/g" "$DOCKER_COMPOSE_FILE" fi echo '- Expose ports:' echo "+ 26657 => $PORT_26657" diff --git a/blockchain-in-docker/README.md b/blockchain-in-docker/README.md index 7a6a9cb..4165854 100644 --- a/blockchain-in-docker/README.md +++ b/blockchain-in-docker/README.md @@ -74,4 +74,17 @@ Here are some of them: Performance: 2 chains created by this sample can run in parallel smoothly in a 4 Core 4 Gb RAM machine -This sample is using keyring-backend is `test`, you may need to change to `file` ([env.sh](https://github.com/VictorTrustyDev/EVMOS-sample-scripts/blob/main/env.sh)) to secure your test env if needed \ No newline at end of file +This sample is using keyring-backend is `test`, you may need to change to `file` ([env.sh](https://github.com/VictorTrustyDev/EVMOS-sample-scripts/blob/main/env.sh)) to secure your test env if needed + +### V. Mapped volumes + +| Network | Chain ID | Container name | Home dir within container | Mapped home dir in host machine | +| --- | --- | --- | --- | --- | +| 1 | evmos_9006-1 | vtevmos10 (val1) | /.evmosd1 | /path/to/EVMOS-sample-scripts/blockchain-in-docker/.evmosd10 | +| 1 | evmos_9006-1 | vtevmos11 (val2) | /.evmosd1 | /path/to/EVMOS-sample-scripts/blockchain-in-docker/.evmosd11 | +| 1 | evmos_9006-1 | vtevmos12 (val3) | /.evmosd1 | /path/to/EVMOS-sample-scripts/blockchain-in-docker/.evmosd12 | +| 2 | evmos_9007-1 | vtevmos20 (val1) | /.evmosd2 | /path/to/EVMOS-sample-scripts/blockchain-in-docker/.evmosd20 | +| 2 | evmos_9007-1 | vtevmos21 (val2) | /.evmosd2 | /path/to/EVMOS-sample-scripts/blockchain-in-docker/.evmosd21 | +| 2 | evmos_9007-1 | vtevmos22 (val3) | /.evmosd2 | /path/to/EVMOS-sample-scripts/blockchain-in-docker/.evmosd22 | + +The [gov-sample-proposals](https://github.com/VictorTrustyDev/EVMOS-sample-scripts/tree/main/blockchain-in-docker/gov-sample-proposals) also mapped to `/gov-sample-proposals` vol within each container \ No newline at end of file diff --git a/blockchain-in-docker/gov-sample-proposals/evmos/1-gov_min_deposit_change.json b/blockchain-in-docker/gov-sample-proposals/evmos/1-gov_min_deposit_change.json new file mode 100644 index 0000000..6a947d6 --- /dev/null +++ b/blockchain-in-docker/gov-sample-proposals/evmos/1-gov_min_deposit_change.json @@ -0,0 +1,20 @@ +{ + "title": "Decrease the minimum deposit amount for governance proposals and maximum deposit period", + "description": "If successful, this parameter-change governance proposal that will change the minimum deposit from 64 EVMOS to 100000 aevmos and max deposit period changes from 14 days to 7 days", + "changes": [ + { + "subspace": "gov", + "key": "depositparams", + "value": { + "min_deposit": [ + { + "denom": "aevmos", + "amount": "100000" + } + ], + "max_deposit_period": "604800000000000" + } + } + ], + "deposit": "65000000000000000000aevmos" +} \ No newline at end of file diff --git a/blockchain-in-docker/gov-sample-proposals/evmos/1-sample.md b/blockchain-in-docker/gov-sample-proposals/evmos/1-sample.md new file mode 100644 index 0000000..8989a26 --- /dev/null +++ b/blockchain-in-docker/gov-sample-proposals/evmos/1-sample.md @@ -0,0 +1,41 @@ +### Decrease the minimum deposit amount for governance proposals and maximum deposit period +#### If successful, this parameter-change governance proposal that will change the minimum deposit from 64 EVMOS to 100000 aevmos and max deposit period changes from 14 days to 7 days +1. Remote into container and move to sample directory +> docker exec -it vtevmos20 bash + +> cd /gov-sample-proposals/evmos/ + +2. Submit proposal +> evmosd tx gov submit-proposal param-change "./1-gov_min_deposit_change.json" --from val1 --node tcp://127.0.0.1:26657 --home /.evmosd2 --gas 300000 + +3. Vote +> docker exec -it vtevmos20 bash + +> evmosd tx gov vote `[proposal id eg 1]` yes --gas auto --from val1 --home /.evmosd2 + +> docker exec -it vtevmos21 bash + +> evmosd tx gov vote `[proposal id eg 1]` yes --gas auto --from val2 --home /.evmosd2 + +> docker exec -it vtevmos22 bash + +> evmosd tx gov vote `[proposal id eg 1]` yes --gas auto --from val3 --home /.evmosd2 + +4. Result: +- Previous: + > evmosd q params subspace gov depositparams --chain-id evmos_9007-1 --node tcp://127.0.0.1:36657 + + > key: depositparams + + > subspace: gov + + > value: '{"min_deposit":[{"denom":"aevmos","amount":"64000000000000000000"}],"max_deposit_period":"172800000000000"}' + +- Later: + > evmosd q params subspace gov depositparams --chain-id evmos_9007-1 --node tcp://127.0.0.1:36657 + + > key: depositparams + + > subspace: gov + + > value: '{"min_deposit":[{"denom":"aevmos","amount":"100000"}],"max_deposit_period":"604800000000000"}' \ No newline at end of file diff --git a/blockchain-in-docker/template.DockerfileX b/blockchain-in-docker/template.DockerfileX index 0aec177..4dd58b4 100644 --- a/blockchain-in-docker/template.DockerfileX +++ b/blockchain-in-docker/template.DockerfileX @@ -15,16 +15,12 @@ COPY --from=build-env /go/victortrusty.dev/build/_p_daemon_binary_ /usr/bin/_p_d RUN apt-get update -y RUN apt-get install ca-certificates jq -y +RUN useradd -m _p_user_name_ --uid=_p_user_id_ -WORKDIR /_p_home_prefix_0 -COPY ./_p_home_prefix_0 . -WORKDIR /_p_home_prefix_1 -COPY ./_p_home_prefix_1 . -WORKDIR /_p_home_prefix_2 -COPY ./_p_home_prefix_2 . +USER _p_user_id_:_p_group_id_ WORKDIR /root EXPOSE 26656 26657 1317 9090 8545 -ENTRYPOINT /usr/bin/_p_daemon_binary_ start --home "/_p_home_prefix_$NODE" +ENTRYPOINT /usr/bin/_p_daemon_binary_ start --home "/_p_home_prefix_" diff --git a/blockchain-in-docker/template.networkX.yml b/blockchain-in-docker/template.networkX.yml index 30e3ef3..df6908f 100644 --- a/blockchain-in-docker/template.networkX.yml +++ b/blockchain-in-docker/template.networkX.yml @@ -14,26 +14,35 @@ services: networks: - vtevmosnw_p_chain_no_ environment: - - NODE=0 + - NODE_IDX=0 restart: always image: _p_image_prefix__p_chain_no_ + volumes: + - ./gov-sample-proposals:/gov-sample-proposals + - ./_p_home_prefix_0:/_p_home_prefix_ vtevmos_p_chain_no_1: container_name: vtevmos_p_chain_no_1 networks: - vtevmosnw_p_chain_no_ environment: - - NODE=1 + - NODE_IDX=1 depends_on: - vtevmos_p_chain_no_0 restart: always image: _p_image_prefix__p_chain_no_ + volumes: + - ./gov-sample-proposals:/gov-sample-proposals + - ./_p_home_prefix_1:/_p_home_prefix_ vtevmos_p_chain_no_2: container_name: vtevmos_p_chain_no_2 networks: - vtevmosnw_p_chain_no_ environment: - - NODE=2 + - NODE_IDX=2 depends_on: - vtevmos_p_chain_no_0 restart: always - image: _p_image_prefix__p_chain_no_ \ No newline at end of file + image: _p_image_prefix__p_chain_no_ + volumes: + - ./gov-sample-proposals:/gov-sample-proposals + - ./_p_home_prefix_2:/_p_home_prefix_ \ No newline at end of file diff --git a/env.sh b/env.sh index 5bf4817..6ace505 100644 --- a/env.sh +++ b/env.sh @@ -1,5 +1,8 @@ #!/bin/bash +### IMPORTANT NOTICE +### It is not recommended to modify this file directly. Instead you can create a file named `override-env.sh` and write modified values there + # Pre-requisites command -v jq > /dev/null 2>&1 || { echo >&2 "ERR: jq not installed. More info: https://stedolan.github.io/jq/download/ (Hint: sudo apt install jq -y)"; exit 1; } command -v yq > /dev/null 2>&1 || { echo >&2 "ERR: yq not installed. More info: https://github.com/kislyuk/yq/ (Hint: sudo apt install python3-pip -y && pip3 install yq)"; exit 1; } @@ -20,6 +23,7 @@ export NOTICE_DEV_ENV="This sample scripts was developed on an Ubuntu 22.04 LTS ## Network export MONIKER='moniker' export NUMBER_OF_VALIDATOR=5 # Maximum number of active validators. If number of validators more than this, only the first X validators will be choosen (order by power) +export MINIMUM_GOV_DEPOSIT=64 # Minimum amount of coins required to submit a proposal ### Chain 1 export CHAIN_1_TYPE="evmos" # valid values are 'evmos' or 'cosmos' only, must be 'evmos' for evmos chain, otherwise 'cosmos' for other chains export CHAIN_1_ID="evmos_9006-1" diff --git a/hermes-as-ibc-relayer/create-relayer.sh b/hermes-as-ibc-relayer/create-relayer.sh index d89c1b9..a5ed859 100755 --- a/hermes-as-ibc-relayer/create-relayer.sh +++ b/hermes-as-ibc-relayer/create-relayer.sh @@ -28,9 +28,9 @@ if [ "$HERMES_NO_CONFIRM_BALANCE" != "1" ]; then echo "Go prepare yourself" echo "Hint: you can do this" echo " docker exec -it vtevmos11 bash" - echo " $CHAIN_1_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_1_ADDR "$(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_1_DENOM_EXPONENT)")"$HERMES_CFG_CHAIN_1_GAS_PRICE_DENOM_SYMBOL --home /.evmosd11 --node tcp://127.0.0.1:26657" + echo " $CHAIN_1_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_1_ADDR "$(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_1_DENOM_EXPONENT)")"$HERMES_CFG_CHAIN_1_GAS_PRICE_DENOM_SYMBOL --home /.evmosd1 --node tcp://127.0.0.1:26657" echo " docker exec -it vtevmos21 bash" - echo " $CHAIN_2_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_2_ADDR "$(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_2_DENOM_EXPONENT)")"$HERMES_CFG_CHAIN_2_GAS_PRICE_DENOM_SYMBOL --home /.evmosd21 --node tcp://127.0.0.1:26657" + echo " $CHAIN_2_DAEMON_BINARY_NAME tx bank send $VAL_2_KEY_NAME $REL_2_ADDR "$(bc <<< "$HERMES_RESERVED_FEE * (10^$HERMES_CFG_CHAIN_2_DENOM_EXPONENT)")"$HERMES_CFG_CHAIN_2_GAS_PRICE_DENOM_SYMBOL --home /.evmosd2 --node tcp://127.0.0.1:26657" exit 0 fi fi