From 74bf5c40e5bd05d101dfc87985521c7407c925fd Mon Sep 17 00:00:00 2001 From: nghuyenthevinh2000 Date: Sat, 18 Mar 2023 21:22:17 +0700 Subject: [PATCH] Terra operator docker refactor (#172) --- Dockerfile.terraclassic.terrad-binary | 32 ------ Makefile | 15 +++ README.md | 7 +- contrib/terra-operator/Dockerfile | 34 +++++++ contrib/terra-operator/Dockerfile.core | 58 +++++++++++ {docker => contrib/terra-operator}/README.md | 0 .../terra-operator}/build_all.sh | 0 .../terra-operator}/create-validator.sh | 0 .../terra-operator/docker-compose.build.yml | 24 +++++ .../terra-operator/docker-compose.node.yml | 12 +-- contrib/terra-operator/entrypoint.sh | 98 +++++++++++++++++++ .../terra-operator}/keys-add.sh | 0 contrib/terra-operator/keys.json | 24 +++++ contrib/terra-operator/test-node-setup.sh | 36 +++++++ docker-compose.build.yml | 19 ---- docker/Dockerfile | 54 ---------- docker/entrypoint.sh | 83 ---------------- 17 files changed, 297 insertions(+), 199 deletions(-) delete mode 100644 Dockerfile.terraclassic.terrad-binary create mode 100644 contrib/terra-operator/Dockerfile create mode 100644 contrib/terra-operator/Dockerfile.core rename {docker => contrib/terra-operator}/README.md (100%) rename {docker => contrib/terra-operator}/build_all.sh (100%) rename {docker => contrib/terra-operator}/create-validator.sh (100%) create mode 100644 contrib/terra-operator/docker-compose.build.yml rename docker-compose.node.yml => contrib/terra-operator/docker-compose.node.yml (80%) create mode 100755 contrib/terra-operator/entrypoint.sh rename {docker => contrib/terra-operator}/keys-add.sh (100%) create mode 100644 contrib/terra-operator/keys.json create mode 100644 contrib/terra-operator/test-node-setup.sh delete mode 100644 docker-compose.build.yml delete mode 100644 docker/Dockerfile delete mode 100755 docker/entrypoint.sh diff --git a/Dockerfile.terraclassic.terrad-binary b/Dockerfile.terraclassic.terrad-binary deleted file mode 100644 index c21ad92fb..000000000 --- a/Dockerfile.terraclassic.terrad-binary +++ /dev/null @@ -1,32 +0,0 @@ -FROM ubuntu:22.04 - -RUN DEBIAN_FRONTEND=noninteractive ; \ - apt-get update ; \ - apt-get install -y build-essential wget lz4 aria2 curl jq gawk coreutils git golang-go ; \ - apt-get clean ; \ - mkdir /terra ; \ - groupadd -r terra ; \ - useradd -r -g terra --home-dir=/terra terra ; \ - chown -R terra:terra /terra - -ENV GOPATH=/usr/local/ -ENV PATH "$PATH:$GOPATH/bin" - -RUN git clone https://github.com/classic-terra/core.git ; \ - cd core ; \ - make install - -USER terra - -WORKDIR /terra - -# rest server -EXPOSE 1317 -# grpc -EXPOSE 9090 -# tendermint p2p -EXPOSE 26656 -# tendermint rpc -EXPOSE 26657 - -CMD ["/usr/local/bin/terrad", "version"] \ No newline at end of file diff --git a/Makefile b/Makefile index 9ea65134f..515100014 100755 --- a/Makefile +++ b/Makefile @@ -275,3 +275,18 @@ localnet-stop: docker-compose down .PHONY: localnet-start localnet-stop + +############################################################################### +### Images ### +############################################################################### + +build-operator-img-all: build-operator-img-core build-operator-img-node + +build-operator-img-core: + docker-compose -f contrib/terra-operator/docker-compose.build.yml build core --no-cache + +build-operator-img-node: + @if ! docker image inspect public.ecr.aws/p5q2r9h7/core:alpine3.17 &>/dev/null ; then make build-operator-img-core ; fi + docker-compose -f contrib/terra-operator/docker-compose.build.yml build node --no-cache + +.PHONY: build-operator-img-all build-operator-img-core build-operator-img-node \ No newline at end of file diff --git a/README.md b/README.md index 61c903ac6..1a533928f 100644 --- a/README.md +++ b/README.md @@ -337,11 +337,10 @@ docker-compose up -d ``` #### Build from source -Its possible to use docker-compose to build the images from the go source code by running the following commands in sequence: - -1) docker-compose -f docker-compose.node.yml -f docker-compose.build.yml build core --no-cache -2) docker-compose -f docker-compose.node.yml -f docker-compose.build.yml build node --no-cache +```sh +make build-all -f contrib/terra-operator/Makefile +``` ## Resources diff --git a/contrib/terra-operator/Dockerfile b/contrib/terra-operator/Dockerfile new file mode 100644 index 000000000..6c9845119 --- /dev/null +++ b/contrib/terra-operator/Dockerfile @@ -0,0 +1,34 @@ +ARG base_image=classic-terra/core +ARG version=latest + +FROM ${base_image}:${version} + +ARG chainid=test +ARG new_network=false +ARG enable_lcd=true +ARG validator_keyname=local +ARG validator_mnenomic="torch swamp cancel lift never october child harsh rib aspect luxury word peanut length bamboo hawk material vehicle glue above west random sketch author" +ARG validator_amount=1uluna +ARG validator_commission_rate=0.2 +ARG validator_commission_rate_max=1 +ARG validator_commission_rate_max_change=0.01 +ARG validator_min_self_delegation=1 + +ENV CHAINID ${chainid} +ENV NEW_NETWORK ${new_network} +ENV ENABLE_LCD ${enable_lcd} +ENV VALIDATOR_KEYNAME ${validator_keyname} +ENV VALIDATOR_MNENOMIC ${validator_mnenomic} +ENV VALIDATOR_AMOUNT ${validator_amount} +ENV VALIDATOR_COMMISSION_RATE ${validator_commission_rate} +ENV VALIDATOR_COMMISSION_RATE_MAX ${validator_commission_rate_max} +ENV VALIDATOR_COMMISSION_RATE_MAX_CHANGE ${validator_commission_rate_max_change} +ENV VALIDATOR_MIN_SELF_DELEGATION ${validator_min_self_delegation} + +COPY ./entrypoint.sh /entrypoint.sh +COPY ./keys-add.sh /keys-add.sh +COPY ./create-validator.sh /create-validator.sh +COPY ./test-node-setup.sh /test-node-setup.sh +COPY ./keys.json /keys.json + +CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/contrib/terra-operator/Dockerfile.core b/contrib/terra-operator/Dockerfile.core new file mode 100644 index 000000000..f284a6819 --- /dev/null +++ b/contrib/terra-operator/Dockerfile.core @@ -0,0 +1,58 @@ +# docker build . -t cosmwasm/wasmd:latest +# docker run --rm -it cosmwasm/wasmd:latest /bin/sh +FROM golang:1.18-alpine3.17 AS go-builder +ARG source=. + +# this comes from standard alpine nightly file +# https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile +# with some changes to support our toolchain, etc +RUN set -eux; apk add --no-cache ca-certificates build-base git; + +RUN apk add git cmake +# NOTE: add these to run with LEDGER_ENABLED=true +# RUN apk add libusb-dev linux-headers + +RUN git clone https://github.com/classic-terra/core.git && mv core /code +WORKDIR /code + +# Install mimalloc +RUN git clone --depth 1 https://github.com/microsoft/mimalloc; cd mimalloc; mkdir build; cd build; cmake ..; make -j$(nproc); make install +ENV MIMALLOC_RESERVE_HUGE_OS_PAGES=4 + +# Cosmwasm - download correct libwasmvm version and verify checksum +RUN WASMVM_VERSION=$(go list -m github.com/CosmWasm/wasmvm | cut -d ' ' -f 2) \ + && wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/libwasmvm_muslc.$(uname -m).a \ + -O /lib/libwasmvm_muslc.a \ + && wget https://github.com/CosmWasm/wasmvm/releases/download/$WASMVM_VERSION/checksums.txt -O /tmp/checksums.txt \ + && sha256sum /lib/libwasmvm_muslc.a | grep $(cat /tmp/checksums.txt | grep $(uname -m) | cut -d ' ' -f 1) + +# force it to use static lib (from above) not standard libgo_cosmwasm.so file +RUN LEDGER_ENABLED=false BUILD_TAGS=muslc LDFLAGS="-linkmode=external -extldflags \"-L/code/mimalloc/build -lmimalloc -Wl,-z,muldefs -static\"" make build + +FROM ubuntu:22.04 + +RUN DEBIAN_FRONTEND=noninteractive ; \ + apt-get update ; \ + apt-get install -y wget lz4 aria2 curl jq ip nmap; \ + apt-get clean ; \ + mkdir /terra ; \ + groupadd -r terra ; \ + useradd -r -g terra --home-dir=/terra terra ; \ + chown -R terra:terra /terra + +USER terra + +WORKDIR /terra + +COPY --from=go-builder /code/build/terrad /usr/local/bin/terrad + +# rest server +EXPOSE 1317 +# grpc +EXPOSE 9090 +# tendermint p2p +EXPOSE 26656 +# tendermint rpc +EXPOSE 26657 + +CMD ["/usr/local/bin/terrad", "version"] \ No newline at end of file diff --git a/docker/README.md b/contrib/terra-operator/README.md similarity index 100% rename from docker/README.md rename to contrib/terra-operator/README.md diff --git a/docker/build_all.sh b/contrib/terra-operator/build_all.sh similarity index 100% rename from docker/build_all.sh rename to contrib/terra-operator/build_all.sh diff --git a/docker/create-validator.sh b/contrib/terra-operator/create-validator.sh similarity index 100% rename from docker/create-validator.sh rename to contrib/terra-operator/create-validator.sh diff --git a/contrib/terra-operator/docker-compose.build.yml b/contrib/terra-operator/docker-compose.build.yml new file mode 100644 index 000000000..d2581df80 --- /dev/null +++ b/contrib/terra-operator/docker-compose.build.yml @@ -0,0 +1,24 @@ +version: '3.8' + +services: + core: + image: public.ecr.aws/p5q2r9h7/core:alpine3.17 + build: + context: ../.. + dockerfile: Dockerfile + platforms: + - "linux/amd64" + labels: + - "description=Contains the terrad binary" + node: + image: public.ecr.aws/p5q2r9h7/node:alpine3.17 + build: + context: . + dockerfile: Dockerfile + args: + base_image: public.ecr.aws/p5q2r9h7/core + version: alpine3.17 + platforms: + - "linux/amd64" + labels: + - "description=Contains everything to run a full node" \ No newline at end of file diff --git a/docker-compose.node.yml b/contrib/terra-operator/docker-compose.node.yml similarity index 80% rename from docker-compose.node.yml rename to contrib/terra-operator/docker-compose.node.yml index 748d72d91..c8d44db7d 100644 --- a/docker-compose.node.yml +++ b/contrib/terra-operator/docker-compose.node.yml @@ -3,14 +3,12 @@ version: '3.8' services: node: container_name: node - image: terraclassic.terrad-node + image: public.ecr.aws/p5q2r9h7/node:alpine3.17 + platform: linux/amd64 environment: - - CHAINID=columbus-5 - - ENABLE_LCD=true - - ENABLE_UNSAFE_CORS=false - - CORS_ALLOWED_ORIGINS=[] - - CORS_ALLOWED_METHODS=["HEAD", "GET", "POST"] - - CORS_ALLOWED_HEADERS=["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time"] + - CHAINID=test + - NEW_NETWORK=true + - ENABLE_LCD=true - TERRAD_STARTUP_PARAMETERS=--x-crisis-skip-assert-invariants - MINIMUM_GAS_PRICES=0.05uluna,0.104938usdr,0.15uusd,170.0ukrw - MONIKER=rebel-docker-node diff --git a/contrib/terra-operator/entrypoint.sh b/contrib/terra-operator/entrypoint.sh new file mode 100755 index 000000000..7ddbd3eeb --- /dev/null +++ b/contrib/terra-operator/entrypoint.sh @@ -0,0 +1,98 @@ +#!/bin/sh + +# Default to "data". +DATADIR="${DATADIR:-/terra/.terra/data}" +MONIKER="${MONIKER:-docker-node}" +ENABLE_LCD="${ENABLE_LCD:-true}" +MINIMUM_GAS_PRICES=${MINIMUM_GAS_PRICES-0.01133uluna,0.15uusd,0.104938usdr,169.77ukrw,428.571umnt,0.125ueur,0.98ucny,16.37ujpy,0.11ugbp,10.88uinr,0.19ucad,0.14uchf,0.19uaud,0.2usgd,4.62uthb,1.25usek,1.25unok,0.9udkk,2180.0uidr,7.6uphp,1.17uhkd} +SNAPSHOT_NAME="${SNAPSHOT_NAME}" +SNAPSHOT_BASE_URL="${SNAPSHOT_BASE_URL:-https://getsfo.quicksync.io}" + +# Moniker will be updated by entrypoint. +terrad init --chain-id $CHAINID moniker + +# Backup for templating +mv ~/.terra/config/config.toml ~/config.toml +mv ~/.terra/config/app.toml ~/app.toml + +if [ "$CHAINID" = "columbus-5" ] ; then wget -O ~/.terra/config/genesis.json https://columbus-genesis.s3.ap-northeast-1.amazonaws.com/columbus-5-genesis.json; fi; \ +if [ "$CHAINID" = "columbus-5" ] ; then wget -O ~/.terra/config/addrbook.json https://networks.mcontrol.ml/columbus/addrbook.json; fi; \ +if [ "$CHAINID" = "rebel-1" ] ; then wget -O ~/.terra/config/genesis.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-1/genesis.json; fi; \ +if [ "$CHAINID" = "rebel-1" ] ; then wget -O ~/.terra/config/addrbook.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-1/addrbook.json; fi; \ +if [ "$CHAINID" = "rebel-2" ] ; then wget -O ~/.terra/config/genesis.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-2/genesis.json; fi; \ +if [ "$CHAINID" = "rebel-2" ] ; then wget -O ~/.terra/config/addrbook.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-2/addrbook.json; fi; + +# First sed gets the app.toml moved into place. +# app.toml updates +sed 's/minimum-gas-prices = "0uluna"/minimum-gas-prices = "'"$MINIMUM_GAS_PRICES"'"/g' ~/app.toml > ~/.terra/config/app.toml + +# Needed to use awk to replace this multiline string. +if [ "$ENABLE_LCD" = true ] ; then + sed -i '0,/enable = false/s//enable = true/' ~/.terra/config/app.toml + +fi + +# config.toml updates + +sed 's/moniker = "moniker"/moniker = "'"$MONIKER"'"/g' ~/config.toml > ~/.terra/config/config.toml +sed -i 's/laddr = "tcp:\/\/127.0.0.1:26657"/laddr = "tcp:\/\/0.0.0.0:26657"/g' ~/.terra/config/config.toml + +if [ "$CHAINID" = "columbus-5" ] && [[ ! -z "$SNAPSHOT_NAME" ]] ; then + # Download the snapshot if data directory is empty. + res=$(find "$DATADIR" -name "*.db") + if [ "$res" ]; then + echo "data directory is NOT empty, skipping quicksync" + else + echo "starting snapshot download" + mkdir -p $DATADIR + cd $DATADIR + FILENAME="$SNAPSHOT_NAME" + + # Download + aria2c -x5 $SNAPSHOT_BASE_URL/$FILENAME + # Extract + lz4 -d $FILENAME | tar xf - + + # # cleanup + rm $FILENAME + fi +fi + +# check if CHAINID is test +if [ "$NEW_NETWORK" = "true" ] ; then + # add new gentx + sh /test-node-setup.sh +fi + +terrad start $TERRAD_STARTUP_PARAMETERS & + +if [ "$NEW_NETWORK" = "false" ] ; then + #Wait for Terrad to catch up + while true + do + if ! (( $(echo $(terrad status) | awk -F '"catching_up":|},"ValidatorInfo"' '{print $2}') )); + then + break + fi + sleep 1 + done + + if [ ! -z "$VALIDATOR_AUTO_CONFIG" ] && [ "$VALIDATOR_AUTO_CONFIG" = "1" ]; then + if [ ! -z "$VALIDATOR_KEYNAME" ] && [ ! -z "$VALIDATOR_MNENOMIC" ] && [ ! -z "$VALIDATOR_PASSPHRASE" ] ; then + terrad keys add $VALIDATOR_KEYNAME --recover > ~/.terra/keys.log 2>&1 << EOF +$VALIDATOR_MNENOMIC +$VALIDATOR_PASSPHRASE +$VALIDATOR_PASSPHRASE +EOF + fi + + if [ ! -z "$VALIDATOR_AMOUNT" ] && [ ! -z "$MONIKER" ] && [ ! -z "$VALIDATOR_PASSPHRASE" ] && [ ! -z "$VALIDATOR_KEYNAME" ] && [ ! -z "$VALIDATOR_KEYNAME" ] && [ ! -z "$VALIDATOR_COMMISSION_RATE" ] && [ ! -z "$VALIDATOR_COMMISSION_RATE_MAX" ] && [ ! -z "$VALIDATOR_COMMISSION_RATE_MAX_CHANGE" ] && [ ! -z "$VALIDATOR_MIN_SELF_DELEGATION" ] ; then + terrad tx staking create-validator --amount=$VALIDATOR_AMOUNT --pubkey=$(terrad tendermint show-validator) --moniker="$MONIKER" --chain-id=$CHAINID --from=$VALIDATOR_KEYNAME --commission-rate="$VALIDATOR_COMMISSION_RATE" --commission-max-rate="$VALIDATOR_COMMISSION_RATE_MAX" --commission-max-change-rate="$VALIDATOR_COMMISSION_RATE_MAX_CHANGE" --min-self-delegation="$VALIDATOR_MIN_SELF_DELEGATION" --gas=$VALIDATOR_GAS --gas-adjustment=$VALIDATOR_GAS_ADJUSTMENT --fees=$VALIDATOR_FEES > ~/.terra/validator.log 2>&1 << EOF +$VALIDATOR_PASSPHRASE +y +EOF + fi + fi +fi + +wait \ No newline at end of file diff --git a/docker/keys-add.sh b/contrib/terra-operator/keys-add.sh similarity index 100% rename from docker/keys-add.sh rename to contrib/terra-operator/keys-add.sh diff --git a/contrib/terra-operator/keys.json b/contrib/terra-operator/keys.json new file mode 100644 index 000000000..4357dd693 --- /dev/null +++ b/contrib/terra-operator/keys.json @@ -0,0 +1,24 @@ +{ + "keys": [ + { + "keyring-keyname": "test", + "address": "terra1r9xyz4qgkktf4kycqnjj3tpsluaqxhzzqzke6x", + "mnemonic": "vintage emotion risk gun gadget siren quit weapon work dignity pudding lamp huge tube govern mosquito diary rookie card risk leg bridge velvet stick" + }, + { + "keyring-keyname": "test1", + "address": "terra1ryyltrt8zvap3cgmv9mly7g87xgl99k3hnq6tv", + "mnemonic": "flat color utility today rent lake client hair victory pause text more connect lonely menu hope cup music armor critic license casino panic mirror" + }, + { + "keyring-keyname": "test2", + "address": "terra1z2j9rsptplwap79k8t4dy05xhe9c3p0jqlseag", + "mnemonic": "mixed tourist quit copper robot panic rather record scare learn wing bicycle latin tape proud upper rocket scare tobacco thunder neither flat isolate humor" + }, + { + "keyring-keyname": "test3", + "address": "terra15dpwzefn4zsktnnu0zl058p4kklsj4p05x560w", + "mnemonic": "permit lava scene secret ball lava iron result reunion purpose sea badge focus rug cradle human plastic rough stand swarm pipe diagram deliver faculty" + } + ] +} \ No newline at end of file diff --git a/contrib/terra-operator/test-node-setup.sh b/contrib/terra-operator/test-node-setup.sh new file mode 100644 index 000000000..4ee612b5d --- /dev/null +++ b/contrib/terra-operator/test-node-setup.sh @@ -0,0 +1,36 @@ +#/bin/sh + +# KEY MANAGEMENT +KEYRING="test" + +# Function updates the config based on a jq argument as a string +update_test_genesis () { + # EX: update_test_genesis '.consensus_params["block"]["max_gas"]="100000000"' + cat ~/.terra/config/genesis.json | jq --arg DENOM "$2" "$1" > ~/.terra/config/tmp_genesis.json && mv ~/.terra/config/tmp_genesis.json ~/.terra/config/genesis.json +} + +# add keys, add balances +for i in $(seq 0 3); do + key=$(jq ".keys[$i] | tostring" /keys.json ) + keyname=$(echo $key | jq -r 'fromjson | ."keyring-keyname"') + mnemonic=$(echo $key | jq -r 'fromjson | .mnemonic') + # Add new account + echo $mnemonic | terrad keys add $keyname --keyring-backend $KEYRING --recover --home ~/.terra + # Add initial balances + terrad add-genesis-account $keyname "1000000000000uluna" --keyring-backend $KEYRING --home ~/.terra +done + +# Sign genesis transaction +terrad gentx test "1000000uluna" --keyring-backend $KEYRING --chain-id $CHAINID --home ~/.terra + +update_test_genesis '.app_state["gov"]["voting_params"]["voting_period"] = "50s"' +update_test_genesis '.app_state["mint"]["params"]["mint_denom"]=$DENOM' uluna +update_test_genesis '.app_state["gov"]["deposit_params"]["min_deposit"]=[{"denom": $DENOM,"amount": "1000000"}]' uluna +update_test_genesis '.app_state["crisis"]["constant_fee"]={"denom": $DENOM,"amount": "1000"}' uluna +update_test_genesis '.app_state["staking"]["params"]["bond_denom"]=$DENOM' uluna + +# Collect genesis tx +terrad collect-gentxs --home ~/.terra + +# Run this to ensure everything worked and that the genesis file is setup correctly +terrad validate-genesis --home ~/.terra \ No newline at end of file diff --git a/docker-compose.build.yml b/docker-compose.build.yml deleted file mode 100644 index 079831643..000000000 --- a/docker-compose.build.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: '3.8' - -services: - core: - image: terraclassic.terrad-binary - build: - context: . - dockerfile: Dockerfile.terraclassic.terrad-binary - labels: - - "terraclassic.terrad-binary.description=Contains the terrad binary" - node: - image: terraclassic.terrad-node - build: - context: ./docker - dockerfile: Dockerfile - args: - base_image: terraclassic.terrad-binary - labels: - - "terraclassic.terrad-node.description=Contains everything to run a full node" \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 1576f8550..000000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,54 +0,0 @@ -ARG base_image=terraclassic.terrad-binary -ARG version=latest - -FROM ${base_image}:${version} - -ARG chainid=columbus-5 -ARG enable_lcd=true -ARG enable_unsafe_cors=false -ARG cors_allowed_origins=[] -ARG cors_allowed_methods=["HEAD", "GET", "POST"] -ARG cors_allowed_headers=["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time"] -ARG validator_keyname=local -ARG validator_passphrase=12345678 -ARG validator_mnenomic="torch swamp cancel lift never october child harsh rib aspect luxury word peanut length bamboo hawk material vehicle glue above west random sketch author" -ARG validator_amount=1uluna -ARG validator_commission_rate=0.2 -ARG validator_commission_rate_max=1 -ARG validator_commission_rate_max_change=0.01 -ARG validator_min_self_delegation=1 - -ENV CHAINID ${chainid} -ENV ENABLE_LCD ${enable_lcd} -ENV ENABLE_UNSAFE_CORS ${enable_unsafe_cors} -ENV CORS_ALLOWED_ORIGINS ${cors_allowed_origins} -ENV CORS_ALLOWED_METHODS ${cors_allowed_methods} -ENV CORS_ALLOWED_HEADERS ${cors_allowed_headers} -ENV VALIDATOR_KEYNAME ${validator_keyname} -ENV VALIDATOR_PASSPHRASE ${validator_passphrase} -ENV VALIDATOR_MNENOMIC ${validator_mnenomic} -ENV VALIDATOR_AMOUNT ${validator_amount} -ENV VALIDATOR_COMMISSION_RATE ${validator_commission_rate} -ENV VALIDATOR_COMMISSION_RATE_MAX ${validator_commission_rate_max} -ENV VALIDATOR_COMMISSION_RATE_MAX_CHANGE ${validator_commission_rate_max_change} -ENV VALIDATOR_MIN_SELF_DELEGATION ${validator_min_self_delegation} - -# Moniker will be updated by entrypoint. -RUN terrad init --chain-id $chainid moniker - -# Backup for templating -RUN mv ~/.terra/config/config.toml ~/config.toml -RUN mv ~/.terra/config/app.toml ~/app.toml - -RUN if [ "$chainid" = "columbus-5" ] ; then wget -O ~/.terra/config/genesis.json https://columbus-genesis.s3.ap-northeast-1.amazonaws.com/columbus-5-genesis.json; fi; \ - if [ "$chainid" = "columbus-5" ] ; then wget -O ~/.terra/config/addrbook.json https://networks.mcontrol.ml/columbus/addrbook.json; fi; \ - if [ "$chainid" = "rebel-1" ] ; then wget -O ~/.terra/config/genesis.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-1/genesis.json; fi; \ - if [ "$chainid" = "rebel-1" ] ; then wget -O ~/.terra/config/addrbook.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-1/addrbook.json; fi; \ - if [ "$chainid" = "rebel-2" ] ; then wget -O ~/.terra/config/genesis.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-2/genesis.json; fi; \ - if [ "$chainid" = "rebel-2" ] ; then wget -O ~/.terra/config/addrbook.json https://raw.githubusercontent.com/terra-rebels/classic-testnet/master/rebel-2/addrbook.json; fi; - -COPY ./entrypoint.sh /entrypoint.sh -COPY ./keys-add.sh /keys-add.sh -COPY ./create-validator.sh /create-validator.sh - -CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh deleted file mode 100755 index 929a1d537..000000000 --- a/docker/entrypoint.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh - -# Default to "data". -DATADIR="${DATADIR:-/terra/.terra/data}" -MONIKER="${MONIKER:-docker-node}" -ENABLE_LCD="${ENABLE_LCD:-true}" -MINIMUM_GAS_PRICES=${MINIMUM_GAS_PRICES-0.01133uluna,0.15uusd,0.104938usdr,169.77ukrw,428.571umnt,0.125ueur,0.98ucny,16.37ujpy,0.11ugbp,10.88uinr,0.19ucad,0.14uchf,0.19uaud,0.2usgd,4.62uthb,1.25usek,1.25unok,0.9udkk,2180.0uidr,7.6uphp,1.17uhkd} -SNAPSHOT_NAME="${SNAPSHOT_NAME}" -SNAPSHOT_BASE_URL="${SNAPSHOT_BASE_URL:-https://getsfo.quicksync.io}" -ENABLE_UNSAFE_CORS="${VALIDATOR_ENABLE_UNSAFE_CORS:-false}" -CORS_ALLOWED_ORIGINS="${CORS_ALLOWED_ORIGINS:-[]}" -CORS_ALLOWED_METHODS="${CORS_ALLOWED_METHODS:-["HEAD", "GET", "POST"]}" -CORS_ALLOWED_HEADERS="${CORS_ALLOWED_HEADERS:-["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time"]}" - -# First sed gets the app.toml moved into place. -# app.toml updates -sed 's/minimum-gas-prices = "0uluna"/minimum-gas-prices = "'"$MINIMUM_GAS_PRICES"'"/g' ~/app.toml > ~/.terra/config/app.toml -sed -i 's/enable-unsafe-cors = false/enable-unsafe-cors = '$ENABLE_UNSAFE_CORS'/g' ~/.terra/config/app.toml -sed -i 's/enabled-unsafe-cors = false/enabled-unsafe-cors = '$ENABLE_UNSAFE_CORS'/g' ~/.terra/config/app.toml - -# Needed to use awk to replace this multiline string. -if [ "$ENABLE_LCD" = true ] ; then - gawk -i inplace '/^# Enable defines if the API server should be enabled./,/^enable = false/{if (/^enable = false/) print "# Enable defines if the API server should be enabled.\nenable = true"; next} 1' ~/.terra/config/app.toml -fi - -# config.toml updates - -sed 's/moniker = "moniker"/moniker = "'"$MONIKER"'"/g' ~/config.toml > ~/.terra/config/config.toml -sed -i 's/laddr = "tcp:\/\/127.0.0.1:26657"/laddr = "tcp:\/\/0.0.0.0:26657"/g' ~/.terra/config/config.toml -sed -i 's/cors_allowed_origins = \[\]/cors_allowed_origins = '"$CORS_ALLOWED_ORIGINS"'/g' ~/.terra/config/config.toml -sed -i 's/cors_allowed_methods = \["HEAD", "GET", "POST", \]/cors_allowed_methods = '"$CORS_ALLOWED_METHODS"'/g' ~/.terra/config/config.toml -sed -i 's/cors_allowed_headers = \["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time", \]/cors_allowed_headers = '"$CORS_ALLOWED_HEADERS"'/g' ~/.terra/config/config.toml - -if [ "$CHAINID" = "columbus-5" ] && [[ ! -z "$SNAPSHOT_NAME" ]] ; then - # Download the snapshot if data directory is empty. - res=$(find "$DATADIR" -name "*.db") - if [ "$res" ]; then - echo "data directory is NOT empty, skipping quicksync" - else - echo "starting snapshot download" - mkdir -p $DATADIR - cd $DATADIR - FILENAME="$SNAPSHOT_NAME" - - # Download - aria2c -x5 $SNAPSHOT_BASE_URL/$FILENAME - # Extract - lz4 -d $FILENAME | tar xf - - - # # cleanup - rm $FILENAME - fi -fi - -terrad start $TERRAD_STARTUP_PARAMETERS & - -#Wait for Terrad to catch up -while true -do - if ! (( $(echo $(terrad status) | awk -F '"catching_up":|},"ValidatorInfo"' '{print $2}') )); - then - break - fi - sleep 1 -done - -if [ ! -z "$VALIDATOR_AUTO_CONFIG" ] && [ "$VALIDATOR_AUTO_CONFIG" = "1" ]; then - if [ ! -z "$VALIDATOR_KEYNAME" ] && [ ! -z "$VALIDATOR_MNENOMIC" ] && [ ! -z "$VALIDATOR_PASSPHRASE" ] ; then - terrad keys add $VALIDATOR_KEYNAME --recover > ~/.terra/keys.log 2>&1 << EOF -$VALIDATOR_MNENOMIC -$VALIDATOR_PASSPHRASE -$VALIDATOR_PASSPHRASE -EOF - fi - - if [ ! -z "$VALIDATOR_AMOUNT" ] && [ ! -z "$MONIKER" ] && [ ! -z "$VALIDATOR_PASSPHRASE" ] && [ ! -z "$VALIDATOR_KEYNAME" ] && [ ! -z "$VALIDATOR_KEYNAME" ] && [ ! -z "$VALIDATOR_COMMISSION_RATE" ] && [ ! -z "$VALIDATOR_COMMISSION_RATE_MAX" ] && [ ! -z "$VALIDATOR_COMMISSION_RATE_MAX_CHANGE" ] && [ ! -z "$VALIDATOR_MIN_SELF_DELEGATION" ] ; then - terrad tx staking create-validator --amount=$VALIDATOR_AMOUNT --pubkey=$(terrad tendermint show-validator) --moniker="$MONIKER" --chain-id=$CHAINID --from=$VALIDATOR_KEYNAME --commission-rate="$VALIDATOR_COMMISSION_RATE" --commission-max-rate="$VALIDATOR_COMMISSION_RATE_MAX" --commission-max-change-rate="$VALIDATOR_COMMISSION_RATE_MAX_CHANGE" --min-self-delegation="$VALIDATOR_MIN_SELF_DELEGATION" --gas=$VALIDATOR_GAS --gas-adjustment=$VALIDATOR_GAS_ADJUSTMENT --fees=$VALIDATOR_FEES > ~/.terra/validator.log 2>&1 << EOF -$VALIDATOR_PASSPHRASE -y -EOF - fi -fi -wait \ No newline at end of file