From ed25ca9c68dde67bb3e911afb857bb0595c8afa2 Mon Sep 17 00:00:00 2001 From: Kirill Fedoseev Date: Sun, 1 Sep 2019 12:41:06 +0300 Subject: [PATCH] Deployment to both, dev and staging environments. Automatic contract address update in demo. Refactor sh scripts. .env files splitted on particular enviornments --- .gitignore | 1 + demo/start-environment.sh | 122 +++++++++++++++++++------------ demo/validator-demo.sh | 3 + demo/validator1/.env | 11 +-- demo/validator1/.env.development | 8 ++ demo/validator1/.env.staging | 8 ++ demo/validator2/.env | 11 +-- demo/validator2/.env.development | 8 ++ demo/validator2/.env.staging | 8 ++ demo/validator3/.env | 11 +-- demo/validator3/.env.development | 8 ++ demo/validator3/.env.staging | 8 ++ src/deploy/deploy-home/.env | 5 +- 13 files changed, 133 insertions(+), 79 deletions(-) create mode 100644 demo/validator1/.env.development create mode 100644 demo/validator1/.env.staging create mode 100644 demo/validator2/.env.development create mode 100644 demo/validator2/.env.staging create mode 100644 demo/validator3/.env.development create mode 100644 demo/validator3/.env.staging diff --git a/.gitignore b/.gitignore index ce97558..8eb0daa 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ data/ demo/validator*/db demo/validator*/keys demo/validator*/queue +demo/validator*/.keys demo/ganache_home_db/ demo/ganache_side_db/ src/deploy/deploy-home/build/ diff --git a/demo/start-environment.sh b/demo/start-environment.sh index 4c61dca..65182cb 100755 --- a/demo/start-environment.sh +++ b/demo/start-environment.sh @@ -3,15 +3,23 @@ set -e cd $(dirname "$0") +cd .. +# either development or staging TARGET_NETWORK=${TARGET_NETWORK:=development} -start_blockchains() { +DEPLOY_DIR="`pwd`/src/deploy" +DEMO_DIR="`pwd`/demo" + +SIDE_GANACHE_DB="$DEMO_DIR/ganache_side_db" +HOME_GANACHE_DB="$DEMO_DIR/ganache_home_db" + +start_dev_blockchain_networks() { echo "Starting side test blockchain" docker kill ganache_side > /dev/null 2>&1 || true docker network create blockchain_side > /dev/null 2>&1 || true - docker run -d --network blockchain_side --rm --name ganache_side -v "$side_db_mount_point:/app/db" \ + docker run -d --network blockchain_side --rm --name ganache_side -v "$SIDE_GANACHE_DB:/app/db" \ trufflesuite/ganache-cli:latest \ -m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 33 -q --db /app/db @@ -19,91 +27,111 @@ start_blockchains() { docker kill ganache_home > /dev/null 2>&1 || true docker network create blockchain_home > /dev/null 2>&1 || true - docker run -d --network blockchain_home --rm --name ganache_home -v "$home_db_mount_point:/app/db" \ + docker run -d --network blockchain_home --rm --name ganache_home -v "$HOME_GANACHE_DB:/app/db" \ trufflesuite/ganache-cli:latest \ -m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 44 -q --db /app/db sleep 4 } -deploy_all() { - cd ../src/deploy +deploy_token() { + echo "Compiling and deploying erc20" - source .keys + echo "Building deploy docker image" + docker build -t deploy_test "$DEPLOY_DIR/deploy-test" > /dev/null 2>&1 - TOKEN_ADDRESS=$(source ./deploy-home/.env; echo "$TOKEN_ADDRESS") - - if [[ "$TARGET_NETWORK" == "development" ]] || [[ "$TOKEN_ADDRESS" == "0x" ]]; then - echo "Compiling and deploying erc20" - - cd ./deploy-test - - echo "Building deploy docker image" - docker build -t deploy_test . > /dev/null 2>&1 - echo "Deploying" - TOKEN_ADDRESS=$(docker run --network blockchain_home --rm --env-file .env -e "PRIVATE_KEY=$PRIVATE_KEY_KOVAN" deploy_test --network "$TARGET_NETWORK" 2>&1 \ - | grep "contract address" \ - | awk '{print $4}') - sed -i 's/TOKEN_ADDRESS=0x$/TOKEN_ADDRESS='"$TOKEN_ADDRESS"'/' ../deploy-home/.env - cd .. - fi + echo "Deploying" + TOKEN_ADDRESS=$(docker run --network blockchain_home --rm --env-file "$DEPLOY_DIR/deploy-test/.env" -e "PRIVATE_KEY=$PRIVATE_KEY_KOVAN" \ + deploy_test \ + --network "$TARGET_NETWORK" 2>&1 \ + | grep "contract address" \ + | awk '{print $4}') +} +deploy_bridge() { echo "Compiling and deploying home part" - cd ./deploy-home - echo "Building deploy docker image" - docker build -t deploy_home . > /dev/null 2>&1 + docker build -t deploy_home "$DEPLOY_DIR/deploy-home" > /dev/null 2>&1 + echo "Deploying" - BRIDGE_ADDRESS=$(docker run --network blockchain_home --rm --env-file .env -e "PRIVATE_KEY=$PRIVATE_KEY_KOVAN" deploy_home --network "$TARGET_NETWORK" 2>&1 \ + BRIDGE_ADDRESS=$(docker run --network blockchain_home --rm --env-file "$DEPLOY_DIR/deploy-home/.env" -e "PRIVATE_KEY=$PRIVATE_KEY_KOVAN" \ + deploy_home \ + --network "$TARGET_NETWORK" 2>&1 \ | grep "contract address" \ | awk '{print $4}') +} - - +deploy_db() { echo "Compiling and deploying side part" - cd ../deploy-side - echo "Building deploy docker image" - docker build -t deploy_side . > /dev/null 2>&1 + docker build -t deploy_side "$DEPLOY_DIR/deploy-side" > /dev/null 2>&1 + echo "Deploying" - SHARED_DB_ADDRESS=$(docker run --network blockchain_side --rm --env-file .env -e "PRIVATE_KEY=$PRIVATE_KEY_SOKOL" deploy_side --network "$TARGET_NETWORK" 2>&1 \ + SHARED_DB_ADDRESS=$(docker run --network blockchain_side --rm --env-file "$DEPLOY_DIR/deploy-side/.env" -e "PRIVATE_KEY=$PRIVATE_KEY_SOKOL" \ + deploy_side \ + --network "$TARGET_NETWORK" 2>&1 \ | grep "contract address" \ | awk '{print $4}') +} + +deploy_all() { + cd "$DEPLOY_DIR" + + source "$DEPLOY_DIR/.keys" + + TOKEN_ADDRESS=$(source "$DEPLOY_DIR/deploy-home/.env"; echo "$TOKEN_ADDRESS") + + if [[ "$TARGET_NETWORK" == "development" ]] || [[ "$TOKEN_ADDRESS" == "0x" ]]; then + deploy_token + sed -i 's/TOKEN_ADDRESS=0x$/TOKEN_ADDRESS='"$TOKEN_ADDRESS"'/' "$DEPLOY_DIR/deploy-home/.env" + fi + + deploy_bridge + deploy_db echo "Token contract address in $TARGET_NETWORK network is $TOKEN_ADDRESS" echo "Bridge contract address in $TARGET_NETWORK network is $BRIDGE_ADDRESS" echo "Database contract address in $TARGET_NETWORK side network is $SHARED_DB_ADDRESS" + + echo "Updating deployed contract addresses in demo validators .env.$TARGET_NETWORK configs" + for file in "$DEMO_DIR"/validator*/.env."$TARGET_NETWORK"; do + sed -i 's/TOKEN_ADDRESS=.*$/TOKEN_ADDRESS='"$TOKEN_ADDRESS"'/' "$file" + sed -i 's/BRIDGE_ADDRESS=.*$/BRIDGE_ADDRESS='"$BRIDGE_ADDRESS"'/' "$file" + sed -i 's/SHARED_DB_ADDRESS=.*$/SHARED_DB_ADDRESS='"$SHARED_DB_ADDRESS"'/' "$file" + done } + + + if [[ "$TARGET_NETWORK" == "development" ]]; then - if [[ -z "$(ls -A ganache_side_db)" ]] || [[ -z "$(ls -A ganache_home_db)" ]]; then + if [[ ! -d "$SIDE_GANACHE_DB" ]]; then + mkdir "$SIDE_GANACHE_DB" + fi + + if [[ ! -d "$HOME_GANACHE_DB" ]]; then + mkdir "$HOME_GANACHE_DB" + fi + + + if [[ -z "$(ls -A "$SIDE_GANACHE_DB")" ]] || [[ -z "$(ls -A "$HOME_GANACHE_DB")" ]]; then echo "Starting dev blockchain networks and deploying contracts" need_to_deploy=true else echo "Restarting dev blockchain networks" fi - side_db_mount_point="$(pwd)/ganache_side_db" - if [[ ! -d "$side_db_mount_point" ]]; then - mkdir "$side_db_mount_point" - fi - - home_db_mount_point="$(pwd)/ganache_home_db" - if [[ ! -d "$home_db_mount_point" ]]; then - mkdir "$home_db_mount_point" - fi - - start_blockchains + start_dev_blockchain_networks if [[ -n "$need_to_deploy" ]]; then deploy_all + else + echo "Contracts are already deployed, run clean.sh first if you want to redeploy everything" fi else - echo "Deploying to staging blockchain environment" - - source ../src/deploy/.keys + echo "Deploying to the staging blockchain environment" deploy_all fi diff --git a/demo/validator-demo.sh b/demo/validator-demo.sh index 118bb49..12c7a09 100755 --- a/demo/validator-demo.sh +++ b/demo/validator-demo.sh @@ -11,4 +11,7 @@ echo "Starting $NAME" mkdir -p "$NAME" cd "$NAME" +if [[ -e .keys ]]; then + source .keys +fi docker-compose -p "$NAME" -f ../../src/oracle/docker-compose-test.yml up ${DCU_FLAGS} diff --git a/demo/validator1/.env b/demo/validator1/.env index a61beb6..26b299b 100644 --- a/demo/validator1/.env +++ b/demo/validator1/.env @@ -1,17 +1,8 @@ -HOME_RPC_URL=http://ganache_home:8545 -HOME_CHAIN_ID=44 -HOME_BRIDGE_ADDRESS=0x44c158FE850821ae69DaF37AADF5c539e9d0025B -HOME_TOKEN_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc - -SIDE_RPC_URL=http://ganache_side:8545 -SIDE_CHAIN_ID=33 -SIDE_SHARED_DB_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc - FOREIGN_URL=https://testnet-dex.binance.org/ FOREIGN_CHAIN_ID=Binance-Chain-Nile FOREIGN_ASSET=KFT-94F -VALIDATOR_PRIVATE_KEY=2be3f252e16541bf1bb2d4a517d2bf173e6d09f2d765d32c64dc50515aec63ea +#VALIDATOR_PRIVATE_KEY is taken from .keys VOTES_PROXY_PORT=5001 diff --git a/demo/validator1/.env.development b/demo/validator1/.env.development new file mode 100644 index 0000000..acc4cb5 --- /dev/null +++ b/demo/validator1/.env.development @@ -0,0 +1,8 @@ +HOME_RPC_URL=http://ganache_home:8545 +HOME_CHAIN_ID=44 +HOME_BRIDGE_ADDRESS=0x44c158FE850821ae69DaF37AADF5c539e9d0025B +HOME_TOKEN_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc + +SIDE_RPC_URL=http://ganache_side:8545 +SIDE_CHAIN_ID=33 +SIDE_SHARED_DB_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc diff --git a/demo/validator1/.env.staging b/demo/validator1/.env.staging new file mode 100644 index 0000000..ac30af7 --- /dev/null +++ b/demo/validator1/.env.staging @@ -0,0 +1,8 @@ +HOME_RPC_URL=https://kovan.infura.io/v3/5d7bd94c50ed43fab1cb8e74f58678b0 +HOME_CHAIN_ID=42 +HOME_BRIDGE_ADDRESS=0x646D46A206c5bb38E925C9Ef148383f317F29466 +HOME_TOKEN_ADDRESS=0xFe175c723ca2CB997D0EC000309e2da69B173381 + +SIDE_RPC_URL=https://sokol.poa.network +SIDE_CHAIN_ID=77 +SIDE_SHARED_DB_ADDRESS=0x6FA32e5fC249476E46D695722eAd9E82F4B316f6 diff --git a/demo/validator2/.env b/demo/validator2/.env index 4c53687..989f639 100644 --- a/demo/validator2/.env +++ b/demo/validator2/.env @@ -1,17 +1,8 @@ -HOME_RPC_URL=http://ganache_home:8545 -HOME_CHAIN_ID=44 -HOME_BRIDGE_ADDRESS=0x44c158FE850821ae69DaF37AADF5c539e9d0025B -HOME_TOKEN_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc - -SIDE_RPC_URL=http://ganache_side:8545 -SIDE_CHAIN_ID=33 -SIDE_SHARED_DB_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc - FOREIGN_URL=https://testnet-dex.binance.org/ FOREIGN_CHAIN_ID=Binance-Chain-Nile FOREIGN_ASSET=KFT-94F -VALIDATOR_PRIVATE_KEY=e59d58c77b791f98f10187117374ae9c589d48a62720ec6a5e142b0cc134f685 +#VALIDATOR_PRIVATE_KEY is taken from .keys VOTES_PROXY_PORT=5002 diff --git a/demo/validator2/.env.development b/demo/validator2/.env.development new file mode 100644 index 0000000..acc4cb5 --- /dev/null +++ b/demo/validator2/.env.development @@ -0,0 +1,8 @@ +HOME_RPC_URL=http://ganache_home:8545 +HOME_CHAIN_ID=44 +HOME_BRIDGE_ADDRESS=0x44c158FE850821ae69DaF37AADF5c539e9d0025B +HOME_TOKEN_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc + +SIDE_RPC_URL=http://ganache_side:8545 +SIDE_CHAIN_ID=33 +SIDE_SHARED_DB_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc diff --git a/demo/validator2/.env.staging b/demo/validator2/.env.staging new file mode 100644 index 0000000..ac30af7 --- /dev/null +++ b/demo/validator2/.env.staging @@ -0,0 +1,8 @@ +HOME_RPC_URL=https://kovan.infura.io/v3/5d7bd94c50ed43fab1cb8e74f58678b0 +HOME_CHAIN_ID=42 +HOME_BRIDGE_ADDRESS=0x646D46A206c5bb38E925C9Ef148383f317F29466 +HOME_TOKEN_ADDRESS=0xFe175c723ca2CB997D0EC000309e2da69B173381 + +SIDE_RPC_URL=https://sokol.poa.network +SIDE_CHAIN_ID=77 +SIDE_SHARED_DB_ADDRESS=0x6FA32e5fC249476E46D695722eAd9E82F4B316f6 diff --git a/demo/validator3/.env b/demo/validator3/.env index c99a327..1afd798 100644 --- a/demo/validator3/.env +++ b/demo/validator3/.env @@ -1,17 +1,8 @@ -HOME_RPC_URL=http://ganache_home:8545 -HOME_CHAIN_ID=44 -HOME_BRIDGE_ADDRESS=0x44c158FE850821ae69DaF37AADF5c539e9d0025B -HOME_TOKEN_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc - -SIDE_RPC_URL=http://ganache_side:8545 -SIDE_CHAIN_ID=33 -SIDE_SHARED_DB_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc - FOREIGN_URL=https://testnet-dex.binance.org/ FOREIGN_CHAIN_ID=Binance-Chain-Nile FOREIGN_ASSET=KFT-94F -VALIDATOR_PRIVATE_KEY=afaa4d4d6e54d25b0bf0361e3fd6cef562f6311bf6200de2dd0aa4cab63ae3b5 +#VALIDATOR_PRIVATE_KEY is taken from .keys VOTES_PROXY_PORT=5003 diff --git a/demo/validator3/.env.development b/demo/validator3/.env.development new file mode 100644 index 0000000..acc4cb5 --- /dev/null +++ b/demo/validator3/.env.development @@ -0,0 +1,8 @@ +HOME_RPC_URL=http://ganache_home:8545 +HOME_CHAIN_ID=44 +HOME_BRIDGE_ADDRESS=0x44c158FE850821ae69DaF37AADF5c539e9d0025B +HOME_TOKEN_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc + +SIDE_RPC_URL=http://ganache_side:8545 +SIDE_CHAIN_ID=33 +SIDE_SHARED_DB_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc diff --git a/demo/validator3/.env.staging b/demo/validator3/.env.staging new file mode 100644 index 0000000..ac30af7 --- /dev/null +++ b/demo/validator3/.env.staging @@ -0,0 +1,8 @@ +HOME_RPC_URL=https://kovan.infura.io/v3/5d7bd94c50ed43fab1cb8e74f58678b0 +HOME_CHAIN_ID=42 +HOME_BRIDGE_ADDRESS=0x646D46A206c5bb38E925C9Ef148383f317F29466 +HOME_TOKEN_ADDRESS=0xFe175c723ca2CB997D0EC000309e2da69B173381 + +SIDE_RPC_URL=https://sokol.poa.network +SIDE_CHAIN_ID=77 +SIDE_SHARED_DB_ADDRESS=0x6FA32e5fC249476E46D695722eAd9E82F4B316f6 diff --git a/src/deploy/deploy-home/.env b/src/deploy/deploy-home/.env index 14c733d..01a759a 100644 --- a/src/deploy/deploy-home/.env +++ b/src/deploy/deploy-home/.env @@ -4,8 +4,9 @@ RPC_URL_DEV=http://ganache_home:8545 #PRIVATE_KEY is taken from PRIVATE_KEY_KOVAN in src/deploy/.keys PRIVATE_KEY_DEV=e2aeb24eaa63102d0c0821717c3b6384abdabd7af2ad4ec8e650dce300798b27 -#Set to empty address '0x' for redeployment of token contract in staging environment -TOKEN_ADDRESS=0xBAD4DD5dA696b1B59932a33c33737ea63438536F +#Set to '0x' for redeployment of token contract in staging environment +TOKEN_ADDRESS=0xFe175c723ca2CB997D0EC000309e2da69B173381 + TOKEN_ADDRESS_DEV=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc VALIDATOR_ADDRESS_1=0x99Eb3D86663c6Db090eFFdBC20510Ca9f836DCE3