2019-07-04 02:32:01 -07:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
cd $(dirname "$0")
|
2019-09-01 02:41:06 -07:00
|
|
|
cd ..
|
2019-07-04 02:32:01 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
# either development or staging
|
2019-09-01 00:50:26 -07:00
|
|
|
TARGET_NETWORK=${TARGET_NETWORK:=development}
|
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
DEPLOY_DIR="`pwd`/src/deploy"
|
2019-09-04 07:23:14 -07:00
|
|
|
TEST_SERVICES_DIR="`pwd`/src/test-services"
|
2019-09-01 02:41:06 -07:00
|
|
|
DEMO_DIR="`pwd`/demo"
|
|
|
|
|
|
|
|
start_dev_blockchain_networks() {
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Starting side test blockchain"
|
2019-07-04 02:32:01 -07:00
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
docker kill ganache_side > /dev/null 2>&1 || true
|
|
|
|
docker network create blockchain_side > /dev/null 2>&1 || true
|
2019-10-24 06:24:18 -07:00
|
|
|
docker volume create ganache_side_data > /dev/null 2>&1 || true
|
|
|
|
docker run -d --network blockchain_side --rm --name ganache_side -v "ganache_side_data:/app/db" \
|
2019-10-18 03:38:42 -07:00
|
|
|
-p "7545:8545" \
|
2019-08-31 00:56:50 -07:00
|
|
|
trufflesuite/ganache-cli:latest \
|
2019-10-14 13:40:55 -07:00
|
|
|
-m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 33 -q --db /app/db -b 3 --noVMErrorsOnRPCResponse
|
2019-07-07 12:58:35 -07:00
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Starting home test blockchain"
|
2019-08-22 12:00:32 -07:00
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
docker kill ganache_home > /dev/null 2>&1 || true
|
|
|
|
docker network create blockchain_home > /dev/null 2>&1 || true
|
2019-10-24 06:24:18 -07:00
|
|
|
docker volume create ganache_home_data > /dev/null 2>&1 || true
|
|
|
|
docker run -d --network blockchain_home --rm --name ganache_home -v "ganache_home_data:/app/db" \
|
2019-10-18 03:38:42 -07:00
|
|
|
-p "8545:8545" \
|
2019-08-31 00:56:50 -07:00
|
|
|
trufflesuite/ganache-cli:latest \
|
2019-10-14 13:40:55 -07:00
|
|
|
-m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 44 -q --db /app/db -b 3 --noVMErrorsOnRPCResponse
|
2019-07-07 12:58:35 -07:00
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
sleep 4
|
|
|
|
}
|
2019-07-07 12:58:35 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
deploy_token() {
|
|
|
|
echo "Compiling and deploying erc20"
|
2019-07-04 02:32:01 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
echo "Building deploy docker image"
|
|
|
|
docker build -t deploy_test "$DEPLOY_DIR/deploy-test" > /dev/null 2>&1
|
2019-09-01 00:50:26 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
echo "Deploying"
|
2019-09-04 03:30:55 -07:00
|
|
|
if [[ "$TARGET_NETWORK" == "development" ]]; then
|
2019-10-02 10:28:22 -07:00
|
|
|
TOKEN_ADDRESS=$(docker run --network blockchain_home --rm -v "$DEPLOY_DIR/deploy-test/build:/build/build" --env-file "$DEPLOY_DIR/deploy-test/.env.$TARGET_NETWORK" \
|
2019-09-01 02:41:06 -07:00
|
|
|
deploy_test \
|
2019-09-04 03:30:55 -07:00
|
|
|
--network home 2>&1 \
|
2019-09-01 02:41:06 -07:00
|
|
|
| grep "contract address" \
|
|
|
|
| awk '{print $4}')
|
2019-09-04 03:30:55 -07:00
|
|
|
else
|
2019-10-02 10:28:22 -07:00
|
|
|
TOKEN_ADDRESS=$(docker run --rm -v "$DEPLOY_DIR/deploy-test/build:/build/build" --env-file "$DEPLOY_DIR/deploy-test/.env.$TARGET_NETWORK" --env-file "$DEPLOY_DIR/.keys.$TARGET_NETWORK" \
|
2019-09-04 03:30:55 -07:00
|
|
|
deploy_test \
|
|
|
|
--network home 2>&1 \
|
|
|
|
| grep "contract address" \
|
|
|
|
| awk '{print $4}')
|
|
|
|
fi
|
2019-09-01 02:41:06 -07:00
|
|
|
}
|
2019-07-04 02:32:01 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
deploy_bridge() {
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Compiling and deploying home part"
|
2019-07-04 02:32:01 -07:00
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Building deploy docker image"
|
2019-09-01 02:41:06 -07:00
|
|
|
docker build -t deploy_home "$DEPLOY_DIR/deploy-home" > /dev/null 2>&1
|
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Deploying"
|
2019-09-04 03:30:55 -07:00
|
|
|
if [[ "$TARGET_NETWORK" == "development" ]]; then
|
2019-10-02 10:28:22 -07:00
|
|
|
BRIDGE_ADDRESS=$(docker run --network blockchain_home --rm -v "$DEPLOY_DIR/deploy-home/build:/build/build" --env-file "$DEPLOY_DIR/deploy-home/.env.$TARGET_NETWORK" \
|
2019-09-04 03:30:55 -07:00
|
|
|
deploy_home \
|
|
|
|
--network home 2>&1 \
|
|
|
|
| grep "contract address" \
|
|
|
|
| awk '{print $4}')
|
|
|
|
else
|
2019-10-02 10:28:22 -07:00
|
|
|
BRIDGE_ADDRESS=$(docker run --rm -v "$DEPLOY_DIR/deploy-home/build:/build/build" --env-file "$DEPLOY_DIR/deploy-home/.env.$TARGET_NETWORK" --env-file "$DEPLOY_DIR/.keys.$TARGET_NETWORK" \
|
2019-09-01 02:41:06 -07:00
|
|
|
deploy_home \
|
2019-09-04 03:30:55 -07:00
|
|
|
--network home 2>&1 \
|
2019-09-01 00:50:26 -07:00
|
|
|
| grep "contract address" \
|
|
|
|
| awk '{print $4}')
|
2019-09-04 03:30:55 -07:00
|
|
|
fi
|
2019-09-01 02:41:06 -07:00
|
|
|
}
|
2019-07-04 02:32:01 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
deploy_db() {
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Compiling and deploying side part"
|
2019-07-04 02:32:01 -07:00
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Building deploy docker image"
|
2019-09-01 02:41:06 -07:00
|
|
|
docker build -t deploy_side "$DEPLOY_DIR/deploy-side" > /dev/null 2>&1
|
|
|
|
|
2019-08-31 00:56:50 -07:00
|
|
|
echo "Deploying"
|
2019-09-04 03:30:55 -07:00
|
|
|
if [[ "$TARGET_NETWORK" == "development" ]]; then
|
2019-10-02 10:28:22 -07:00
|
|
|
SHARED_DB_ADDRESS=$(docker run --network blockchain_side --rm -v "$DEPLOY_DIR/deploy-side/build:/build/build" --env-file "$DEPLOY_DIR/deploy-side/.env.$TARGET_NETWORK" \
|
2019-09-04 03:30:55 -07:00
|
|
|
deploy_side \
|
|
|
|
--network side 2>&1 \
|
|
|
|
| grep "contract address" \
|
|
|
|
| awk '{print $4}')
|
|
|
|
else
|
2019-10-02 10:28:22 -07:00
|
|
|
SHARED_DB_ADDRESS=$(docker run --rm -v "$DEPLOY_DIR/deploy-side/build:/build/build" --env-file "$DEPLOY_DIR/deploy-side/.env.$TARGET_NETWORK" --env-file "$DEPLOY_DIR/.keys.$TARGET_NETWORK" \
|
2019-09-01 02:41:06 -07:00
|
|
|
deploy_side \
|
2019-09-04 03:30:55 -07:00
|
|
|
--network side 2>&1 \
|
2019-09-01 00:50:26 -07:00
|
|
|
| grep "contract address" \
|
|
|
|
| awk '{print $4}')
|
2019-09-04 03:30:55 -07:00
|
|
|
fi
|
2019-09-01 02:41:06 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
deploy_all() {
|
2019-09-04 07:23:14 -07:00
|
|
|
TOKEN_ADDRESS=$(source "$DEPLOY_DIR/deploy-home/.env.$TARGET_NETWORK"; echo "$HOME_TOKEN_ADDRESS")
|
2019-09-01 02:41:06 -07:00
|
|
|
|
|
|
|
if [[ "$TARGET_NETWORK" == "development" ]] || [[ "$TOKEN_ADDRESS" == "0x" ]]; then
|
|
|
|
deploy_token
|
2019-09-04 03:30:55 -07:00
|
|
|
sed -i 's/TOKEN_ADDRESS=0x$/TOKEN_ADDRESS='"$TOKEN_ADDRESS"'/' "$DEPLOY_DIR/deploy-home/.env.$TARGET_NETWORK"
|
2019-09-01 02:41:06 -07:00
|
|
|
fi
|
|
|
|
|
|
|
|
deploy_bridge
|
|
|
|
deploy_db
|
2019-09-01 00:50:26 -07:00
|
|
|
|
|
|
|
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"
|
2019-09-01 02:41:06 -07:00
|
|
|
|
|
|
|
echo "Updating deployed contract addresses in demo validators .env.$TARGET_NETWORK configs"
|
|
|
|
for file in "$DEMO_DIR"/validator*/.env."$TARGET_NETWORK"; do
|
2019-09-04 07:23:14 -07:00
|
|
|
sed -i 's/HOME_TOKEN_ADDRESS=.*$/HOME_TOKEN_ADDRESS='"$TOKEN_ADDRESS"'/' "$file"
|
|
|
|
sed -i 's/HOME_BRIDGE_ADDRESS=.*$/HOME_BRIDGE_ADDRESS='"$BRIDGE_ADDRESS"'/' "$file"
|
|
|
|
sed -i 's/SIDE_SHARED_DB_ADDRESS=.*$/SIDE_SHARED_DB_ADDRESS='"$SHARED_DB_ADDRESS"'/' "$file"
|
2019-09-01 02:41:06 -07:00
|
|
|
done
|
2019-09-04 07:23:14 -07:00
|
|
|
|
|
|
|
echo "Updating deployed contract addresses in test-services .env.$TARGET_NETWORK configs"
|
|
|
|
sed -i 's/HOME_TOKEN_ADDRESS=.*$/HOME_TOKEN_ADDRESS='"$TOKEN_ADDRESS"'/' "$TEST_SERVICES_DIR/ethereumBalance/.env.$TARGET_NETWORK"
|
|
|
|
sed -i 's/HOME_BRIDGE_ADDRESS=.*$/HOME_BRIDGE_ADDRESS='"$BRIDGE_ADDRESS"'/' "$TEST_SERVICES_DIR/ethereumSend/.env.$TARGET_NETWORK"
|
|
|
|
sed -i 's/HOME_TOKEN_ADDRESS=.*$/HOME_TOKEN_ADDRESS='"$TOKEN_ADDRESS"'/' "$TEST_SERVICES_DIR/ethereumSend/.env.$TARGET_NETWORK"
|
2019-08-31 00:56:50 -07:00
|
|
|
}
|
2019-07-07 12:58:35 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
2019-09-01 00:50:26 -07:00
|
|
|
if [[ "$TARGET_NETWORK" == "development" ]]; then
|
2019-09-01 02:41:06 -07:00
|
|
|
|
2019-10-24 06:24:18 -07:00
|
|
|
if [[ "$(docker volume ls | grep ganache_side_db)" ]] || [[ "$(docker volume ls | grep ganache_home_db)" ]]; then
|
|
|
|
echo "Restarting dev blockchain networks"
|
|
|
|
else
|
2019-09-01 02:41:06 -07:00
|
|
|
echo "Starting dev blockchain networks and deploying contracts"
|
|
|
|
need_to_deploy=true
|
2019-09-01 00:50:26 -07:00
|
|
|
fi
|
2019-07-17 00:31:38 -07:00
|
|
|
|
2019-09-01 02:41:06 -07:00
|
|
|
start_dev_blockchain_networks
|
2019-09-01 00:50:26 -07:00
|
|
|
|
|
|
|
if [[ -n "$need_to_deploy" ]]; then
|
|
|
|
deploy_all
|
2019-09-01 02:41:06 -07:00
|
|
|
else
|
|
|
|
echo "Contracts are already deployed, run clean.sh first if you want to redeploy everything"
|
2019-09-01 00:50:26 -07:00
|
|
|
fi
|
2019-08-31 00:56:50 -07:00
|
|
|
else
|
2019-09-01 02:41:06 -07:00
|
|
|
echo "Deploying to the staging blockchain environment"
|
2019-09-01 00:50:26 -07:00
|
|
|
|
|
|
|
deploy_all
|
2019-08-31 00:56:50 -07:00
|
|
|
fi
|
2019-07-07 12:58:35 -07:00
|
|
|
|
|
|
|
echo "Done"
|