From 72737bfa29c1659e5653cdb89e8932017d016d7f Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:52:12 +0530 Subject: [PATCH] Handle restarts in mobymask-v2 stack (#286) * Verify existing contract deployment * Update mobymask-v2 demo instructions Former-commit-id: 59fe9aae59e2622761fe28beba9e5cc9e6d2614f --- .../docker-compose-watcher-mobymask-v2.yml | 12 ++++----- .../deploy-and-generate-invite.sh | 25 ++++++++++++++++--- .../{server-start.sh => start-server.sh} | 0 app/data/stacks/mobymask-v2/README.md | 18 ++++++------- app/data/stacks/mobymask-v2/demo.md | 20 +++++---------- app/data/stacks/mobymask-v2/mobymask-only.md | 9 ++++--- 6 files changed, 47 insertions(+), 37 deletions(-) rename app/data/config/watcher-mobymask-v2/{server-start.sh => start-server.sh} (100%) diff --git a/app/data/compose/docker-compose-watcher-mobymask-v2.yml b/app/data/compose/docker-compose-watcher-mobymask-v2.yml index 667191a..fd68212 100644 --- a/app/data/compose/docker-compose-watcher-mobymask-v2.yml +++ b/app/data/compose/docker-compose-watcher-mobymask-v2.yml @@ -39,7 +39,7 @@ services: - ../config/wait-for-it.sh:/app/packages/server/wait-for-it.sh - ../config/watcher-mobymask-v2/secrets-template.json:/app/packages/server/secrets-template.json - ../config/watcher-mobymask-v2/deploy-and-generate-invite.sh:/app/packages/server/deploy-and-generate-invite.sh - - moby_data_server:/app/packages/server + - mobymask_deployment:/app/packages/server - fixturenet_geth_accounts:/geth-accounts:ro extra_hosts: - "host.docker.internal:host-gateway" @@ -54,14 +54,14 @@ services: image: cerc/watcher-mobymask-v2:local env_file: - ../config/watcher-mobymask-v2/optimism-params.env - command: ["sh", "server-start.sh"] + command: ["sh", "start-server.sh"] volumes: - ../config/watcher-mobymask-v2/watcher-config-template.toml:/app/packages/mobymask-v2-watcher/environments/watcher-config-template.toml - ../config/watcher-mobymask-v2/peer.env:/app/packages/peer/.env - ../config/watcher-mobymask-v2/relay-id.json:/app/packages/mobymask-v2-watcher/relay-id.json - ../config/watcher-mobymask-v2/peer-id.json:/app/packages/mobymask-v2-watcher/peer-id.json - - ../config/watcher-mobymask-v2/server-start.sh:/app/packages/mobymask-v2-watcher/server-start.sh - - moby_data_server:/server + - ../config/watcher-mobymask-v2/start-server.sh:/app/packages/mobymask-v2-watcher/start-server.sh + - mobymask_deployment:/server - fixturenet_geth_accounts:/geth-accounts:ro ports: - "0.0.0.0:3001:3001" @@ -89,7 +89,7 @@ services: - ../config/watcher-mobymask-v2/mobymask-app.env:/app/.env - ../config/watcher-mobymask-v2/mobymask-app-config.json:/app/src/mobymask-app-config.json - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/app/mobymask-app-start.sh - - moby_data_server:/server + - mobymask_deployment:/server ports: - "0.0.0.0:3002:3000" healthcheck: @@ -120,5 +120,5 @@ services: volumes: mobymask_watcher_db_data: - moby_data_server: + mobymask_deployment: fixturenet_geth_accounts: diff --git a/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh b/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh index b53b6b5..2a3000e 100755 --- a/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh +++ b/app/data/config/watcher-mobymask-v2/deploy-and-generate-invite.sh @@ -4,7 +4,6 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi - if [ -f /geth-accounts/accounts.csv ]; then echo "Using L1 private key from the mounted volume" # Read the private key of L1 account to deploy contract @@ -16,14 +15,34 @@ fi # Set the private key jq --arg privateKey "$PRIVATE_KEY_DEPLOYER" '.privateKey = $privateKey' secrets-template.json > secrets.json +# Set the RPC URL export L2_GETH_URL="http://${L2_GETH_HOST}:${L2_GETH_PORT}" jq --arg rpcUrl "$L2_GETH_URL" '.rpcUrl = $rpcUrl' secrets.json > secrets_updated.json && mv secrets_updated.json secrets.json -cd ../hardhat export RPC_URL="${L2_GETH_URL}" +# Check and exit if a deployment already exists (on restarts) +if [ -f ./config.json ]; then + echo "config.json already exists, checking the contract deployment" + + # Read JSON file + DEPLOYMENT_DETAILS=$(cat config.json) + CONTRACT_ADDRESS=$(echo "$DEPLOYMENT_DETAILS" | jq -r '.address') + + cd ../hardhat + if yarn verifyDeployment --network optimism --contract "${CONTRACT_ADDRESS}"; then + echo "Deployment verfication successful" + cd ../server + else + echo "Deployment verfication failed, please clear MobyMask deployment volume before starting" + exit 1 + fi +fi + +# Wait until balance for deployer account is reflected +cd ../hardhat while true; do - ACCOUNT_BALANCE=$(yarn hardhat --network optimism balance $PRIVATE_KEY_DEPLOYER | grep ETH) + ACCOUNT_BALANCE=$(yarn balance --network optimism $PRIVATE_KEY_DEPLOYER | grep ETH) if [ "$ACCOUNT_BALANCE" != "0.0 ETH" ]; then echo "Account balance updated: $ACCOUNT_BALANCE" diff --git a/app/data/config/watcher-mobymask-v2/server-start.sh b/app/data/config/watcher-mobymask-v2/start-server.sh similarity index 100% rename from app/data/config/watcher-mobymask-v2/server-start.sh rename to app/data/config/watcher-mobymask-v2/start-server.sh diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index 513bd43..15652ef 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -116,16 +116,12 @@ Stop all the services running in background run: laconic-so --stack mobymask-v2 deploy-system down ``` -Clear volumes: +Clear volumes created by this stack: -* List all relevant volumes: +```bash +# List all relevant volumes +docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*mobymask_deployment|.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data" - ```bash - docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*moby_data_server|.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data" - ``` - -* Remove all the listed volumes: - - ```bash - docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*moby_data_server|.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") - ``` +# Remove all the listed volumes +docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*mobymask_deployment|.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") +``` diff --git a/app/data/stacks/mobymask-v2/demo.md b/app/data/stacks/mobymask-v2/demo.md index 8a5049c..329b554 100644 --- a/app/data/stacks/mobymask-v2/demo.md +++ b/app/data/stacks/mobymask-v2/demo.md @@ -3,7 +3,7 @@ * Get the root invite link URL for mobymask-app: ```bash - laconic-so --stack mobymask-v2 deploy-system logs mobymask + docker logs -f $(docker ps -aq --filter name="mobymask-1") ``` The invite link is seen at the end of the logs. Example log: @@ -29,19 +29,11 @@ * In the `MESSAGES` tab of other browsers, a message can be seen with the signed invocations. -* In a terminal check logs from the watcher peer container. +* In a terminal, check logs from the watcher peer container: - * Get the container id: - - ```bash - laconic-so --stack mobymask-v2 deploy-system ps | grep mobymask-watcher-server - ``` - - * Check logs: - - ```bash - docker logs -f - ``` + ```bash + docker logs -f $(docker ps -aq --filter name="mobymask-watcher-server") + ``` * It should have received the message, sent transaction to L2 chain and received a transaction receipt for an `invoke` message with block details. @@ -74,7 +66,7 @@ * Get the deployed contract address: ```bash - laconic-so --stack mobymask-v2 deploy-system exec mobymask-app "cat src/config.json" + docker exec -it $(docker ps -aq --filter name="mobymask-app") cat src/config.json ``` The value of `address` field is the deployed contract address diff --git a/app/data/stacks/mobymask-v2/mobymask-only.md b/app/data/stacks/mobymask-v2/mobymask-only.md index 843e753..69c2007 100644 --- a/app/data/stacks/mobymask-v2/mobymask-only.md +++ b/app/data/stacks/mobymask-v2/mobymask-only.md @@ -59,8 +59,10 @@ To list down and monitor the running containers: ```bash laconic-so --stack mobymask-v2 deploy --include watcher-mobymask-v2 ps + # With status docker ps + # Check logs for a container docker logs -f ``` @@ -72,14 +74,15 @@ See [Tests](./README.md#tests) and [Demo](./README.md#demo) to interact with sta Stop all services running in the background: ```bash -laconic-so --stack mobymask-v2 deploy down --include watcher-mobymask-v2 +laconic-so --stack mobymask-v2 deploy --include watcher-mobymask-v2 down ``` Clear volumes created by this stack: ```bash # List all relevant volumes -docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*moby_data_server|.*fixturenet_geth_accounts" +docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*mobymask_deployment|.*fixturenet_geth_accounts" + # Remove all the listed volumes -docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*moby_data_server|.*fixturenet_geth_accounts") +docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*mobymask_deployment|.*fixturenet_geth_accounts") ```