From c7c3cbde8ee4b0cea5833fde7e3db12eb22c34fe Mon Sep 17 00:00:00 2001 From: Thomas E Lackey Date: Tue, 11 Apr 2023 15:05:08 -0500 Subject: [PATCH 01/67] Update for latest act_runner. (#316) --- app/data/container-build/cerc-act-runner-task-executor/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/data/container-build/cerc-act-runner-task-executor/build.sh b/app/data/container-build/cerc-act-runner-task-executor/build.sh index 843e86af..2bfb3bf9 100755 --- a/app/data/container-build/cerc-act-runner-task-executor/build.sh +++ b/app/data/container-build/cerc-act-runner-task-executor/build.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash # Build a local version of the task executor for act-runner -docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/act_runner/Dockerfile.task-executor ${CERC_REPO_BASE_DIR}/act_runner +docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/hosting/gitea/Dockerfile.task-executor ${CERC_REPO_BASE_DIR}/hosting From 249893f5d96decc6ff656d7b1e3c5147a94c2d5a Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 12 Apr 2023 06:32:40 -0600 Subject: [PATCH 02/67] Add comment to spec doc --- docs/spec.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/spec.md b/docs/spec.md index 7bf038cb..ad6ed3c9 100644 --- a/docs/spec.md +++ b/docs/spec.md @@ -1,5 +1,7 @@ # Specification +(note this page is out of date) + ## Implementation From 882f0b16aacd847570de9e6a506cdf74ef6e6f14 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Wed, 12 Apr 2023 18:17:13 +0530 Subject: [PATCH 03/67] Configuration fixes for mobymask-v2 stack for multiple deployments (#318) * Fix contract deployment script in fixturenet-optimism stack * Configure relay node's announce domain from env * Configure relay peers list for the relay node from env * Create and use peer ids from a mounted volume * Fix command to create watcher config * Fix mobymask-app deployment script --- .gitignore | 2 +- .../compose/docker-compose-mobymask-app.yml | 2 ++ .../compose/docker-compose-peer-test-app.yml | 4 +++ .../docker-compose-watcher-mobymask-v2.yml | 7 ++-- .../optimism-contracts/run.sh | 2 +- .../mobymask-app-config.json | 4 +-- .../watcher-mobymask-v2/mobymask-app-start.sh | 32 ++++++++++++------- .../watcher-mobymask-v2/mobymask-params.env | 10 ++++-- .../config/watcher-mobymask-v2/peer-id.json | 5 --- app/data/config/watcher-mobymask-v2/peer.env | 1 - .../config/watcher-mobymask-v2/relay-id.json | 5 --- .../watcher-mobymask-v2/start-server.sh | 32 +++++++++++++++++-- .../watcher-mobymask-v2/test-app-config.json | 4 +-- .../watcher-mobymask-v2/test-app-start.sh | 10 +++++- .../watcher-config-template.toml | 9 +++--- app/data/stacks/mobymask-v2/README.md | 4 +-- app/data/stacks/mobymask-v2/mobymask-only.md | 10 ++++-- app/data/stacks/mobymask-v2/web-apps.md | 10 +++--- 18 files changed, 103 insertions(+), 50 deletions(-) delete mode 100644 app/data/config/watcher-mobymask-v2/peer-id.json delete mode 100644 app/data/config/watcher-mobymask-v2/peer.env delete mode 100644 app/data/config/watcher-mobymask-v2/relay-id.json diff --git a/.gitignore b/.gitignore index a1dcd886..4b30a1d3 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ laconic-so laconic_stack_orchestrator.egg-info __pycache__ *~ - +build diff --git a/app/data/compose/docker-compose-mobymask-app.yml b/app/data/compose/docker-compose-mobymask-app.yml index 1cd4f9ab..df14d7db 100644 --- a/app/data/compose/docker-compose-mobymask-app.yml +++ b/app/data/compose/docker-compose-mobymask-app.yml @@ -22,6 +22,7 @@ services: - ../config/wait-for-it.sh:/app/wait-for-it.sh - ../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 + - peers_ids:/peers - mobymask_deployment:/server ports: - "0.0.0.0:3002:3000" @@ -37,3 +38,4 @@ services: volumes: mobymask_deployment: + peers_ids: diff --git a/app/data/compose/docker-compose-peer-test-app.yml b/app/data/compose/docker-compose-peer-test-app.yml index c0cc68cb..7d1b89d6 100644 --- a/app/data/compose/docker-compose-peer-test-app.yml +++ b/app/data/compose/docker-compose-peer-test-app.yml @@ -14,6 +14,7 @@ services: volumes: - ../config/watcher-mobymask-v2/test-app-config.json:/app/packages/test-app/src/test-app-config.json - ../config/watcher-mobymask-v2/test-app-start.sh:/app/packages/test-app/test-app-start.sh + - peers_ids:/peers ports: - "0.0.0.0:3003:3000" healthcheck: @@ -24,3 +25,6 @@ services: start_period: 10s extra_hosts: - "host.docker.internal:host-gateway" + +volumes: + peers_ids: diff --git a/app/data/compose/docker-compose-watcher-mobymask-v2.yml b/app/data/compose/docker-compose-watcher-mobymask-v2.yml index 3af4eccb..601d13b6 100644 --- a/app/data/compose/docker-compose-watcher-mobymask-v2.yml +++ b/app/data/compose/docker-compose-watcher-mobymask-v2.yml @@ -70,15 +70,15 @@ services: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC} CERC_PRIVATE_KEY_PEER: ${CERC_PRIVATE_KEY_PEER} + CERC_RELAY_PEERS: ${CERC_RELAY_PEERS} + CERC_RELAY_ANNOUNCE_DOMAIN: ${CERC_RELAY_ANNOUNCE_DOMAIN} CERC_ENABLE_PEER_L2_TXS: ${CERC_ENABLE_PEER_L2_TXS} CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} 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/start-server.sh:/app/packages/mobymask-v2-watcher/start-server.sh + - peers_ids:/app/packages/mobymask-v2-watcher/peers - mobymask_deployment:/server - fixturenet_geth_accounts:/geth-accounts:ro # Expose GQL, metrics and relay node ports @@ -97,5 +97,6 @@ services: volumes: mobymask_watcher_db_data: + peers_ids: mobymask_deployment: fixturenet_geth_accounts: diff --git a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh index c8d1911f..a256ea64 100755 --- a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh +++ b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh @@ -101,7 +101,7 @@ node update-config.js deploy-config/getting-started.json "$ADMIN_ADDRESS" "$PROP echo "Updated the deployment config" # Create a .env file -echo "CERC_L1_RPC=$CERC_L1_RPC" > .env +echo "L1_RPC=$CERC_L1_RPC" > .env echo "PRIVATE_KEY_DEPLOYER=$ADMIN_PRIV_KEY" >> .env echo "Deploying the L1 smart contracts, this will take a while..." diff --git a/app/data/config/watcher-mobymask-v2/mobymask-app-config.json b/app/data/config/watcher-mobymask-v2/mobymask-app-config.json index 2ccb816d..ed913b51 100644 --- a/app/data/config/watcher-mobymask-v2/mobymask-app-config.json +++ b/app/data/config/watcher-mobymask-v2/mobymask-app-config.json @@ -1,8 +1,6 @@ { "name": "MobyMask", - "relayNodes": [ - "/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" - ], + "relayNodes": [], "peer": { "enableDebugInfo": true } diff --git a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh index fbe2fbf9..c494ed5c 100755 --- a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh +++ b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh @@ -9,22 +9,32 @@ CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRA CERC_RELAY_NODES="${CERC_RELAY_NODES:-${DEFAULT_CERC_RELAY_NODES}}" CERC_APP_WATCHER_URL="${CERC_APP_WATCHER_URL:-${DEFAULT_CERC_APP_WATCHER_URL}}" +# If not set (or []), check the mounted volume for relay peer id +if [ -z "$CERC_RELAY_NODES" ] || [ "$CERC_RELAY_NODES" = "[]" ]; then + echo "CERC_RELAY_NODES not provided, taking from the mounted volume" + CERC_RELAY_NODES="[\"/ip4/127.0.0.1/tcp/9090/ws/p2p/$(jq -r '.id' /peers/relay-id.json)\"]" +fi + +echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES" + # Use config from mounted volume if available (when running web-app along with watcher stack) if [ -f /server/config.json ]; then - echo "Merging config for deployed contract from mounted volume" - # Merging config files to get deployed contract address - jq -s '.[0] * .[1]' /app/src/mobymask-app-config.json /server/config.json > /app/src/config.json -else - echo "Setting deployed contract details from env" + echo "Taking config for deployed contract from mounted volume" - # Set config values from environment variables - jq --arg address "$CERC_DEPLOYED_CONTRACT" \ - --argjson chainId $CERC_CHAIN_ID \ - --argjson relayNodes "$CERC_RELAY_NODES" \ - '.address = $address | .chainId = $chainId | .relayNodes = $relayNodes' \ - /app/src/mobymask-app-config.json > /app/src/config.json + # Get deployed contract address and chain id + CERC_DEPLOYED_CONTRACT=$(jq -r '.address' /server/config.json | tr -d '"') + CERC_CHAIN_ID=$(jq -r '.chainId' /server/config.json) +else + echo "Taking deployed contract details from env" fi +# Export config values in a json file +jq --arg address "$CERC_DEPLOYED_CONTRACT" \ + --argjson chainId "$CERC_CHAIN_ID" \ + --argjson relayNodes "$CERC_RELAY_NODES" \ + '.address = $address | .chainId = $chainId | .relayNodes = $relayNodes' \ + /app/src/mobymask-app-config.json > /app/src/config.json + REACT_APP_WATCHER_URI="$CERC_APP_WATCHER_URL/graphql" npm run build serve -s build diff --git a/app/data/config/watcher-mobymask-v2/mobymask-params.env b/app/data/config/watcher-mobymask-v2/mobymask-params.env index 9f967170..22681036 100644 --- a/app/data/config/watcher-mobymask-v2/mobymask-params.env +++ b/app/data/config/watcher-mobymask-v2/mobymask-params.env @@ -5,6 +5,12 @@ DEFAULT_CERC_WATCHER_HOST="mobymask-watcher-server" DEFAULT_CERC_WATCHER_PORT=3001 DEFAULT_CERC_APP_WATCHER_URL="http://localhost:3001" +# Set of relay peers to connect to from the relay node +DEFAULT_CERC_RELAY_PEERS=[] + +# Domain to be used in the relay node's announce address +DEFAULT_CERC_RELAY_ANNOUNCE_DOMAIN= + # Base URI for mobymask-app (used for generating invite) DEFAULT_CERC_MOBYMASK_APP_BASE_URI="http://127.0.0.1:3002/#" @@ -18,5 +24,5 @@ DEFAULT_CERC_DEPLOYED_CONTRACT= # Chain ID is used by mobymask web-app for txs DEFAULT_CERC_CHAIN_ID=42069 -# Set relay nodes to be used by web-apps -DEFAULT_CERC_RELAY_NODES=["/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t"] +# Set of relay nodes to be used by web-apps +DEFAULT_CERC_RELAY_NODES=[] diff --git a/app/data/config/watcher-mobymask-v2/peer-id.json b/app/data/config/watcher-mobymask-v2/peer-id.json deleted file mode 100644 index ceb55fc0..00000000 --- a/app/data/config/watcher-mobymask-v2/peer-id.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": "12D3KooWK6myjc8r1KBnfP9igp31qJkPaVfsKDjKrjoSefV5SDEo", - "privKey": "CAESQJMHbMaH+UEOtjGOzXYtoPO/cdHakCtN1hcnknIWzx/6ie1lxb+8kfzBjwt7apfj8fHlTCYSIVK8Q2AWu9a2h3g=", - "pubKey": "CAESIIntZcW/vJH8wY8Le2qX4/Hx5UwmEiFSvENgFrvWtod4" -} diff --git a/app/data/config/watcher-mobymask-v2/peer.env b/app/data/config/watcher-mobymask-v2/peer.env deleted file mode 100644 index 4cce4d9a..00000000 --- a/app/data/config/watcher-mobymask-v2/peer.env +++ /dev/null @@ -1 +0,0 @@ -RELAY="/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" diff --git a/app/data/config/watcher-mobymask-v2/relay-id.json b/app/data/config/watcher-mobymask-v2/relay-id.json deleted file mode 100644 index d7edc6dc..00000000 --- a/app/data/config/watcher-mobymask-v2/relay-id.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "id": "12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t", - "privKey": "CAESQGsqG5o4VlWJZM9XlA3MjabyZOXWQ2MLZU5AhBQsjXGt9iSlGtTuNOrHX5xSRgLBxLuMoqWsjGxE/dDB9c46RI8=", - "pubKey": "CAESIPYkpRrU7jTqx1+cUkYCwcS7jKKlrIxsRP3QwfXOOkSP" -} diff --git a/app/data/config/watcher-mobymask-v2/start-server.sh b/app/data/config/watcher-mobymask-v2/start-server.sh index ee7b73c3..b5a3518e 100755 --- a/app/data/config/watcher-mobymask-v2/start-server.sh +++ b/app/data/config/watcher-mobymask-v2/start-server.sh @@ -7,11 +7,34 @@ fi CERC_L2_GETH_RPC="${CERC_L2_GETH_RPC:-${DEFAULT_CERC_L2_GETH_RPC}}" CERC_PRIVATE_KEY_PEER="${CERC_PRIVATE_KEY_PEER:-${DEFAULT_CERC_PRIVATE_KEY_PEER}}" +CERC_RELAY_PEERS="${CERC_RELAY_PEERS:-${DEFAULT_CERC_RELAY_PEERS}}" +CERC_RELAY_ANNOUNCE_DOMAIN="${CERC_RELAY_ANNOUNCE_DOMAIN:-${DEFAULT_CERC_RELAY_ANNOUNCE_DOMAIN}}" CERC_ENABLE_PEER_L2_TXS="${CERC_ENABLE_PEER_L2_TXS:-${DEFAULT_CERC_ENABLE_PEER_L2_TXS}}" CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}" echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}" +# Check for peer ids in ./peers folder, create if not present +if [ -f ./peers/relay-id.json ]; then + echo "Using peer id for relay node from the mounted volume" +else + echo "Creating a new peer id for relay node" + cd ../peer + yarn create-peer -f ../mobymask-v2-watcher/peers/relay-id.json + cd ../mobymask-v2-watcher +fi + +if [ -f ./peers/peer-id.json ]; then + echo "Using peer id for peer node from the mounted volume" +else + echo "Creating a new peer id for peer node" + cd ../peer + yarn create-peer -f ../mobymask-v2-watcher/peers/peer-id.json + cd ../mobymask-v2-watcher +fi + +CERC_RELAY_MULTIADDR="/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/$(jq -r '.id' ./peers/relay-id.json)" + # Use contract address from environment variable or set from config.json in mounted volume if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then CONTRACT_ADDRESS="${CERC_DEPLOYED_CONTRACT}" @@ -28,11 +51,13 @@ else echo "Using CERC_PRIVATE_KEY_PEER from env" fi - # Read in the config template TOML file and modify it WATCHER_CONFIG_TEMPLATE=$(cat environments/watcher-config-template.toml) WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \ - sed -E "s/REPLACE_WITH_CERC_ENABLE_PEER_L2_TXS/${CERC_ENABLE_PEER_L2_TXS}/g; \ + sed -E "s|REPLACE_WITH_CERC_RELAY_PEERS|${CERC_RELAY_PEERS}|g; \ + s/REPLACE_WITH_CERC_RELAY_ANNOUNCE_DOMAIN/${CERC_RELAY_ANNOUNCE_DOMAIN}/g; \ + s|REPLACE_WITH_CERC_RELAY_MULTIADDR|${CERC_RELAY_MULTIADDR}|g; \ + s/REPLACE_WITH_CERC_ENABLE_PEER_L2_TXS/${CERC_ENABLE_PEER_L2_TXS}/g; \ s/REPLACE_WITH_CERC_PRIVATE_KEY_PEER/${CERC_PRIVATE_KEY_PEER}/g; \ s/REPLACE_WITH_CONTRACT_ADDRESS/${CONTRACT_ADDRESS}/g; \ s|REPLACE_WITH_CERC_L2_GETH_RPC_ENDPOINT|${CERC_L2_GETH_RPC}| ") @@ -40,5 +65,8 @@ WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \ # Write the modified content to a new file echo "$WATCHER_CONFIG" > environments/local.toml +# Write the relay node's multiaddr to /app/packages/peer/.env for running tests +echo "RELAY=\"$CERC_RELAY_MULTIADDR\"" > /app/packages/peer/.env + echo 'yarn server' yarn server diff --git a/app/data/config/watcher-mobymask-v2/test-app-config.json b/app/data/config/watcher-mobymask-v2/test-app-config.json index 3b00674f..cce15fd8 100644 --- a/app/data/config/watcher-mobymask-v2/test-app-config.json +++ b/app/data/config/watcher-mobymask-v2/test-app-config.json @@ -1,7 +1,5 @@ { - "relayNodes": [ - "/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t" - ], + "relayNodes": [], "peer": { "enableDebugInfo": true } diff --git a/app/data/config/watcher-mobymask-v2/test-app-start.sh b/app/data/config/watcher-mobymask-v2/test-app-start.sh index 2f45da03..ef7aa539 100755 --- a/app/data/config/watcher-mobymask-v2/test-app-start.sh +++ b/app/data/config/watcher-mobymask-v2/test-app-start.sh @@ -6,7 +6,15 @@ fi CERC_RELAY_NODES="${CERC_RELAY_NODES:-${DEFAULT_CERC_RELAY_NODES}}" -# Set relay nodes in config from CERC_RELAY_NODES environment variable +# If not set (or []), check the mounted volume for relay peer id +if [ -z "$CERC_RELAY_NODES" ] || [ "$CERC_RELAY_NODES" = "[]" ]; then + echo "CERC_RELAY_NODES not provided, taking from the mounted volume" + CERC_RELAY_NODES="[\"/ip4/127.0.0.1/tcp/9090/ws/p2p/$(jq -r '.id' /peers/relay-id.json)\"]" +fi + +echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES" + +# Set relay nodes in config using CERC_RELAY_NODES jq --argjson relayNodes "$CERC_RELAY_NODES" \ '.relayNodes = $relayNodes' \ ./src/test-app-config.json > ./src/config.json diff --git a/app/data/config/watcher-mobymask-v2/watcher-config-template.toml b/app/data/config/watcher-mobymask-v2/watcher-config-template.toml index 843cdbfe..e6ce0750 100644 --- a/app/data/config/watcher-mobymask-v2/watcher-config-template.toml +++ b/app/data/config/watcher-mobymask-v2/watcher-config-template.toml @@ -26,14 +26,15 @@ [server.p2p.relay] host = "0.0.0.0" port = 9090 - relayPeers = [] - peerIdFile = './relay-id.json' + relayPeers = REPLACE_WITH_CERC_RELAY_PEERS + peerIdFile = './peers/relay-id.json' + announce = 'REPLACE_WITH_CERC_RELAY_ANNOUNCE_DOMAIN' enableDebugInfo = true [server.p2p.peer] - relayMultiaddr = '/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t' + relayMultiaddr = 'REPLACE_WITH_CERC_RELAY_MULTIADDR' pubSubTopic = 'mobymask' - peerIdFile = './peer-id.json' + peerIdFile = './peers/peer-id.json' enableDebugInfo = true enableL2Txs = REPLACE_WITH_CERC_ENABLE_PEER_L2_TXS diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index ab36f302..9dcca6c0 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -122,8 +122,8 @@ Clear volumes created by this stack: ```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" +docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*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") +docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") ``` diff --git a/app/data/stacks/mobymask-v2/mobymask-only.md b/app/data/stacks/mobymask-v2/mobymask-only.md index 27073034..f4d25702 100644 --- a/app/data/stacks/mobymask-v2/mobymask-only.md +++ b/app/data/stacks/mobymask-v2/mobymask-only.md @@ -57,6 +57,12 @@ Create and update an env file to be used in the next step ([defaults](../../conf # (used for generating a root invite link after deploying the contract) CERC_MOBYMASK_APP_BASE_URI="http://127.0.0.1:3002/#" + # (Optional) Set of relay peers to connect to from the relay node + CERC_RELAY_PEERS=[] + + # (Optional) Domain to be used in the relay node's announce address + CERC_RELAY_ANNOUNCE_DOMAIN= + # Set to false for disabling watcher peer to send txs to L2 CERC_ENABLE_PEER_L2_TXS=true @@ -112,8 +118,8 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*mobymask_deployment|.*fixturenet_geth_accounts" +docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*fixturenet_geth_accounts" # Remove all the listed volumes -docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*mobymask_deployment|.*fixturenet_geth_accounts") +docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*fixturenet_geth_accounts") ``` diff --git a/app/data/stacks/mobymask-v2/web-apps.md b/app/data/stacks/mobymask-v2/web-apps.md index 2c1ed253..09d6834d 100644 --- a/app/data/stacks/mobymask-v2/web-apps.md +++ b/app/data/stacks/mobymask-v2/web-apps.md @@ -41,8 +41,10 @@ This should create the required docker images in the local image registry Create and update an env file to be used in the next step ([defaults](../../config/watcher-mobymask-v2/mobymask-params.env)): ```bash - # Set relay nodes to be used by the web-app - CERC_RELAY_NODES=["/ip4/127.0.0.1/tcp/9090/ws/p2p/12D3KooWSPCsVkHVyLQoCqhu2YRPvvM7o6r6NRYyLM5zeA6Uig5t"] + # Set of relay nodes to be used by the web-app + # (use double quotes " for strings) + # Eg. CERC_RELAY_NODES=["/dns4/example.com/tcp/443/wss/p2p/12D3KooWGHmDDCc93XUWL16FMcTPCGu2zFaMkf67k8HZ4gdQbRDr"] + CERC_RELAY_NODES=[] # Also add if running MobyMask app: @@ -111,8 +113,8 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -docker volume ls -q --filter "name=.*mobymask_deployment" +docker volume ls -q --filter "name=.*mobymask_deployment|.*peers_ids" # Remove all the listed volumes -docker volume rm $(docker volume ls -q --filter "name=.*mobymask_deployment") +docker volume rm $(docker volume ls -q --filter "name=.*mobymask_deployment|.*peers_ids") ``` From eae124fdf161db9cfb675cd3cc2aaccbdfd6b002 Mon Sep 17 00:00:00 2001 From: zramsay Date: Wed, 12 Apr 2023 17:36:47 -0400 Subject: [PATCH 04/67] run kubo as a stack --- app/data/stacks/kubo/README.md | 7 +++++++ app/data/stacks/kubo/stack.yml | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 app/data/stacks/kubo/README.md create mode 100644 app/data/stacks/kubo/stack.yml diff --git a/app/data/stacks/kubo/README.md b/app/data/stacks/kubo/README.md new file mode 100644 index 00000000..a7c3ae98 --- /dev/null +++ b/app/data/stacks/kubo/README.md @@ -0,0 +1,7 @@ +# Kubo (IPFS) + +The Kubo stack is currently uses the provided docker image, therefore a single command will do: + +``` +laconic-so --stack kubo deploy up +``` diff --git a/app/data/stacks/kubo/stack.yml b/app/data/stacks/kubo/stack.yml new file mode 100644 index 00000000..2552df38 --- /dev/null +++ b/app/data/stacks/kubo/stack.yml @@ -0,0 +1,7 @@ +version: "1.0" +name: kubo +description: "Run kubo (IPFS)" +repos: +containers: +pods: + - kubo From bb9c0706c35e72a26b5a62d60b4cbd771cd88406 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 12 Apr 2023 19:39:37 -0600 Subject: [PATCH 05/67] Build with hosting config file (#321) --- app/build_npms.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/build_npms.py b/app/build_npms.py index 877916be..3750c4bd 100644 --- a/app/build_npms.py +++ b/app/build_npms.py @@ -119,7 +119,9 @@ def command(ctx, include, exclude): # Originally we used the PEP 584 merge operator: # envs = {"CERC_NPM_AUTH_TOKEN": npm_registry_url_token} | ({"CERC_SCRIPT_DEBUG": "true"} if debug else {}) # but that isn't available in Python 3.8 (default in Ubuntu 20) so for now we use dict.update: - envs = {"CERC_NPM_AUTH_TOKEN": npm_registry_url_token} + envs = {"CERC_NPM_AUTH_TOKEN": npm_registry_url_token, + "LACONIC_HOSTED_CONFIG_FILE": "config-hosted.yml" # Convention used by our web app packages + } envs.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {}) try: docker.run(builder_js_image_name, From 6b27731a814b1487535dff8cd5236af559757202 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 12 Apr 2023 19:46:50 -0600 Subject: [PATCH 06/67] Add MuKnSys npm scope (#322) --- .../cerc-builder-js/build-npm-package-local-dependencies.sh | 4 ++-- app/data/container-build/cerc-builder-js/build-npm-package.sh | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh b/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh index 33b6c613..c3a9b520 100755 --- a/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh +++ b/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh @@ -1,7 +1,7 @@ #!/bin/bash # Usage: build-npm-package-local-dependencies.sh # Runs build-npm-package.sh after first fixing up yarn.lock to use a local -# npm registry for all packages in a spcific scope (currently @cerc-io and @lirewine) +# npm registry for all packages in a spcific scope (currently @cerc-io, @lirewine and @muknsys) if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi @@ -18,7 +18,7 @@ set -e local_npm_registry_url=$1 package_publish_version=$2 # If we need to handle an additional scope, add it to the list below: -npm_scopes_to_handle=("@cerc-io" "@lirewine") +npm_scopes_to_handle=("@cerc-io" "@lirewine" "@muknsys") for npm_scope_for_local in ${npm_scopes_to_handle[@]} do # We need to configure the local registry diff --git a/app/data/container-build/cerc-builder-js/build-npm-package.sh b/app/data/container-build/cerc-builder-js/build-npm-package.sh index c8c1e810..668e0bec 100755 --- a/app/data/container-build/cerc-builder-js/build-npm-package.sh +++ b/app/data/container-build/cerc-builder-js/build-npm-package.sh @@ -24,6 +24,7 @@ package_name=$( cat package.json | jq -r .name ) local_npm_registry_url=$1 npm config set @cerc-io:registry ${local_npm_registry_url} npm config set @lirewine:registry ${local_npm_registry_url} +npm config set @muknsys:registry ${local_npm_registry_url} npm config set -- ${local_npm_registry_url}:_authToken ${CERC_NPM_AUTH_TOKEN} # First check if the version of this package we're trying to build already exists in the registry package_exists=$( yarn info --json ${package_name}@${package_publish_version} 2>/dev/null | jq -r .data.dist.tarball ) From c99fc0941a522215b2b90ea744d20e1bbb261349 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Thu, 13 Apr 2023 12:43:41 +0530 Subject: [PATCH 07/67] Wait for transfer tx receipts when configuring Optimism (#323) --- .../cerc-optimism-contracts/hardhat-tasks/send-balance.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/data/container-build/cerc-optimism-contracts/hardhat-tasks/send-balance.ts b/app/data/container-build/cerc-optimism-contracts/hardhat-tasks/send-balance.ts index dd7065bc..99bf4f74 100644 --- a/app/data/container-build/cerc-optimism-contracts/hardhat-tasks/send-balance.ts +++ b/app/data/container-build/cerc-optimism-contracts/hardhat-tasks/send-balance.ts @@ -16,7 +16,11 @@ task('send-balance', 'Sends Ether to a specified Ethereum account') to, value: ethers.utils.parseEther(amount), }) + const txReceipt = await tx.wait() console.log(`Balance sent to: ${to}, from: ${wallet.address}`) + console.log( + `Block: { number: ${txReceipt.blockNumber}, hash: ${txReceipt.blockHash} }` + ) console.log(`Transaction hash: ${tx.hash}`) }) From e72ea19c5cb93dfad26463e02ff8dbe7d2e2a74c Mon Sep 17 00:00:00 2001 From: zramsay Date: Thu, 13 Apr 2023 05:27:04 -0400 Subject: [PATCH 08/67] expose ports --- app/data/compose/docker-compose-kubo.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/data/compose/docker-compose-kubo.yml b/app/data/compose/docker-compose-kubo.yml index 11c1d2ee..f5f8b06e 100644 --- a/app/data/compose/docker-compose-kubo.yml +++ b/app/data/compose/docker-compose-kubo.yml @@ -8,6 +8,6 @@ services: - ./ipfs/import:/import - ./ipfs/data:/data/ipfs ports: - - "8080" - - "4001" - - "5001" + - "0.0.0.0:8080:8080" + - "0.0.0.0:4001:4001" + - "0.0.0.0:5001:5001" From cfa32a3515ee2d2a274753c695f4251961f545ee Mon Sep 17 00:00:00 2001 From: zramsay Date: Thu, 13 Apr 2023 06:55:47 -0400 Subject: [PATCH 09/67] update kubo stack README to enable CORS for running in the cloud --- app/data/stacks/kubo/README.md | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/app/data/stacks/kubo/README.md b/app/data/stacks/kubo/README.md index a7c3ae98..233874c1 100644 --- a/app/data/stacks/kubo/README.md +++ b/app/data/stacks/kubo/README.md @@ -1,7 +1,38 @@ # Kubo (IPFS) -The Kubo stack is currently uses the provided docker image, therefore a single command will do: +The Kubo stack currently uses the native IPFS docker image, therefore a single command will do: ``` laconic-so --stack kubo deploy up ``` + +If running locally, visit: [localhost:5001/webui](localhost:5001/webui) and explore the functionality of the WebUI. + +If running in the cloud, visit `IP:5001/webui` and you'll likely see this error: "Could not connect to the IPFS API". To fix it: + +1. Get the container name: + +``` +docker ps +``` + +``` +4dc93dea88df ipfs/kubo:master-2023-02-20-714a968 "/sbin/tini -- /usr/…" 51 minutes ago Up 51 minutes (healthy) 0.0.0.0:4001->4001/tcp, 0.0.0.0:5001->5001/tcp, 4001/udp, 0.0.0.0:8080->8080/tcp, 8081/tcp laconic-dbbf5498fd7d322930b9484121a6a5f4-ipfs-1 +``` + +2. Go into the container (replace with your container name): + +``` +docker exec -it laconic-dbbf5498fd7d322930b9484121a6a5f4-ipfs-1 sh +``` + +3. Enable CORS as described in point 2 of the error message. Copy/paste/run each line in sequence, then run `exit` to exit the container. + +4. Restart the container: + +``` +laconic-so --stack kubo deploy down +laconic-so --stack kubo deploy up +``` + +5. Refresh the `IP:5001/webui` URL in your browser, you should now be connected to IPFS. From bafdfe6d2a6550595c96fa66533f59edb8314130 Mon Sep 17 00:00:00 2001 From: zramsay Date: Thu, 13 Apr 2023 07:05:03 -0400 Subject: [PATCH 10/67] lil fixes --- app/data/stacks/kubo/README.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/app/data/stacks/kubo/README.md b/app/data/stacks/kubo/README.md index 233874c1..e9b12321 100644 --- a/app/data/stacks/kubo/README.md +++ b/app/data/stacks/kubo/README.md @@ -6,19 +6,11 @@ The Kubo stack currently uses the native IPFS docker image, therefore a single c laconic-so --stack kubo deploy up ``` -If running locally, visit: [localhost:5001/webui](localhost:5001/webui) and explore the functionality of the WebUI. +If running locally, visit: http://localhost:5001/webui and explore the functionality of the WebUI. If running in the cloud, visit `IP:5001/webui` and you'll likely see this error: "Could not connect to the IPFS API". To fix it: -1. Get the container name: - -``` -docker ps -``` - -``` -4dc93dea88df ipfs/kubo:master-2023-02-20-714a968 "/sbin/tini -- /usr/…" 51 minutes ago Up 51 minutes (healthy) 0.0.0.0:4001->4001/tcp, 0.0.0.0:5001->5001/tcp, 4001/udp, 0.0.0.0:8080->8080/tcp, 8081/tcp laconic-dbbf5498fd7d322930b9484121a6a5f4-ipfs-1 -``` +1. Get the container name with `docker ps`: 2. Go into the container (replace with your container name): From 16c9607a6c7f43bf3fc63cc0124fe46285457c80 Mon Sep 17 00:00:00 2001 From: zramsay Date: Thu, 13 Apr 2023 12:31:53 -0400 Subject: [PATCH 11/67] typos --- .../cerc-builder-js/build-npm-package-local-dependencies.sh | 2 +- scripts/quick-install-ubuntu.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh b/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh index c3a9b520..5ae0e073 100755 --- a/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh +++ b/app/data/container-build/cerc-builder-js/build-npm-package-local-dependencies.sh @@ -1,7 +1,7 @@ #!/bin/bash # Usage: build-npm-package-local-dependencies.sh # Runs build-npm-package.sh after first fixing up yarn.lock to use a local -# npm registry for all packages in a spcific scope (currently @cerc-io, @lirewine and @muknsys) +# npm registry for all packages in a specific scope (currently @cerc-io, @lirewine and @muknsys) if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi diff --git a/scripts/quick-install-ubuntu.sh b/scripts/quick-install-ubuntu.sh index 3611abdf..e28c2052 100755 --- a/scripts/quick-install-ubuntu.sh +++ b/scripts/quick-install-ubuntu.sh @@ -60,7 +60,7 @@ sudo apt -y install jq # laconic-so depends on git sudo apt -y install git # curl used below -sudo apt -y install jq +sudo apt -y install curl # docker repo add depends on gnupg and updated ca-certificates sudo apt -y install ca-certificates gnupg From 1443c6c6d20f3e9f95432e87ea61109c6b0f1beb Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 14 Apr 2023 14:19:27 -0600 Subject: [PATCH 12/67] Add force rebuild option (#329) --- app/build_containers.py | 9 +++- app/build_npms.py | 6 ++- app/data/container-build/build-base.sh | 13 ++++++ .../cerc-act-runner-task-executor/build.sh | 3 +- .../container-build/cerc-act-runner/build.sh | 4 +- .../cerc-builder-js/build-npm-package.sh | 15 +++++-- .../container-build/cerc-eth-probe/build.sh | 3 +- .../cerc-eth-statediff-fill-service/build.sh | 3 +- .../cerc-eth-statediff-service/build.sh | 3 +- .../cerc-fixturenet-eth-geth/build.sh | 4 +- .../cerc-fixturenet-eth-lighthouse/build.sh | 4 +- .../container-build/cerc-foundry/build.sh | 3 +- .../cerc-go-ethereum-foundry/build.sh | 4 +- .../container-build/cerc-go-ethereum/build.sh | 3 +- .../cerc-ipld-eth-beacon-db/build.sh | 3 +- .../cerc-ipld-eth-beacon-indexer/build.sh | 3 +- .../container-build/cerc-ipld-eth-db/build.sh | 3 +- .../cerc-ipld-eth-server/build.sh | 3 +- .../container-build/cerc-keycloak/build.sh | 4 +- .../cerc-laconic-console-host/build.sh | 4 +- .../cerc-laconic-registry-cli/build.sh | 4 +- .../container-build/cerc-laconicd/build.sh | 5 ++- .../container-build/cerc-lighthouse/build.sh | 4 +- .../container-build/cerc-mobymask-ui/build.sh | 4 +- .../container-build/cerc-mobymask/build.sh | 4 +- .../cerc-optimism-contracts/build.sh | 4 +- .../cerc-optimism-l2geth/build.sh | 3 +- .../cerc-optimism-op-batcher/build.sh | 3 +- .../cerc-optimism-op-node/build.sh | 3 +- .../container-build/cerc-react-peer/build.sh | 4 +- .../cerc-test-container/build.sh | 3 +- .../cerc-test-contract/build.sh | 3 +- .../container-build/cerc-tx-spammer/build.sh | 3 +- .../cerc-uniswap-v3-info/build.sh | 4 +- .../cerc-watcher-erc20/build.sh | 4 +- .../cerc-watcher-erc721/build.sh | 4 +- .../cerc-watcher-mobymask-v2/build.sh | 4 +- .../cerc-watcher-mobymask/build.sh | 4 +- .../cerc-watcher-uniswap-v3/build.sh | 4 +- app/data/container-build/default-build.sh | 9 ++-- docs/cli.md | 45 +++++++++++++++++++ 41 files changed, 176 insertions(+), 46 deletions(-) create mode 100755 app/data/container-build/build-base.sh diff --git a/app/build_containers.py b/app/build_containers.py index 5b85f5bf..3a47a6da 100644 --- a/app/build_containers.py +++ b/app/build_containers.py @@ -36,13 +36,16 @@ from .util import include_exclude_check, get_parsed_stack_config @click.command() @click.option('--include', help="only build these containers") @click.option('--exclude', help="don\'t build these containers") +@click.option("--force-rebuild", is_flag=True, default=False, help="Override dependency checking -- always rebuild") +@click.option("--extra-build-args", help="Supply extra arguments to build") @click.pass_context -def command(ctx, include, exclude): +def command(ctx, include, exclude, force_rebuild, extra_build_args): '''build the set of containers required for a complete stack''' quiet = ctx.obj.quiet verbose = ctx.obj.verbose dry_run = ctx.obj.dry_run + debug = ctx.obj.debug local_stack = ctx.obj.local_stack stack = ctx.obj.stack continue_on_error = ctx.obj.continue_on_error @@ -84,10 +87,14 @@ def command(ctx, include, exclude): "CERC_NPM_URL": "http://gitea.local:3000/api/packages/cerc-io/npm/", "CERC_NPM_AUTH_TOKEN": config("CERC_NPM_AUTH_TOKEN", default=""), "CERC_REPO_BASE_DIR": dev_root_path, + "CERC_CONTAINER_BASE_DIR": container_build_dir, "CERC_HOST_UID": f"{os.getuid()}", "CERC_HOST_GID": f"{os.getgid()}", "DOCKER_BUILDKIT": "0" } + container_build_env.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {}) + container_build_env.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {}) + container_build_env.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {}) def process_container(container): if not quiet: diff --git a/app/build_npms.py b/app/build_npms.py index 3750c4bd..d56b2774 100644 --- a/app/build_npms.py +++ b/app/build_npms.py @@ -33,8 +33,10 @@ builder_js_image_name = "cerc/builder-js:local" @click.command() @click.option('--include', help="only build these packages") @click.option('--exclude', help="don\'t build these packages") +@click.option("--force-rebuild", is_flag=True, default=False, help="Override existing target package version check -- force rebuild") +@click.option("--extra-build-args", help="Supply extra arguments to build") @click.pass_context -def command(ctx, include, exclude): +def command(ctx, include, exclude, force_rebuild, extra_build_args): '''build the set of npm packages required for a complete stack''' quiet = ctx.obj.quiet @@ -123,6 +125,8 @@ def command(ctx, include, exclude): "LACONIC_HOSTED_CONFIG_FILE": "config-hosted.yml" # Convention used by our web app packages } envs.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {}) + envs.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {}) + envs.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {}) try: docker.run(builder_js_image_name, remove=True, diff --git a/app/data/container-build/build-base.sh b/app/data/container-build/build-base.sh new file mode 100755 index 00000000..61705b79 --- /dev/null +++ b/app/data/container-build/build-base.sh @@ -0,0 +1,13 @@ +# source'ed into container build scripts to do generic command setup +if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then + set -x + echo "Build environment variables:" + env +fi +build_command_args="" +if [[ ${CERC_FORCE_REBUILD} == "true" ]]; then + build_command_args="${build_command_args} --no-cache" +fi +if [[ -n "$CERC_CONTAINER_EXTRA_BUILD_ARGS" ]]; then + build_command_args="${build_command_args} ${CERC_CONTAINER_EXTRA_BUILD_ARGS}" +fi diff --git a/app/data/container-build/cerc-act-runner-task-executor/build.sh b/app/data/container-build/cerc-act-runner-task-executor/build.sh index 2bfb3bf9..53bfd23b 100755 --- a/app/data/container-build/cerc-act-runner-task-executor/build.sh +++ b/app/data/container-build/cerc-act-runner-task-executor/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build a local version of the task executor for act-runner -docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/hosting/gitea/Dockerfile.task-executor ${CERC_REPO_BASE_DIR}/hosting +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/hosting/gitea/Dockerfile.task-executor ${build_command_args} ${CERC_REPO_BASE_DIR}/hosting diff --git a/app/data/container-build/cerc-act-runner/build.sh b/app/data/container-build/cerc-act-runner/build.sh index 2fdb3f2e..89a6e74f 100755 --- a/app/data/container-build/cerc-act-runner/build.sh +++ b/app/data/container-build/cerc-act-runner/build.sh @@ -1,3 +1,5 @@ #!/usr/bin/env bash +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh # Build a local version of the act-runner image -docker build -t cerc/act-runner:local -f ${CERC_REPO_BASE_DIR}/act_runner/Dockerfile ${CERC_REPO_BASE_DIR}/act_runner +# TODO: enhance the default build code path to cope with this container (repo has an _ which needs to be converted to - in the image tag) +docker build -t cerc/act-runner:local -f ${CERC_REPO_BASE_DIR}/act_runner/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/act_runner diff --git a/app/data/container-build/cerc-builder-js/build-npm-package.sh b/app/data/container-build/cerc-builder-js/build-npm-package.sh index 668e0bec..db27955c 100755 --- a/app/data/container-build/cerc-builder-js/build-npm-package.sh +++ b/app/data/container-build/cerc-builder-js/build-npm-package.sh @@ -25,12 +25,21 @@ local_npm_registry_url=$1 npm config set @cerc-io:registry ${local_npm_registry_url} npm config set @lirewine:registry ${local_npm_registry_url} npm config set @muknsys:registry ${local_npm_registry_url} -npm config set -- ${local_npm_registry_url}:_authToken ${CERC_NPM_AUTH_TOKEN} +# Workaround bug in npm unpublish where it needs the url to be of the form // and not http:// +local_npm_registry_url_fixed=$( echo ${local_npm_registry_url} | sed -e 's/^http[s]\{0,1\}://') +npm config set -- ${local_npm_registry_url_fixed}:_authToken ${CERC_NPM_AUTH_TOKEN} # First check if the version of this package we're trying to build already exists in the registry package_exists=$( yarn info --json ${package_name}@${package_publish_version} 2>/dev/null | jq -r .data.dist.tarball ) if [[ ! -z "$package_exists" && "$package_exists" != "null" ]]; then - echo "${package_publish_version} of ${package_name} already exists in the registry, skipping build" - exit 0 + echo "${package_publish_version} of ${package_name} already exists in the registry" + if [[ ${CERC_FORCE_REBUILD} == "true" ]]; then + # Attempt to unpublish the existing package + echo "NOTE: unpublishing existing package version since force rebuild is enabled" + npm unpublish --force ${package_name}@${package_publish_version} + else + echo "skipping build since target version already exists" + exit 0 + fi fi echo "Build and publish ${package_name} version ${package_publish_version}" yarn install diff --git a/app/data/container-build/cerc-eth-probe/build.sh b/app/data/container-build/cerc-eth-probe/build.sh index 4f211307..c90e0627 100755 --- a/app/data/container-build/cerc-eth-probe/build.sh +++ b/app/data/container-build/cerc-eth-probe/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/eth-probe -docker build -t cerc/eth-probe:local ${CERC_REPO_BASE_DIR}/eth-probe +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/eth-probe:local ${build_command_args} ${CERC_REPO_BASE_DIR}/eth-probe diff --git a/app/data/container-build/cerc-eth-statediff-fill-service/build.sh b/app/data/container-build/cerc-eth-statediff-fill-service/build.sh index 2a73352f..03896052 100755 --- a/app/data/container-build/cerc-eth-statediff-fill-service/build.sh +++ b/app/data/container-build/cerc-eth-statediff-fill-service/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/eth-statediff-fill-service -docker build -t cerc/eth-statediff-fill-service:local ${CERC_REPO_BASE_DIR}/eth-statediff-fill-service +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/eth-statediff-fill-service:local ${build_command_args} ${CERC_REPO_BASE_DIR}/eth-statediff-fill-service diff --git a/app/data/container-build/cerc-eth-statediff-service/build.sh b/app/data/container-build/cerc-eth-statediff-service/build.sh index 6091e8ec..07c2d2ef 100755 --- a/app/data/container-build/cerc-eth-statediff-service/build.sh +++ b/app/data/container-build/cerc-eth-statediff-service/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/eth-statediff-service -docker build -t cerc/eth-statediff-service:local ${CERC_REPO_BASE_DIR}/eth-statediff-service +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/eth-statediff-service:local ${build_command_args} ${CERC_REPO_BASE_DIR}/eth-statediff-service diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/build.sh b/app/data/container-build/cerc-fixturenet-eth-geth/build.sh index b06044c7..a00a3f17 100755 --- a/app/data/container-build/cerc-fixturenet-eth-geth/build.sh +++ b/app/data/container-build/cerc-fixturenet-eth-geth/build.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash # Build cerc/fixturenet-eth-geth +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/fixturenet-eth-geth:local -f ${SCRIPT_DIR}/Dockerfile $SCRIPT_DIR +docker build -t cerc/fixturenet-eth-geth:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} $SCRIPT_DIR diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/build.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/build.sh index bc48fde0..e7e06039 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/build.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/build.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash # Build cerc/fixturenet-eth-lighthouse +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/fixturenet-eth-lighthouse:local -f ${SCRIPT_DIR}/Dockerfile $SCRIPT_DIR +docker build -t cerc/fixturenet-eth-lighthouse:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} $SCRIPT_DIR diff --git a/app/data/container-build/cerc-foundry/build.sh b/app/data/container-build/cerc-foundry/build.sh index c765f03d..f80276eb 100755 --- a/app/data/container-build/cerc-foundry/build.sh +++ b/app/data/container-build/cerc-foundry/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build a local version of the foundry-rs/foundry image -docker build -t cerc/foundry:local -f ${CERC_REPO_BASE_DIR}/foundry/Dockerfile-debian ${CERC_REPO_BASE_DIR}/foundry +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/foundry:local -f ${CERC_REPO_BASE_DIR}/foundry/Dockerfile-debian ${build_command_args} ${CERC_REPO_BASE_DIR}/foundry diff --git a/app/data/container-build/cerc-go-ethereum-foundry/build.sh b/app/data/container-build/cerc-go-ethereum-foundry/build.sh index d4fd2deb..41781112 100755 --- a/app/data/container-build/cerc-go-ethereum-foundry/build.sh +++ b/app/data/container-build/cerc-go-ethereum-foundry/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/go-ethereum-foundry +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/go-ethereum-foundry:local --build-arg GENESIS_FILE_PATH=genesis-automine.json ${SCRIPT_DIR} +docker build -t cerc/go-ethereum-foundry:local --build-arg GENESIS_FILE_PATH=genesis-automine.json ${build_command_args} ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-go-ethereum/build.sh b/app/data/container-build/cerc-go-ethereum/build.sh index 0ab91354..171d0079 100755 --- a/app/data/container-build/cerc-go-ethereum/build.sh +++ b/app/data/container-build/cerc-go-ethereum/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/go-ethereum -docker build -t cerc/go-ethereum:local ${CERC_REPO_BASE_DIR}/go-ethereum +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/go-ethereum:local ${build_command_args} ${CERC_REPO_BASE_DIR}/go-ethereum diff --git a/app/data/container-build/cerc-ipld-eth-beacon-db/build.sh b/app/data/container-build/cerc-ipld-eth-beacon-db/build.sh index c3c620d2..47875ec3 100755 --- a/app/data/container-build/cerc-ipld-eth-beacon-db/build.sh +++ b/app/data/container-build/cerc-ipld-eth-beacon-db/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/ipld-eth-beacon-db -docker build -t cerc/ipld-eth-beacon-db:local ${CERC_REPO_BASE_DIR}/ipld-eth-beacon-db +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/ipld-eth-beacon-db:local ${build_command_args} ${build_command_args} ${CERC_REPO_BASE_DIR}/ipld-eth-beacon-db diff --git a/app/data/container-build/cerc-ipld-eth-beacon-indexer/build.sh b/app/data/container-build/cerc-ipld-eth-beacon-indexer/build.sh index 78a4cd00..d304bf3f 100755 --- a/app/data/container-build/cerc-ipld-eth-beacon-indexer/build.sh +++ b/app/data/container-build/cerc-ipld-eth-beacon-indexer/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/ipld-eth-beacon-indexer -docker build -t cerc/ipld-eth-beacon-indexer:local ${CERC_REPO_BASE_DIR}/ipld-eth-beacon-indexer +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/ipld-eth-beacon-indexer:local ${build_command_args} ${CERC_REPO_BASE_DIR}/ipld-eth-beacon-indexer diff --git a/app/data/container-build/cerc-ipld-eth-db/build.sh b/app/data/container-build/cerc-ipld-eth-db/build.sh index ec5a905e..d454f3f8 100755 --- a/app/data/container-build/cerc-ipld-eth-db/build.sh +++ b/app/data/container-build/cerc-ipld-eth-db/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/ipld-eth-db -docker build -t cerc/ipld-eth-db:local ${CERC_REPO_BASE_DIR}/ipld-eth-db +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/ipld-eth-db:local ${build_command_args} ${CERC_REPO_BASE_DIR}/ipld-eth-db diff --git a/app/data/container-build/cerc-ipld-eth-server/build.sh b/app/data/container-build/cerc-ipld-eth-server/build.sh index 7e714294..04c3907e 100755 --- a/app/data/container-build/cerc-ipld-eth-server/build.sh +++ b/app/data/container-build/cerc-ipld-eth-server/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/ipld-eth-server -docker build -t cerc/ipld-eth-server:local ${CERC_REPO_BASE_DIR}/ipld-eth-server +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/ipld-eth-server:local ${build_command_args} ${CERC_REPO_BASE_DIR}/ipld-eth-server diff --git a/app/data/container-build/cerc-keycloak/build.sh b/app/data/container-build/cerc-keycloak/build.sh index 0e147a9d..be8a7d11 100755 --- a/app/data/container-build/cerc-keycloak/build.sh +++ b/app/data/container-build/cerc-keycloak/build.sh @@ -2,7 +2,9 @@ # #Build cerc/keycloack +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/keycloak:local ${SCRIPT_DIR} +docker build -t cerc/keycloak:local ${build_command_args} ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-laconic-console-host/build.sh b/app/data/container-build/cerc-laconic-console-host/build.sh index cc84d249..a321b195 100755 --- a/app/data/container-build/cerc-laconic-console-host/build.sh +++ b/app/data/container-build/cerc-laconic-console-host/build.sh @@ -1,9 +1,11 @@ #!/usr/bin/env bash # Build cerc/laconic-registry-cli +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/laconic-console-host:local -f ${SCRIPT_DIR}/Dockerfile \ +docker build -t cerc/laconic-console-host:local ${build_command_args} -f ${SCRIPT_DIR}/Dockerfile \ --add-host gitea.local:host-gateway \ --build-arg CERC_NPM_AUTH_TOKEN --build-arg CERC_NPM_URL ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-laconic-registry-cli/build.sh b/app/data/container-build/cerc-laconic-registry-cli/build.sh index ea157dac..a6264f4b 100755 --- a/app/data/container-build/cerc-laconic-registry-cli/build.sh +++ b/app/data/container-build/cerc-laconic-registry-cli/build.sh @@ -1,9 +1,11 @@ #!/usr/bin/env bash # Build cerc/laconic-registry-cli +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/laconic-registry-cli:local -f ${SCRIPT_DIR}/Dockerfile \ +docker build -t cerc/laconic-registry-cli:local ${build_command_args} -f ${SCRIPT_DIR}/Dockerfile \ --add-host gitea.local:host-gateway \ --build-arg CERC_NPM_AUTH_TOKEN --build-arg CERC_NPM_URL ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-laconicd/build.sh b/app/data/container-build/cerc-laconicd/build.sh index f5685097..3d897446 100755 --- a/app/data/container-build/cerc-laconicd/build.sh +++ b/app/data/container-build/cerc-laconicd/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash -# Build cerc/chiba-clonk -docker build -t cerc/laconicd:local ${CERC_REPO_BASE_DIR}/laconicd \ No newline at end of file +# Build cerc/laconicd +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/laconicd:local ${build_command_args} ${CERC_REPO_BASE_DIR}/laconicd \ No newline at end of file diff --git a/app/data/container-build/cerc-lighthouse/build.sh b/app/data/container-build/cerc-lighthouse/build.sh index 7babdbd1..2e9cfe3c 100755 --- a/app/data/container-build/cerc-lighthouse/build.sh +++ b/app/data/container-build/cerc-lighthouse/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/lighthouse +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/lighthouse:local ${SCRIPT_DIR} +docker build -t cerc/lighthouse:local ${build_command_args} ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-mobymask-ui/build.sh b/app/data/container-build/cerc-mobymask-ui/build.sh index cabd63ff..52687093 100755 --- a/app/data/container-build/cerc-mobymask-ui/build.sh +++ b/app/data/container-build/cerc-mobymask-ui/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/mobymask-ui +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/mobymask-ui:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/mobymask-ui +docker build -t cerc/mobymask-ui:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/mobymask-ui diff --git a/app/data/container-build/cerc-mobymask/build.sh b/app/data/container-build/cerc-mobymask/build.sh index 7628a228..f156846a 100755 --- a/app/data/container-build/cerc-mobymask/build.sh +++ b/app/data/container-build/cerc-mobymask/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/mobymask +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/mobymask:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/MobyMask +docker build -t cerc/mobymask:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/MobyMask diff --git a/app/data/container-build/cerc-optimism-contracts/build.sh b/app/data/container-build/cerc-optimism-contracts/build.sh index 8b8e0eaa..b1ddd819 100755 --- a/app/data/container-build/cerc-optimism-contracts/build.sh +++ b/app/data/container-build/cerc-optimism-contracts/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/optimism-contracts +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/optimism-contracts:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/optimism +docker build -t cerc/optimism-contracts:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-build/cerc-optimism-l2geth/build.sh b/app/data/container-build/cerc-optimism-l2geth/build.sh index 3ffada73..5e125703 100755 --- a/app/data/container-build/cerc-optimism-l2geth/build.sh +++ b/app/data/container-build/cerc-optimism-l2geth/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/optimism-l2geth -docker build -t cerc/optimism-l2geth:local ${CERC_REPO_BASE_DIR}/op-geth +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/optimism-l2geth:local ${build_command_args} ${CERC_REPO_BASE_DIR}/op-geth diff --git a/app/data/container-build/cerc-optimism-op-batcher/build.sh b/app/data/container-build/cerc-optimism-op-batcher/build.sh index 5bc3a238..08b209d0 100755 --- a/app/data/container-build/cerc-optimism-op-batcher/build.sh +++ b/app/data/container-build/cerc-optimism-op-batcher/build.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash # Build cerc/optimism-op-batcher # TODO: use upstream Dockerfile once its buildx-specific content has been removed +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/optimism-op-batcher:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/optimism +docker build -t cerc/optimism-op-batcher:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-build/cerc-optimism-op-node/build.sh b/app/data/container-build/cerc-optimism-op-node/build.sh index 0ec7e656..9c33529a 100755 --- a/app/data/container-build/cerc-optimism-op-node/build.sh +++ b/app/data/container-build/cerc-optimism-op-node/build.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash # Build cerc/optimism-op-node # TODO: use upstream Dockerfile once its buildx-specific content has been removed +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/optimism-op-node:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/optimism +docker build -t cerc/optimism-op-node:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-build/cerc-react-peer/build.sh b/app/data/container-build/cerc-react-peer/build.sh index a3d328de..48edc4b3 100755 --- a/app/data/container-build/cerc-react-peer/build.sh +++ b/app/data/container-build/cerc-react-peer/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/react-peer +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/react-peer:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/react-peer +docker build -t cerc/react-peer:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/react-peer diff --git a/app/data/container-build/cerc-test-container/build.sh b/app/data/container-build/cerc-test-container/build.sh index 1595645c..ee56576a 100755 --- a/app/data/container-build/cerc-test-container/build.sh +++ b/app/data/container-build/cerc-test-container/build.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash # Build cerc/test-container +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/test-container:local -f ${SCRIPT_DIR}/Dockerfile $SCRIPT_DIR \ No newline at end of file +docker build -t cerc/test-container:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} $SCRIPT_DIR \ No newline at end of file diff --git a/app/data/container-build/cerc-test-contract/build.sh b/app/data/container-build/cerc-test-contract/build.sh index 1b3c925e..9df768fb 100755 --- a/app/data/container-build/cerc-test-contract/build.sh +++ b/app/data/container-build/cerc-test-contract/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/test-contract -docker build -t cerc/test-contract:local --build-arg ETH_ADDR=http://go-ethereum:8545 ${CERC_REPO_BASE_DIR}/ipld-eth-db-validator/test/contract +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/test-contract:local --build-arg ETH_ADDR=http://go-ethereum:8545 ${build_command_args} ${CERC_REPO_BASE_DIR}/ipld-eth-db-validator/test/contract diff --git a/app/data/container-build/cerc-tx-spammer/build.sh b/app/data/container-build/cerc-tx-spammer/build.sh index b6752dd7..ee4494e0 100755 --- a/app/data/container-build/cerc-tx-spammer/build.sh +++ b/app/data/container-build/cerc-tx-spammer/build.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash # Build cerc/tx-spammer -docker build -t cerc/tx-spammer:local ${CERC_REPO_BASE_DIR}/tx-spammer +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh +docker build -t cerc/tx-spammer:local ${build_command_args} ${CERC_REPO_BASE_DIR}/tx-spammer diff --git a/app/data/container-build/cerc-uniswap-v3-info/build.sh b/app/data/container-build/cerc-uniswap-v3-info/build.sh index bda1bb5e..efbc1c08 100755 --- a/app/data/container-build/cerc-uniswap-v3-info/build.sh +++ b/app/data/container-build/cerc-uniswap-v3-info/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/uniswap-v3-info +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/uniswap-v3-info:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/uniswap-v3-info +docker build -t cerc/uniswap-v3-info:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/uniswap-v3-info diff --git a/app/data/container-build/cerc-watcher-erc20/build.sh b/app/data/container-build/cerc-watcher-erc20/build.sh index b800b73d..67ac0d24 100755 --- a/app/data/container-build/cerc-watcher-erc20/build.sh +++ b/app/data/container-build/cerc-watcher-erc20/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/watcher-erc20 +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/watcher-erc20:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/watcher-ts +docker build -t cerc/watcher-erc20:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/watcher-ts diff --git a/app/data/container-build/cerc-watcher-erc721/build.sh b/app/data/container-build/cerc-watcher-erc721/build.sh index b9c9c0b8..f9c630ac 100755 --- a/app/data/container-build/cerc-watcher-erc721/build.sh +++ b/app/data/container-build/cerc-watcher-erc721/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/watcher-erc721 +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/watcher-erc721:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/watcher-ts +docker build -t cerc/watcher-erc721:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/watcher-ts diff --git a/app/data/container-build/cerc-watcher-mobymask-v2/build.sh b/app/data/container-build/cerc-watcher-mobymask-v2/build.sh index 19e82818..f8b59224 100755 --- a/app/data/container-build/cerc-watcher-mobymask-v2/build.sh +++ b/app/data/container-build/cerc-watcher-mobymask-v2/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/watcher-mobymask-v2 +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/watcher-mobymask-v2:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/watcher-ts +docker build -t cerc/watcher-mobymask-v2:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/watcher-ts diff --git a/app/data/container-build/cerc-watcher-mobymask/build.sh b/app/data/container-build/cerc-watcher-mobymask/build.sh index f965c770..219b864f 100755 --- a/app/data/container-build/cerc-watcher-mobymask/build.sh +++ b/app/data/container-build/cerc-watcher-mobymask/build.sh @@ -1,9 +1,11 @@ #!/usr/bin/env bash # Build cerc/watcher-mobymask +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/watcher-mobymask:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/watcher-ts +docker build -t cerc/watcher-mobymask:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/watcher-ts # TODO: add a mechanism to pass two repos into a container rather than the parent directory diff --git a/app/data/container-build/cerc-watcher-uniswap-v3/build.sh b/app/data/container-build/cerc-watcher-uniswap-v3/build.sh index 432feb02..5dc63d50 100755 --- a/app/data/container-build/cerc-watcher-uniswap-v3/build.sh +++ b/app/data/container-build/cerc-watcher-uniswap-v3/build.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash # Build cerc/watcher-uniswap-v3 +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/watcher-uniswap-v3:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/uniswap-watcher-ts +docker build -t cerc/watcher-uniswap-v3:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/uniswap-watcher-ts diff --git a/app/data/container-build/default-build.sh b/app/data/container-build/default-build.sh index c52dd043..6757812b 100755 --- a/app/data/container-build/default-build.sh +++ b/app/data/container-build/default-build.sh @@ -1,14 +1,13 @@ #!/usr/bin/env bash # Usage: default-build.sh [] # if is not supplied, the context is the directory where the Dockerfile lives -if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then - set -x -fi + +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + if [[ $# -ne 2 ]]; then echo "Illegal number of parameters" >&2 exit 1 fi image_tag=$1 build_dir=$2 -echo "Building ${image_tag} in ${build_dir}" -docker build -t ${image_tag} --build-arg CERC_HOST_UID=${CERC_HOST_UID} --build-arg CERC_HOST_GID=${CERC_HOST_GID} ${build_dir} +docker build -t ${image_tag} ${build_command_args} --build-arg CERC_HOST_UID=${CERC_HOST_UID} --build-arg CERC_HOST_GID=${CERC_HOST_GID} ${build_dir} diff --git a/docs/cli.md b/docs/cli.md index 70905d87..f7c6205f 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -1,3 +1,48 @@ # laconic-so Sub-commands and flags + +## build-containers + +Build a single container: +``` +$ laconic-so build-containers --include +``` +e.g. +``` +$ laconic-so build-containers --include cerc/go-ethereum +``` +Build the containers for a stack: +``` +$ laconic-so --stack build-containers +``` +e.g. +``` +$ laconic-so --stack fixturenet-eth build-containers +``` +Force full rebuild of container images: +``` +$ laconic-so build-containers --include --force-rebuild +``` +## build-npms + +Build a single package: +``` +$ laconic-so build-npms --include +``` +e.g. +``` +$ laconic-so build-npms --include laconic-sdk +``` +Build the packages for a stack: +``` +$ laconic-so --stack build-npms +``` +e.g. +``` +$ laconic-so --stack fixturenet-laconicd build-npms +``` +Force full rebuild of packages: +``` +$ laconic-so build-npms --include --force-rebuild +``` From d464c1c5474ce3f68ffabe9a60f5e6ba49c5bccc Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 14 Apr 2023 17:51:22 -0600 Subject: [PATCH 13/67] Add doc for setup-repositories --- docs/cli.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/cli.md b/docs/cli.md index f7c6205f..287d6c68 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -2,6 +2,25 @@ Sub-commands and flags +## setup-repositories + +Clone a single repository: +``` +$ laconic-so setup-repositories --include cerc-io/go-ethereum +``` +Clone the repositories for a stack: +``` +$ laconic-so --stack fixturenet-eth setup-repositories +``` +Pull latest commits from origin: +``` +$ laconic-so --stack fixturenet-eth setup-repositories --pull +``` +Use SSH rather than https: +``` +$ laconic-so --stack fixturenet-eth setup-repositories --git-ssh +``` + ## build-containers Build a single container: From 2eb93d09331b256c3a13f0b7f7fc9a9387dcddcf Mon Sep 17 00:00:00 2001 From: David Boreham Date: Fri, 14 Apr 2023 21:09:22 -0600 Subject: [PATCH 14/67] quiet npm version warning (#331) --- app/data/container-build/cerc-builder-js/Dockerfile | 3 +++ app/data/container-build/cerc-laconic-console-host/Dockerfile | 2 ++ app/data/container-build/cerc-laconic-registry-cli/Dockerfile | 2 ++ 3 files changed, 7 insertions(+) diff --git a/app/data/container-build/cerc-builder-js/Dockerfile b/app/data/container-build/cerc-builder-js/Dockerfile index d8475d2b..9e02327e 100644 --- a/app/data/container-build/cerc-builder-js/Dockerfile +++ b/app/data/container-build/cerc-builder-js/Dockerfile @@ -29,6 +29,9 @@ RUN \ usermod -u ${CERC_HOST_UID} -g ${CERC_HOST_GID} ${USERNAME} && chown ${CERC_HOST_UID}:${CERC_HOST_GID} /home/${USERNAME}; \ fi +# Prevents npm from printing version warnings +ENV NPM_CONFIG_UPDATE_NOTIFIER=false + RUN \ # Configure global npm install location, use group to adapt to UID/GID changes if ! cat /etc/group | grep -e "^npm:" > /dev/null 2>&1; then groupadd -r npm; fi \ diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index 66eec1f5..51a86560 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -12,6 +12,8 @@ ARG CERC_NPM_AUTH_TOKEN # Add NPM global to PATH. ENV PATH=${NPM_GLOBAL}/bin:${PATH} +# Prevents npm from printing version warnings +ENV NPM_CONFIG_UPDATE_NOTIFIER=false RUN \ # Configure global npm install location, use group to adapt to UID/GID changes diff --git a/app/data/container-build/cerc-laconic-registry-cli/Dockerfile b/app/data/container-build/cerc-laconic-registry-cli/Dockerfile index 213ef8f4..b7e87475 100644 --- a/app/data/container-build/cerc-laconic-registry-cli/Dockerfile +++ b/app/data/container-build/cerc-laconic-registry-cli/Dockerfile @@ -12,6 +12,8 @@ ARG CERC_NPM_AUTH_TOKEN # Add NPM global to PATH. ENV PATH=${NPM_GLOBAL}/bin:${PATH} +# Prevents npm from printing version warnings +ENV NPM_CONFIG_UPDATE_NOTIFIER=false RUN \ # Configure global npm install location, use group to adapt to UID/GID changes From 0068a994f63c7a420ab223dd67b969ebaa604200 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Sun, 16 Apr 2023 20:14:15 -0600 Subject: [PATCH 15/67] Support for complete laconic stack with console and test registration record (#335) * Configure cli with necessary gas and fees args and address * Update version --- .../docker-compose-fixturenet-laconicd.yml | 1 + .../fixturenet-laconicd/export-myaddress.sh | 2 ++ .../registry-cli-config-template.yml | 2 ++ .../cerc-laconic-registry-cli/Dockerfile | 2 ++ .../create-demo-records.sh | 29 +++++++++++++++++++ .../import-address.sh | 2 ++ .../fixturenet-laconic-loaded/README.md | 15 ++++++++++ .../fixturenet-laconic-loaded/stack.yml | 4 ++- app/data/stacks/fixturenet-laconicd/stack.yml | 1 + 9 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 app/data/config/fixturenet-laconicd/export-myaddress.sh create mode 100755 app/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh create mode 100644 app/data/container-build/cerc-laconic-registry-cli/import-address.sh diff --git a/app/data/compose/docker-compose-fixturenet-laconicd.yml b/app/data/compose/docker-compose-fixturenet-laconicd.yml index 5d777b5d..9a974e90 100644 --- a/app/data/compose/docker-compose-fixturenet-laconicd.yml +++ b/app/data/compose/docker-compose-fixturenet-laconicd.yml @@ -8,6 +8,7 @@ services: # TODO: look at folding these scripts into the container - ../config/fixturenet-laconicd/create-fixturenet.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh - ../config/fixturenet-laconicd/export-mykey.sh:/docker-entrypoint-scripts.d/export-mykey.sh + - ../config/fixturenet-laconicd/export-myaddress.sh:/docker-entrypoint-scripts.d/export-myaddress.sh # TODO: determine which of the ports below is really needed ports: - "6060" diff --git a/app/data/config/fixturenet-laconicd/export-myaddress.sh b/app/data/config/fixturenet-laconicd/export-myaddress.sh new file mode 100644 index 00000000..e454c0b0 --- /dev/null +++ b/app/data/config/fixturenet-laconicd/export-myaddress.sh @@ -0,0 +1,2 @@ +#!/bin/sh +laconicd keys show mykey | grep address | cut -d ' ' -f 3 diff --git a/app/data/config/fixturenet-laconicd/registry-cli-config-template.yml b/app/data/config/fixturenet-laconicd/registry-cli-config-template.yml index 6074cc6d..16432c18 100644 --- a/app/data/config/fixturenet-laconicd/registry-cli-config-template.yml +++ b/app/data/config/fixturenet-laconicd/registry-cli-config-template.yml @@ -5,3 +5,5 @@ services: userKey: REPLACE_WITH_MYKEY bondId: chainId: laconic_9000-1 + gas: 250000 + fees: 200000aphoton diff --git a/app/data/container-build/cerc-laconic-registry-cli/Dockerfile b/app/data/container-build/cerc-laconic-registry-cli/Dockerfile index b7e87475..da7ff19a 100644 --- a/app/data/container-build/cerc-laconic-registry-cli/Dockerfile +++ b/app/data/container-build/cerc-laconic-registry-cli/Dockerfile @@ -55,7 +55,9 @@ RUN yarn global add @cerc-io/laconic-registry-cli # Add scripts RUN mkdir /scripts ENV PATH="${PATH}:/scripts" +COPY ./create-demo-records.sh /scripts COPY ./import-key.sh /scripts +COPY ./import-address.sh /scripts # Default command sleeps forever so docker doesn't kill it CMD ["sh", "-c", "while :; do sleep 600; done"] diff --git a/app/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh b/app/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh new file mode 100755 index 00000000..0d90da8d --- /dev/null +++ b/app/data/container-build/cerc-laconic-registry-cli/create-demo-records.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Create some demo/test records in the registry +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi +registry_command="laconic cns" +record_1_filename=demo-record-1.yml +cat < ${record_1_filename} +record: + type: WebsiteRegistrationRecord + url: 'https://cerc.io' + repo_registration_record_cid: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D + build_artifact_cid: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9 + tls_cert_cid: QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR + version: 1.0.23 +EOF +# Check we have funds +funds_response=$(${registry_command} account get --address $(cat my-address.txt)) +funds_balance=$(echo ${funds_response} | jq -r .[0].balance[0].quantity) +echo "Balance is: ${funds_balance}" +# Create a bond +bond_create_result=$(${registry_command} bond create --type aphoton --quantity 1000000000) +bond_id=$(echo ${bond_create_result} | jq -r .bondId) +echo "Created bond with id: ${bond_id}" +# Publish a demo record +publish_response=$(${registry_command} record publish --filename ${record_1_filename} --bond-id ${bond_id}) +published_record_id=$(echo ${publish_response} | jq -r .id) +echo "Published ${record_1_filename} with id: ${published_record_id}" diff --git a/app/data/container-build/cerc-laconic-registry-cli/import-address.sh b/app/data/container-build/cerc-laconic-registry-cli/import-address.sh new file mode 100644 index 00000000..06b5d08d --- /dev/null +++ b/app/data/container-build/cerc-laconic-registry-cli/import-address.sh @@ -0,0 +1,2 @@ +#!/bin/sh +echo ${1} > my-address.txt diff --git a/app/data/stacks/fixturenet-laconic-loaded/README.md b/app/data/stacks/fixturenet-laconic-loaded/README.md index 000596ee..a2e48efb 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/README.md +++ b/app/data/stacks/fixturenet-laconic-loaded/README.md @@ -48,3 +48,18 @@ $ laconic-so --stack fixturenet-laconicd deploy logs ``` $ laconic-so --stack fixturenet-laconicd deploy exec cli "laconic cns status" ``` +## 7. View the laconic console +Get the URL for the console web app with this command (the port number will be different for each deployment): +``` +$ echo http://localhost:$(laconic-so --stack fixturenet-laconic-loaded deploy port laconic-console 80 | cut -d ':' -f 2) +http://localhost:58364 +``` +Open that address with a browser. The console should display +## 8. Load demo data into the registry +``` +$ laconic-so --stack fixturenet-laconic-loaded deploy exec cli ./scripts/create-demo-records.sh +Balance is: 99998999999999998999600000 +Created bond with id: dd88e8d6f9567b32b28e70552aea4419c5dd3307ebae85a284d1fe38904e301a +Published demo-record-1.yml with id: bafyreierh3xnfivexlscdwubvczmddsnf46uytyfvrbdhkjzztvsz6ruly +``` +The published record should be visible in the console. \ No newline at end of file diff --git a/app/data/stacks/fixturenet-laconic-loaded/stack.yml b/app/data/stacks/fixturenet-laconic-loaded/stack.yml index 03d0a4c9..009212f0 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/stack.yml +++ b/app/data/stacks/fixturenet-laconic-loaded/stack.yml @@ -1,4 +1,4 @@ -version: "1.0" +version: "1.1" name: fixturenet-laconic-loaded description: "A full featured laconic fixturenet" repos: @@ -28,3 +28,5 @@ pods: config: cli: key: laconicd.mykey + address: laconicd.myaddress + diff --git a/app/data/stacks/fixturenet-laconicd/stack.yml b/app/data/stacks/fixturenet-laconicd/stack.yml index 86fb2144..54c5dba6 100644 --- a/app/data/stacks/fixturenet-laconicd/stack.yml +++ b/app/data/stacks/fixturenet-laconicd/stack.yml @@ -16,3 +16,4 @@ pods: config: cli: key: laconicd.mykey + address: laconicd.myaddress From dd59579b876f88e6b748c4308a782e5b1f86ee7a Mon Sep 17 00:00:00 2001 From: Zach Date: Mon, 17 Apr 2023 11:25:21 -0400 Subject: [PATCH 16/67] Update README.md --- app/data/stacks/fixturenet-laconic-loaded/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/data/stacks/fixturenet-laconic-loaded/README.md b/app/data/stacks/fixturenet-laconic-loaded/README.md index a2e48efb..2fc21594 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/README.md +++ b/app/data/stacks/fixturenet-laconic-loaded/README.md @@ -19,6 +19,7 @@ Detailed instructions can be found [here](../build-support/README.md). For the i ``` $ laconic-so --stack build-support build-containers --exclude cerc/builder-gerbil $ laconic-so --stack package-registry setup-repositories +$ laconic-so --stack package-registry build-containers $ laconic-so --stack package-registry deploy-system up ``` Then add the localhost alias `gitea.local` and set `CERC_NPM_AUTH_TOKEN` to the token printed when the package-registry stack was deployed above: @@ -62,4 +63,4 @@ Balance is: 99998999999999998999600000 Created bond with id: dd88e8d6f9567b32b28e70552aea4419c5dd3307ebae85a284d1fe38904e301a Published demo-record-1.yml with id: bafyreierh3xnfivexlscdwubvczmddsnf46uytyfvrbdhkjzztvsz6ruly ``` -The published record should be visible in the console. \ No newline at end of file +The published record should be visible in the console. From e4b57b58153e2967c1e6061efda76eab7f89d29d Mon Sep 17 00:00:00 2001 From: David Boreham Date: Mon, 17 Apr 2023 10:06:25 -0600 Subject: [PATCH 17/67] Add note on developer-mode-setup script --- docs/CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 93437364..633fc30f 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -34,7 +34,9 @@ In addition to the pre-requisites listed in the [README](/README.md), the follow $ cd stack-orchestrator ``` -3. Create and activate a venv: +3. (This and the next step can be done by running `source ./scripts/developer-mode-setup.sh`) + + Create and activate a venv: ``` $ python3 -m venv venv $ source ./venv/bin/activate From fcbea7984f3eec9e203e9c5df9b99cc44204576b Mon Sep 17 00:00:00 2001 From: David Boreham Date: Mon, 17 Apr 2023 13:11:45 -0600 Subject: [PATCH 18/67] Add github actions --- .github/workflows/publish.yml | 46 +++++++++++++++++++++++++++++++++++ .github/workflows/test.yml | 29 ++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 .github/workflows/publish.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..8dde6e41 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,46 @@ +name: Publish + +on: + push: + branches: + - main + - publish-test + +jobs: + publish: + name: "Build and publish" + runs-on: ubuntu-latest + steps: + - name: "Clone project repository" + uses: actions/checkout@v3 + - name: "Get build info" + id: build-info + run: | + build_tag=$(./scripts/create_build_tag_file.sh) + echo "build-tag=v${build_tag}" >> $GITHUB_OUTPUT + - name: "Install Python" + uses: actions/setup-python@v4 + with: + python-version: '3.8' + - name: "Print Python version" + run: python3 --version + - name: "Install shiv" + run: pip install shiv + - name: "Build local shiv package" + id: build + run: | + ./scripts/build_shiv_package.sh + result_code=$? + echo "package-file=$(ls ./package/*)" >> $GITHUB_OUTPUT + exit $result_code + - name: "Stage artifact file" + run: | + cp ${{ steps.build.outputs.package-file }} ./laconic-so + - name: "Create release" + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ steps.build-info.outputs.build-tag }} + # On the publish test branch, mark our release as a draft + # Hack using endsWith to workaround Gitea sometimes sending "publish-test" vs "refs/heads/publish-test" + draft: ${{ endsWith('publish-test', github.ref ) }} + files: ./laconic-so diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..c6284900 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,29 @@ +name: Test + +on: + pull_request: + branches: '*' + push: + branches: '*' + +jobs: + test: + name: "Run basic test suite" + runs-on: ubuntu-latest + steps: + - name: "Clone project repository" + uses: actions/checkout@v3 + - name: "Install Python" + uses: actions/setup-python@v4 + with: + python-version: '3.8' + - name: "Print Python version" + run: python3 --version + - name: "Install shiv" + run: pip install shiv + - name: "Generate build version file" + run: ./scripts/create_build_tag_file.sh + - name: "Build local shiv package" + run: ./scripts/build_shiv_package.sh + - name: "Run smoke tests" + run: ./tests/smoke-test/run-smoke-test.sh From 39a54bc62a90c9fdf5e7b53e9c9cfaba656d5d8a Mon Sep 17 00:00:00 2001 From: David Boreham Date: Mon, 17 Apr 2023 13:40:49 -0600 Subject: [PATCH 19/67] Use CERC_NPM_REGISTRY_URL everywhere (#340) --- app/build_containers.py | 2 +- .../container-build/cerc-laconic-console-host/Dockerfile | 8 ++++---- .../container-build/cerc-laconic-console-host/build.sh | 2 +- .../container-build/cerc-laconic-registry-cli/Dockerfile | 8 ++++---- .../container-build/cerc-laconic-registry-cli/build.sh | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/build_containers.py b/app/build_containers.py index 3a47a6da..ea16c3c9 100644 --- a/app/build_containers.py +++ b/app/build_containers.py @@ -84,7 +84,7 @@ def command(ctx, include, exclude, force_rebuild, extra_build_args): # TODO: make this configurable container_build_env = { - "CERC_NPM_URL": "http://gitea.local:3000/api/packages/cerc-io/npm/", + "CERC_NPM_REGISTRY_URL": config("CERC_NPM_REGISTRY_URL", default="http://gitea.local:3000/api/packages/cerc-io/npm/"), "CERC_NPM_AUTH_TOKEN": config("CERC_NPM_AUTH_TOKEN", default=""), "CERC_REPO_BASE_DIR": dev_root_path, "CERC_CONTAINER_BASE_DIR": container_build_dir, diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index 51a86560..a31aa265 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -7,7 +7,7 @@ ARG USERNAME=node ARG NPM_GLOBAL=/usr/local/share/npm-global # This container pulls npm packages from a local registry configured via these env vars -ARG CERC_NPM_URL +ARG CERC_NPM_REGISTRY_URL ARG CERC_NPM_AUTH_TOKEN # Add NPM global to PATH. @@ -49,9 +49,9 @@ COPY ./start-serving-app.sh /scripts # RUN su node -c "npm install -g " # Configure the local npm registry -RUN npm config set @cerc-io:registry ${CERC_NPM_URL} \ - && npm config set @lirewine:registry ${CERC_NPM_URL} \ - && npm config set -- ${CERC_NPM_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} +RUN npm config set @cerc-io:registry ${CERC_NPM_REGISTRY_URL} \ + && npm config set @lirewine:registry ${CERC_NPM_REGISTRY_URL} \ + && npm config set -- ${CERC_NPM_REGISTRY_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} RUN mkdir -p /config COPY ./config.yml /config diff --git a/app/data/container-build/cerc-laconic-console-host/build.sh b/app/data/container-build/cerc-laconic-console-host/build.sh index a321b195..77a38917 100755 --- a/app/data/container-build/cerc-laconic-console-host/build.sh +++ b/app/data/container-build/cerc-laconic-console-host/build.sh @@ -8,4 +8,4 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) docker build -t cerc/laconic-console-host:local ${build_command_args} -f ${SCRIPT_DIR}/Dockerfile \ --add-host gitea.local:host-gateway \ - --build-arg CERC_NPM_AUTH_TOKEN --build-arg CERC_NPM_URL ${SCRIPT_DIR} + --build-arg CERC_NPM_AUTH_TOKEN --build-arg CERC_NPM_REGISTRY_URL ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-laconic-registry-cli/Dockerfile b/app/data/container-build/cerc-laconic-registry-cli/Dockerfile index da7ff19a..7859adb4 100644 --- a/app/data/container-build/cerc-laconic-registry-cli/Dockerfile +++ b/app/data/container-build/cerc-laconic-registry-cli/Dockerfile @@ -7,7 +7,7 @@ ARG USERNAME=node ARG NPM_GLOBAL=/usr/local/share/npm-global # This container pulls npm packages from a local registry configured via these env vars -ARG CERC_NPM_URL +ARG CERC_NPM_REGISTRY_URL ARG CERC_NPM_AUTH_TOKEN # Add NPM global to PATH. @@ -42,9 +42,9 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ # RUN su node -c "npm install -g " # Configure the local npm registry -RUN npm config set @cerc-io:registry ${CERC_NPM_URL} \ - && npm config set @lirewine:registry ${CERC_NPM_URL} \ - && npm config set -- ${CERC_NPM_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} +RUN npm config set @cerc-io:registry ${CERC_NPM_REGISTRY_URL} \ + && npm config set @lirewine:registry ${CERC_NPM_REGISTRY_URL} \ + && npm config set -- ${CERC_NPM_REGISTRY_URL}:_authToken ${CERC_NPM_AUTH_TOKEN} # TODO: the image at this point could be made a base image for several different CLI images # that install different Node-based CLI commands diff --git a/app/data/container-build/cerc-laconic-registry-cli/build.sh b/app/data/container-build/cerc-laconic-registry-cli/build.sh index a6264f4b..c9379856 100755 --- a/app/data/container-build/cerc-laconic-registry-cli/build.sh +++ b/app/data/container-build/cerc-laconic-registry-cli/build.sh @@ -8,4 +8,4 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) docker build -t cerc/laconic-registry-cli:local ${build_command_args} -f ${SCRIPT_DIR}/Dockerfile \ --add-host gitea.local:host-gateway \ - --build-arg CERC_NPM_AUTH_TOKEN --build-arg CERC_NPM_URL ${SCRIPT_DIR} + --build-arg CERC_NPM_AUTH_TOKEN --build-arg CERC_NPM_REGISTRY_URL ${SCRIPT_DIR} From 99aa1fa27e068a10726d15f355d554e015579033 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Mon, 17 Apr 2023 13:53:16 -0600 Subject: [PATCH 20/67] Default token needs to be empty string (#341) --- app/build_containers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build_containers.py b/app/build_containers.py index ea16c3c9..5e8495cb 100644 --- a/app/build_containers.py +++ b/app/build_containers.py @@ -85,7 +85,7 @@ def command(ctx, include, exclude, force_rebuild, extra_build_args): # TODO: make this configurable container_build_env = { "CERC_NPM_REGISTRY_URL": config("CERC_NPM_REGISTRY_URL", default="http://gitea.local:3000/api/packages/cerc-io/npm/"), - "CERC_NPM_AUTH_TOKEN": config("CERC_NPM_AUTH_TOKEN", default=""), + "CERC_NPM_AUTH_TOKEN": config("CERC_NPM_AUTH_TOKEN", default=""), "CERC_REPO_BASE_DIR": dev_root_path, "CERC_CONTAINER_BASE_DIR": container_build_dir, "CERC_HOST_UID": f"{os.getuid()}", From 172300d7bd64ea14e912af88a2c2e6e3113c5ea0 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Mon, 17 Apr 2023 20:46:05 -0600 Subject: [PATCH 21/67] Simple implementation of LACONIC_HOSTED_ENDPOINT (#342) --- .../compose/docker-compose-fixturenet-laconic-console.yml | 2 ++ .../cerc-laconic-console-host/apply-webapp-config.sh | 5 +++-- .../container-build/cerc-laconic-console-host/config.yml | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/data/compose/docker-compose-fixturenet-laconic-console.yml b/app/data/compose/docker-compose-fixturenet-laconic-console.yml index f402fa70..23185957 100644 --- a/app/data/compose/docker-compose-fixturenet-laconic-console.yml +++ b/app/data/compose/docker-compose-fixturenet-laconic-console.yml @@ -2,5 +2,7 @@ services: laconic-console: restart: unless-stopped image: cerc/laconic-console-host:local + environment: + - LACONIC_HOSTED_ENDPOINT=${LACONIC_HOSTED_ENDPOINT:-http://localhost} ports: - "80" diff --git a/app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh b/app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh index d01b655d..bf041708 100755 --- a/app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh +++ b/app/data/container-build/cerc-laconic-console-host/apply-webapp-config.sh @@ -26,9 +26,10 @@ do kv_pair=(${kv_pair_string//=/ }) template_string_to_replace=${kv_pair[0]} template_value_to_substitute=${kv_pair[1]} + template_value_to_substitute_expanded=${template_value_to_substitute//LACONIC_HOSTED_ENDPOINT/${LACONIC_HOSTED_ENDPOINT}} # Run find and sed to do the substitution of one variable over all files # See: https://stackoverflow.com/a/21479607/1701505 - echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}" + echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute_expanded}" # Note: we do not escape our strings, on the expectation they do not container the '#' char. - find ${webapp_files_dir} -type f -exec sed -i 's#'${template_string_to_replace}'#'${template_value_to_substitute}'#g' {} + + find ${webapp_files_dir} -type f -exec sed -i 's#'${template_string_to_replace}'#'${template_value_to_substitute_expanded}'#g' {} + done diff --git a/app/data/container-build/cerc-laconic-console-host/config.yml b/app/data/container-build/cerc-laconic-console-host/config.yml index da57724a..d557ace5 100644 --- a/app/data/container-build/cerc-laconic-console-host/config.yml +++ b/app/data/container-build/cerc-laconic-console-host/config.yml @@ -2,5 +2,5 @@ services: wns: - server: 'http://localhost:9473/api' - webui: 'http://localhost:9473/console' + server: 'LACONIC_HOSTED_ENDPOINT:9473/api' + webui: 'LACONIC_HOSTED_ENDPOINT:9473/console' From cf79f0de0adccbd8812ed23a3d0a013cd5af7ff8 Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Tue, 18 Apr 2023 18:25:58 +0530 Subject: [PATCH 22/67] Package mobymask-v2 stack web-apps similar to laconic-console app (#310) * Build MobyMask web-app at container build step * Fix web-app start script to use env variables in config * Replace variables in built web-app files * Use published mobymask-ui package from gitea * Use published react-peer/test-app from gitea * Remove local gitea publish TODO --- .../compose/docker-compose-mobymask-app.yml | 11 ++-- .../compose/docker-compose-peer-test-app.yml | 9 ++- .../mobymask-app-config.json | 7 --- .../watcher-mobymask-v2/mobymask-app-start.sh | 17 +++--- .../watcher-mobymask-v2/test-app-start.sh | 10 +--- .../cerc-mobymask-ui/Dockerfile | 59 ++++++++++++++++--- .../cerc-mobymask-ui/apply-webapp-config.sh | 42 +++++++++++++ .../container-build/cerc-mobymask-ui/build.sh | 5 +- .../cerc-mobymask-ui/start-serving-app.sh | 9 +++ .../cerc-react-peer/Dockerfile | 30 +++++++--- .../cerc-react-peer/apply-webapp-config.sh | 42 +++++++++++++ .../container-build/cerc-react-peer/build.sh | 5 +- .../cerc-react-peer/start-serving-app.sh | 9 +++ .../fixturenet-laconic-loaded/README.md | 2 +- app/data/stacks/mobymask-v2/README.md | 4 +- app/data/stacks/mobymask-v2/web-apps.md | 6 +- 16 files changed, 210 insertions(+), 57 deletions(-) delete mode 100644 app/data/config/watcher-mobymask-v2/mobymask-app-config.json create mode 100755 app/data/container-build/cerc-mobymask-ui/apply-webapp-config.sh create mode 100755 app/data/container-build/cerc-mobymask-ui/start-serving-app.sh create mode 100755 app/data/container-build/cerc-react-peer/apply-webapp-config.sh create mode 100755 app/data/container-build/cerc-react-peer/start-serving-app.sh diff --git a/app/data/compose/docker-compose-mobymask-app.yml b/app/data/compose/docker-compose-mobymask-app.yml index df14d7db..6df48130 100644 --- a/app/data/compose/docker-compose-mobymask-app.yml +++ b/app/data/compose/docker-compose-mobymask-app.yml @@ -3,6 +3,7 @@ version: '3.2' services: # Builds and serves the MobyMask react-app mobymask-app: + restart: unless-stopped image: cerc/mobymask-ui:local env_file: - ../config/watcher-mobymask-v2/mobymask-params.env @@ -12,6 +13,7 @@ services: CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL} CERC_RELAY_NODES: ${CERC_RELAY_NODES} + working_dir: /scripts # Waits for watcher server to be up before app build # Required when running with watcher stack to get deployed contract address command: @@ -19,15 +21,14 @@ services: - -c - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./mobymask-app-start.sh volumes: - - ../config/wait-for-it.sh:/app/wait-for-it.sh - - ../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 + - ../config/wait-for-it.sh:/scripts/wait-for-it.sh + - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh - peers_ids:/peers - mobymask_deployment:/server ports: - - "0.0.0.0:3002:3000" + - "0.0.0.0:3002:80" healthcheck: - test: ["CMD", "nc", "-v", "localhost", "3000"] + test: ["CMD", "nc", "-v", "localhost", "80"] interval: 20s timeout: 5s retries: 15 diff --git a/app/data/compose/docker-compose-peer-test-app.yml b/app/data/compose/docker-compose-peer-test-app.yml index 7d1b89d6..0a8d1c65 100644 --- a/app/data/compose/docker-compose-peer-test-app.yml +++ b/app/data/compose/docker-compose-peer-test-app.yml @@ -4,7 +4,7 @@ services: peer-test-app: # Builds and serves the peer-test react-app image: cerc/react-peer:local - working_dir: /app/packages/test-app + working_dir: /scripts env_file: - ../config/watcher-mobymask-v2/mobymask-params.env environment: @@ -12,13 +12,12 @@ services: CERC_RELAY_NODES: ${CERC_RELAY_NODES} command: ["sh", "./test-app-start.sh"] volumes: - - ../config/watcher-mobymask-v2/test-app-config.json:/app/packages/test-app/src/test-app-config.json - - ../config/watcher-mobymask-v2/test-app-start.sh:/app/packages/test-app/test-app-start.sh + - ../config/watcher-mobymask-v2/test-app-start.sh:/scripts/test-app-start.sh - peers_ids:/peers ports: - - "0.0.0.0:3003:3000" + - "0.0.0.0:3003:80" healthcheck: - test: ["CMD", "nc", "-v", "localhost", "3000"] + test: ["CMD", "nc", "-v", "localhost", "80"] interval: 20s timeout: 5s retries: 15 diff --git a/app/data/config/watcher-mobymask-v2/mobymask-app-config.json b/app/data/config/watcher-mobymask-v2/mobymask-app-config.json deleted file mode 100644 index ed913b51..00000000 --- a/app/data/config/watcher-mobymask-v2/mobymask-app-config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "MobyMask", - "relayNodes": [], - "peer": { - "enableDebugInfo": true - } -} diff --git a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh index c494ed5c..0437d22d 100755 --- a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh +++ b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -e if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x @@ -28,13 +28,10 @@ else echo "Taking deployed contract details from env" fi -# Export config values in a json file -jq --arg address "$CERC_DEPLOYED_CONTRACT" \ - --argjson chainId "$CERC_CHAIN_ID" \ - --argjson relayNodes "$CERC_RELAY_NODES" \ - '.address = $address | .chainId = $chainId | .relayNodes = $relayNodes' \ - /app/src/mobymask-app-config.json > /app/src/config.json +# Use yq to create config.yml with environment variables +yq -n ".address = env(CERC_DEPLOYED_CONTRACT)" > /config/config.yml +yq ".watcherUrl = env(CERC_APP_WATCHER_URL)" -i /config/config.yml +yq ".chainId = env(CERC_CHAIN_ID)" -i /config/config.yml +yq ".relayNodes = strenv(CERC_RELAY_NODES)" -i /config/config.yml -REACT_APP_WATCHER_URI="$CERC_APP_WATCHER_URL/graphql" npm run build - -serve -s build +/scripts/start-serving-app.sh diff --git a/app/data/config/watcher-mobymask-v2/test-app-start.sh b/app/data/config/watcher-mobymask-v2/test-app-start.sh index ef7aa539..42e4397d 100755 --- a/app/data/config/watcher-mobymask-v2/test-app-start.sh +++ b/app/data/config/watcher-mobymask-v2/test-app-start.sh @@ -14,11 +14,7 @@ fi echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES" -# Set relay nodes in config using CERC_RELAY_NODES -jq --argjson relayNodes "$CERC_RELAY_NODES" \ - '.relayNodes = $relayNodes' \ - ./src/test-app-config.json > ./src/config.json +# Use yq to create config.yml with environment variables +yq -n ".relayNodes = strenv(CERC_RELAY_NODES)" > /config/config.yml -yarn build - -serve -s build +/scripts/start-serving-app.sh diff --git a/app/data/container-build/cerc-mobymask-ui/Dockerfile b/app/data/container-build/cerc-mobymask-ui/Dockerfile index c04b001d..3f04ec45 100644 --- a/app/data/container-build/cerc-mobymask-ui/Dockerfile +++ b/app/data/container-build/cerc-mobymask-ui/Dockerfile @@ -1,14 +1,57 @@ -FROM node:18.15.0-alpine3.16 +# Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile +# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster +ARG VARIANT=16-bullseye +FROM node:${VARIANT} -RUN apk --update --no-cache add make git jq bash +ARG USERNAME=node +ARG NPM_GLOBAL=/usr/local/share/npm-global -WORKDIR /app +# This container pulls npm package from a registry configured via env var +ARG CERC_NPM_REGISTRY_URL -COPY . . +# Add NPM global to PATH. +ENV PATH=${NPM_GLOBAL}/bin:${PATH} +# Prevents npm from printing version warnings +ENV NPM_CONFIG_UPDATE_NOTIFIER=false -RUN npm install -g serve +RUN \ + # Configure global npm install location, use group to adapt to UID/GID changes + if ! cat /etc/group | grep -e "^npm:" > /dev/null 2>&1; then groupadd -r npm; fi \ + && usermod -a -G npm ${USERNAME} \ + && umask 0002 \ + && mkdir -p ${NPM_GLOBAL} \ + && touch /usr/local/etc/npmrc \ + && chown ${USERNAME}:npm ${NPM_GLOBAL} /usr/local/etc/npmrc \ + && chmod g+s ${NPM_GLOBAL} \ + && npm config -g set prefix ${NPM_GLOBAL} \ + && su ${USERNAME} -c "npm config -g set prefix ${NPM_GLOBAL}" \ + # Install eslint + && su ${USERNAME} -c "umask 0002 && npm install -g eslint" \ + && npm cache clean --force > /dev/null 2>&1 -RUN echo "Building mobymask-ui" && \ - npm install +# Install additional OS packages. +RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends jq bash -WORKDIR /app +# We do this to get a yq binary from the published container, for the correct architecture we're building here +COPY --from=docker.io/mikefarah/yq:latest /usr/bin/yq /usr/local/bin/yq + +RUN mkdir -p /scripts +COPY ./apply-webapp-config.sh /scripts +COPY ./start-serving-app.sh /scripts + +# Configure the local npm registry +RUN npm config set @cerc-io:registry ${CERC_NPM_REGISTRY_URL} + +RUN mkdir -p /config + +# Install simple web server for now (use nginx perhaps later) +RUN yarn global add http-server + +# Globally install the payload web app package +RUN yarn global add @cerc-io/mobymask-ui + +# Expose port for http +EXPOSE 80 + +CMD ["/scripts/start-serving-app.sh"] diff --git a/app/data/container-build/cerc-mobymask-ui/apply-webapp-config.sh b/app/data/container-build/cerc-mobymask-ui/apply-webapp-config.sh new file mode 100755 index 00000000..9f32cd23 --- /dev/null +++ b/app/data/container-build/cerc-mobymask-ui/apply-webapp-config.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi +if [[ $# -ne 3 ]]; then + echo "Illegal number of parameters" >&2 + exit 1 +fi +config_file_name=$1 +webapp_files_dir=$2 +config_prefix=$3 +if ! [[ -f ${config_file_name} ]]; then + echo "Config file ${config_file_name} does not exist" >&2 + exit 1 +fi +if ! [[ -d ${webapp_files_dir} ]]; then + echo "Webapp directory ${webapp_files_dir} does not exist" >&2 + exit 1 +fi +# First some magic using sed to translate our yaml config file into an array of key value pairs like: +# ${config_prefix}= +# sed "s/'//g" is used to remove single quote for relayNodes value +readarray -t config_kv_pair_array < <( sed -E 's/([^:]+):\s*(.*)/\1=\2/g' ${config_file_name} | sed "s/'//g" | sed "s/^/${config_prefix}_/" ) +declare -p config_kv_pair_array +# Then iterate over that kv array making the template substitution in our web app files +for kv_pair_string in "${config_kv_pair_array[@]}" +do + kv_pair=(${kv_pair_string//=/ }) + template_string_to_replace=${kv_pair[0]} + template_value_to_substitute=${kv_pair[1]} + # Run find and sed to do the substitution of one variable over all files + # See: https://stackoverflow.com/a/21479607/1701505 + echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}" + + # TODO: Pass keys to be replaced without double quotes + if [[ "$template_string_to_replace" =~ ^${config_prefix}_(relayNodes|chainId)$ ]]; then + find ${webapp_files_dir} -type f -exec sed -i 's#"'"${template_string_to_replace}"'"#'"${template_value_to_substitute}"'#g' {} + + else + # Note: we do not escape our strings, on the expectation they do not container the '#' char. + find ${webapp_files_dir} -type f -exec sed -i 's#'${template_string_to_replace}'#'${template_value_to_substitute}'#g' {} + + fi +done diff --git a/app/data/container-build/cerc-mobymask-ui/build.sh b/app/data/container-build/cerc-mobymask-ui/build.sh index 52687093..7628ff5c 100755 --- a/app/data/container-build/cerc-mobymask-ui/build.sh +++ b/app/data/container-build/cerc-mobymask-ui/build.sh @@ -6,4 +6,7 @@ source ${CERC_CONTAINER_BASE_DIR}/build-base.sh # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/mobymask-ui:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/mobymask-ui +CERC_NPM_REGISTRY_URL="https://git.vdb.to/api/packages/cerc-io/npm/" + +docker build -t cerc/mobymask-ui:local ${build_command_args} -f ${SCRIPT_DIR}/Dockerfile \ + --build-arg CERC_NPM_REGISTRY_URL ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-mobymask-ui/start-serving-app.sh b/app/data/container-build/cerc-mobymask-ui/start-serving-app.sh new file mode 100755 index 00000000..4e0a976c --- /dev/null +++ b/app/data/container-build/cerc-mobymask-ui/start-serving-app.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +# TODO: Don't hard wire this: +webapp_files_dir=/usr/local/share/.config/yarn/global/node_modules/@cerc-io/mobymask-ui/build +/scripts/apply-webapp-config.sh /config/config.yml ${webapp_files_dir} MOBYMASK_HOSTED_CONFIG +http-server -p 80 ${webapp_files_dir} diff --git a/app/data/container-build/cerc-react-peer/Dockerfile b/app/data/container-build/cerc-react-peer/Dockerfile index fcc198f3..f60ba504 100644 --- a/app/data/container-build/cerc-react-peer/Dockerfile +++ b/app/data/container-build/cerc-react-peer/Dockerfile @@ -1,14 +1,30 @@ FROM node:18.15.0-alpine3.16 -RUN apk --update --no-cache add make git python3 jq +# This container pulls npm package from a registry configured via env var +ARG CERC_NPM_REGISTRY_URL -WORKDIR /app +RUN apk --update --no-cache add make git python3 jq bash -COPY . . +# We do this to get a yq binary from the published container, for the correct architecture we're building here +COPY --from=docker.io/mikefarah/yq:latest /usr/bin/yq /usr/local/bin/yq -RUN yarn global add serve +RUN mkdir -p /scripts +COPY ./apply-webapp-config.sh /scripts +COPY ./start-serving-app.sh /scripts -RUN echo "Building react-peer" && \ - yarn install --ignore-scripts && yarn build --ignore @cerc-io/test-app +# Configure the local npm registry +RUN npm config set @cerc-io:registry ${CERC_NPM_REGISTRY_URL} -WORKDIR /app +RUN mkdir -p /config + +# Install simple web server for now (use nginx perhaps later) +RUN yarn global add http-server + +# Globally install the payload web app package +RUN yarn global add @cerc-io/test-app + + +# Expose port for http +EXPOSE 80 + +CMD ["/scripts/start-serving-app.sh"] diff --git a/app/data/container-build/cerc-react-peer/apply-webapp-config.sh b/app/data/container-build/cerc-react-peer/apply-webapp-config.sh new file mode 100755 index 00000000..a7f0a28e --- /dev/null +++ b/app/data/container-build/cerc-react-peer/apply-webapp-config.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi +if [[ $# -ne 3 ]]; then + echo "Illegal number of parameters" >&2 + exit 1 +fi +config_file_name=$1 +webapp_files_dir=$2 +config_prefix=$3 +if ! [[ -f ${config_file_name} ]]; then + echo "Config file ${config_file_name} does not exist" >&2 + exit 1 +fi +if ! [[ -d ${webapp_files_dir} ]]; then + echo "Webapp directory ${webapp_files_dir} does not exist" >&2 + exit 1 +fi +# First some magic using sed to translate our yaml config file into an array of key value pairs like: +# ${config_prefix}= +# sed "s/'//g" is used to remove single quote for relayNodes value +readarray -t config_kv_pair_array < <( sed -E 's/([^:]+):\s*(.*)/\1=\2/g' ${config_file_name} | sed "s/'//g" | sed "s/^/${config_prefix}_/" ) +declare -p config_kv_pair_array +# Then iterate over that kv array making the template substitution in our web app files +for kv_pair_string in "${config_kv_pair_array[@]}" +do + kv_pair=(${kv_pair_string//=/ }) + template_string_to_replace=${kv_pair[0]} + template_value_to_substitute=${kv_pair[1]} + # Run find and sed to do the substitution of one variable over all files + # See: https://stackoverflow.com/a/21479607/1701505 + echo "Substituting: ${template_string_to_replace} = ${template_value_to_substitute}" + + # TODO: Pass keys to be replaced without double quotes + if [[ "$template_string_to_replace" == "${config_prefix}_relayNodes" ]]; then + find ${webapp_files_dir} -type f -exec sed -i 's#"'"${template_string_to_replace}"'"#'"${template_value_to_substitute}"'#g' {} + + else + # Note: we do not escape our strings, on the expectation they do not container the '#' char. + find ${webapp_files_dir} -type f -exec sed -i 's#'${template_string_to_replace}'#'${template_value_to_substitute}'#g' {} + + fi +done diff --git a/app/data/container-build/cerc-react-peer/build.sh b/app/data/container-build/cerc-react-peer/build.sh index 48edc4b3..7078b754 100755 --- a/app/data/container-build/cerc-react-peer/build.sh +++ b/app/data/container-build/cerc-react-peer/build.sh @@ -6,4 +6,7 @@ source ${CERC_CONTAINER_BASE_DIR}/build-base.sh # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/react-peer:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/react-peer +CERC_NPM_REGISTRY_URL="https://git.vdb.to/api/packages/cerc-io/npm/" + +docker build -t cerc/react-peer:local ${build_command_args} -f ${SCRIPT_DIR}/Dockerfile \ + --build-arg CERC_NPM_REGISTRY_URL ${SCRIPT_DIR} diff --git a/app/data/container-build/cerc-react-peer/start-serving-app.sh b/app/data/container-build/cerc-react-peer/start-serving-app.sh new file mode 100755 index 00000000..e01b91c3 --- /dev/null +++ b/app/data/container-build/cerc-react-peer/start-serving-app.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +# TODO: Don't hard wire this: +webapp_files_dir=/usr/local/share/.config/yarn/global/node_modules/@cerc-io/test-app/build +/scripts/apply-webapp-config.sh /config/config.yml ${webapp_files_dir} MOBYMASK_HOSTED_CONFIG +http-server -p 80 ${webapp_files_dir} diff --git a/app/data/stacks/fixturenet-laconic-loaded/README.md b/app/data/stacks/fixturenet-laconic-loaded/README.md index 2fc21594..b94189c2 100644 --- a/app/data/stacks/fixturenet-laconic-loaded/README.md +++ b/app/data/stacks/fixturenet-laconic-loaded/README.md @@ -14,7 +14,7 @@ $ chmod +x ./laconic-so $ export PATH=$PATH:$(pwd) # Or move laconic-so to ~/bin or your favorite on-path directory ``` ## 2. Prepare the local build environment -Note that this step needs only to be done once on a new machine. +Note that this step needs only to be done once on a new machine. Detailed instructions can be found [here](../build-support/README.md). For the impatient run these commands: ``` $ laconic-so --stack build-support build-containers --exclude cerc/builder-gerbil diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index 9dcca6c0..aaa4ac7f 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -27,11 +27,11 @@ git checkout v0.2.35 # react-peer cd ~/cerc/react-peer -git checkout v0.2.31 +git checkout v0.2.32 # mobymask-ui cd ~/cerc/mobymask-ui -git checkout laconic +git checkout v0.1.2 # MobyMask cd ~/cerc/MobyMask diff --git a/app/data/stacks/mobymask-v2/web-apps.md b/app/data/stacks/mobymask-v2/web-apps.md index 09d6834d..866f22f0 100644 --- a/app/data/stacks/mobymask-v2/web-apps.md +++ b/app/data/stacks/mobymask-v2/web-apps.md @@ -19,17 +19,17 @@ Checkout to the required versions and branches in repos: ```bash # react-peer cd ~/cerc/react-peer -git checkout v0.2.31 +git checkout v0.2.32 # mobymask-ui cd ~/cerc/mobymask-ui -git checkout laconic +git checkout v0.1.2 ``` Build the container images: ```bash -laconic-so --stack mobymask-v2 build-containers --include cerc/react-peer-v2,cerc/mobymask-ui +laconic-so --stack mobymask-v2 build-containers --include cerc/react-peer,cerc/mobymask-ui ``` This should create the required docker images in the local image registry From ca29e9cf0d887228db37ef4c190800c5fa107e79 Mon Sep 17 00:00:00 2001 From: zramsay Date: Tue, 18 Apr 2023 18:01:54 -0400 Subject: [PATCH 23/67] first pass --- docs/laconicd-fixturenet.md | 113 ++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 docs/laconicd-fixturenet.md diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md new file mode 100644 index 00000000..bb60af9b --- /dev/null +++ b/docs/laconicd-fixturenet.md @@ -0,0 +1,113 @@ +# Running a laconicd fixturenet with console + +The following tutorial explains the steps to run a laconicd fixturenet with CLI and web console that displays records in the registry. It is designed as an introduction to Stack Orchestrator and to showcase one component of the Laconic Stack. Prior to Stack Orchestrator, the following 4 repositories had to be cloned and setup manually: + +- https://github.com/cerc-io/laconicd +- https://github.com/cerc-io/laconic-sdk +- https://github.com/cerc-io/laconic-registry-cli +- https://github.com/cerc-io/laconic-console + +Now, with Stack Orchestrator, it is a few quick commands. Additionally, the `docker` and `docker compose` integration on the back-end allows the stack to easily persist, facilitating workflows. + +## Setup laconic-so + +To avoid hiccups on Mac M1/M2 and any local machine nuances that may affect the user experience, this tutorial is focused on using a fresh Digital Ocean (DO) droplet with similar specs: +16 GB Memory / 8 Intel vCPUs / 160 GB Disk. + +1. Login to the droplet as root (either by SSH key or password set in the DO console) + +``` +ssh root@IP +``` + +2. Get the install script, give it executable permissions, and run it: + +``` +curl -o install.sh https://raw.githubusercontent.com/cerc-io/stack-orchestrator/main/scripts/quick-install-ubuntu.sh +``` +``` +chmod +x install.sh +``` +``` +bash install.sh +``` + +3. Confirm docker was installed and activate the changes in `~/.profile`: + +``` +docker run hello-world +``` +``` +source ~/.profile +``` + +4. Verify installation: + +``` +laconic-so version +``` + +## Setup the laconic fixturenet stack + +1. Get the repositories + +``` +laconic-so --stack fixturenet-laconic-loaded setup-repositories --include cerc-io/laconicd,cerc-io/laconic-sdk,cerc-io/laconic-registry-cli,cerc-io/laconic-console +``` + +2. Set this environment variable to the Laconic self-hosted Gitea instance: + +``` +export CERC_NPM_REGISTRY_URL=https://git.vdb.to/api/packages/cerc-io/npm/ +``` + +3. Build the containers: + +``` +laconic-so --stack fixturenet-laconic-loaded build-containers +``` + +It's possible to run into an `ESOCKETTIMEDOUT` error, e.g., `error An unexpected error occurred: "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz: ESOCKETTIMEDOUT"`. This may happen even if you have a great internet connection. In that case, re-run the `build-containers` command. + +4. Set this environment variable to your droplet's IP address: + +``` +export LACONIC_HOSTED_ENDPOINT=68.183.195.210 +``` + +5. Deploy the stack: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy up +``` + +6. Check the logs: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy logs +``` + +You'll see output from `laconicd` and the block height should be >1 to confirm it is running: + +``` +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:29PM INF indexed block exents height=12 module=txindex server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF Timed out dur=4976.960115 height=13 module=consensus round=0 server=node step=1 +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF received proposal module=consensus proposal={"Type":32,"block_id":{"hash":"D26C088A711F912ADB97888C269F628DA33153795621967BE44DCB43C3D03CA4","parts":{"hash":"22411A20B7F14CDA33244420FBDDAF24450C0628C7A06034FF22DAC3699DDCC8","total":1}},"height":13,"pol_round":-1,"round":0,"signature":"DEuqnaQmvyYbUwckttJmgKdpRu6eVm9i+9rQ1pIrV2PidkMNdWRZBLdmNghkIrUzGbW8Xd7UVJxtLRmwRASgBg==","timestamp":"2023-04-18T21:30:01.49450663Z"} server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF received complete proposal block hash=D26C088A711F912ADB97888C269F628DA33153795621967BE44DCB43C3D03CA4 height=13 module=consensus server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF finalizing commit of block hash={} height=13 module=consensus num_txs=0 root=1A8CA1AF139CCC80EC007C6321D8A63A46A793386EE2EDF9A5CA0AB2C90728B7 server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF minted coins from module account amount=2059730459416582643aphoton from=mint module=x/bank +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF executed block height=13 module=state num_invalid_txs=0 num_valid_txs=0 server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF commit synced commit=436F6D6D697449447B5B363520313037203630203232372039352038352032303820313334203231392032303520313433203130372031343920313431203139203139322038362031323720362031383520323533203137362031333820313735203135392031383620323334203135382031323120313431203230342037335D3A447D +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF committed state app_hash=416B3CE35F55D086DBCD8F6B958D13C0567F06B9FDB08AAF9FBAEA9E798DCC49 height=13 module=state num_txs=0 server=node +laconic-5cd0a80c1442c3044c8b295d26426bae-laconicd-1 | 9:30PM INF indexed block exents height=13 module=txindex server=node +``` + +7. Confirm operation of the registry CLI: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy exec cli "laconic cns status" +``` + +## Configure Digital Ocean firewall + +Let's open some ports. In the DO web console, navigate to your droplet's main page. Select the "Networking" tab and scroll down to "Firewall". From 07c2a01a5810d2d446e8465f4db4ce4bdcfc619f Mon Sep 17 00:00:00 2001 From: zramsay Date: Tue, 18 Apr 2023 18:48:52 -0400 Subject: [PATCH 24/67] second pass --- docs/laconicd-fixturenet.md | 72 ++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md index bb60af9b..b9045970 100644 --- a/docs/laconicd-fixturenet.md +++ b/docs/laconicd-fixturenet.md @@ -110,4 +110,74 @@ laconic-so --stack fixturenet-laconic-loaded deploy exec cli "laconic cns status ## Configure Digital Ocean firewall -Let's open some ports. In the DO web console, navigate to your droplet's main page. Select the "Networking" tab and scroll down to "Firewall". +Let's open some ports. + +1. In the Digital Ocean web console, navigate to your droplet's main page. Select the "Networking" tab and scroll down to "Firewall". + +2. Get the port for the running console: + +``` +echo http://IP:$(laconic-so --stack fixturenet-laconic-loaded deploy port laconic-console 80 | cut -d ':' -f 2) +``` +``` +http://IP:32778 +``` + +3. Go back to the Digital Ocean web console and set an Inbound Rule for Custom TCP of the above port: + +- `32778` in this example, but yours will be different. +- do the same for port `9473` + +Additional ports will need to be opened depending on your application. Ensure you add your droplet to this new Firewall and wait a minute or so for the update to propagate. + +4. Navigate to http://IP:port and ensure laconic-console is functioning as expected: + +- ensure you are connected to `laconicd`; no error message should pop up; +- the wifi symbol in the bottom right should have a green check mark beside it +- navigate to the status tab; it should display similar/identical information +- navigate to the config tab, you'll see something like (with your IP): + +``` +wns + webui 68.183.195.210:9473/console + server 68.183.195.210:9473/api +``` + +## Publish and query a sample record to the registry + +1. The following command will create a bond and publish a record: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy exec cli ./scripts/create-demo-records.sh +``` + +You'll get an output like: + +``` +Balance is: 99998999999999998999600000 +Created bond with id: dd88e8d6f9567b32b28e70552aea4419c5dd3307ebae85a284d1fe38904e301a +Published demo-record-1.yml with id: bafyreierh3xnfivexlscdwubvczmddsnf46uytyfvrbdhkjzztvsz6ruly +``` + +The sample record we deployed looks like: + +``` +TODO +``` + +2. Return to the laconic-console + +- the published record should now be viewable +- explore it for more information +- click on the link that opens the GraphQL console +- the query is pre-loaded, click the button to run it +- inspect the output + +3. Try out additional CLI commands + +- these are documented [here](https://github.com/cerc-io/laconic-registry-cli#readme) and updates are forthcoming +- e.g,: + +``` +laconic-so --stack fixturenet-laconic-loaded deploy exec cli "laconic cns record list" +``` From e5b9b74b4c0b890d6e79627f47139ef0b255e7a2 Mon Sep 17 00:00:00 2001 From: zramsay Date: Tue, 18 Apr 2023 19:54:18 -0400 Subject: [PATCH 25/67] the fix --- docs/laconicd-fixturenet.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md index b9045970..66ae1020 100644 --- a/docs/laconicd-fixturenet.md +++ b/docs/laconicd-fixturenet.md @@ -72,7 +72,7 @@ It's possible to run into an `ESOCKETTIMEDOUT` error, e.g., `error An unexpected 4. Set this environment variable to your droplet's IP address: ``` -export LACONIC_HOSTED_ENDPOINT=68.183.195.210 +export LACONIC_HOSTED_ENDPOINT=http://68.183.195.210 ``` 5. Deploy the stack: @@ -139,8 +139,8 @@ Additional ports will need to be opened depending on your application. Ensure yo ``` wns - webui 68.183.195.210:9473/console - server 68.183.195.210:9473/api + webui http://68.183.195.210:9473/console + server http://68.183.195.210:9473/api ``` ## Publish and query a sample record to the registry From 3130af161539c701e46b4ef8a8af5b503ce0433b Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:22:13 +0530 Subject: [PATCH 26/67] [WIP] Handle restarts in fixturenet-eth stack (#324) * Use mounted volumes for data in geth nodes * Use mounted volumes for data in lighthouse nodes * Avoid resetting genesis time in a lighthouse node on restart * Mount parent datadir for lighthouse nodes * Trap signals on shutdown and clean up in lighthouse nodes * Allow stalled sync in lighthouse beacon nodes * Gracefully shutdown geth nodes * Add clean up instructions * Gracefully shutdown lighthouse boot node --- .../compose/docker-compose-fixturenet-eth.yml | 17 ++++++++++ .../cerc-fixturenet-eth-geth/Dockerfile | 2 +- .../genesis/accounts/import_keys.sh | 2 +- .../cerc-fixturenet-eth-geth/run-el.sh | 30 ++++++++++++++++-- .../genesis/cl/beacon_node.sh | 5 +-- .../genesis/cl/bootnode.sh | 18 ++++++++--- .../genesis/cl/reset_genesis_time.sh | 2 +- .../genesis/cl/validator_client.sh | 2 +- .../cerc-fixturenet-eth-lighthouse/run-cl.sh | 31 ++++++++++++++----- app/data/stacks/fixturenet-eth/README.md | 28 +++++++++++++++-- 10 files changed, 113 insertions(+), 24 deletions(-) diff --git a/app/data/compose/docker-compose-fixturenet-eth.yml b/app/data/compose/docker-compose-fixturenet-eth.yml index 508543e4..2024cacb 100644 --- a/app/data/compose/docker-compose-fixturenet-eth.yml +++ b/app/data/compose/docker-compose-fixturenet-eth.yml @@ -8,6 +8,8 @@ services: environment: RUN_BOOTNODE: "true" image: cerc/fixturenet-eth-geth:local + volumes: + - fixturenet_eth_bootnode_geth_data:/root/ethdata ports: - "9898" - "30303" @@ -26,6 +28,7 @@ services: image: cerc/fixturenet-eth-geth:local volumes: - fixturenet_geth_accounts:/opt/testnet/build/el + - fixturenet_eth_geth_1_data:/root/ethdata healthcheck: test: ["CMD", "nc", "-v", "localhost", "8545"] interval: 30s @@ -52,12 +55,16 @@ services: image: cerc/fixturenet-eth-geth:local depends_on: - fixturenet-eth-bootnode-geth + volumes: + - fixturenet_eth_geth_2_data:/root/ethdata fixturenet-eth-bootnode-lighthouse: hostname: fixturenet-eth-bootnode-lighthouse environment: RUN_BOOTNODE: "true" image: cerc/fixturenet-eth-lighthouse:local + volumes: + - fixturenet_eth_bootnode_lighthouse_data:/opt/testnet/build/cl fixturenet-eth-lighthouse-1: hostname: fixturenet-eth-lighthouse-1 @@ -74,6 +81,8 @@ services: ETH1_ENDPOINT: "http://fixturenet-eth-geth-1:8545" EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-1:8551" image: cerc/fixturenet-eth-lighthouse:local + volumes: + - fixturenet_eth_lighthouse_1_data:/opt/testnet/build/cl depends_on: fixturenet-eth-bootnode-lighthouse: condition: service_started @@ -98,6 +107,8 @@ services: EXECUTION_ENDPOINT: "http://fixturenet-eth-geth-2:8551" LIGHTHOUSE_GENESIS_STATE_URL: "http://fixturenet-eth-lighthouse-1:8001/eth/v2/debug/beacon/states/0" image: cerc/fixturenet-eth-lighthouse:local + volumes: + - fixturenet_eth_lighthouse_2_data:/opt/testnet/build/cl depends_on: fixturenet-eth-bootnode-lighthouse: condition: service_started @@ -106,3 +117,9 @@ services: volumes: fixturenet_geth_accounts: + fixturenet_eth_bootnode_geth_data: + fixturenet_eth_geth_1_data: + fixturenet_eth_geth_2_data: + fixturenet_eth_bootnode_lighthouse_data: + fixturenet_eth_lighthouse_1_data: + fixturenet_eth_lighthouse_2_data: diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile b/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile index 51dbbcd4..63c3c0a7 100644 --- a/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile +++ b/app/data/container-build/cerc-fixturenet-eth-geth/Dockerfile @@ -22,6 +22,6 @@ COPY run-el.sh /opt/testnet/run.sh RUN cd /opt/testnet && make genesis-el COPY --from=geth /usr/local/bin/geth /usr/local/bin/ -RUN geth init /opt/testnet/build/el/geth.json && rm -f ~/.ethereum/geth/nodekey +RUN geth --datadir ~/ethdata init /opt/testnet/build/el/geth.json && rm -f ~/ethdata/geth/nodekey ENTRYPOINT ["/opt/testnet/run.sh"] diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/import_keys.sh b/app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/import_keys.sh index 719b9f59..e8dce0ea 100755 --- a/app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/import_keys.sh +++ b/app/data/container-build/cerc-fixturenet-eth-geth/genesis/accounts/import_keys.sh @@ -12,6 +12,6 @@ for line in `cat ../build/el/accounts.csv`; do echo "" echo "$ADDRESS" - geth account import --password .pw.$$ .key.$$ + geth account import --datadir=~/ethdata --password .pw.$$ .key.$$ rm -f .pw.$$ .key.$$ done diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh index 12e59462..526c76d7 100755 --- a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh +++ b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh @@ -18,17 +18,35 @@ if [ "true" == "$CERC_REMOTE_DEBUG" ] && [ -x "/usr/local/bin/dlv" ]; then START_CMD="/usr/local/bin/dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient exec /usr/local/bin/geth --continue --" fi +# See https://linuxconfig.org/how-to-propagate-a-signal-to-child-processes-from-a-bash-script +cleanup() { + echo "Signal received, cleaning up..." + + # Kill the child process first (CERC_REMOTE_DEBUG=true uses dlv which starts geth as a child process) + pkill -P ${geth_pid} + sleep 2 + kill $(jobs -p) + + wait + echo "Done" +} +trap 'cleanup' SIGINT SIGTERM + if [ "true" == "$RUN_BOOTNODE" ]; then $START_CMD \ + --datadir=~/ethdata \ --nodekeyhex="${BOOTNODE_KEY}" \ --nodiscover \ --ipcdisable \ --networkid=${NETWORK_ID} \ - --netrestrict="${NETRESTRICT}" + --netrestrict="${NETRESTRICT}" \ + & + + geth_pid=$! else cd /opt/testnet/accounts ./import_keys.sh - + echo -n "$JWT" > /opt/testnet/build/el/jwtsecret if [ "$CERC_RUN_STATEDIFF" == "detect" ] && [ -n "$CERC_STATEDIFF_DB_HOST" ]; then @@ -74,6 +92,7 @@ else fi $START_CMD \ + --datadir=~/ethdata \ --bootnodes="${ENODE}" \ --allow-insecure-unlock \ --http \ @@ -101,5 +120,10 @@ else --metrics.addr="0.0.0.0" \ --verbosity=${CERC_GETH_VERBOSITY:-3} \ --vmodule="${CERC_GETH_VMODULE:-statediff/*=5}" \ - --miner.etherbase="${ETHERBASE}" ${STATEDIFF_OPTS} + --miner.etherbase="${ETHERBASE}" ${STATEDIFF_OPTS} \ + & + + geth_pid=$! fi + +wait $geth_pid diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh index 6fa1d8d4..1f906155 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh @@ -19,9 +19,9 @@ http_port=8001 authrpc_port=8551 exec lighthouse \ - --debug-level $DEBUG_LEVEL \ bn \ $SUBSCRIBE_ALL_SUBNETS \ + --debug-level $DEBUG_LEVEL \ --boot-nodes "$ENR" \ --datadir $data_dir \ --testnet-dir $TESTNET_DIR \ @@ -38,4 +38,5 @@ exec lighthouse \ --execution-jwt $JWTSECRET \ --terminal-total-difficulty-override $ETH1_TTD \ --suggested-fee-recipient $SUGGESTED_FEE_RECIPIENT \ - --target-peers $((BN_COUNT - 1)) + --target-peers $((BN_COUNT - 1)) \ + --http-allow-sync-stalled \ diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh index f6f5cc73..a395f41a 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh @@ -21,14 +21,22 @@ if [ ! -f "$DATADIR/bootnode/enr.dat" ]; then --udp-port $BOOTNODE_PORT \ --tcp-port $BOOTNODE_PORT \ --genesis-fork-version $GENESIS_FORK_VERSION \ - --output-dir $DATADIR/bootnode + --output-dir $DATADIR/bootnode-temp - bootnode_enr=`cat $DATADIR/bootnode/enr.dat` - echo "- $bootnode_enr" > $TESTNET_DIR/boot_enr.yaml - - echo "Generated bootnode enr and written to $TESTNET_DIR/boot_enr.yaml" + # Output ENR to a temp dir and mv as "lcli generate-bootnode-enr" will not overwrite an empty dir (mounted volume) + mkdir -p $DATADIR/bootnode + mv $DATADIR/bootnode-temp/* $DATADIR/bootnode + rm -r $DATADIR/bootnode-temp + + echo "Generated bootnode enr" +else + echo "Found existing bootnode enr" fi +bootnode_enr=`cat $DATADIR/bootnode/enr.dat` +echo "- $bootnode_enr" > $TESTNET_DIR/boot_enr.yaml +echo "Written bootnode enr to $TESTNET_DIR/boot_enr.yaml" + exec lighthouse boot_node \ --testnet-dir $TESTNET_DIR \ --port $BOOTNODE_PORT \ diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/reset_genesis_time.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/reset_genesis_time.sh index a8cc2e2b..f21a8ee0 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/reset_genesis_time.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/reset_genesis_time.sh @@ -16,4 +16,4 @@ lcli \ $TESTNET_DIR/genesis.ssz \ $NOW -echo "Reset genesis time to now ($NOW)" +echo "Reset genesis time to ($NOW)" diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh index c7f0dba4..30168f80 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh @@ -21,9 +21,9 @@ while getopts "pd:" flag; do done exec lighthouse \ - --debug-level $DEBUG_LEVEL \ vc \ $BUILDER_PROPOSALS \ + --debug-level $DEBUG_LEVEL \ --validators-dir $DATADIR/node_$NODE_NUMBER/validators \ --secrets-dir $DATADIR/node_$NODE_NUMBER/secrets \ --testnet-dir $TESTNET_DIR \ diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/run-cl.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/run-cl.sh index ee5fc55c..ec0e9aeb 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/run-cl.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/run-cl.sh @@ -1,12 +1,25 @@ #!/bin/bash -if [ "true" == "$RUN_BOOTNODE" ]; then +# See https://linuxconfig.org/how-to-propagate-a-signal-to-child-processes-from-a-bash-script +cleanup() { + echo "Signal received, cleaning up..." + kill $(jobs -p) + + wait + echo "Done" +} +trap 'cleanup' SIGINT SIGTERM + +if [ "true" == "$RUN_BOOTNODE" ]; then cd /opt/testnet/build/cl python3 -m http.server 3000 & cd /opt/testnet/cl - ./bootnode.sh 2>&1 | tee /var/log/lighthouse_bootnode.log + ./bootnode.sh 2>&1 | tee /var/log/lighthouse_bootnode.log & + bootnode_pid=$! + + wait $bootnode_pid else while [ 1 -eq 1 ]; do echo "Waiting on geth ..." @@ -25,7 +38,12 @@ else cd /opt/testnet/cl if [ -z "$LIGHTHOUSE_GENESIS_STATE_URL" ]; then - ./reset_genesis_time.sh + # Check if beacon node data exists to avoid resetting genesis time on a restart + if [ -d /opt/testnet/build/cl/node_"$NODE_NUMBER"/beacon ]; then + echo "Skipping genesis time reset" + else + ./reset_genesis_time.sh + fi else while [ 1 -eq 1 ]; do echo "Waiting on Genesis time ..." @@ -54,10 +72,9 @@ else echo -n "$JWT" > $JWTSECRET ./beacon_node.sh 2>&1 | tee /var/log/lighthouse_bn.log & - lpid=$! + beacon_pid=$! ./validator_client.sh 2>&1 | tee /var/log/lighthouse_vc.log & - vpid=$! + validator_pid=$! - wait $lpid $vpid + wait $beacon_pid $validator_pid fi - diff --git a/app/data/stacks/fixturenet-eth/README.md b/app/data/stacks/fixturenet-eth/README.md index 3aa41dec..86404af0 100644 --- a/app/data/stacks/fixturenet-eth/README.md +++ b/app/data/stacks/fixturenet-eth/README.md @@ -3,15 +3,18 @@ Instructions for deploying a local a geth + lighthouse blockchain "fixturenet" for development and testing purposes using laconic-stack-orchestrator (the installation of which is covered [here](https://github.com/cerc-io/stack-orchestrator#user-mode)): ## Clone required repositories + ``` $ laconic-so --stack fixturenet-eth setup-repositories ``` ## Build the fixturenet-eth containers + ``` $ laconic-so --stack fixturenet-eth build-containers ``` -This should create several container images in the local image registry: + +This should create several container images in the local image registry: * cerc/go-ethereum * cerc/lighthouse @@ -19,6 +22,7 @@ This should create several container images in the local image registry: * cerc/fixturenet-eth-lighthouse ## Deploy the stack + ``` $ laconic-so --stack fixturenet-eth deploy up ``` @@ -57,7 +61,7 @@ Several other containers can used with the basic `fixturenet-eth`: * `eth-probe` (captures eth1 tx gossip) * `keycloak` (nginx proxy with keycloak auth for API authentication) * `tx-spammer` (generates and sends automated transactions to the fixturenet) - + It is not necessary to use them all at once, but a complete example follows: ``` @@ -99,4 +103,22 @@ keycloak-db-1 0.0.0.0:55850->5432/tcp keycloak-nginx-1 0.0.0.0:55859->80/tcp migrations-1 tx-spammer-1 -``` \ No newline at end of file +``` + +## Clean up + +Stop all services running in the background: + +```bash +$ laconic-so --stack fixturenet-eth deploy down +``` + +Clear volumes created by this stack: + +```bash +# List all relevant volumes +$ docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data|.*fixturenet_geth_accounts" + +# Remove all the listed volumes +$ docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data|.*fixturenet_geth_accounts") +``` From c6e6122516f07240d64d5775e235735fa7237bdc Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:48:38 +0530 Subject: [PATCH 27/67] Gracefully shutdown optimism batcher and op-geth containers (#345) * Gracefully shutdown optimism batcher and op-geth containers * Remove unnecessary env export --- .../config/fixturenet-optimism/run-op-batcher.sh | 15 ++++++++++++++- .../config/fixturenet-optimism/run-op-geth.sh | 15 ++++++++++++++- app/data/stacks/fixturenet-optimism/README.md | 3 +++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/data/config/fixturenet-optimism/run-op-batcher.sh b/app/data/config/fixturenet-optimism/run-op-batcher.sh index ff549213..4bee6036 100755 --- a/app/data/config/fixturenet-optimism/run-op-batcher.sh +++ b/app/data/config/fixturenet-optimism/run-op-batcher.sh @@ -9,6 +9,15 @@ CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" # Get BACTHER_KEY from keys.json BATCHER_KEY=$(jq -r '.Batcher.privateKey' /l2-accounts/keys.json | tr -d '"') +cleanup() { + echo "Signal received, cleaning up..." + kill ${batcher_pid} + + wait + echo "Done" +} +trap 'cleanup' INT TERM + op-batcher \ --l2-eth-rpc=http://op-geth:8545 \ --rollup-rpc=http://op-node:8547 \ @@ -23,4 +32,8 @@ op-batcher \ --max-channel-duration=1 \ --target-l1-tx-size-bytes=2048 \ --l1-eth-rpc=$CERC_L1_RPC \ - --private-key=$BATCHER_KEY + --private-key=$BATCHER_KEY \ + & + +batcher_pid=$! +wait $batcher_pid diff --git a/app/data/config/fixturenet-optimism/run-op-geth.sh b/app/data/config/fixturenet-optimism/run-op-geth.sh index 68f6c5c5..48391d73 100755 --- a/app/data/config/fixturenet-optimism/run-op-geth.sh +++ b/app/data/config/fixturenet-optimism/run-op-geth.sh @@ -47,6 +47,15 @@ fi SEQUENCER_ADDRESS=$(jq -r '.Sequencer.address' /l2-accounts/keys.json | tr -d '"') echo "SEQUENCER_ADDRESS: ${SEQUENCER_ADDRESS}" +cleanup() { + echo "Signal received, cleaning up..." + kill ${geth_pid} + + wait + echo "Done" +} +trap 'cleanup' INT TERM + # Run op-geth geth \ --datadir ./datadir \ @@ -74,4 +83,8 @@ geth \ --allow-insecure-unlock \ --mine \ --miner.etherbase=$SEQUENCER_ADDRESS \ - --unlock=$SEQUENCER_ADDRESS + --unlock=$SEQUENCER_ADDRESS \ + & + +geth_pid=$! +wait $geth_pid diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index 502e3305..5099cdd3 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -91,6 +91,9 @@ docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_geth_accounts ``` * This means that the data directory that `op-geth` is using is corrupted and needs to be reinitialized; the containers `op-geth`, `op-node` and `op-batcher` need to be started afresh: + + WARNING: This will reset the L2 chain; consequently, all the data on it will be lost + * Stop and remove the concerned containers: ```bash From c4002dcc5c5001d3b45cda334bcc64929a1c7dbc Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Wed, 19 Apr 2023 13:48:51 +0530 Subject: [PATCH 28/67] Use standalone mobymask-v2-watcher-ts for running watcher server (#327) * Use standalone mobymask-v2-watcher-ts to run peer test * Add watcher-ts image for running peer tests * Run separate containers for peer ids generation and tests * Wait for watcher to be up before starting peer-test-app * Resolve peer-test-app compose file and remove setup-repositories for web-apps --- .../compose/docker-compose-peer-test-app.yml | 6 ++- .../docker-compose-watcher-mobymask-v2.yml | 42 +++++++++++++++++-- .../watcher-mobymask-v2/generate-peer-ids.sh | 20 +++++++++ .../watcher-mobymask-v2/set-tests-env.sh | 10 +++++ .../watcher-mobymask-v2/start-server.sh | 24 +---------- .../cerc-watcher-mobymask-v2/Dockerfile | 2 +- .../cerc-watcher-mobymask-v2/build.sh | 2 +- .../cerc-watcher-ts/Dockerfile | 10 +++++ .../container-build/cerc-watcher-ts/build.sh | 7 ++++ app/data/container-image-list.txt | 1 + app/data/pod-list.txt | 1 + app/data/repository-list.txt | 1 + app/data/stacks/mobymask-v2/README.md | 14 ++----- app/data/stacks/mobymask-v2/demo.md | 2 +- app/data/stacks/mobymask-v2/stack.yml | 4 +- app/data/stacks/mobymask-v2/web-apps.md | 20 --------- 16 files changed, 103 insertions(+), 63 deletions(-) create mode 100755 app/data/config/watcher-mobymask-v2/generate-peer-ids.sh create mode 100755 app/data/config/watcher-mobymask-v2/set-tests-env.sh create mode 100644 app/data/container-build/cerc-watcher-ts/Dockerfile create mode 100755 app/data/container-build/cerc-watcher-ts/build.sh diff --git a/app/data/compose/docker-compose-peer-test-app.yml b/app/data/compose/docker-compose-peer-test-app.yml index 0a8d1c65..927f92f7 100644 --- a/app/data/compose/docker-compose-peer-test-app.yml +++ b/app/data/compose/docker-compose-peer-test-app.yml @@ -10,8 +10,12 @@ services: environment: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} CERC_RELAY_NODES: ${CERC_RELAY_NODES} - command: ["sh", "./test-app-start.sh"] + command: + - sh + - -c + - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./test-app-start.sh volumes: + - ../config/wait-for-it.sh:/scripts/wait-for-it.sh - ../config/watcher-mobymask-v2/test-app-start.sh:/scripts/test-app-start.sh - peers_ids:/peers ports: diff --git a/app/data/compose/docker-compose-watcher-mobymask-v2.yml b/app/data/compose/docker-compose-watcher-mobymask-v2.yml index 601d13b6..fa68d017 100644 --- a/app/data/compose/docker-compose-watcher-mobymask-v2.yml +++ b/app/data/compose/docker-compose-watcher-mobymask-v2.yml @@ -54,6 +54,18 @@ services: extra_hosts: - "host.docker.internal:host-gateway" + # Creates peer-id files if they don't exist + peer-ids-gen: + image: cerc/watcher-ts:local + restart: on-failure + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + working_dir: /app/packages/peer + command: ["sh", "generate-peer-ids.sh"] + volumes: + - ../config/watcher-mobymask-v2/generate-peer-ids.sh:/app/packages/peer/generate-peer-ids.sh + - peers_ids:/peer-ids + # Starts the mobymask-v2-watcher server mobymask-watcher-server: image: cerc/watcher-mobymask-v2:local @@ -61,6 +73,8 @@ services: depends_on: mobymask-watcher-db: condition: service_healthy + peer-ids-gen: + condition: service_completed_successfully mobymask: condition: service_completed_successfully env_file: @@ -76,9 +90,9 @@ services: CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} 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/start-server.sh:/app/packages/mobymask-v2-watcher/start-server.sh - - peers_ids:/app/packages/mobymask-v2-watcher/peers + - ../config/watcher-mobymask-v2/watcher-config-template.toml:/app/environments/watcher-config-template.toml + - ../config/watcher-mobymask-v2/start-server.sh:/app/start-server.sh + - peers_ids:/app/peers - mobymask_deployment:/server - fixturenet_geth_accounts:/geth-accounts:ro # Expose GQL, metrics and relay node ports @@ -95,6 +109,28 @@ services: extra_hosts: - "host.docker.internal:host-gateway" + # Container to run peer tests + peer-tests: + image: cerc/watcher-ts:local + restart: on-failure + depends_on: + mobymask-watcher-server: + condition: service_healthy + peer-ids-gen: + condition: service_completed_successfully + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + working_dir: /app/packages/peer + command: + - sh + - -c + - | + ./set-tests-env.sh && \ + tail -f /dev/null + volumes: + - ../config/watcher-mobymask-v2/set-tests-env.sh:/app/packages/peer/set-tests-env.sh + - peers_ids:/peer-ids + volumes: mobymask_watcher_db_data: peers_ids: diff --git a/app/data/config/watcher-mobymask-v2/generate-peer-ids.sh b/app/data/config/watcher-mobymask-v2/generate-peer-ids.sh new file mode 100755 index 00000000..5c97c45d --- /dev/null +++ b/app/data/config/watcher-mobymask-v2/generate-peer-ids.sh @@ -0,0 +1,20 @@ +#!/bin/sh +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +# Check for peer ids in ./peers folder, create if not present +if [ -f /peer-ids/relay-id.json ]; then + echo "Using peer id for relay node from the mounted volume" +else + echo "Creating a new peer id for relay node" + yarn create-peer -f /peer-ids/relay-id.json +fi + +if [ -f /peer-ids/peer-id.json ]; then + echo "Using peer id for peer node from the mounted volume" +else + echo "Creating a new peer id for peer node" + yarn create-peer -f /peer-ids/peer-id.json +fi diff --git a/app/data/config/watcher-mobymask-v2/set-tests-env.sh b/app/data/config/watcher-mobymask-v2/set-tests-env.sh new file mode 100755 index 00000000..5e31b763 --- /dev/null +++ b/app/data/config/watcher-mobymask-v2/set-tests-env.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +CERC_RELAY_MULTIADDR="/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/$(jq -r '.id' /peer-ids/relay-id.json)" + +# Write the relay node's multiaddr to /app/packages/peer/.env for running tests +echo "RELAY=\"$CERC_RELAY_MULTIADDR\"" > ./.env diff --git a/app/data/config/watcher-mobymask-v2/start-server.sh b/app/data/config/watcher-mobymask-v2/start-server.sh index b5a3518e..02184842 100755 --- a/app/data/config/watcher-mobymask-v2/start-server.sh +++ b/app/data/config/watcher-mobymask-v2/start-server.sh @@ -14,26 +14,7 @@ CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRA echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}" -# Check for peer ids in ./peers folder, create if not present -if [ -f ./peers/relay-id.json ]; then - echo "Using peer id for relay node from the mounted volume" -else - echo "Creating a new peer id for relay node" - cd ../peer - yarn create-peer -f ../mobymask-v2-watcher/peers/relay-id.json - cd ../mobymask-v2-watcher -fi - -if [ -f ./peers/peer-id.json ]; then - echo "Using peer id for peer node from the mounted volume" -else - echo "Creating a new peer id for peer node" - cd ../peer - yarn create-peer -f ../mobymask-v2-watcher/peers/peer-id.json - cd ../mobymask-v2-watcher -fi - -CERC_RELAY_MULTIADDR="/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/$(jq -r '.id' ./peers/relay-id.json)" +CERC_RELAY_MULTIADDR="/dns4/mobymask-watcher-server/tcp/9090/ws/p2p/$(jq -r '.id' /app/peers/relay-id.json)" # Use contract address from environment variable or set from config.json in mounted volume if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then @@ -65,8 +46,5 @@ WATCHER_CONFIG=$(echo "$WATCHER_CONFIG_TEMPLATE" | \ # Write the modified content to a new file echo "$WATCHER_CONFIG" > environments/local.toml -# Write the relay node's multiaddr to /app/packages/peer/.env for running tests -echo "RELAY=\"$CERC_RELAY_MULTIADDR\"" > /app/packages/peer/.env - echo 'yarn server' yarn server diff --git a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile index 18aff5cd..9d1a70b7 100644 --- a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile +++ b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile @@ -17,4 +17,4 @@ COPY . . RUN echo "Building watcher-ts" && \ yarn && yarn build -WORKDIR /app/packages/mobymask-v2-watcher +WORKDIR /app diff --git a/app/data/container-build/cerc-watcher-mobymask-v2/build.sh b/app/data/container-build/cerc-watcher-mobymask-v2/build.sh index f8b59224..b26ad999 100755 --- a/app/data/container-build/cerc-watcher-mobymask-v2/build.sh +++ b/app/data/container-build/cerc-watcher-mobymask-v2/build.sh @@ -6,4 +6,4 @@ source ${CERC_CONTAINER_BASE_DIR}/build-base.sh # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/watcher-mobymask-v2:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/watcher-ts +docker build -t cerc/watcher-mobymask-v2:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/mobymask-v2-watcher-ts diff --git a/app/data/container-build/cerc-watcher-ts/Dockerfile b/app/data/container-build/cerc-watcher-ts/Dockerfile new file mode 100644 index 00000000..75ba2efa --- /dev/null +++ b/app/data/container-build/cerc-watcher-ts/Dockerfile @@ -0,0 +1,10 @@ +FROM node:16.17.1-alpine3.16 + +RUN apk --update --no-cache add git python3 alpine-sdk jq + +WORKDIR /app + +COPY . . + +RUN echo "Building watcher-ts" && \ + yarn && yarn build diff --git a/app/data/container-build/cerc-watcher-ts/build.sh b/app/data/container-build/cerc-watcher-ts/build.sh new file mode 100755 index 00000000..e180ec0e --- /dev/null +++ b/app/data/container-build/cerc-watcher-ts/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +# Build cerc/watcher-erc20 + +# See: https://stackoverflow.com/a/246128/1701505 +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +docker build -t cerc/watcher-ts:local -f ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/watcher-ts diff --git a/app/data/container-image-list.txt b/app/data/container-image-list.txt index 150d81ae..0635c4c8 100644 --- a/app/data/container-image-list.txt +++ b/app/data/container-image-list.txt @@ -14,6 +14,7 @@ cerc/laconic-registry-cli cerc/laconic-console-host cerc/fixturenet-eth-geth cerc/fixturenet-eth-lighthouse +cerc/watcher-ts cerc/watcher-mobymask cerc/watcher-erc20 cerc/watcher-erc721 diff --git a/app/data/pod-list.txt b/app/data/pod-list.txt index f24c9ed0..ef42ad9e 100644 --- a/app/data/pod-list.txt +++ b/app/data/pod-list.txt @@ -10,6 +10,7 @@ laconicd fixturenet-laconicd fixturenet-eth fixturenet-eth-metrics +watcher-ts watcher-mobymask watcher-erc20 watcher-erc721 diff --git a/app/data/repository-list.txt b/app/data/repository-list.txt index 3f8c84bf..bfb6085c 100644 --- a/app/data/repository-list.txt +++ b/app/data/repository-list.txt @@ -12,6 +12,7 @@ cerc-io/laconic-registry-cli cerc-io/laconic-console cerc-io/mobymask-watcher cerc-io/watcher-ts +cerc-io/mobymask-v2-watcher-ts cerc-io/react-peer cerc-io/mobymask-ui cerc-io/MobyMask diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index aaa4ac7f..fb4aebcd 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -23,15 +23,7 @@ Checkout to the required versions and branches in repos ```bash # watcher-ts cd ~/cerc/watcher-ts -git checkout v0.2.35 - -# react-peer -cd ~/cerc/react-peer -git checkout v0.2.32 - -# mobymask-ui -cd ~/cerc/mobymask-ui -git checkout v0.1.2 +git checkout v0.2.39 # MobyMask cd ~/cerc/MobyMask @@ -73,13 +65,13 @@ Deploy the stack: Find the watcher container's id and export it for later use: ```bash -export CONTAINER_ID=$(docker ps -q --filter "name=mobymask-watcher-server") +export CONTAINER_ID=$(docker ps -q --filter "name=peer-tests") ``` Run the peer tests: ```bash -docker exec -w /app/packages/peer $CONTAINER_ID yarn test +docker exec $CONTAINER_ID yarn test ``` ## Web Apps diff --git a/app/data/stacks/mobymask-v2/demo.md b/app/data/stacks/mobymask-v2/demo.md index 329b554d..953390cf 100644 --- a/app/data/stacks/mobymask-v2/demo.md +++ b/app/data/stacks/mobymask-v2/demo.md @@ -66,7 +66,7 @@ * Get the deployed contract address: ```bash - docker exec -it $(docker ps -aq --filter name="mobymask-app") cat src/config.json + docker exec -it $(docker ps -aq --filter name="mobymask-app") cat /config/config.yml ``` The value of `address` field is the deployed contract address diff --git a/app/data/stacks/mobymask-v2/stack.yml b/app/data/stacks/mobymask-v2/stack.yml index 248351b1..b91e4461 100644 --- a/app/data/stacks/mobymask-v2/stack.yml +++ b/app/data/stacks/mobymask-v2/stack.yml @@ -6,8 +6,7 @@ repos: - ethereum-optimism/optimism - ethereum-optimism/op-geth - cerc-io/watcher-ts - - cerc-io/react-peer - - cerc-io/mobymask-ui + - cerc-io/mobymask-v2-watcher-ts - cerc-io/MobyMask containers: - cerc/go-ethereum @@ -19,6 +18,7 @@ containers: - cerc/optimism-l2geth - cerc/optimism-op-batcher - cerc/optimism-op-node + - cerc/watcher-ts - cerc/watcher-mobymask-v2 - cerc/react-peer - cerc/mobymask-ui diff --git a/app/data/stacks/mobymask-v2/web-apps.md b/app/data/stacks/mobymask-v2/web-apps.md index 866f22f0..76293f1f 100644 --- a/app/data/stacks/mobymask-v2/web-apps.md +++ b/app/data/stacks/mobymask-v2/web-apps.md @@ -6,26 +6,6 @@ Instructions to setup and deploy MobyMask and Peer Test web apps Prerequisite: Watcher with GQL and relay node endpoints -Clone required repositories: - -```bash -laconic-so --stack mobymask-v2 setup-repositories --include cerc-io/react-peer,cerc-io/mobymask-ui - -# If this throws an error as a result of being already checked out to a branch/tag in a repo, remove the repositories mentioned below and re-run the command -``` - -Checkout to the required versions and branches in repos: - -```bash -# react-peer -cd ~/cerc/react-peer -git checkout v0.2.32 - -# mobymask-ui -cd ~/cerc/mobymask-ui -git checkout v0.1.2 -``` - Build the container images: ```bash From c07113320bbbcc47a82d385ff78108b8bbd6c38e Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 14:55:36 -0600 Subject: [PATCH 29/67] Fix build script (#351) --- .gitignore | 3 ++- scripts/build_shiv_package.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 4b30a1d3..8ae2b229 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ laconic-so laconic_stack_orchestrator.egg-info __pycache__ *~ -build +package +app/data/build_tag.txt diff --git a/scripts/build_shiv_package.sh b/scripts/build_shiv_package.sh index 3d0c12ff..c1841415 100755 --- a/scripts/build_shiv_package.sh +++ b/scripts/build_shiv_package.sh @@ -1,4 +1,4 @@ # Builds the shiv "package" for distribution mkdir -p ./package -version_string=$( ./app/data/version.txt ) +version_string=$( ./scripts/create_build_tag_file.sh ) shiv -c laconic-so -o package/laconic-so-${version_string} . From 5ef37894ce62aa40814ce9f97d21e87926cd3244 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 15:16:34 -0600 Subject: [PATCH 30/67] Update setuptools in case the version on the machine is old (#352) --- scripts/developer-mode-setup.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/developer-mode-setup.sh b/scripts/developer-mode-setup.sh index 997c6173..bd60a770 100755 --- a/scripts/developer-mode-setup.sh +++ b/scripts/developer-mode-setup.sh @@ -7,5 +7,6 @@ if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then fi python3 -m venv venv source ./venv/bin/activate -pip install --editable . +python3 -m pip install --upgrade pip setuptools wheel pip install shiv +pip install --editable . From 7c867171e4dad0d841732b3b92a64061bd66c8cf Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 15:29:41 -0600 Subject: [PATCH 31/67] Catch and report git errors (#353) --- app/setup_repositories.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/setup_repositories.py b/app/setup_repositories.py index 6f148b87..e8c08916 100644 --- a/app/setup_repositories.py +++ b/app/setup_repositories.py @@ -175,4 +175,8 @@ def command(ctx, include, exclude, git_ssh, check_only, pull, branches_file): git_repo.git.checkout(branch_to_checkout) for repo in repos: - process_repo(repo) + try: + process_repo(repo) + except git.exc.GitCommandError as error: + print(f"\n******* git command returned error exit status:\n{error}") + sys.exit(1) From bde48b699d57ba1e7648fee7fe0935eb8ba21347 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 16:00:41 -0600 Subject: [PATCH 32/67] Set context dir to the script dir to avoid permission errors (#354) --- .../container-build/cerc-act-runner-task-executor/build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/data/container-build/cerc-act-runner-task-executor/build.sh b/app/data/container-build/cerc-act-runner-task-executor/build.sh index 53bfd23b..25620a53 100755 --- a/app/data/container-build/cerc-act-runner-task-executor/build.sh +++ b/app/data/container-build/cerc-act-runner-task-executor/build.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash # Build a local version of the task executor for act-runner source ${CERC_CONTAINER_BASE_DIR}/build-base.sh -docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/hosting/gitea/Dockerfile.task-executor ${build_command_args} ${CERC_REPO_BASE_DIR}/hosting +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +docker build -t cerc/act-runner-task-executor:local -f ${CERC_REPO_BASE_DIR}/hosting/gitea/Dockerfile.task-executor ${build_command_args} ${SCRIPT_DIR} From a335ccde3ae921c2f445086fc9ce78511faf4a24 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 16:43:59 -0600 Subject: [PATCH 33/67] Update base containers (#355) * Update to Node18 * Update to latest stable lighthouse --- app/data/container-build/cerc-laconic-console-host/Dockerfile | 2 +- app/data/container-build/cerc-lighthouse/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/data/container-build/cerc-laconic-console-host/Dockerfile b/app/data/container-build/cerc-laconic-console-host/Dockerfile index a31aa265..7e3fc46b 100644 --- a/app/data/container-build/cerc-laconic-console-host/Dockerfile +++ b/app/data/container-build/cerc-laconic-console-host/Dockerfile @@ -1,6 +1,6 @@ # Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile # [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster -ARG VARIANT=16-bullseye +ARG VARIANT=18-bullseye FROM node:${VARIANT} ARG USERNAME=node diff --git a/app/data/container-build/cerc-lighthouse/Dockerfile b/app/data/container-build/cerc-lighthouse/Dockerfile index 14f0a2ae..7d4fe5d8 100644 --- a/app/data/container-build/cerc-lighthouse/Dockerfile +++ b/app/data/container-build/cerc-lighthouse/Dockerfile @@ -1,4 +1,4 @@ -FROM sigp/lighthouse:v3.2.1-modern +FROM sigp/lighthouse:v4.0.1-modern RUN apt-get update; apt-get install bash netcat curl less jq -y; From db6da4b75a510b8ab3c153e53632495b29a863ae Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 18:20:00 -0600 Subject: [PATCH 34/67] Add fixturenet-eth test --- .gitea/fixturenet-eth-test.yml | 27 ++++++++++++++++++++++ tests/fixturenet-eth/run-test.sh | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 .gitea/fixturenet-eth-test.yml create mode 100755 tests/fixturenet-eth/run-test.sh diff --git a/.gitea/fixturenet-eth-test.yml b/.gitea/fixturenet-eth-test.yml new file mode 100644 index 00000000..64806382 --- /dev/null +++ b/.gitea/fixturenet-eth-test.yml @@ -0,0 +1,27 @@ +name: Fixturenet-Eth-Test + +on: + push: + branches: 'test-ci' + +jobs: + test: + name: "Run an Ethereum fixturenet test" + runs-on: ubuntu-latest + steps: + - name: "Clone project repository" + uses: actions/checkout@v3 + - name: "Install Python" + uses: cerc-io/setup-python@v4 + with: + python-version: '3.8' + - name: "Print Python version" + run: python3 --version + - name: "Install shiv" + run: pip install shiv + - name: "Generate build version file" + run: ./scripts/create_build_tag_file.sh + - name: "Build local shiv package" + run: ./scripts/build_shiv_package.sh + - name: "Run fixturenet-eth tests" + run: ./tests/fixturenet-eth/run-test.sh diff --git a/tests/fixturenet-eth/run-test.sh b/tests/fixturenet-eth/run-test.sh new file mode 100755 index 00000000..3fd4cd59 --- /dev/null +++ b/tests/fixturenet-eth/run-test.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi +set -e +echo "Running stack-orchestrator Ethereum fixturenet test" +# Bit of a hack, test the most recent package +TEST_TARGET_SO=$( ls -t1 ./package/laconic-so* | head -1 ) +# Set a new unique repo dir +export CERC_REPO_BASE_DIR=$(mktemp -d stack-orchestrator-fixturenet-eth-test.XXXXXXXXXX) +echo "Testing this package: $TEST_TARGET_SO" +echo "Test version command" +reported_version_string=$( $TEST_TARGET_SO version ) +echo "Version reported is: ${reported_version_string}" +echo "Cloning repositories into: $CERC_REPO_BASE_DIR" +$TEST_TARGET_SO --stack fixturenet-eth setup-repositories +$TEST_TARGET_SO --stack fixturenet-eth build-containers +$TEST_TARGET_SO --stack fixturenet-eth deploy up +# Verify that the fixturenet is up and running +$TEST_TARGET_SO --stack fixturenet-eth deploy ps +$TEST_TARGET_SO --stack fixturenet-eth deploy exec fixturenet-eth-bootnode-lighthouse /scripts/status-internal.sh +initial_block_number=$($TEST_TARGET_SO --stack fixturenet-eth deploy exec foundry "cast block-number") +# Check that the block number increases some time later +sleep 12 +subsequent_block_number=$($TEST_TARGET_SO --stack fixturenet-eth deploy exec foundry "cast block-number") +block_number_difference=$((subsequent_block_number - initial_block_number)) +# Block height difference should be between 1 and some small number +if [[ $block_number_difference -gt 1 && $block_number_difference -lt 10 ]]; then + echo "Test passed" + test_result=0 +else + echo "Test failed: block numbers were ${initial_block_number} and ${subsequent_block_number}" + test_result=1 +fi +$TEST_TARGET_SO --stack fixturenet-eth deploy down +echo "Removing cloned repositories" +rm -rf $CERC_REPO_BASE_DIR +exit $test_result From 8aed8ab8ae3e9263eda0e073127c9d4b7b8154b8 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 18:22:18 -0600 Subject: [PATCH 35/67] Get branch name right --- .gitea/fixturenet-eth-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/fixturenet-eth-test.yml b/.gitea/fixturenet-eth-test.yml index 64806382..6b764664 100644 --- a/.gitea/fixturenet-eth-test.yml +++ b/.gitea/fixturenet-eth-test.yml @@ -2,7 +2,7 @@ name: Fixturenet-Eth-Test on: push: - branches: 'test-ci' + branches: 'ci-test' jobs: test: From d1cada5029692aec1b0f76f5bdd17468cf85909f Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 18:25:49 -0600 Subject: [PATCH 36/67] Add fixturenet-eth test (#356) * Add fixturenet-eth test --- .gitea/fixturenet-eth-test.yml | 27 ++++++++++++++++++++++ tests/fixturenet-eth/run-test.sh | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 .gitea/fixturenet-eth-test.yml create mode 100755 tests/fixturenet-eth/run-test.sh diff --git a/.gitea/fixturenet-eth-test.yml b/.gitea/fixturenet-eth-test.yml new file mode 100644 index 00000000..6b764664 --- /dev/null +++ b/.gitea/fixturenet-eth-test.yml @@ -0,0 +1,27 @@ +name: Fixturenet-Eth-Test + +on: + push: + branches: 'ci-test' + +jobs: + test: + name: "Run an Ethereum fixturenet test" + runs-on: ubuntu-latest + steps: + - name: "Clone project repository" + uses: actions/checkout@v3 + - name: "Install Python" + uses: cerc-io/setup-python@v4 + with: + python-version: '3.8' + - name: "Print Python version" + run: python3 --version + - name: "Install shiv" + run: pip install shiv + - name: "Generate build version file" + run: ./scripts/create_build_tag_file.sh + - name: "Build local shiv package" + run: ./scripts/build_shiv_package.sh + - name: "Run fixturenet-eth tests" + run: ./tests/fixturenet-eth/run-test.sh diff --git a/tests/fixturenet-eth/run-test.sh b/tests/fixturenet-eth/run-test.sh new file mode 100755 index 00000000..3fd4cd59 --- /dev/null +++ b/tests/fixturenet-eth/run-test.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi +set -e +echo "Running stack-orchestrator Ethereum fixturenet test" +# Bit of a hack, test the most recent package +TEST_TARGET_SO=$( ls -t1 ./package/laconic-so* | head -1 ) +# Set a new unique repo dir +export CERC_REPO_BASE_DIR=$(mktemp -d stack-orchestrator-fixturenet-eth-test.XXXXXXXXXX) +echo "Testing this package: $TEST_TARGET_SO" +echo "Test version command" +reported_version_string=$( $TEST_TARGET_SO version ) +echo "Version reported is: ${reported_version_string}" +echo "Cloning repositories into: $CERC_REPO_BASE_DIR" +$TEST_TARGET_SO --stack fixturenet-eth setup-repositories +$TEST_TARGET_SO --stack fixturenet-eth build-containers +$TEST_TARGET_SO --stack fixturenet-eth deploy up +# Verify that the fixturenet is up and running +$TEST_TARGET_SO --stack fixturenet-eth deploy ps +$TEST_TARGET_SO --stack fixturenet-eth deploy exec fixturenet-eth-bootnode-lighthouse /scripts/status-internal.sh +initial_block_number=$($TEST_TARGET_SO --stack fixturenet-eth deploy exec foundry "cast block-number") +# Check that the block number increases some time later +sleep 12 +subsequent_block_number=$($TEST_TARGET_SO --stack fixturenet-eth deploy exec foundry "cast block-number") +block_number_difference=$((subsequent_block_number - initial_block_number)) +# Block height difference should be between 1 and some small number +if [[ $block_number_difference -gt 1 && $block_number_difference -lt 10 ]]; then + echo "Test passed" + test_result=0 +else + echo "Test failed: block numbers were ${initial_block_number} and ${subsequent_block_number}" + test_result=1 +fi +$TEST_TARGET_SO --stack fixturenet-eth deploy down +echo "Removing cloned repositories" +rm -rf $CERC_REPO_BASE_DIR +exit $test_result From aadd1c15f03e18701e035204e22a652f1e30329c Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 18:27:56 -0600 Subject: [PATCH 37/67] Put file in the right place --- .gitea/{ => workflows}/fixturenet-eth-test.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .gitea/{ => workflows}/fixturenet-eth-test.yml (100%) diff --git a/.gitea/fixturenet-eth-test.yml b/.gitea/workflows/fixturenet-eth-test.yml similarity index 100% rename from .gitea/fixturenet-eth-test.yml rename to .gitea/workflows/fixturenet-eth-test.yml From 32c0830e777ec3ca9d9b638e4c0d6071cd9d4aaa Mon Sep 17 00:00:00 2001 From: Zach Date: Wed, 19 Apr 2023 21:10:19 -0400 Subject: [PATCH 38/67] Update laconicd-fixturenet.md --- docs/laconicd-fixturenet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/laconicd-fixturenet.md b/docs/laconicd-fixturenet.md index 66ae1020..eacdf33e 100644 --- a/docs/laconicd-fixturenet.md +++ b/docs/laconicd-fixturenet.md @@ -72,7 +72,7 @@ It's possible to run into an `ESOCKETTIMEDOUT` error, e.g., `error An unexpected 4. Set this environment variable to your droplet's IP address: ``` -export LACONIC_HOSTED_ENDPOINT=http://68.183.195.210 +export LACONIC_HOSTED_ENDPOINT=http:// ``` 5. Deploy the stack: From 5c53e3bedc92846a06334a7ab9041150c031c623 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 20:56:19 -0600 Subject: [PATCH 39/67] Delete fixturenet-eth-test.yml --- .gitea/fixturenet-eth-test.yml | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 .gitea/fixturenet-eth-test.yml diff --git a/.gitea/fixturenet-eth-test.yml b/.gitea/fixturenet-eth-test.yml deleted file mode 100644 index 6b764664..00000000 --- a/.gitea/fixturenet-eth-test.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Fixturenet-Eth-Test - -on: - push: - branches: 'ci-test' - -jobs: - test: - name: "Run an Ethereum fixturenet test" - runs-on: ubuntu-latest - steps: - - name: "Clone project repository" - uses: actions/checkout@v3 - - name: "Install Python" - uses: cerc-io/setup-python@v4 - with: - python-version: '3.8' - - name: "Print Python version" - run: python3 --version - - name: "Install shiv" - run: pip install shiv - - name: "Generate build version file" - run: ./scripts/create_build_tag_file.sh - - name: "Build local shiv package" - run: ./scripts/build_shiv_package.sh - - name: "Run fixturenet-eth tests" - run: ./tests/fixturenet-eth/run-test.sh From 727fa67d8e0e5ac467388d8af29a6a99c15b74de Mon Sep 17 00:00:00 2001 From: David Boreham Date: Wed, 19 Apr 2023 21:32:48 -0600 Subject: [PATCH 40/67] Turn off CI job on push except for to main --- .gitea/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index fd1c739c..96cfb8cd 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -4,7 +4,7 @@ on: pull_request: branches: '*' push: - branches: '*' + branches: 'main' jobs: test: From 46b36c3cb6e9b4cbbaf908052d49e498f6397f33 Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Thu, 20 Apr 2023 10:49:19 +0530 Subject: [PATCH 41/67] Add container to mobymask-v2 stack for LXDAO mobymask-app (#347) * Add container to stack for lxdao mobymask-app * Remove shm_size * Use cerc-io scoped alias for lxdao app package * Change alias to @cerc-io/mobymask-ui-lxdao --- .../compose/docker-compose-mobymask-app.yml | 40 ++++++++++++++++++- .../cerc-mobymask-ui/Dockerfile | 9 +++-- .../cerc-mobymask-ui/start-serving-app.sh | 2 +- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/app/data/compose/docker-compose-mobymask-app.yml b/app/data/compose/docker-compose-mobymask-app.yml index 6df48130..f2b30a4b 100644 --- a/app/data/compose/docker-compose-mobymask-app.yml +++ b/app/data/compose/docker-compose-mobymask-app.yml @@ -13,6 +13,7 @@ services: CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL} CERC_RELAY_NODES: ${CERC_RELAY_NODES} + CERC_BUILD_DIR: "@cerc-io/mobymask-ui/build" working_dir: /scripts # Waits for watcher server to be up before app build # Required when running with watcher stack to get deployed contract address @@ -28,12 +29,47 @@ services: ports: - "0.0.0.0:3002:80" healthcheck: - test: ["CMD", "nc", "-v", "localhost", "80"] + test: ["CMD", "nc", "-vz", "localhost", "80"] + interval: 20s + timeout: 5s + retries: 15 + start_period: 10s + extra_hosts: + - "host.docker.internal:host-gateway" + + # Builds and serves the LXDAO version of MobyMask react-app + lxdao-mobymask-app: + restart: unless-stopped + image: cerc/mobymask-ui:local + env_file: + - ../config/watcher-mobymask-v2/mobymask-params.env + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_CHAIN_ID: ${CERC_CHAIN_ID} + CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} + CERC_APP_WATCHER_URL: ${CERC_APP_WATCHER_URL} + CERC_RELAY_NODES: ${CERC_RELAY_NODES} + CERC_BUILD_DIR: "@cerc-io/mobymask-ui-lxdao/build" + working_dir: /scripts + # Waits for watcher server to be up before app build + # Required when running with watcher stack to get deployed contract address + command: + - sh + - -c + - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./mobymask-app-start.sh + volumes: + - ../config/wait-for-it.sh:/scripts/wait-for-it.sh + - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh + - peers_ids:/peers + - mobymask_deployment:/server + ports: + - "0.0.0.0:3004:80" + healthcheck: + test: ["CMD", "nc", "-vz", "localhost", "80"] interval: 20s timeout: 5s retries: 15 start_period: 10s - shm_size: '1GB' extra_hosts: - "host.docker.internal:host-gateway" diff --git a/app/data/container-build/cerc-mobymask-ui/Dockerfile b/app/data/container-build/cerc-mobymask-ui/Dockerfile index 3f04ec45..4ff202bc 100644 --- a/app/data/container-build/cerc-mobymask-ui/Dockerfile +++ b/app/data/container-build/cerc-mobymask-ui/Dockerfile @@ -31,7 +31,7 @@ RUN \ # Install additional OS packages. RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends jq bash + && apt-get -y install --no-install-recommends jq bash netcat # We do this to get a yq binary from the published container, for the correct architecture we're building here COPY --from=docker.io/mikefarah/yq:latest /usr/bin/yq /usr/local/bin/yq @@ -48,8 +48,11 @@ RUN mkdir -p /config # Install simple web server for now (use nginx perhaps later) RUN yarn global add http-server -# Globally install the payload web app package -RUN yarn global add @cerc-io/mobymask-ui +# Globally install both versions of the payload web app package +# Install old version of MobyMask web app +RUN yarn global add @cerc-io/mobymask-ui@0.1.2 +# Install the LXDAO version of MobyMask web app +RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.2-lxdao-0.1.0 # Expose port for http EXPOSE 80 diff --git a/app/data/container-build/cerc-mobymask-ui/start-serving-app.sh b/app/data/container-build/cerc-mobymask-ui/start-serving-app.sh index 4e0a976c..0e11b447 100755 --- a/app/data/container-build/cerc-mobymask-ui/start-serving-app.sh +++ b/app/data/container-build/cerc-mobymask-ui/start-serving-app.sh @@ -4,6 +4,6 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then fi # TODO: Don't hard wire this: -webapp_files_dir=/usr/local/share/.config/yarn/global/node_modules/@cerc-io/mobymask-ui/build +webapp_files_dir="/usr/local/share/.config/yarn/global/node_modules/${CERC_BUILD_DIR}" /scripts/apply-webapp-config.sh /config/config.yml ${webapp_files_dir} MOBYMASK_HOSTED_CONFIG http-server -p 80 ${webapp_files_dir} From 01499a3f053e36ec9546f998e83656d94e682021 Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Thu, 20 Apr 2023 14:45:01 +0530 Subject: [PATCH 42/67] Upgrade web-app package versions to set custom relay node (#358) --- app/data/container-build/cerc-mobymask-ui/Dockerfile | 4 ++-- app/data/container-build/cerc-react-peer/Dockerfile | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/data/container-build/cerc-mobymask-ui/Dockerfile b/app/data/container-build/cerc-mobymask-ui/Dockerfile index 4ff202bc..e5a804b4 100644 --- a/app/data/container-build/cerc-mobymask-ui/Dockerfile +++ b/app/data/container-build/cerc-mobymask-ui/Dockerfile @@ -50,9 +50,9 @@ RUN yarn global add http-server # Globally install both versions of the payload web app package # Install old version of MobyMask web app -RUN yarn global add @cerc-io/mobymask-ui@0.1.2 +RUN yarn global add @cerc-io/mobymask-ui@0.1.3 # Install the LXDAO version of MobyMask web app -RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.2-lxdao-0.1.0 +RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.3-lxdao-0.1.0 # Expose port for http EXPOSE 80 diff --git a/app/data/container-build/cerc-react-peer/Dockerfile b/app/data/container-build/cerc-react-peer/Dockerfile index f60ba504..191f986b 100644 --- a/app/data/container-build/cerc-react-peer/Dockerfile +++ b/app/data/container-build/cerc-react-peer/Dockerfile @@ -21,8 +21,7 @@ RUN mkdir -p /config RUN yarn global add http-server # Globally install the payload web app package -RUN yarn global add @cerc-io/test-app - +RUN yarn global add @cerc-io/test-app@0.2.33 # Expose port for http EXPOSE 80 From eb777b0b477c32791cfb7691814475176f923e26 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Thu, 20 Apr 2023 15:12:59 +0530 Subject: [PATCH 43/67] Fetch geth accounts using an exposed endpoint (#357) * Fetch account creds served by geth service * Use fetched account creds in mobymask-v2 stack --- .../compose/docker-compose-fixturenet-eth.yml | 2 -- .../docker-compose-fixturenet-optimism.yml | 3 +-- .../docker-compose-watcher-mobymask-v2.yml | 5 ++--- .../config/fixturenet-optimism/l1-params.env | 8 +++----- .../optimism-contracts/run.sh | 19 +++++++++++-------- .../deploy-and-generate-invite.sh | 16 +++++++++++----- .../watcher-mobymask-v2/optimism-params.env | 5 ++--- .../watcher-mobymask-v2/start-server.sh | 16 +++++++++++----- .../container-build/cerc-mobymask/Dockerfile | 2 +- .../cerc-optimism-contracts/Dockerfile | 2 +- .../cerc-watcher-mobymask-v2/Dockerfile | 2 +- app/data/stacks/fixturenet-eth/README.md | 4 ++-- app/data/stacks/fixturenet-optimism/README.md | 4 ++-- .../stacks/fixturenet-optimism/l2-only.md | 11 ++++++++--- app/data/stacks/mobymask-v2/README.md | 4 ++-- app/data/stacks/mobymask-v2/mobymask-only.md | 10 +++++++--- 16 files changed, 65 insertions(+), 48 deletions(-) diff --git a/app/data/compose/docker-compose-fixturenet-eth.yml b/app/data/compose/docker-compose-fixturenet-eth.yml index 2024cacb..c687b326 100644 --- a/app/data/compose/docker-compose-fixturenet-eth.yml +++ b/app/data/compose/docker-compose-fixturenet-eth.yml @@ -27,7 +27,6 @@ services: - ../config/fixturenet-eth/fixturenet-eth.env image: cerc/fixturenet-eth-geth:local volumes: - - fixturenet_geth_accounts:/opt/testnet/build/el - fixturenet_eth_geth_1_data:/root/ethdata healthcheck: test: ["CMD", "nc", "-v", "localhost", "8545"] @@ -116,7 +115,6 @@ services: condition: service_healthy volumes: - fixturenet_geth_accounts: fixturenet_eth_bootnode_geth_data: fixturenet_eth_geth_1_data: fixturenet_eth_geth_2_data: diff --git a/app/data/compose/docker-compose-fixturenet-optimism.yml b/app/data/compose/docker-compose-fixturenet-optimism.yml index cc1d64d3..c651e5a7 100644 --- a/app/data/compose/docker-compose-fixturenet-optimism.yml +++ b/app/data/compose/docker-compose-fixturenet-optimism.yml @@ -13,6 +13,7 @@ services: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} CERC_L1_CHAIN_ID: ${CERC_L1_CHAIN_ID} CERC_L1_RPC: ${CERC_L1_RPC} + CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL} CERC_L1_ADDRESS: ${CERC_L1_ADDRESS} CERC_L1_PRIV_KEY: ${CERC_L1_PRIV_KEY} CERC_L1_ADDRESS_2: ${CERC_L1_ADDRESS_2} @@ -27,7 +28,6 @@ services: - ../container-build/cerc-optimism-contracts/hardhat-tasks/send-balance.ts:/app/packages/contracts-bedrock/tasks/send-balance.ts - ../config/fixturenet-optimism/optimism-contracts/update-config.js:/app/packages/contracts-bedrock/update-config.js - ../config/fixturenet-optimism/optimism-contracts/run.sh:/app/packages/contracts-bedrock/run.sh - - fixturenet_geth_accounts:/geth-accounts:ro - l2_accounts:/l2-accounts - l1_deployment:/app/packages/contracts-bedrock extra_hosts: @@ -126,7 +126,6 @@ services: - "host.docker.internal:host-gateway" volumes: - fixturenet_geth_accounts: l1_deployment: l2_accounts: l2_config: diff --git a/app/data/compose/docker-compose-watcher-mobymask-v2.yml b/app/data/compose/docker-compose-watcher-mobymask-v2.yml index fa68d017..58015fe1 100644 --- a/app/data/compose/docker-compose-watcher-mobymask-v2.yml +++ b/app/data/compose/docker-compose-watcher-mobymask-v2.yml @@ -34,6 +34,7 @@ services: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} ENV: "PROD" CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC} + CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL} CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER} CERC_MOBYMASK_APP_BASE_URI: ${CERC_MOBYMASK_APP_BASE_URI} CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} @@ -50,7 +51,6 @@ services: - ../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 - mobymask_deployment:/app/packages/server - - fixturenet_geth_accounts:/geth-accounts:ro extra_hosts: - "host.docker.internal:host-gateway" @@ -83,6 +83,7 @@ services: environment: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} CERC_L2_GETH_RPC: ${CERC_L2_GETH_RPC} + CERC_L1_ACCOUNTS_CSV_URL: ${CERC_L1_ACCOUNTS_CSV_URL} CERC_PRIVATE_KEY_PEER: ${CERC_PRIVATE_KEY_PEER} CERC_RELAY_PEERS: ${CERC_RELAY_PEERS} CERC_RELAY_ANNOUNCE_DOMAIN: ${CERC_RELAY_ANNOUNCE_DOMAIN} @@ -94,7 +95,6 @@ services: - ../config/watcher-mobymask-v2/start-server.sh:/app/start-server.sh - peers_ids:/app/peers - mobymask_deployment:/server - - fixturenet_geth_accounts:/geth-accounts:ro # Expose GQL, metrics and relay node ports ports: - "0.0.0.0:3001:3001" @@ -135,4 +135,3 @@ volumes: mobymask_watcher_db_data: peers_ids: mobymask_deployment: - fixturenet_geth_accounts: diff --git a/app/data/config/fixturenet-optimism/l1-params.env b/app/data/config/fixturenet-optimism/l1-params.env index 6b23c872..5353e62f 100644 --- a/app/data/config/fixturenet-optimism/l1-params.env +++ b/app/data/config/fixturenet-optimism/l1-params.env @@ -6,9 +6,7 @@ DEFAULT_CERC_L1_RPC="http://fixturenet-eth-geth-1:8545" DEFAULT_CERC_L1_HOST="fixturenet-eth-geth-1" DEFAULT_CERC_L1_PORT=8545 -# Credentials for accounts on L1 to send balance to Optimism Proxy contract from +# URL to get CSV with credentials for accounts on L1 +# that are used to send balance to Optimism Proxy contract # (enables them to do transactions on L2) -DEFAULT_CERC_L1_ADDRESS= -DEFAULT_CERC_L1_PRIV_KEY= -DEFAULT_CERC_L1_ADDRESS_2= -DEFAULT_CERC_L1_PRIV_KEY_2= +DEFAULT_CERC_L1_ACCOUNTS_CSV_URL="http://fixturenet-eth-bootnode-geth:9898/accounts.csv" diff --git a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh index a256ea64..eb55e1fd 100755 --- a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh +++ b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh @@ -7,10 +7,7 @@ fi CERC_L1_CHAIN_ID="${CERC_L1_CHAIN_ID:-${DEFAULT_CERC_L1_CHAIN_ID}}" CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" -CERC_L1_ADDRESS="${CERC_L1_ADDRESS:-${DEFAULT_CERC_L1_ADDRESS}}" -CERC_L1_PRIV_KEY="${CERC_L1_PRIV_KEY:-${DEFAULT_CERC_L1_PRIV_KEY}}" -CERC_L1_ADDRESS_2="${CERC_L1_ADDRESS_2:-${DEFAULT_CERC_L1_ADDRESS_2}}" -CERC_L1_PRIV_KEY_2="${CERC_L1_PRIV_KEY_2:-${DEFAULT_CERC_L1_PRIV_KEY_2}}" +CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}" echo "Using L1 RPC endpoint ${CERC_L1_RPC}" @@ -62,15 +59,21 @@ PROPOSER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Proposer.address') BATCHER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Batcher.address') SEQUENCER_ADDRESS=$(echo "$KEYS_JSON" | jq -r '.Sequencer.address') -# Read the private key of L1 accounts -if [ -f /geth-accounts/accounts.csv ]; then - echo "Using L1 account credentials from the mounted volume" +# Get the private keys of L1 accounts +if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \ + l1_accounts_response=$(curl -L --write-out '%{http_code}' --silent --output /dev/null "$CERC_L1_ACCOUNTS_CSV_URL") && \ + [ "$l1_accounts_response" -eq 200 ]; +then + echo "Fetching L1 account credentials using provided URL" + mkdir -p /geth-accounts + wget -O /geth-accounts/accounts.csv "$CERC_L1_ACCOUNTS_CSV_URL" + CERC_L1_ADDRESS=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 2) CERC_L1_PRIV_KEY=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 3) CERC_L1_ADDRESS_2=$(awk -F, 'NR==2{print $(NF-1)}' /geth-accounts/accounts.csv) CERC_L1_PRIV_KEY_2=$(awk -F, 'NR==2{print $NF}' /geth-accounts/accounts.csv) else - echo "Using L1 account credentials from env" + echo "Couldn't fetch L1 account credentials, using them from env" fi # Select a finalized L1 block as the starting point for roll ups 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 2e6ffcf7..30dab354 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 @@ -5,19 +5,25 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then fi CERC_L2_GETH_RPC="${CERC_L2_GETH_RPC:-${DEFAULT_CERC_L2_GETH_RPC}}" -CERC_PRIVATE_KEY_DEPLOYER="${CERC_PRIVATE_KEY_DEPLOYER:-${DEFAULT_CERC_PRIVATE_KEY_DEPLOYER}}" +CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}" CERC_MOBYMASK_APP_BASE_URI="${CERC_MOBYMASK_APP_BASE_URI:-${DEFAULT_CERC_MOBYMASK_APP_BASE_URI}}" CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}" echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}" -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 +if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \ + l1_accounts_response=$(curl -L --write-out '%{http_code}' --silent --output /dev/null "$CERC_L1_ACCOUNTS_CSV_URL") && \ + [ "$l1_accounts_response" -eq 200 ]; +then + echo "Fetching L1 account credentials using provided URL" + mkdir -p /geth-accounts + wget -O /geth-accounts/accounts.csv "$CERC_L1_ACCOUNTS_CSV_URL" + + # Read the private key of an L1 account to deploy contract CERC_PRIVATE_KEY_DEPLOYER=$(head -n 1 /geth-accounts/accounts.csv | cut -d ',' -f 3) else - echo "Using CERC_PRIVATE_KEY_DEPLOYER from env" + echo "Couldn't fetch L1 account credentials, using CERC_PRIVATE_KEY_DEPLOYER from env" fi # Set the private key diff --git a/app/data/config/watcher-mobymask-v2/optimism-params.env b/app/data/config/watcher-mobymask-v2/optimism-params.env index 6bdc7ea3..67eb3314 100644 --- a/app/data/config/watcher-mobymask-v2/optimism-params.env +++ b/app/data/config/watcher-mobymask-v2/optimism-params.env @@ -8,6 +8,5 @@ DEFAULT_CERC_L2_GETH_PORT=8545 DEFAULT_CERC_L2_NODE_HOST="op-node" DEFAULT_CERC_L2_NODE_PORT=8547 -# Credentials for accounts to perform txs on L2 -DEFAULT_CERC_PRIVATE_KEY_DEPLOYER= -DEFAULT_CERC_PRIVATE_KEY_PEER= +# URL to get CSV with credentials for accounts on L1 to perform txs on L2 +DEFAULT_CERC_L1_ACCOUNTS_CSV_URL="http://fixturenet-eth-bootnode-geth:9898/accounts.csv" diff --git a/app/data/config/watcher-mobymask-v2/start-server.sh b/app/data/config/watcher-mobymask-v2/start-server.sh index 02184842..b46a7c14 100755 --- a/app/data/config/watcher-mobymask-v2/start-server.sh +++ b/app/data/config/watcher-mobymask-v2/start-server.sh @@ -5,7 +5,7 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then fi CERC_L2_GETH_RPC="${CERC_L2_GETH_RPC:-${DEFAULT_CERC_L2_GETH_RPC}}" -CERC_PRIVATE_KEY_PEER="${CERC_PRIVATE_KEY_PEER:-${DEFAULT_CERC_PRIVATE_KEY_PEER}}" +CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS_CSV_URL}}" CERC_RELAY_PEERS="${CERC_RELAY_PEERS:-${DEFAULT_CERC_RELAY_PEERS}}" CERC_RELAY_ANNOUNCE_DOMAIN="${CERC_RELAY_ANNOUNCE_DOMAIN:-${DEFAULT_CERC_RELAY_ANNOUNCE_DOMAIN}}" @@ -24,12 +24,18 @@ else CONTRACT_ADDRESS=$(jq -r '.address' /server/config.json | tr -d '"') fi -if [ -f /geth-accounts/accounts.csv ]; then - echo "Using L1 private key from the mounted volume" - # Read the private key of L1 account for sending txs from peer +if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \ + l1_accounts_response=$(curl -L --write-out '%{http_code}' --silent --output /dev/null "$CERC_L1_ACCOUNTS_CSV_URL") && \ + [ "$l1_accounts_response" -eq 200 ]; +then + echo "Fetching L1 account credentials using provided URL" + mkdir -p /geth-accounts + wget -O /geth-accounts/accounts.csv "$CERC_L1_ACCOUNTS_CSV_URL" + + # Read the private key of an L1 account for sending txs from peer CERC_PRIVATE_KEY_PEER=$(awk -F, 'NR==2{print $NF}' /geth-accounts/accounts.csv) else - echo "Using CERC_PRIVATE_KEY_PEER from env" + echo "Couldn't fetch L1 account credentials, using CERC_PRIVATE_KEY_PEER from env" fi # Read in the config template TOML file and modify it diff --git a/app/data/container-build/cerc-mobymask/Dockerfile b/app/data/container-build/cerc-mobymask/Dockerfile index caa3e6b5..3bcebced 100644 --- a/app/data/container-build/cerc-mobymask/Dockerfile +++ b/app/data/container-build/cerc-mobymask/Dockerfile @@ -1,6 +1,6 @@ FROM node:16.17.1-alpine3.16 -RUN apk --update --no-cache add python3 alpine-sdk jq bash +RUN apk --update --no-cache add python3 alpine-sdk jq bash curl wget WORKDIR /app diff --git a/app/data/container-build/cerc-optimism-contracts/Dockerfile b/app/data/container-build/cerc-optimism-contracts/Dockerfile index cdc98b08..ed9c4b22 100644 --- a/app/data/container-build/cerc-optimism-contracts/Dockerfile +++ b/app/data/container-build/cerc-optimism-contracts/Dockerfile @@ -2,7 +2,7 @@ FROM cerc/foundry:local # Install node (local foundry is a debian based image) RUN apt-get update \ - && apt-get install -y curl \ + && apt-get install -y curl wget \ && curl --silent --location https://deb.nodesource.com/setup_16.x | bash - \ && apt-get update \ && apt-get install -y nodejs git busybox jq \ diff --git a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile index 9d1a70b7..c572658d 100644 --- a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile +++ b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile @@ -1,7 +1,7 @@ FROM ubuntu:22.04 RUN apt-get update \ - && apt-get install -y curl gnupg build-essential \ + && apt-get install -y curl wget gnupg build-essential \ && curl --silent --location https://deb.nodesource.com/setup_18.x | bash - \ && apt-get update \ && apt-get install -y nodejs git busybox jq \ diff --git a/app/data/stacks/fixturenet-eth/README.md b/app/data/stacks/fixturenet-eth/README.md index 86404af0..c54237aa 100644 --- a/app/data/stacks/fixturenet-eth/README.md +++ b/app/data/stacks/fixturenet-eth/README.md @@ -117,8 +117,8 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -$ docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data|.*fixturenet_geth_accounts" +$ docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data" # Remove all the listed volumes -$ docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data|.*fixturenet_geth_accounts") +$ docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data") ``` diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index 5099cdd3..345e9a8d 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -76,10 +76,10 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -docker volume ls -q --filter "name=.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data" +docker volume ls -q --filter "name=.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data" # Remove all the listed volumes -docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") +docker volume rm $(docker volume ls -q --filter "name=.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") ``` ## Troubleshooting diff --git a/app/data/stacks/fixturenet-optimism/l2-only.md b/app/data/stacks/fixturenet-optimism/l2-only.md index 821d16a8..957627d3 100644 --- a/app/data/stacks/fixturenet-optimism/l2-only.md +++ b/app/data/stacks/fixturenet-optimism/l2-only.md @@ -46,8 +46,13 @@ Create and update an env file to be used in the next step ([defaults](../../conf CERC_L1_HOST= CERC_L1_PORT= - # Credentials for accounts on L1 to send balance to Optimism Proxy contract from + # URL to get CSV with credentials for accounts on L1 + # that are used to send balance to Optimism Proxy contract # (enables them to do transactions on L2) + CERC_L1_ACCOUNTS_CSV_URL= + + # OR + # Specify the required account credentials CERC_L1_ADDRESS= CERC_L1_PRIV_KEY= CERC_L1_ADDRESS_2= @@ -91,10 +96,10 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -docker volume ls -q --filter "name=.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data" +docker volume ls -q --filter "name=.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data" # Remove all the listed volumes -docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") +docker volume rm $(docker volume ls -q --filter "name=.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") ``` ## Troubleshooting diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index fb4aebcd..25b8f3ea 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -114,8 +114,8 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data" +docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*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|.*peers_ids|.*mobymask_deployment|.*fixturenet_geth_accounts|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") +docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*l1_deployment|.*l2_accounts|.*l2_config|.*l2_geth_data") ``` diff --git a/app/data/stacks/mobymask-v2/mobymask-only.md b/app/data/stacks/mobymask-v2/mobymask-only.md index f4d25702..5ae5dbaa 100644 --- a/app/data/stacks/mobymask-v2/mobymask-only.md +++ b/app/data/stacks/mobymask-v2/mobymask-only.md @@ -49,7 +49,11 @@ Create and update an env file to be used in the next step ([defaults](../../conf CERC_L2_NODE_HOST= CERC_L2_NODE_PORT= - # Credentials for accounts to perform txs on L2 + # URL to get CSV with credentials for accounts on L1 to perform txs on L2 + CERC_L1_ACCOUNTS_CSV_URL= + + # OR + # Specify the required account credentials CERC_PRIVATE_KEY_DEPLOYER= CERC_PRIVATE_KEY_PEER= @@ -118,8 +122,8 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*fixturenet_geth_accounts" +docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment" # Remove all the listed volumes -docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment|.*fixturenet_geth_accounts") +docker volume rm $(docker volume ls -q --filter "name=.*mobymask_watcher_db_data|.*peers_ids|.*mobymask_deployment") ``` From f78176a27fe7b180e5d4197e8b29dbaed323874e Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Thu, 20 Apr 2023 15:30:19 +0530 Subject: [PATCH 44/67] Add instructions to join MobyMask watcher p2p network (#346) * Refactor L2 enpoint check to contract deployment script * Add instructions to join to an existing watcher network * Include mobymask-v2-watcher-ts in repositories setup * Add a clean up section and expected outputs * Add a troubleshooting section * Use lxdao frontend * Update instructions for updated UI --- .../docker-compose-watcher-mobymask-v2.yml | 13 +- .../deploy-and-generate-invite.sh | 22 +- .../watcher-mobymask-v2/optimism-params.env | 2 + app/data/stacks/mobymask-v2/README.md | 4 + app/data/stacks/mobymask-v2/demo.md | 2 +- app/data/stacks/mobymask-v2/mobymask-only.md | 12 +- .../stacks/mobymask-v2/watcher-p2p-network.md | 306 ++++++++++++++++++ 7 files changed, 342 insertions(+), 19 deletions(-) create mode 100644 app/data/stacks/mobymask-v2/watcher-p2p-network.md diff --git a/app/data/compose/docker-compose-watcher-mobymask-v2.yml b/app/data/compose/docker-compose-watcher-mobymask-v2.yml index 58015fe1..36c5f3f9 100644 --- a/app/data/compose/docker-compose-watcher-mobymask-v2.yml +++ b/app/data/compose/docker-compose-watcher-mobymask-v2.yml @@ -38,14 +38,11 @@ services: CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER} CERC_MOBYMASK_APP_BASE_URI: ${CERC_MOBYMASK_APP_BASE_URI} CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} - # Waits for L2 Optimism Geth and Node servers to be up before deploying contract - command: - - sh - - -c - - | - ./wait-for-it.sh -h ${CERC_L2_GETH_HOST:-$${DEFAULT_CERC_L2_GETH_HOST}} -p ${CERC_L2_GETH_PORT:-$${DEFAULT_CERC_L2_GETH_PORT}} -s -t 0 && \ - ./wait-for-it.sh -h ${CERC_L2_NODE_HOST:-$${DEFAULT_CERC_L2_NODE_HOST}} -p ${CERC_L2_NODE_PORT:-$${DEFAULT_CERC_L2_NODE_PORT}} -s -t 0 && \ - ./deploy-and-generate-invite.sh + CERC_L2_GETH_HOST: ${CERC_L2_GETH_HOST} + CERC_L2_GETH_PORT: ${CERC_L2_GETH_PORT} + CERC_L2_NODE_HOST: ${CERC_L2_NODE_HOST} + CERC_L2_NODE_PORT: ${CERC_L2_NODE_PORT} + command: ["sh", "deploy-and-generate-invite.sh"] volumes: - ../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 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 30dab354..c7fc1c70 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 @@ -10,6 +10,13 @@ CERC_L1_ACCOUNTS_CSV_URL="${CERC_L1_ACCOUNTS_CSV_URL:-${DEFAULT_CERC_L1_ACCOUNTS CERC_MOBYMASK_APP_BASE_URI="${CERC_MOBYMASK_APP_BASE_URI:-${DEFAULT_CERC_MOBYMASK_APP_BASE_URI}}" CERC_DEPLOYED_CONTRACT="${CERC_DEPLOYED_CONTRACT:-${DEFAULT_CERC_DEPLOYED_CONTRACT}}" +# Check if CERC_DEPLOYED_CONTRACT environment variable set to skip contract deployment +if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then + echo "CERC_DEPLOYED_CONTRACT is set to '$CERC_DEPLOYED_CONTRACT'" + echo "Skipping contract deployment" + exit 0 +fi + echo "Using L2 RPC endpoint ${CERC_L2_GETH_RPC}" if [ -n "$CERC_L1_ACCOUNTS_CSV_URL" ] && \ @@ -35,14 +42,15 @@ jq --arg rpcUrl "$CERC_L2_GETH_RPC" '.rpcUrl = $rpcUrl' secrets.json > secrets_u # Set the MobyMask app base URI jq --arg baseURI "$CERC_MOBYMASK_APP_BASE_URI" '.baseURI = $baseURI' secrets.json > secrets_updated.json && mv secrets_updated.json secrets.json -export RPC_URL="${CERC_L2_GETH_RPC}" +# Wait for L2 Optimism Geth and Node servers to be up before deploying contract +CERC_L2_GETH_HOST="${CERC_L2_GETH_HOST:-${DEFAULT_CERC_L2_GETH_HOST}}" +CERC_L2_GETH_PORT="${CERC_L2_GETH_PORT:-${DEFAULT_CERC_L2_GETH_PORT}}" +CERC_L2_NODE_HOST="${CERC_L2_NODE_HOST:-${DEFAULT_CERC_L2_NODE_HOST}}" +CERC_L2_NODE_PORT="${CERC_L2_NODE_PORT:-${DEFAULT_CERC_L2_NODE_PORT}}" +./wait-for-it.sh -h "${CERC_L2_GETH_HOST}" -p "${CERC_L2_GETH_PORT}" -s -t 0 +./wait-for-it.sh -h "${CERC_L2_GETH_PORT}" -p "${CERC_L2_NODE_PORT}" -s -t 0 -# Check if CERC_DEPLOYED_CONTRACT environment variable set to skip contract deployment -if [ -n "$CERC_DEPLOYED_CONTRACT" ]; then - echo "CERC_DEPLOYED_CONTRACT is set to '$CERC_DEPLOYED_CONTRACT'" - echo "Exiting without deploying contract" - exit 0 -fi +export RPC_URL="${CERC_L2_GETH_RPC}" # Check and exit if a deployment already exists (on restarts) if [ -f ./config.json ]; then diff --git a/app/data/config/watcher-mobymask-v2/optimism-params.env b/app/data/config/watcher-mobymask-v2/optimism-params.env index 67eb3314..e0d2cd75 100644 --- a/app/data/config/watcher-mobymask-v2/optimism-params.env +++ b/app/data/config/watcher-mobymask-v2/optimism-params.env @@ -2,6 +2,8 @@ # L2 endpoints DEFAULT_CERC_L2_GETH_RPC="http://op-geth:8545" + +# Endpoints waited on before contract deployment DEFAULT_CERC_L2_GETH_HOST="op-geth" DEFAULT_CERC_L2_GETH_PORT=8545 diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index 25b8f3ea..ff67b55c 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -25,6 +25,10 @@ Checkout to the required versions and branches in repos cd ~/cerc/watcher-ts git checkout v0.2.39 +# mobymask-v2-watcher-ts +cd ~/cerc/mobymask-v2-watcher-ts +git checkout v0.1.0 + # MobyMask cd ~/cerc/MobyMask git checkout v0.1.2 diff --git a/app/data/stacks/mobymask-v2/demo.md b/app/data/stacks/mobymask-v2/demo.md index 953390cf..1e1d6f01 100644 --- a/app/data/stacks/mobymask-v2/demo.md +++ b/app/data/stacks/mobymask-v2/demo.md @@ -25,7 +25,7 @@ * Open the invite link in a new browser with different profile (to simulate remote browser) * Check that it is connected to any other peer in the network. -* In `Report a phishing attempt` section, report multiple phishers using the `submit` button. Click on the `Submit batch to p2p network` button. This broadcasts signed invocations to the connected peers. +* In `Report a phishing attempt` section, report multiple phishers using the `Submit` button. Click on the `Submit batch to p2p network` button. This broadcasts signed invocations to the connected peers. * In the `MESSAGES` tab of other browsers, a message can be seen with the signed invocations. diff --git a/app/data/stacks/mobymask-v2/mobymask-only.md b/app/data/stacks/mobymask-v2/mobymask-only.md index 5ae5dbaa..4cfb4ecf 100644 --- a/app/data/stacks/mobymask-v2/mobymask-only.md +++ b/app/data/stacks/mobymask-v2/mobymask-only.md @@ -9,7 +9,7 @@ Prerequisite: L2 Optimism Geth and Node RPC endpoints Clone required repositories: ```bash -laconic-so --stack mobymask-v2 setup-repositories --include cerc-io/MobyMask,cerc-io/watcher-ts +laconic-so --stack mobymask-v2 setup-repositories --include cerc-io/MobyMask,cerc-io/watcher-ts,cerc-io/mobymask-v2-watcher-ts # If this throws an error as a result of being already checked out to a branch/tag in a repo, remove the repositories mentioned below and re-run the command ``` @@ -19,7 +19,11 @@ Checkout to the required versions and branches in repos: ```bash # watcher-ts cd ~/cerc/watcher-ts -git checkout v0.2.35 +git checkout v0.2.39 + +# mobymask-v2-watcher-ts +cd ~/cerc/mobymask-v2-watcher-ts +git checkout v0.1.0 # MobyMask cd ~/cerc/MobyMask @@ -29,7 +33,7 @@ git checkout v0.1.2 Build the container images: ```bash -laconic-so --stack mobymask-v2 build-containers --include cerc/watcher-mobymask-v2,cerc/mobymask +laconic-so --stack mobymask-v2 build-containers --include cerc/watcher-ts,cerc/watcher-mobymask-v2,cerc/mobymask ``` This should create the required docker images in the local image registry @@ -43,6 +47,8 @@ Create and update an env file to be used in the next step ([defaults](../../conf ```bash # External L2 endpoints CERC_L2_GETH_RPC= + + # Endpoints waited on before contract deployment CERC_L2_GETH_HOST= CERC_L2_GETH_PORT= diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network.md b/app/data/stacks/mobymask-v2/watcher-p2p-network.md new file mode 100644 index 00000000..563012e8 --- /dev/null +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network.md @@ -0,0 +1,306 @@ +# MobyMask Watcher P2P Network + +Instructions to setup and deploy a watcher that connects to the existing watcher p2p network + +## Prerequisites + +* Laconic Stack Orchestrator ([installation](/README.md#install)) +* A publicly reachable domain name with SSL setup + +This demo has been tested on a `Ubuntu 22.04 LTS` machine with `8GB` of RAM + +## Setup + +Clone required repositories: + + ```bash + laconic-so --stack mobymask-v2 setup-repositories --include cerc-io/MobyMask,cerc-io/watcher-ts,cerc-io/mobymask-v2-watcher-ts + + # This will clone the required repositories at ~/cerc + # If this throws an error as a result of being already checked out to a branch/tag in a repo, remove the repositories mentioned in the next step and re-run the command + + # Expected output: + + # Dev Root is: /home/xyz/cerc + # Checking: /home/xyz/cerc/watcher-ts: Needs to be fetched + # 100%|#############################################################################################################################################| 9.96k/9.96k [00:05<00:00, 1.70kB/s] + # Checking: /home/xyz/cerc/mobymask-v2-watcher-ts: Needs to be fetched + # 100%|################################################################################################################################################| 19.0/19.0 [00:01<00:00, 13.6B/s] + # Checking: /home/xyz/cerc/MobyMask: Needs to be fetched + # 100%|##############################################################################################################################################| 1.41k/1.41k [00:18<00:00, 76.4B/s] + ``` + +Checkout to the required versions and branches in repos: + + ```bash + # watcher-ts + cd ~/cerc/watcher-ts + git checkout v0.2.39 + + # mobymask-v2-watcher-ts + cd ~/cerc/mobymask-v2-watcher-ts + git checkout v0.1.0 + + # MobyMask + cd ~/cerc/MobyMask + git checkout v0.1.2 + ``` + +Build the container images: + + ```bash + laconic-so --stack mobymask-v2 build-containers --include cerc/watcher-ts,cerc/watcher-mobymask-v2,cerc/mobymask + ``` + +Check that the required images are created in the local image registry: + + ```bash + docker image ls + + # Expected output: + + # REPOSITORY TAG IMAGE ID CREATED SIZE + # cerc/watcher-mobymask-v2 local c4dba5dc8d48 24 seconds ago 1.02GB + # cerc/watcher-ts local 9ef61478c243 9 minutes ago 1.84GB + # cerc/mobymask local 9db3f1a69966 2 weeks ago 3.82GB + # . + # . + ``` + +## Deploy + +### Configuration + +Create an env file `mobymask-watcher.env`: + + ```bash + touch mobymask-watcher.env + ``` + +Add the following contents to `mobymask-watcher.env`: + + ```bash + # Domain to be used in the relay node's announce address + CERC_RELAY_ANNOUNCE_DOMAIN="example.com" + + + # DO NOT CHANGE THESE VALUES + CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" + CERC_ENABLE_PEER_L2_TXS=false + CERC_RELAY_PEERS=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] + ``` + +Replace `CERC_RELAY_ANNOUNCE_DOMAIN` with your public domain name + +### Deploy the stack + +```bash +laconic-so --stack mobymask-v2 deploy --cluster mobymask_v2 --include watcher-mobymask-v2 --env-file mobymask-watcher.env up + +# Expected output (ignore the "The X variable is not set. Defaulting to a blank string." warnings): + +# [+] Running 10/10 +# ✔ Network mobymask_v2_default Created 0.1s +# ✔ Volume "mobymask_v2_fixturenet_geth_accounts" Created 0.0s +# ✔ Volume "mobymask_v2_peers_ids" Created 0.0s +# ✔ Volume "mobymask_v2_mobymask_watcher_db_data" Created 0.0s +# ✔ Volume "mobymask_v2_mobymask_deployment" Created 0.0s +# ✔ Container mobymask_v2-mobymask-watcher-db-1 Healthy 22.2s +# ✔ Container mobymask_v2-mobymask-1 Exited 2.2s +# ✔ Container mobymask_v2-peer-ids-gen-1 Exited 23.9s +# ✔ Container mobymask_v2-mobymask-watcher-server-1 Healthy 43.6s +# ✔ Container mobymask_v2-peer-tests-1 Started 44.5s +``` + +This will run the `mobymask-v2-watcher` including: +* A relay node which is in a federated setup with relay nodes set in the env file +* A peer node which connects to the watcher relay node as an entrypoint to the MobyMask watcher p2p network. This peer listens for messages from other peers on the network and logs them out to the console + +The watcher endpoint is exposed on host port `3001` and the relay node endpoint is exposed on host port `9090` + +To list down and monitor the running containers: + + ```bash + laconic-so --stack mobymask-v2 deploy --cluster mobymask_v2 --include watcher-mobymask-v2 ps + + # Expected output: + + # Running containers: + # id: 25cc3a1cbda27fcd9c2ad4c772bd753ccef1e178f901a70e6ff4191d4a8684e9, name: mobymask_v2-mobymask-watcher-db-1, ports: 0.0.0.0:15432->5432/tcp + # id: c9806f78680d68292ffe942222af2003aa3ed5d5c69d7121b573f5028444391d, name: mobymask_v2-mobymask-watcher-server-1, ports: 0.0.0.0:3001->3001/tcp, 0.0.0.0:9001->9001/tcp, 0.0.0.0:9090->9090/tcp + # id: 6b30a1d313a88fb86f8a3b37a1b1a3bc053f238664e4b2d196c3ec74e04faf13, name: mobymask_v2-peer-tests-1, ports: + + + # With status + docker ps + + # Expected output: + + # CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + # 6b30a1d313a8 cerc/watcher-ts:local "docker-entrypoint.s…" 5 minutes ago Up 4 minutes mobymask_v2-peer-tests-1 + # c9806f78680d cerc/watcher-mobymask-v2:local "sh start-server.sh" 5 minutes ago Up 5 minutes (healthy) 0.0.0.0:3001->3001/tcp, 0.0.0.0:9001->9001/tcp, 0.0.0.0:9090->9090/tcp mobymask_v2-mobymask-watcher-server-1 + # 25cc3a1cbda2 postgres:14-alpine "docker-entrypoint.s…" 5 minutes ago Up 5 minutes (healthy) 0.0.0.0:15432->5432/tcp mobymask_v2-mobymask-watcher-db-1 + + + # Check logs for a container + docker logs -f + ``` + +Check watcher container logs to get multiaddr advertised by the watcher's relay node and note it down for further usage: + + ```bash + laconic-so --stack mobymask-v2 deploy --cluster mobymask_v2 --include watcher-mobymask-v2 logs mobymask-watcher-server | grep -A 2 "Relay node started" + + # The multiaddr will be of form /dns4//tcp/443/wss/p2p/ + # Expected output: + + # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.069Z laconic:relay Relay node started with id 12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai (characteristic-black-pamella) + # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.069Z laconic:relay Listening on: + # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.070Z laconic:relay /dns4/example.com/tcp/443/wss/p2p/12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai + ``` + +## Web App + +To be able to connect to the relay node from remote peers, it needs to be publicly reachable. Configure your website with SSL and the `https` traffic forwarded to port `9090`. + +For example, a Nginx configuration for domain `example.com` would look something like: + + ```bash + server { + server_name example.com; + + # https://nginx.org/en/docs/http/websocket.html + location / { + proxy_pass http://127.0.0.1:9090; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + # set a large timeout to avoid websocket disconnects + proxy_read_timeout 86400; + } + + listen [::]:443 ssl ipv6only=on; # managed by Certbot + listen 443 ssl; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot + } + + server { + if ($host = example.com) { + return 301 https://$host$request_uri; + } # managed by Certbot + + listen 80; + listen [::]:80; + + server_name example.com; + return 404; # managed by Certbot + } + ``` + +To connect a browser peer to the watcher's relay node: +* Visit https://mobymask-lxdao-app.dev.vdb.to/ +* Click on debug panel on bottom right of the homepage +* Select `` in `Primary Relay` dropdown on the right and enter the watcher relay node's multiaddr +* Click on `UPDATE` to refresh the page and connect to the watcher's relay node; you should see the relay node's multiaddr in `Self Node Info` on the debug panel +* Switch to the `GRAPH (PEERS)` tab to see peers connected to this browser node and the `GRAPH (NETWORK)` tab to see the whole MobyMask p2p network + +Perform transactions (invite required): +* Open the invite link in a browser and open the debug panel +* Confirm that the browser peer is connected to at least one other peer, then close the debug panel +* Check the status for a phisher to be reported in the `Check Phisher Status` section on homepage +* Select `Report Phisher` option in the `Pending reports` section, enter multiple phisher records and click on the `Submit batch to p2p network` button; this broadcasts signed invocations to peers on the network, including the watcher peer +* Check the watcher container logs to see the message received: + ```bash + docker logs $(docker ps -aq --filter name="mobymask-watcher-server") + + # Expected output: + + # . + # . + # 2023-04-20T04:42:01.072Z vulcanize:libp2p-utils [4:42:1] Received a message on mobymask P2P network from peer: 12D3KooWDKCke8hrjm4evwc9HzUzPZXeVTEQqmfLCkdNaXQ7efAZ + # 2023-04-20T04:42:01.072Z vulcanize:libp2p-utils Signed invocations: + # 2023-04-20T04:42:01.073Z vulcanize:libp2p-utils [ + # { + # "signature": "0x18dc2f4092473cbcc4636eb922f6abf17675368363675779e67d2c14bb0a135f6029da12671a3367463d41720938c84bb3ceed727721c3bbc50d8739859412801c", + # "invocations": { + # "batch": [ + # { + # "transaction": { + # "to": "0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9", + # "data": "0x6b6dc9de00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c5457543a70686973686572310000000000000000000000000000000000000000", + # "gasLimit": 500000 + # }, + # "authority": [ + # { + # "signature": "0x0f91c765faaf851550ddd4345d1bc11eebbf29fde0306a8051f9d3c679c6d6856f66753cad8fcff25203a3e0528b3d7673371343f66a39424f6281c474eada431c", + # "delegation": { + # "delegate": "0x1B85a1485582C3389F62EB9F2C88f0C89bb1C1F4", + # "authority": "0x0000000000000000000000000000000000000000000000000000000000000000", + # "caveats": [ + # { + # "enforcer": "0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9", + # "terms": "0x0000000000000000000000000000000000000000000000000000000000000000" + # } + # ] + # } + # } + # ] + # } + # ], + # "replayProtection": { + # "nonce": 1, + # "queue": 64298938 + # } + # } + # } + # ] + # 2023-04-20T04:42:01.087Z vulcanize:libp2p-utils method: claimIfPhisher, value: TWT:phisher1 + # 2023-04-20T04:42:01.087Z vulcanize:libp2p-utils ------------------------------------------ + # . + # . + ``` +* Now, check the status for reported phishers again and confirm that they have been registered + +## Clean up + +Stop all services running in the background: + + ```bash + laconic-so --stack mobymask-v2 deploy --cluster mobymask_v2 --include watcher-mobymask-v2 down + + # Expected output: + + # [+] Running 6/6 + # ✔ Container mobymask_v2-peer-tests-1 Removed 10.5s + # ✔ Container mobymask_v2-mobymask-watcher-server-1 Removed 10.8s + # ✔ Container mobymask_v2-peer-ids-gen-1 Removed 0.0s + # ✔ Container mobymask_v2-mobymask-1 Removed 0.0s + # ✔ Container mobymask_v2-mobymask-watcher-db-1 Removed 0.6s + # ✔ Network mobymask_v2_default Removed 0.5s + ``` + +Clear volumes created by this stack: + + ```bash + # List all relevant volumes + docker volume ls -q --filter "name=mobymask_v2*" + + # Expected output: + + # mobymask_v2_fixturenet_geth_accounts + # mobymask_v2_mobymask_deployment + # mobymask_v2_mobymask_watcher_db_data + # mobymask_v2_peers_ids + + + # Remove all the listed volumes + docker volume rm $(docker volume ls -q --filter "name=mobymask_v2*") + ``` + +## Troubleshooting + +* If you don't see any peer connections being formed in the debug panel on https://mobymask-lxdao-app.dev.vdb.to/, try clearing out the website's local storage and refreshing the page From 074a3fe20eae5aab40c59a4c379d348efe38fdef Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 20 Apr 2023 16:21:26 -0600 Subject: [PATCH 45/67] Enable in-container docker --- .gitea/workflows/test.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index 96cfb8cd..beaf71d1 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -1,10 +1,16 @@ -name: Test +name: Integration Test on: pull_request: branches: '*' push: - branches: 'main' + branches: + - main + - ci-test + +# Needed until we can incorporate docker startup into the executor container +env: + DOCKER_HOST: unix:///var/run/dind.sock jobs: test: @@ -25,5 +31,9 @@ jobs: run: ./scripts/create_build_tag_file.sh - name: "Build local shiv package" run: ./scripts/build_shiv_package.sh + - name: Start dockerd # Also needed until we can incorporate into the executor + run: | + dockerd -H $DOCKER_HOST --userland-proxy=false & + sleep 5 - name: "Run smoke tests" run: ./tests/smoke-test/run-smoke-test.sh From 7c6b2543af53cbf0cb79af1d9aadc262a4052e80 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 20 Apr 2023 16:26:19 -0600 Subject: [PATCH 46/67] Stop on error --- tests/smoke-test/run-smoke-test.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/smoke-test/run-smoke-test.sh b/tests/smoke-test/run-smoke-test.sh index 777c608e..5bd82ffc 100755 --- a/tests/smoke-test/run-smoke-test.sh +++ b/tests/smoke-test/run-smoke-test.sh @@ -1,3 +1,8 @@ +#!/usr/bin/env bash +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi # Basic simple test of stack-orchestrator functionality echo "Running stack-orchestrator smoke test" # Bit of a hack, test the most recent package From 0a08a7ecba982774b175fbf287716639f914040d Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 20 Apr 2023 16:47:40 -0600 Subject: [PATCH 47/67] Dump image list for debugging --- tests/smoke-test/run-smoke-test.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/smoke-test/run-smoke-test.sh b/tests/smoke-test/run-smoke-test.sh index 5bd82ffc..d6226b29 100755 --- a/tests/smoke-test/run-smoke-test.sh +++ b/tests/smoke-test/run-smoke-test.sh @@ -24,6 +24,8 @@ $TEST_TARGET_SO --stack test setup-repositories $TEST_TARGET_SO --stack test build-containers # Build one example containers $TEST_TARGET_SO build-containers --include cerc/builder-js +echo "Images in the local registry:" +docker image ls # Deploy the test container $TEST_TARGET_SO --stack test deploy-system up # TODO: test that we can use the deployed container somehow From e8ec090f1d76f5a2b829a26bb78fb43a45a3dba2 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 20 Apr 2023 16:58:13 -0600 Subject: [PATCH 48/67] Add more debugging --- tests/smoke-test/run-smoke-test.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/smoke-test/run-smoke-test.sh b/tests/smoke-test/run-smoke-test.sh index d6226b29..0ee258ce 100755 --- a/tests/smoke-test/run-smoke-test.sh +++ b/tests/smoke-test/run-smoke-test.sh @@ -3,6 +3,9 @@ set -e if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi +# Dump environment variables for debugging +echo "Environment variables:" +env # Basic simple test of stack-orchestrator functionality echo "Running stack-orchestrator smoke test" # Bit of a hack, test the most recent package @@ -25,7 +28,7 @@ $TEST_TARGET_SO --stack test build-containers # Build one example containers $TEST_TARGET_SO build-containers --include cerc/builder-js echo "Images in the local registry:" -docker image ls +docker image ls -a # Deploy the test container $TEST_TARGET_SO --stack test deploy-system up # TODO: test that we can use the deployed container somehow From 9feff35f536a02b4c3986899c988aa620055ea50 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 20 Apr 2023 17:30:54 -0600 Subject: [PATCH 49/67] Add DOCKER_HOST inheriting from the caller, to build environment (#360) * Add DOCKER_HOST inheriting from the caller, to build environment * Fix for env var not set --- app/build_containers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/build_containers.py b/app/build_containers.py index 5e8495cb..6cd8f2b8 100644 --- a/app/build_containers.py +++ b/app/build_containers.py @@ -95,6 +95,9 @@ def command(ctx, include, exclude, force_rebuild, extra_build_args): container_build_env.update({"CERC_SCRIPT_DEBUG": "true"} if debug else {}) container_build_env.update({"CERC_FORCE_REBUILD": "true"} if force_rebuild else {}) container_build_env.update({"CERC_CONTAINER_EXTRA_BUILD_ARGS": extra_build_args} if extra_build_args else {}) + docker_host_env = os.getenv("DOCKER_HOST") + if docker_host_env: + container_build_env.update({"DOCKER_HOST": docker_host_env}) def process_container(container): if not quiet: From 0bc54b30e0512bcf5f261b379a88fca3c004c44f Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Fri, 21 Apr 2023 17:27:53 +0530 Subject: [PATCH 50/67] Fix mobymask contract deployment script (#362) --- app/data/compose/docker-compose-fixturenet-optimism.yml | 6 +++--- .../watcher-mobymask-v2/deploy-and-generate-invite.sh | 2 +- .../container-build/cerc-watcher-mobymask-v2/Dockerfile | 2 +- app/data/stacks/mobymask-v2/watcher-p2p-network.md | 4 +--- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/data/compose/docker-compose-fixturenet-optimism.yml b/app/data/compose/docker-compose-fixturenet-optimism.yml index c651e5a7..02b0cbc3 100644 --- a/app/data/compose/docker-compose-fixturenet-optimism.yml +++ b/app/data/compose/docker-compose-fixturenet-optimism.yml @@ -31,7 +31,7 @@ services: - l2_accounts:/l2-accounts - l1_deployment:/app/packages/contracts-bedrock extra_hosts: - - "host.docker.internal:host-gateway" + - "host.docker.internal:host-gateway" # Generates the config files required for L2 (outputs to volume l2_config) op-node-l2-config-gen: @@ -50,7 +50,7 @@ services: - l2_config:/app command: ["sh", "/app/generate-l2-config.sh"] extra_hosts: - - "host.docker.internal:host-gateway" + - "host.docker.internal:host-gateway" # Initializes and runs the L2 execution client (outputs to volume l2_geth_data) op-geth: @@ -123,7 +123,7 @@ services: command: | "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-batcher.sh" extra_hosts: - - "host.docker.internal:host-gateway" + - "host.docker.internal:host-gateway" volumes: l1_deployment: 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 c7fc1c70..e574c56b 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 @@ -48,7 +48,7 @@ CERC_L2_GETH_PORT="${CERC_L2_GETH_PORT:-${DEFAULT_CERC_L2_GETH_PORT}}" CERC_L2_NODE_HOST="${CERC_L2_NODE_HOST:-${DEFAULT_CERC_L2_NODE_HOST}}" CERC_L2_NODE_PORT="${CERC_L2_NODE_PORT:-${DEFAULT_CERC_L2_NODE_PORT}}" ./wait-for-it.sh -h "${CERC_L2_GETH_HOST}" -p "${CERC_L2_GETH_PORT}" -s -t 0 -./wait-for-it.sh -h "${CERC_L2_GETH_PORT}" -p "${CERC_L2_NODE_PORT}" -s -t 0 +./wait-for-it.sh -h "${CERC_L2_NODE_HOST}" -p "${CERC_L2_NODE_PORT}" -s -t 0 export RPC_URL="${CERC_L2_GETH_RPC}" diff --git a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile index c572658d..6c100091 100644 --- a/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile +++ b/app/data/container-build/cerc-watcher-mobymask-v2/Dockerfile @@ -14,7 +14,7 @@ WORKDIR /app COPY . . -RUN echo "Building watcher-ts" && \ +RUN echo "Building mobymask-v2-watcher-ts" && \ yarn && yarn build WORKDIR /app diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network.md b/app/data/stacks/mobymask-v2/watcher-p2p-network.md index 563012e8..5fbaf79e 100644 --- a/app/data/stacks/mobymask-v2/watcher-p2p-network.md +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network.md @@ -99,9 +99,8 @@ laconic-so --stack mobymask-v2 deploy --cluster mobymask_v2 --include watcher-mo # Expected output (ignore the "The X variable is not set. Defaulting to a blank string." warnings): -# [+] Running 10/10 +# [+] Running 9/9 # ✔ Network mobymask_v2_default Created 0.1s -# ✔ Volume "mobymask_v2_fixturenet_geth_accounts" Created 0.0s # ✔ Volume "mobymask_v2_peers_ids" Created 0.0s # ✔ Volume "mobymask_v2_mobymask_watcher_db_data" Created 0.0s # ✔ Volume "mobymask_v2_mobymask_deployment" Created 0.0s @@ -291,7 +290,6 @@ Clear volumes created by this stack: # Expected output: - # mobymask_v2_fixturenet_geth_accounts # mobymask_v2_mobymask_deployment # mobymask_v2_mobymask_watcher_db_data # mobymask_v2_peers_ids From d7ea87426885f85a78efbc67d310b9abde3f21b8 Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Mon, 24 Apr 2023 17:55:17 +0530 Subject: [PATCH 51/67] Upgrade mobymkas-ui package version for endorse member UI (#365) --- app/data/container-build/cerc-mobymask-ui/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/data/container-build/cerc-mobymask-ui/Dockerfile b/app/data/container-build/cerc-mobymask-ui/Dockerfile index e5a804b4..651d718f 100644 --- a/app/data/container-build/cerc-mobymask-ui/Dockerfile +++ b/app/data/container-build/cerc-mobymask-ui/Dockerfile @@ -52,7 +52,7 @@ RUN yarn global add http-server # Install old version of MobyMask web app RUN yarn global add @cerc-io/mobymask-ui@0.1.3 # Install the LXDAO version of MobyMask web app -RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.3-lxdao-0.1.0 +RUN yarn global add @cerc-io/mobymask-ui-lxdao@npm:@cerc-io/mobymask-ui@0.1.3-lxdao-0.1.1 # Expose port for http EXPOSE 80 From 988be0ef9ab6c4f3b74431ca0bd31c41fa0584b0 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 10:41:47 +0530 Subject: [PATCH 52/67] Upgrade Optimism and add op-proposer (#364) * Use the latest stable optimism release * Remove unnecessary repos from repo-list * Add op-proposer service to fixturenet-optimism stack * Add jq and bash to op-proposer image * Update instructions * Update op-batcher and op-geth commands --- .../docker-compose-fixturenet-optimism.yml | 23 ++++++++++++ .../optimism-contracts/run.sh | 16 ++++----- .../fixturenet-optimism/run-op-batcher.sh | 4 +-- .../config/fixturenet-optimism/run-op-geth.sh | 4 +-- .../config/fixturenet-optimism/run-op-node.sh | 3 +- .../fixturenet-optimism/run-op-proposer.sh | 36 +++++++++++++++++++ .../cerc-optimism-l2geth/build.sh | 3 ++ .../cerc-optimism-op-batcher/build.sh | 3 ++ .../cerc-optimism-op-node/build.sh | 3 ++ .../cerc-optimism-op-proposer/Dockerfile | 31 ++++++++++++++++ .../cerc-optimism-op-proposer/build.sh | 8 +++++ app/data/container-image-list.txt | 1 + app/data/pod-list.txt | 1 - app/data/repository-list.txt | 2 -- app/data/stacks/fixturenet-optimism/README.md | 5 +-- .../stacks/fixturenet-optimism/l2-only.md | 7 ++-- app/data/stacks/fixturenet-optimism/stack.yml | 1 + app/data/stacks/mobymask-v2/README.md | 2 +- 18 files changed, 131 insertions(+), 22 deletions(-) create mode 100755 app/data/config/fixturenet-optimism/run-op-proposer.sh create mode 100644 app/data/container-build/cerc-optimism-op-proposer/Dockerfile create mode 100755 app/data/container-build/cerc-optimism-op-proposer/build.sh diff --git a/app/data/compose/docker-compose-fixturenet-optimism.yml b/app/data/compose/docker-compose-fixturenet-optimism.yml index 02b0cbc3..c9e17b03 100644 --- a/app/data/compose/docker-compose-fixturenet-optimism.yml +++ b/app/data/compose/docker-compose-fixturenet-optimism.yml @@ -125,6 +125,29 @@ services: extra_hosts: - "host.docker.internal:host-gateway" + # Runs the proposer (periodically submits new state roots to L1) + op-proposer: + image: cerc/optimism-op-proposer:local + depends_on: + op-node: + condition: service_healthy + env_file: + - ../config/fixturenet-optimism/l1-params.env + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_L1_RPC: ${CERC_L1_RPC} + volumes: + - ../config/wait-for-it.sh:/wait-for-it.sh + - ../config/fixturenet-optimism/run-op-proposer.sh:/run-op-proposer.sh + - l1_deployment:/contracts-bedrock:ro + - l2_accounts:/l2-accounts:ro + entrypoint: ["sh", "-c"] + # Waits for L1 endpoint to be up before running the proposer + command: | + "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-proposer.sh" + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: l1_deployment: l2_accounts: diff --git a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh index eb55e1fd..d878c03f 100755 --- a/app/data/config/fixturenet-optimism/optimism-contracts/run.sh +++ b/app/data/config/fixturenet-optimism/optimism-contracts/run.sh @@ -76,6 +76,13 @@ else echo "Couldn't fetch L1 account credentials, using them from env" fi +# Send balances to the above L2 addresses +yarn hardhat send-balance --to "${ADMIN_ADDRESS}" --amount 2 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started +yarn hardhat send-balance --to "${PROPOSER_ADDRESS}" --amount 5 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started +yarn hardhat send-balance --to "${BATCHER_ADDRESS}" --amount 1000 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started + +echo "Balances sent to L2 accounts" + # Select a finalized L1 block as the starting point for roll ups until FINALIZED_BLOCK=$(cast block finalized --rpc-url "$CERC_L1_RPC"); do echo "Waiting for a finalized L1 block to exist, retrying after 10s" @@ -88,13 +95,6 @@ L1_BLOCKTIMESTAMP=$(echo "$FINALIZED_BLOCK" | awk '/timestamp/{print $2}') echo "Selected L1 block ${L1_BLOCKNUMBER} as the starting block for roll ups" -# Send balances to the above L2 addresses -yarn hardhat send-balance --to "${ADMIN_ADDRESS}" --amount 2 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started -yarn hardhat send-balance --to "${PROPOSER_ADDRESS}" --amount 5 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started -yarn hardhat send-balance --to "${BATCHER_ADDRESS}" --amount 1000 --private-key "${CERC_L1_PRIV_KEY}" --network getting-started - -echo "Balances sent to L2 accounts" - # Update the deployment config sed -i 's/"l2OutputOracleStartingTimestamp": TIMESTAMP/"l2OutputOracleStartingTimestamp": '"$L1_BLOCKTIMESTAMP"'/g' deploy-config/getting-started.json jq --arg chainid "$CERC_L1_CHAIN_ID" '.l1ChainID = ($chainid | tonumber)' deploy-config/getting-started.json > tmp.json && mv tmp.json deploy-config/getting-started.json @@ -110,7 +110,7 @@ echo "PRIVATE_KEY_DEPLOYER=$ADMIN_PRIV_KEY" >> .env echo "Deploying the L1 smart contracts, this will take a while..." # Deploy the L1 smart contracts -yarn hardhat deploy --network getting-started +yarn hardhat deploy --network getting-started --tags l1 echo "Deployed the L1 smart contracts" diff --git a/app/data/config/fixturenet-optimism/run-op-batcher.sh b/app/data/config/fixturenet-optimism/run-op-batcher.sh index 4bee6036..18955545 100755 --- a/app/data/config/fixturenet-optimism/run-op-batcher.sh +++ b/app/data/config/fixturenet-optimism/run-op-batcher.sh @@ -6,7 +6,7 @@ fi CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" -# Get BACTHER_KEY from keys.json +# Get Batcher key from keys.json BATCHER_KEY=$(jq -r '.Batcher.privateKey' /l2-accounts/keys.json | tr -d '"') cleanup() { @@ -18,6 +18,7 @@ cleanup() { } trap 'cleanup' INT TERM +# Run op-batcher op-batcher \ --l2-eth-rpc=http://op-geth:8545 \ --rollup-rpc=http://op-node:8547 \ @@ -30,7 +31,6 @@ op-batcher \ --rpc.port=8548 \ --rpc.enable-admin \ --max-channel-duration=1 \ - --target-l1-tx-size-bytes=2048 \ --l1-eth-rpc=$CERC_L1_RPC \ --private-key=$BATCHER_KEY \ & diff --git a/app/data/config/fixturenet-optimism/run-op-geth.sh b/app/data/config/fixturenet-optimism/run-op-geth.sh index 48391d73..8b521f85 100755 --- a/app/data/config/fixturenet-optimism/run-op-geth.sh +++ b/app/data/config/fixturenet-optimism/run-op-geth.sh @@ -8,7 +8,7 @@ fi echo "Installing jq" apk update && apk add jq -# Get SEQUENCER key from keys.json +# Get Sequencer key from keys.json SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"') # Initialize op-geth if datadir/geth not found @@ -70,7 +70,7 @@ geth \ --ws.origins="*" \ --ws.api=debug,eth,txpool,net,engine \ --syncmode=full \ - --gcmode=full \ + --gcmode=archive \ --nodiscover \ --maxpeers=0 \ --networkid=42069 \ diff --git a/app/data/config/fixturenet-optimism/run-op-node.sh b/app/data/config/fixturenet-optimism/run-op-node.sh index b7cc8680..516cf0a5 100755 --- a/app/data/config/fixturenet-optimism/run-op-node.sh +++ b/app/data/config/fixturenet-optimism/run-op-node.sh @@ -6,9 +6,10 @@ fi CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" -# Get SEQUENCER KEY from keys.json +# Get Sequencer key from keys.json SEQUENCER_KEY=$(jq -r '.Sequencer.privateKey' /l2-accounts/keys.json | tr -d '"') +# Run op-node op-node \ --l2=http://op-geth:8551 \ --l2.jwt-secret=/op-node-data/jwt.txt \ diff --git a/app/data/config/fixturenet-optimism/run-op-proposer.sh b/app/data/config/fixturenet-optimism/run-op-proposer.sh new file mode 100755 index 00000000..09746760 --- /dev/null +++ b/app/data/config/fixturenet-optimism/run-op-proposer.sh @@ -0,0 +1,36 @@ +#!/bin/sh +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" + +# Read the L2OutputOracle contract address from the deployment +L2OO_DEPLOYMENT=$(cat /contracts-bedrock/deployments/getting-started/L2OutputOracle.json) +L2OO_ADDR=$(echo "$L2OO_DEPLOYMENT" | jq -r '.address') + +# Get Proposer key from keys.json +PROPOSER_KEY=$(jq -r '.Proposer.privateKey' /l2-accounts/keys.json | tr -d '"') + +cleanup() { + echo "Signal received, cleaning up..." + kill ${proposer_pid} + + wait + echo "Done" +} +trap 'cleanup' INT TERM + +# Run op-proposer +op-proposer \ + --poll-interval 12s \ + --rpc.port 8560 \ + --rollup-rpc http://op-node:8547 \ + --l2oo-address $L2OO_ADDR \ + --private-key $PROPOSER_KEY \ + --l1-eth-rpc $CERC_L1_RPC \ + & + +proposer_pid=$! +wait $proposer_pid diff --git a/app/data/container-build/cerc-optimism-l2geth/build.sh b/app/data/container-build/cerc-optimism-l2geth/build.sh index 5e125703..86c84a74 100755 --- a/app/data/container-build/cerc-optimism-l2geth/build.sh +++ b/app/data/container-build/cerc-optimism-l2geth/build.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash + # Build cerc/optimism-l2geth + source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + docker build -t cerc/optimism-l2geth:local ${build_command_args} ${CERC_REPO_BASE_DIR}/op-geth diff --git a/app/data/container-build/cerc-optimism-op-batcher/build.sh b/app/data/container-build/cerc-optimism-op-batcher/build.sh index 08b209d0..a91c0063 100755 --- a/app/data/container-build/cerc-optimism-op-batcher/build.sh +++ b/app/data/container-build/cerc-optimism-op-batcher/build.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash + # Build cerc/optimism-op-batcher # TODO: use upstream Dockerfile once its buildx-specific content has been removed + source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) docker build -t cerc/optimism-op-batcher:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-build/cerc-optimism-op-node/build.sh b/app/data/container-build/cerc-optimism-op-node/build.sh index 9c33529a..be68cbbd 100755 --- a/app/data/container-build/cerc-optimism-op-node/build.sh +++ b/app/data/container-build/cerc-optimism-op-node/build.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash + # Build cerc/optimism-op-node # TODO: use upstream Dockerfile once its buildx-specific content has been removed + source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) docker build -t cerc/optimism-op-node:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-build/cerc-optimism-op-proposer/Dockerfile b/app/data/container-build/cerc-optimism-op-proposer/Dockerfile new file mode 100644 index 00000000..e91aa4bb --- /dev/null +++ b/app/data/container-build/cerc-optimism-op-proposer/Dockerfile @@ -0,0 +1,31 @@ +FROM golang:1.19.0-alpine3.15 as builder + +ARG VERSION=v0.0.0 + +RUN apk add --no-cache make gcc musl-dev linux-headers git jq bash + +# build op-proposer with the shared go.mod & go.sum files +COPY ./op-proposer /app/op-proposer +COPY ./op-bindings /app/op-bindings +COPY ./op-node /app/op-node +COPY ./op-service /app/op-service +COPY ./op-signer /app/op-signer +COPY ./go.mod /app/go.mod +COPY ./go.sum /app/go.sum +COPY ./.git /app/.git + +WORKDIR /app/op-proposer + +RUN go mod download + +ARG TARGETOS TARGETARCH + +RUN make op-proposer VERSION="$VERSION" GOOS=$TARGETOS GOARCH=$TARGETARCH + +FROM alpine:3.15 + +RUN apk add --no-cache jq bash + +COPY --from=builder /app/op-proposer/bin/op-proposer /usr/local/bin + +CMD ["op-proposer"] diff --git a/app/data/container-build/cerc-optimism-op-proposer/build.sh b/app/data/container-build/cerc-optimism-op-proposer/build.sh new file mode 100755 index 00000000..f3c975dc --- /dev/null +++ b/app/data/container-build/cerc-optimism-op-proposer/build.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Build cerc/optimism-op-proposer + +source ${CERC_CONTAINER_BASE_DIR}/build-base.sh + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +docker build -t cerc/optimism-op-proposer:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/optimism diff --git a/app/data/container-image-list.txt b/app/data/container-image-list.txt index 0635c4c8..0caea48a 100644 --- a/app/data/container-image-list.txt +++ b/app/data/container-image-list.txt @@ -35,3 +35,4 @@ cerc/act-runner-task-executor cerc/optimism-l2geth cerc/optimism-op-batcher cerc/optimism-op-node +cerc/optimism-op-proposer diff --git a/app/data/pod-list.txt b/app/data/pod-list.txt index ef42ad9e..f24c9ed0 100644 --- a/app/data/pod-list.txt +++ b/app/data/pod-list.txt @@ -10,7 +10,6 @@ laconicd fixturenet-laconicd fixturenet-eth fixturenet-eth-metrics -watcher-ts watcher-mobymask watcher-erc20 watcher-erc721 diff --git a/app/data/repository-list.txt b/app/data/repository-list.txt index bfb6085c..0d808d68 100644 --- a/app/data/repository-list.txt +++ b/app/data/repository-list.txt @@ -13,8 +13,6 @@ cerc-io/laconic-console cerc-io/mobymask-watcher cerc-io/watcher-ts cerc-io/mobymask-v2-watcher-ts -cerc-io/react-peer -cerc-io/mobymask-ui cerc-io/MobyMask vulcanize/uniswap-watcher-ts vulcanize/uniswap-v3-info diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index 345e9a8d..bbe41c6a 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -19,7 +19,7 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout @eth-optimism/sdk@0.0.0-20230329025055 +git checkout v1.0.3 ``` Build the container images: @@ -36,8 +36,9 @@ This should create the required docker images in the local image registry: * `cerc/foundry` * `cerc/optimism-contracts` * `cerc/optimism-l2geth` -* `cerc/optimism-op-batcher` * `cerc/optimism-op-node` +* `cerc/optimism-op-batcher` +* `cerc/optimism-op-proposer` ## Deploy diff --git a/app/data/stacks/fixturenet-optimism/l2-only.md b/app/data/stacks/fixturenet-optimism/l2-only.md index 957627d3..72bf93cb 100644 --- a/app/data/stacks/fixturenet-optimism/l2-only.md +++ b/app/data/stacks/fixturenet-optimism/l2-only.md @@ -19,21 +19,22 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout @eth-optimism/sdk@0.0.0-20230329025055 +git checkout v1.0.3 ``` Build the container images: ```bash -laconic-so --stack fixturenet-optimism build-containers --include cerc/foundry,cerc/optimism-contracts,cerc/optimism-op-node,cerc/optimism-l2geth,cerc/optimism-op-batcher +laconic-so --stack fixturenet-optimism build-containers --include cerc/foundry,cerc/optimism-contracts,cerc/optimism-op-node,cerc/optimism-l2geth,cerc/optimism-op-batcher,cerc/optimism-op-proposer ``` This should create the required docker images in the local image registry: * `cerc/foundry` * `cerc/optimism-contracts` * `cerc/optimism-l2geth` -* `cerc/optimism-op-batcher` * `cerc/optimism-op-node` +* `cerc/optimism-op-batcher` +* `cerc/optimism-op-proposer` ## Deploy diff --git a/app/data/stacks/fixturenet-optimism/stack.yml b/app/data/stacks/fixturenet-optimism/stack.yml index e53623ca..45bb1709 100644 --- a/app/data/stacks/fixturenet-optimism/stack.yml +++ b/app/data/stacks/fixturenet-optimism/stack.yml @@ -16,6 +16,7 @@ containers: - cerc/optimism-op-node - cerc/optimism-l2geth - cerc/optimism-op-batcher + - cerc/optimism-op-proposer pods: - fixturenet-eth - fixturenet-optimism diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index ff67b55c..e781af79 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -35,7 +35,7 @@ git checkout v0.1.2 # Optimism cd ~/cerc/optimism -git checkout @eth-optimism/sdk@0.0.0-20230329025055 +git checkout v1.0.3 ``` Build the container images: From 44cf57df9b627fb2ad992e56d14b7f7caef52779 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 11:51:49 +0530 Subject: [PATCH 53/67] Add an arg for shutdown timeout in deploy down command (#366) --- app/data/stacks/fixturenet-optimism/README.md | 2 +- app/data/stacks/fixturenet-optimism/l2-only.md | 2 +- app/data/stacks/mobymask-v2/README.md | 2 +- app/deploy_system.py | 8 +++++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index bbe41c6a..d8a7966f 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -70,7 +70,7 @@ docker logs -f Stop all services running in the background: ```bash -laconic-so --stack fixturenet-optimism deploy down +laconic-so --stack fixturenet-optimism deploy down 30 ``` Clear volumes created by this stack: diff --git a/app/data/stacks/fixturenet-optimism/l2-only.md b/app/data/stacks/fixturenet-optimism/l2-only.md index 72bf93cb..0396bf6a 100644 --- a/app/data/stacks/fixturenet-optimism/l2-only.md +++ b/app/data/stacks/fixturenet-optimism/l2-only.md @@ -90,7 +90,7 @@ docker logs -f Stop all services running in the background: ```bash -laconic-so --stack fixturenet-optimism deploy --include fixturenet-optimism down +laconic-so --stack fixturenet-optimism deploy --include fixturenet-optimism down 30 ``` Clear volumes created by this stack: diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index e781af79..a123c203 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -111,7 +111,7 @@ Follow the [demo](./demo.md) to try out the MobyMask app with L2 chain Stop all the services running in background run: ```bash -laconic-so --stack mobymask-v2 deploy-system down +laconic-so --stack mobymask-v2 deploy-system down 30 ``` Clear volumes created by this stack: diff --git a/app/deploy_system.py b/app/deploy_system.py index 3c347fdf..35912518 100644 --- a/app/deploy_system.py +++ b/app/deploy_system.py @@ -74,7 +74,13 @@ def command(ctx, include, exclude, env_file, cluster, command, extra_args): elif command == "down": if verbose: print("Running compose down") - docker.compose.down() + + timeout_arg = None + if extra_args_list: + timeout_arg=extra_args_list[0] + + # Specify shutdown timeout (default 10s) to give services enough time to shutdown gracefully + docker.compose.down(timeout=timeout_arg) elif command == "exec": if extra_args_list is None or len(extra_args_list) < 2: print("Usage: exec ") From 8a054a979ca45debcfe4af04fb858a123cce3a96 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:52:38 +0530 Subject: [PATCH 54/67] Upgrade Optimism (#367) --- app/data/stacks/fixturenet-optimism/README.md | 2 +- app/data/stacks/fixturenet-optimism/l2-only.md | 2 +- app/data/stacks/mobymask-v2/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index d8a7966f..7664a7c3 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -19,7 +19,7 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout v1.0.3 +git checkout v1.0.4 ``` Build the container images: diff --git a/app/data/stacks/fixturenet-optimism/l2-only.md b/app/data/stacks/fixturenet-optimism/l2-only.md index 0396bf6a..8cac9ce1 100644 --- a/app/data/stacks/fixturenet-optimism/l2-only.md +++ b/app/data/stacks/fixturenet-optimism/l2-only.md @@ -19,7 +19,7 @@ Checkout to the required versions and branches in repos: ```bash # Optimism cd ~/cerc/optimism -git checkout v1.0.3 +git checkout v1.0.4 ``` Build the container images: diff --git a/app/data/stacks/mobymask-v2/README.md b/app/data/stacks/mobymask-v2/README.md index a123c203..32fdbf60 100644 --- a/app/data/stacks/mobymask-v2/README.md +++ b/app/data/stacks/mobymask-v2/README.md @@ -35,7 +35,7 @@ git checkout v0.1.2 # Optimism cd ~/cerc/optimism -git checkout v1.0.3 +git checkout v1.0.4 ``` Build the container images: From 018950858b1607e08185d65588047718039db959 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 18:32:38 +0530 Subject: [PATCH 55/67] Add instructions to run MobyMask app with a watcher on network (#368) * Remove unnecessary check on watcher endpoint * Add instructions to run MobyMask app with a watcher on network * Move watcher on network docs to a separate folder * Add nginx config for watcher endpoint * Add expected output logs * Add sample nginx config for hosting the app * Update instructions --- .../compose/docker-compose-mobymask-app.yml | 14 +- .../compose/docker-compose-peer-test-app.yml | 5 +- .../watcher-mobymask-v2/mobymask-app-start.sh | 8 +- .../watcher-mobymask-v2/mobymask-params.env | 2 - .../watcher.md} | 49 ++++-- .../watcher-p2p-network/web-app.md | 162 ++++++++++++++++++ app/data/stacks/mobymask-v2/web-apps.md | 6 +- 7 files changed, 204 insertions(+), 42 deletions(-) rename app/data/stacks/mobymask-v2/{watcher-p2p-network.md => watcher-p2p-network/watcher.md} (87%) create mode 100644 app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md diff --git a/app/data/compose/docker-compose-mobymask-app.yml b/app/data/compose/docker-compose-mobymask-app.yml index f2b30a4b..d43e6b44 100644 --- a/app/data/compose/docker-compose-mobymask-app.yml +++ b/app/data/compose/docker-compose-mobymask-app.yml @@ -15,12 +15,7 @@ services: CERC_RELAY_NODES: ${CERC_RELAY_NODES} CERC_BUILD_DIR: "@cerc-io/mobymask-ui/build" working_dir: /scripts - # Waits for watcher server to be up before app build - # Required when running with watcher stack to get deployed contract address - command: - - sh - - -c - - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./mobymask-app-start.sh + command: ["sh", "mobymask-app-start.sh"] volumes: - ../config/wait-for-it.sh:/scripts/wait-for-it.sh - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh @@ -51,12 +46,7 @@ services: CERC_RELAY_NODES: ${CERC_RELAY_NODES} CERC_BUILD_DIR: "@cerc-io/mobymask-ui-lxdao/build" working_dir: /scripts - # Waits for watcher server to be up before app build - # Required when running with watcher stack to get deployed contract address - command: - - sh - - -c - - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./mobymask-app-start.sh + command: ["sh", "mobymask-app-start.sh"] volumes: - ../config/wait-for-it.sh:/scripts/wait-for-it.sh - ../config/watcher-mobymask-v2/mobymask-app-start.sh:/scripts/mobymask-app-start.sh diff --git a/app/data/compose/docker-compose-peer-test-app.yml b/app/data/compose/docker-compose-peer-test-app.yml index 927f92f7..f2a22675 100644 --- a/app/data/compose/docker-compose-peer-test-app.yml +++ b/app/data/compose/docker-compose-peer-test-app.yml @@ -10,10 +10,7 @@ services: environment: CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} CERC_RELAY_NODES: ${CERC_RELAY_NODES} - command: - - sh - - -c - - ./wait-for-it.sh -h ${CERC_WATCHER_HOST:-$${DEFAULT_CERC_WATCHER_HOST}} -p ${CERC_WATCHER_PORT:-$${DEFAULT_CERC_WATCHER_PORT}} -s -t 0 -- ./test-app-start.sh + command: ["sh", "test-app-start.sh"] volumes: - ../config/wait-for-it.sh:/scripts/wait-for-it.sh - ../config/watcher-mobymask-v2/test-app-start.sh:/scripts/test-app-start.sh diff --git a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh index 0437d22d..9f343340 100755 --- a/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh +++ b/app/data/config/watcher-mobymask-v2/mobymask-app-start.sh @@ -17,9 +17,13 @@ fi echo "Using CERC_RELAY_NODES $CERC_RELAY_NODES" -# Use config from mounted volume if available (when running web-app along with watcher stack) -if [ -f /server/config.json ]; then +if [ -z "$CERC_DEPLOYED_CONTRACT" ]; then + # Use config from mounted volume (when running web-app along with watcher stack) echo "Taking config for deployed contract from mounted volume" + while [ ! -f /server/config.json ]; do + echo "Config not found, retrying after 5 seconds" + sleep 5 + done # Get deployed contract address and chain id CERC_DEPLOYED_CONTRACT=$(jq -r '.address' /server/config.json | tr -d '"') diff --git a/app/data/config/watcher-mobymask-v2/mobymask-params.env b/app/data/config/watcher-mobymask-v2/mobymask-params.env index 22681036..6d1bf063 100644 --- a/app/data/config/watcher-mobymask-v2/mobymask-params.env +++ b/app/data/config/watcher-mobymask-v2/mobymask-params.env @@ -1,8 +1,6 @@ # Defaults # Watcher endpoint -DEFAULT_CERC_WATCHER_HOST="mobymask-watcher-server" -DEFAULT_CERC_WATCHER_PORT=3001 DEFAULT_CERC_APP_WATCHER_URL="http://localhost:3001" # Set of relay peers to connect to from the relay node diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network.md b/app/data/stacks/mobymask-v2/watcher-p2p-network/watcher.md similarity index 87% rename from app/data/stacks/mobymask-v2/watcher-p2p-network.md rename to app/data/stacks/mobymask-v2/watcher-p2p-network/watcher.md index 5fbaf79e..74d95b92 100644 --- a/app/data/stacks/mobymask-v2/watcher-p2p-network.md +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network/watcher.md @@ -81,10 +81,11 @@ Add the following contents to `mobymask-watcher.env`: ```bash # Domain to be used in the relay node's announce address - CERC_RELAY_ANNOUNCE_DOMAIN="example.com" + CERC_RELAY_ANNOUNCE_DOMAIN="mobymask.example.com" # DO NOT CHANGE THESE VALUES + CERC_L2_GETH_RPC="https://mobymask-l2.dev.vdb.to" CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" CERC_ENABLE_PEER_L2_TXS=false CERC_RELAY_PEERS=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] @@ -115,7 +116,7 @@ This will run the `mobymask-v2-watcher` including: * A relay node which is in a federated setup with relay nodes set in the env file * A peer node which connects to the watcher relay node as an entrypoint to the MobyMask watcher p2p network. This peer listens for messages from other peers on the network and logs them out to the console -The watcher endpoint is exposed on host port `3001` and the relay node endpoint is exposed on host port `9090` +The watcher GraphQL endpoint is exposed on host port `3001` and the relay node endpoint is exposed on host port `9090` To list down and monitor the running containers: @@ -155,18 +156,30 @@ Check watcher container logs to get multiaddr advertised by the watcher's relay # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.069Z laconic:relay Relay node started with id 12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai (characteristic-black-pamella) # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.069Z laconic:relay Listening on: - # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.070Z laconic:relay /dns4/example.com/tcp/443/wss/p2p/12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai + # mobymask_v2-mobymask-watcher-server-1 | 2023-04-20T04:22:57.070Z laconic:relay /dns4/mobymask.example.com/tcp/443/wss/p2p/12D3KooWKef84LAcBNb9wZNs6jC5kQFXjddo47hK6AGHD2dSvGai ``` ## Web App -To be able to connect to the relay node from remote peers, it needs to be publicly reachable. Configure your website with SSL and the `https` traffic forwarded to port `9090`. +To be able to connect to the relay node from remote peers, it needs to be publicly reachable. +Configure your website with SSL and the `https` traffic reverse proxied as: +* `/graphql` to port `3001` (watcher GQL endpoint) +* `/` to port `9090` (relay node) -For example, a Nginx configuration for domain `example.com` would look something like: +For example, a Nginx configuration for domain `mobymask.example.com` would look something like: ```bash server { - server_name example.com; + server_name mobymask.example.com; + + location /graphql { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3001; + proxy_read_timeout 90; + } # https://nginx.org/en/docs/http/websocket.html location / { @@ -181,35 +194,37 @@ For example, a Nginx configuration for domain `example.com` would look something listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot - ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/mobymask.example.com/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/mobymask.example.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { - if ($host = example.com) { + if ($host = mobymask.example.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; - server_name example.com; + server_name mobymask.example.com; return 404; # managed by Certbot } ``` -To connect a browser peer to the watcher's relay node: -* Visit https://mobymask-lxdao-app.dev.vdb.to/ +To test the web-app, either visit https://mobymask-lxdao-app.dev.vdb.to/ or follow [web-app.md](./web-app.md) to deploy the app locally that hits your watcher's GQL endpoint + +Connect a browser peer to the watcher's relay node: * Click on debug panel on bottom right of the homepage * Select `` in `Primary Relay` dropdown on the right and enter the watcher relay node's multiaddr * Click on `UPDATE` to refresh the page and connect to the watcher's relay node; you should see the relay node's multiaddr in `Self Node Info` on the debug panel * Switch to the `GRAPH (PEERS)` tab to see peers connected to this browser node and the `GRAPH (NETWORK)` tab to see the whole MobyMask p2p network -Perform transactions (invite required): -* Open the invite link in a browser and open the debug panel -* Confirm that the browser peer is connected to at least one other peer, then close the debug panel +Perform transactions: +* An invitation is required to be able to perform transactions; ask an existing user of the app for an invite +* In a browser, close the app if it's already open and then open the invite link +* From the debug panel, confirm that the browser peer is connected to at least one other peer * Check the status for a phisher to be reported in the `Check Phisher Status` section on homepage * Select `Report Phisher` option in the `Pending reports` section, enter multiple phisher records and click on the `Submit batch to p2p network` button; this broadcasts signed invocations to peers on the network, including the watcher peer * Check the watcher container logs to see the message received: @@ -286,7 +301,7 @@ Clear volumes created by this stack: ```bash # List all relevant volumes - docker volume ls -q --filter "name=mobymask_v2*" + docker volume ls -q --filter "name=mobymask_v2" # Expected output: @@ -296,7 +311,7 @@ Clear volumes created by this stack: # Remove all the listed volumes - docker volume rm $(docker volume ls -q --filter "name=mobymask_v2*") + docker volume rm $(docker volume ls -q --filter "name=mobymask_v2") ``` ## Troubleshooting diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md new file mode 100644 index 00000000..d20dc405 --- /dev/null +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md @@ -0,0 +1,162 @@ +# MobyMask Watcher P2P Network - Web App + +Instructions to setup and deploy the MobyMask app locally, pointed to a watcher on the p2p network + +## Prerequisites + +* Laconic Stack Orchestrator ([installation](/README.md#install)) +* Watcher GQL endpoint + +## Setup + +Build the container images: + + ```bash + laconic-so --stack mobymask-v2 build-containers --include cerc/react-peer,cerc/mobymask-ui + ``` + +Check that the required images are created in the local image registry: + + ```bash + docker image ls + + # Expected output: + + # REPOSITORY TAG IMAGE ID CREATED SIZE + # cerc/react-peer local d66b144dbb53 4 days ago 868MB + # cerc/mobymask-ui local e456bf9937ec 4 days ago 1.67GB + # . + # . + ``` + +## Deploy + +### Configuration + +Create an env file `mobymask-app.env`: + + ```bash + touch mobymask-app.env + ``` + +Add the following contents to `mobymask-app.env`: + + ```bash + # Watcher endpoint used by the app for GQL queries + CERC_APP_WATCHER_URL="http://127.0.0.1:3001" + + + # DO NOT CHANGE THESE VALUES + CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" + CERC_RELAY_NODES=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] + ``` + +Replace `CERC_APP_WATCHER_URL` with the watcher's endpoint (eg. `https://mobymask.example.com`) + +### Deploy the stack + +```bash +laconic-so --stack mobymask-v2 deploy --cluster mm_v2 --include mobymask-app --env-file mobymask-app.env up lxdao-mobymask-app + +# Expected output (ignore the "The X variable is not set. Defaulting to a blank string." warnings): + +# [+] Running 4/4 +# ✔ Network mm_v2_default Created 0.1s +# ✔ Volume "mm_v2_peers_ids" Created 0.0s +# ✔ Volume "mm_v2_mobymask_deployment" Created 0.0s +# ✔ Container mm_v2-lxdao-mobymask-app-1 Started 1.1s +``` + +This will run the `lxdao-mobymask-app` (at `http://localhost:3004`) pointed to `CERC_APP_WATCHER_URL` for GQL queries + +To monitor the running container: + + ```bash + # With status + docker ps + + # Expected output: + + # CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + # f1369dbae1c9 cerc/mobymask-ui:local "docker-entrypoint.s…" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:3004->80/tcp mm_v2-lxdao-mobymask-app-1 + + # Check logs for a container + docker logs -f mm_v2-lxdao-mobymask-app-1 + + # Expected output: + + # . + # . + # . + # Available on: + # http://127.0.0.1:80 + # http://192.168.0.2:80 + # Hit CTRL-C to stop the server + ``` + +Note: For opening an invite link on this deployed app, replace the URL part before `/#` with `http://localhost:3004` +For example: `http://localhost:3004/#/members?invitation=XYZ` + +In order to host the app using a public domain, configure your website with SSL and `https` traffic reverse proxied to port `3004`. + +For example, a Nginx configuration for domain `my-mobymask-app.example.com` would look something like: + + ```bash + server { + server_name my-mobymask-app.example.com; + + location / { + proxy_pass http://localhost:3004; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + + listen [::]:443 ssl; + listen 443 ssl; + ssl_certificate /etc/letsencrypt/live/my-mobymask-app.example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/my-mobymask-app.example.com/privkey.pem; + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + } + + server { + if ($host = my-mobymask-app.example.com) { + return 301 https://$host$request_uri; + } # managed by Certbot + + server_name my-mobymask-app.example.com; + listen 80; + return 404; # managed by Certbot + } + ``` + +## Clean up + +Stop all services running in the background: + + ```bash + laconic-so --stack mobymask-v2 deploy --cluster mm_v2 --include mobymask-app down + + # Expected output: + + # [+] Running 2/2 + # ✔ Container mm_v2-lxdao-mobymask-app-1 Removed 10.6s + # ✔ Network mm_v2_default Removed 0.5s + ``` + +Clear volumes created by this stack: + + ```bash + # List all relevant volumes + docker volume ls -q --filter "name=mm_v2" + + # Expected output: + + # mm_v2_mobymask_deployment + # mm_v2_peers_ids + + # Remove all the listed volumes + docker volume rm $(docker volume ls -q --filter "name=mm_v2") + ``` diff --git a/app/data/stacks/mobymask-v2/web-apps.md b/app/data/stacks/mobymask-v2/web-apps.md index 76293f1f..42f05095 100644 --- a/app/data/stacks/mobymask-v2/web-apps.md +++ b/app/data/stacks/mobymask-v2/web-apps.md @@ -28,10 +28,6 @@ Create and update an env file to be used in the next step ([defaults](../../conf # Also add if running MobyMask app: - # External watcher endpoint (to check if watcher is up) - CERC_WATCHER_HOST= - CERC_WATCHER_PORT= - # Watcher endpoint used by the app for GQL queries CERC_APP_WATCHER_URL="http://127.0.0.1:3001" @@ -50,7 +46,7 @@ For running mobymask-app ```bash laconic-so --stack mobymask-v2 deploy --include mobymask-app --env-file up -# Runs on host port 3002 +# Runs mobymask-app on host port 3002 and lxdao-mobymask-app on host port 3004 ``` For running peer-test-app From 6a11046ea5e107bfdba32767532f472e4f72d00b Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:38:13 +0530 Subject: [PATCH 56/67] Fix sample env in MobyMask app instructions (#369) --- app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md | 2 +- app/data/stacks/mobymask-v2/web-apps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md index d20dc405..cf1821b5 100644 --- a/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md +++ b/app/data/stacks/mobymask-v2/watcher-p2p-network/web-app.md @@ -48,7 +48,7 @@ Add the following contents to `mobymask-app.env`: # DO NOT CHANGE THESE VALUES CERC_DEPLOYED_CONTRACT="0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9" - CERC_RELAY_NODES=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1", "/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm", "/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] + CERC_RELAY_NODES=["/dns4/relay1.dev.vdb.to/tcp/443/wss/p2p/12D3KooWAx83SM9GWVPc9v9fNzLzftRX6EaAFMjhYiFxRYqctcW1","/dns4/relay2.dev.vdb.to/tcp/443/wss/p2p/12D3KooWBycy6vHVEfUwwYRbPLBdb5gx9gtFSEMpErYPUjUkDNkm","/dns4/relay3.dev.vdb.to/tcp/443/wss/p2p/12D3KooWARcUJsiGCgiygiRVVK94U8BNSy8DFBbzAF3B6orrabwn"] ``` Replace `CERC_APP_WATCHER_URL` with the watcher's endpoint (eg. `https://mobymask.example.com`) diff --git a/app/data/stacks/mobymask-v2/web-apps.md b/app/data/stacks/mobymask-v2/web-apps.md index 42f05095..2eb037f6 100644 --- a/app/data/stacks/mobymask-v2/web-apps.md +++ b/app/data/stacks/mobymask-v2/web-apps.md @@ -22,7 +22,7 @@ Create and update an env file to be used in the next step ([defaults](../../conf ```bash # Set of relay nodes to be used by the web-app - # (use double quotes " for strings) + # (use double quotes " for strings, avoid space after commas) # Eg. CERC_RELAY_NODES=["/dns4/example.com/tcp/443/wss/p2p/12D3KooWGHmDDCc93XUWL16FMcTPCGu2zFaMkf67k8HZ4gdQbRDr"] CERC_RELAY_NODES=[] From 7a607c299441126d3c9126dc4efa70b18b63ea48 Mon Sep 17 00:00:00 2001 From: Thomas E Lackey Date: Wed, 26 Apr 2023 00:13:35 -0500 Subject: [PATCH 57/67] Add script for exporting ethdb from fixturenet. (#370) * Add script for exporting ethdb from fixturenet. * Update README * Script --- .../compose/docker-compose-fixturenet-eth.yml | 2 + .../cerc-fixturenet-eth-geth/run-el.sh | 6 +++ .../scripts/export-ethdb.sh | 38 +++++++++++++++++++ .../scripts/status.sh | 26 +++++++++++-- app/data/stacks/fixturenet-eth-tx/README.md | 37 ++++++++++++++++++ app/data/stacks/fixturenet-eth-tx/stack.yml | 15 ++++++++ 6 files changed, 121 insertions(+), 3 deletions(-) create mode 100755 app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh create mode 100644 app/data/stacks/fixturenet-eth-tx/README.md create mode 100644 app/data/stacks/fixturenet-eth-tx/stack.yml diff --git a/app/data/compose/docker-compose-fixturenet-eth.yml b/app/data/compose/docker-compose-fixturenet-eth.yml index c687b326..59f729b9 100644 --- a/app/data/compose/docker-compose-fixturenet-eth.yml +++ b/app/data/compose/docker-compose-fixturenet-eth.yml @@ -49,6 +49,8 @@ services: timeout: 10s retries: 10 start_period: 3s + environment: + CERC_KEEP_RUNNING_AFTER_GETH_EXIT: "true" env_file: - ../config/fixturenet-eth/fixturenet-eth.env image: cerc/fixturenet-eth-geth:local diff --git a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh index 526c76d7..edde1ba2 100755 --- a/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh +++ b/app/data/container-build/cerc-fixturenet-eth-geth/run-el.sh @@ -127,3 +127,9 @@ else fi wait $geth_pid + +if [ "true" == "$CERC_KEEP_RUNNING_AFTER_GETH_EXIT" ]; then + while [ 1 -eq 1 ]; do + sleep 60 + done +fi diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh new file mode 100755 index 00000000..77198c61 --- /dev/null +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +MY_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +GETH_EXPORT_MIN_BLOCK=${1:-${GETH_EXPORT_MIN_BLOCK:-1000}} + +# Wait for block. +${MY_DIR}/status.sh $GETH_EXPORT_MIN_BLOCK +if [ $? -ne 0 ]; then + echo "Unable to export ethdb." 1>&2 + exit 1 +fi + +# Stop geth. +echo -n "Exporting ethdb.... " +GETH_CONTAINER=`docker ps -q -f "name=${CERC_SO_COMPOSE_PROJECT}-fixturenet-eth-geth-2-1"` +if [ -z "$GETH_CONTAINER" ]; then + echo "not found" + exit 1 +fi + +docker exec $GETH_CONTAINER sh -c 'rm -rf /root/tmp && mkdir -p /root/tmp/export' +docker exec $GETH_CONTAINER sh -c 'ln -s /opt/testnet/build/el/geth.json /root/tmp/export/genesis.json && ln -s /root/ethdata /root/tmp/export/' +docker exec $GETH_CONTAINER sh -c 'cat /root/tmp/export/genesis.json | jq ".config" > /root/tmp/export/genesis.config.json' + +# Stop geth and zip up ethdb. +docker exec $GETH_CONTAINER sh -c 'curl -s --location "localhost:8545" --header "Content-Type: application/json" --data "{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"eth_getBlockByNumber\", \"params\": [\"0x0\", false]}" > /root/tmp/export/eth_getBlockByNumber_0x0.json' +docker exec $GETH_CONTAINER sh -c 'curl -s --location "localhost:8545" --header "Content-Type: application/json" --data "{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"eth_blockNumber\", \"params\": []}" > /root/tmp/export/eth_blockNumber.json' +docker exec $GETH_CONTAINER sh -c "killall geth && sleep 2 && tar chzf /root/tmp/ethdb.tgz -C /root/tmp/export ." + +# Copy ethdb to host. +GETH_EXPORT_FILE=${2:-${GETH_EXPORT_FILE:-./ethdb.tgz}} +docker cp $GETH_CONTAINER:/root/tmp/ethdb.tgz $GETH_EXPORT_FILE +echo "$GETH_EXPORT_FILE" +docker exec $GETH_CONTAINER sh -c "rm -rf /root/tmp" + +# Restart the container to get geth back up and running. +docker restart $GETH_CONTAINER >/dev/null diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh index c6e65a68..f6d9d27b 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/status.sh @@ -2,9 +2,10 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi -STATUSES=("geth to generate DAG" "beacon phase0" "beacon altair" "beacon bellatrix pre-merge" "beacon bellatrix merge") -STATUS=0 +MIN_BLOCK_NUM=${1:-${MIN_BLOCK_NUM:-3}} +STATUSES=("geth to generate DAG" "beacon phase0" "beacon altair" "beacon bellatrix pre-merge" "beacon bellatrix merge" "block number $MIN_BLOCK_NUM") +STATUS=0 LIGHTHOUSE_BASE_URL=${LIGHTHOUSE_BASE_URL} GETH_BASE_URL=${GETH_BASE_URL} @@ -13,18 +14,29 @@ GETH_BASE_URL=${GETH_BASE_URL} # or some execution environment-neutral mechanism. if [ -z "$LIGHTHOUSE_BASE_URL" ]; then LIGHTHOUSE_CONTAINER=`docker ps -q -f "name=fixturenet-eth-lighthouse-1-1"` + if [ -z "$LIGHTHOUSE_CONTAINER" ]; then + echo "Lighthouse container not found." 1>&2 + exit 1 + fi LIGHTHOUSE_PORT=`docker port $LIGHTHOUSE_CONTAINER 8001 | cut -d':' -f2` LIGHTHOUSE_BASE_URL="http://localhost:${LIGHTHOUSE_PORT}" fi if [ -z "$GETH_BASE_URL" ]; then GETH_CONTAINER=`docker ps -q -f "name=fixturenet-eth-geth-1-1"` + if [ -z "$GETH_CONTAINER" ]; then + echo "Lighthouse container not found." 1>&2 + exit 1 + fi GETH_PORT=`docker port $GETH_CONTAINER 8545 | cut -d':' -f2` GETH_BASE_URL="http://localhost:${GETH_PORT}" fi +MARKER="." + function inc_status() { echo " done" + MARKEr="." STATUS=$((STATUS + 1)) if [ $STATUS -lt ${#STATUSES[@]} ]; then echo -n "Waiting for ${STATUSES[$STATUS]}..." @@ -34,7 +46,7 @@ function inc_status() { echo -n "Waiting for ${STATUSES[$STATUS]}..." while [ $STATUS -lt ${#STATUSES[@]} ]; do sleep 1 - echo -n "." + echo -n "$MARKER" case $STATUS in 0) result=`wget --no-check-certificate --quiet -O - --method POST --header 'Content-Type: application/json' \ @@ -67,5 +79,13 @@ while [ $STATUS -lt ${#STATUSES[@]} ]; do inc_status fi ;; + 5) + result=`wget --no-check-certificate --quiet -O - "$LIGHTHOUSE_BASE_URL/eth/v2/beacon/blocks/head" | jq -r '.data.message.body.execution_payload.block_number'` + if [ ! -z "$result" ] && [ $result -gt $MIN_BLOCK_NUM ]; then + inc_status + else + MARKER="$result " + fi + ;; esac done diff --git a/app/data/stacks/fixturenet-eth-tx/README.md b/app/data/stacks/fixturenet-eth-tx/README.md new file mode 100644 index 00000000..9af9ee3d --- /dev/null +++ b/app/data/stacks/fixturenet-eth-tx/README.md @@ -0,0 +1,37 @@ +# fixturenet-eth-tx + +A variation of `fixturenet-eth` that automatically generates transactions using `tx-spammer`. + +See `stacks/fixturenet-eth/README.md` for more information. + +## Containers + +* cerc/go-ethereum +* cerc/lighthouse +* cerc/fixturenet-eth-geth +* cerc/fixturenet-eth-lighthouse +* cerc/tx-spammer + +## Deploy the stack +``` +$ laconic-so --stack fixturenet-eth-tx setup-repositories +$ laconic-so --stack fixturenet-eth-tx build-containers +$ laconic-so --stack fixturenet-eth-tx deploy up +``` + +## Export the ethdb (optional) + +It is easy to export data from the fixturenet for offline processing of the raw ethdb files (eg, by eth-statediff-service) using the `export-ethdb.sh` script. + +For example: + +``` +❯ app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh 500 +Waiting for geth to generate DAG.... done +Waiting for beacon phase0.... done +Waiting for beacon altair.... done +Waiting for beacon bellatrix pre-merge.... done +Waiting for beacon bellatrix merge.... done +Waiting for block number 500.... done +Exporting ethdb.... ./ethdb.tgz +``` diff --git a/app/data/stacks/fixturenet-eth-tx/stack.yml b/app/data/stacks/fixturenet-eth-tx/stack.yml new file mode 100644 index 00000000..0c3b45a3 --- /dev/null +++ b/app/data/stacks/fixturenet-eth-tx/stack.yml @@ -0,0 +1,15 @@ +version: "1.1" +name: fixturenet-eth-tx +decription: "Ethereum Fixturenet w/ tx-spammer" +repos: + - cerc-io/go-ethereum + - cerc-io/tx-spammer +containers: + - cerc/go-ethereum + - cerc/lighthouse + - cerc/fixturenet-eth-geth + - cerc/fixturenet-eth-lighthouse + - cerc/tx-spammer +pods: + - fixturenet-eth + - tx-spammer From a4ff8f3dcb8ff2b45fc89b9d99d8f354bb14b545 Mon Sep 17 00:00:00 2001 From: Zach Date: Wed, 26 Apr 2023 14:43:32 -0400 Subject: [PATCH 58/67] optimism: on error, wait, then re-run 'deploy up' --- app/data/stacks/fixturenet-optimism/README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/data/stacks/fixturenet-optimism/README.md b/app/data/stacks/fixturenet-optimism/README.md index 7664a7c3..02e06a44 100644 --- a/app/data/stacks/fixturenet-optimism/README.md +++ b/app/data/stacks/fixturenet-optimism/README.md @@ -2,7 +2,7 @@ Instructions to setup and deploy an end-to-end L1+L2 stack with [fixturenet-eth](../fixturenet-eth/) (L1) and [Optimism](https://stack.optimism.io) (L2) -We support running just the L2 part of stack, given an external L1 endpoint. Follow [l2-only](./l2-only.md) for the same. +We support running just the L2 part of stack, given an external L1 endpoint. Follow the [L2 only doc](./l2-only.md) for the same. ## Setup @@ -28,6 +28,8 @@ Build the container images: laconic-so --stack fixturenet-optimism build-containers ``` +Note: this will take >10 mins depending on the specs of your machine, and **requires** 16GB of memory or greater. + This should create the required docker images in the local image registry: * `cerc/go-ethereum` * `cerc/lighthouse` @@ -48,12 +50,14 @@ Deploy the stack: laconic-so --stack fixturenet-optimism deploy up ``` -The `fixturenet-optimism-contracts` service may take a while (`~15 mins`) to complete running as it: +If you get the error `service "fixturenet-optimism-contracts" didn't complete successfully: exit 1` with ~25 lines of Traceback, wait 15-20 mins then re-run the command. + +The `fixturenet-optimism-contracts` service takes a while to complete running as it: 1. waits for the 'Merge' to happen on L1 2. waits for a finalized block to exist on L1 (so that it can be taken as a starting block for roll ups) 3. deploys the L1 contracts -To list down and monitor the running containers: +To list and monitor the running containers: ```bash laconic-so --stack fixturenet-optimism deploy ps From 323ca3b2387e0ac656b901405362298895b8a3e8 Mon Sep 17 00:00:00 2001 From: Thomas E Lackey Date: Wed, 26 Apr 2023 23:26:50 -0500 Subject: [PATCH 59/67] Minor script cleanup. (#372) --- .../scripts/export-ethdb.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh index 77198c61..dd93b219 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh @@ -1,12 +1,21 @@ #!/bin/bash -MY_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +# Exports the complete fixturenet-eth ethdb data to a tarball (default, ./ethdb.tgz), waiting for a minimum +# block height (default 1000) to be reached before exporting. + +# Usage: export-ethdb.sh [min_block_number=1000] [output_file=./ethdb.tgz] + +if [[ -n "$CERC_SCRIPT_DEBUG" ]]; then + set -x +fi + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) GETH_EXPORT_MIN_BLOCK=${1:-${GETH_EXPORT_MIN_BLOCK:-1000}} # Wait for block. -${MY_DIR}/status.sh $GETH_EXPORT_MIN_BLOCK -if [ $? -ne 0 ]; then +${SCRIPT_DIR}/status.sh $GETH_EXPORT_MIN_BLOCK +if [[ $? -ne 0 ]]; then echo "Unable to export ethdb." 1>&2 exit 1 fi @@ -14,7 +23,7 @@ fi # Stop geth. echo -n "Exporting ethdb.... " GETH_CONTAINER=`docker ps -q -f "name=${CERC_SO_COMPOSE_PROJECT}-fixturenet-eth-geth-2-1"` -if [ -z "$GETH_CONTAINER" ]; then +if [[ -z "$GETH_CONTAINER" ]]; then echo "not found" exit 1 fi From f04b266a24351d89fe60c2f87a0cbcd7e81dc6bf Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Thu, 27 Apr 2023 18:26:58 +0530 Subject: [PATCH 60/67] Map op-batcher and op-proposer ports to host (#373) --- app/data/compose/docker-compose-fixturenet-optimism.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/data/compose/docker-compose-fixturenet-optimism.yml b/app/data/compose/docker-compose-fixturenet-optimism.yml index c9e17b03..a20fd118 100644 --- a/app/data/compose/docker-compose-fixturenet-optimism.yml +++ b/app/data/compose/docker-compose-fixturenet-optimism.yml @@ -122,6 +122,8 @@ services: # Waits for L1 endpoint to be up before running the batcher command: | "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-batcher.sh" + ports: + - "127.0.0.1:8548:8548" extra_hosts: - "host.docker.internal:host-gateway" @@ -145,6 +147,8 @@ services: # Waits for L1 endpoint to be up before running the proposer command: | "/wait-for-it.sh -h ${CERC_L1_HOST:-$${DEFAULT_CERC_L1_HOST}} -p ${CERC_L1_PORT:-$${DEFAULT_CERC_L1_PORT}} -s -t 60 -- /run-op-proposer.sh" + ports: + - "127.0.0.1:8560:8560" extra_hosts: - "host.docker.internal:host-gateway" From 73419c341a427133161264e9bee5e6082bc918ce Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 27 Apr 2023 10:22:21 -0600 Subject: [PATCH 61/67] Remove > --- app/data/stacks/fixturenet-eth-tx/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/data/stacks/fixturenet-eth-tx/README.md b/app/data/stacks/fixturenet-eth-tx/README.md index 9af9ee3d..f6ae483a 100644 --- a/app/data/stacks/fixturenet-eth-tx/README.md +++ b/app/data/stacks/fixturenet-eth-tx/README.md @@ -26,7 +26,7 @@ It is easy to export data from the fixturenet for offline processing of the raw For example: ``` -❯ app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh 500 +$ app/data/container-build/cerc-fixturenet-eth-lighthouse/scripts/export-ethdb.sh 500 Waiting for geth to generate DAG.... done Waiting for beacon phase0.... done Waiting for beacon altair.... done From af93743974a5ea35f13a65261b53a2581eb36016 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 27 Apr 2023 09:52:37 -0700 Subject: [PATCH 62/67] Add foundry to the fixturenet-eth-tx stack (#374) --- app/data/stacks/fixturenet-eth-tx/stack.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/data/stacks/fixturenet-eth-tx/stack.yml b/app/data/stacks/fixturenet-eth-tx/stack.yml index 0c3b45a3..0a0a6bd6 100644 --- a/app/data/stacks/fixturenet-eth-tx/stack.yml +++ b/app/data/stacks/fixturenet-eth-tx/stack.yml @@ -1,15 +1,18 @@ -version: "1.1" +version: "1.2" name: fixturenet-eth-tx decription: "Ethereum Fixturenet w/ tx-spammer" repos: - cerc-io/go-ethereum - cerc-io/tx-spammer + - dboreham/foundry containers: - cerc/go-ethereum - cerc/lighthouse - cerc/fixturenet-eth-geth - cerc/fixturenet-eth-lighthouse - cerc/tx-spammer + - cerc/foundry pods: - fixturenet-eth + - foundry - tx-spammer From 19e38d2a942af03e80e81138b3f079dfbf4de7fa Mon Sep 17 00:00:00 2001 From: David Boreham Date: Thu, 27 Apr 2023 09:54:11 -0700 Subject: [PATCH 63/67] Remove gerbil builder container from build-support stack (#375) --- app/data/stacks/build-support/stack.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/data/stacks/build-support/stack.yml b/app/data/stacks/build-support/stack.yml index e4efb457..e0962515 100644 --- a/app/data/stacks/build-support/stack.yml +++ b/app/data/stacks/build-support/stack.yml @@ -1,6 +1,5 @@ -version: "1.1" +version: "1.2" name: build-support decription: "Build Support Components" containers: - cerc/builder-js - - cerc/builder-gerbil From 993118deb4e4ee668ad0c746fde40317cc37c2f0 Mon Sep 17 00:00:00 2001 From: zramsay Date: Thu, 27 Apr 2023 13:15:39 -0400 Subject: [PATCH 64/67] better direction to stacks --- README.md | 46 ++++++++-------------------------------------- 1 file changed, 8 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 0f2ca38e..4f490d8c 100644 --- a/README.md +++ b/README.md @@ -35,58 +35,28 @@ curl -L -o ~/bin/laconic-so https://github.com/cerc-io/stack-orchestrator/releas ``` Give it execute permissions: + ```bash chmod +x ~/bin/laconic-so ``` Ensure `laconic-so` is on the [`PATH`](https://unix.stackexchange.com/a/26059) -Verify operation (your version will probably be different, just check here that you see some version outut and not an error): +Verify operation (your version will probably be different, just check here that you see some version output and not an error): ``` laconic-so version -Version: v1.0.27-7831078 +Version: 1.1.0-7a607c2-202304260513 ``` ## Usage -Three sub-commands: `setup-repositories`, `build-containers` and `deploy-system` are generally run in order. The following is a slim example for standing up the `erc20-watcher`. Go further with the [erc20 watcher demo](/app/data/stacks/erc20) and other pieces of the stack, within the [`stacks` directory](/app/data/stacks). +The various [stacks](/app/data/stacks) each contain instructions for running different stacks based on your use case. For example: -### Setup Repositories - -Clone the set of git repositories necessary to build a system: - -```bash -laconic-so --stack erc20 setup-repositories -``` - -This will default to cloning git reposiories into: `~/cerc` or - if set - the environment variable `CERC_REPO_BASE_DIR` - -### Build Containers - -Build the set of docker container images required to run a system. It takes around 10 minutes to build all the containers from scratch. - -```bash -laconic-so --stack erc20 build-containers -``` - -### Deploy System - -Uses `docker compose` to deploy a system (with most recently built container images). - -```bash -laconic-so --stack erc20 deploy-system up -``` - -Check out he GraphQL playground here: [http://localhost:3002/graphql](http://localhost:3002/graphql) - -See the [erc20 watcher demo](/app/data/stacks/erc20) to continue further. - -### Cleanup - -```bash -laconic-so --stack erc20 deploy-system down -``` +- [self-hosted Gitea](/app/data/stacks/build-support) +- [an Optimism Fixturenet](/app/data/stacks/fixturenet-optimism) +- [laconicd with console and CLI](app/data/stacks/fixturenet-laconic-loaded) +- [kubo (IPFS)](app/data/stacks/kubo) ## Contributing From 97433a7bb562c94e09b0a311324318c65c0c0b84 Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 29 Apr 2023 14:55:10 -0400 Subject: [PATCH 65/67] rm gerbil from doc --- app/data/stacks/build-support/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/data/stacks/build-support/README.md b/app/data/stacks/build-support/README.md index b4090d76..fd85927f 100644 --- a/app/data/stacks/build-support/README.md +++ b/app/data/stacks/build-support/README.md @@ -16,7 +16,7 @@ Leave `CERC_NPM_REGISTRY_URL` un-set to use the local gitea registry. Note: the scheme/gerbil container is excluded as it isn't currently required for the package registry. ``` -$ laconic-so --stack build-support build-containers --exclude cerc/builder-gerbil +$ laconic-so --stack build-support build-containers ``` ### 2. Deploy Gitea Package Registry From cba2345af3485d22a9d315d3cffe618caae470b6 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 2 May 2023 12:14:48 +0530 Subject: [PATCH 66/67] Avoid persisting lighthouse bootnode ENR between restarts (#377) --- .../compose/docker-compose-fixturenet-eth.yml | 3 --- .../genesis/cl/bootnode.sh | 16 ++++------------ app/data/stacks/fixturenet-eth/README.md | 4 ++-- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/app/data/compose/docker-compose-fixturenet-eth.yml b/app/data/compose/docker-compose-fixturenet-eth.yml index 59f729b9..42737f5b 100644 --- a/app/data/compose/docker-compose-fixturenet-eth.yml +++ b/app/data/compose/docker-compose-fixturenet-eth.yml @@ -64,8 +64,6 @@ services: environment: RUN_BOOTNODE: "true" image: cerc/fixturenet-eth-lighthouse:local - volumes: - - fixturenet_eth_bootnode_lighthouse_data:/opt/testnet/build/cl fixturenet-eth-lighthouse-1: hostname: fixturenet-eth-lighthouse-1 @@ -120,6 +118,5 @@ volumes: fixturenet_eth_bootnode_geth_data: fixturenet_eth_geth_1_data: fixturenet_eth_geth_2_data: - fixturenet_eth_bootnode_lighthouse_data: fixturenet_eth_lighthouse_1_data: fixturenet_eth_lighthouse_2_data: diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh index a395f41a..70ecb47c 100755 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh @@ -21,22 +21,14 @@ if [ ! -f "$DATADIR/bootnode/enr.dat" ]; then --udp-port $BOOTNODE_PORT \ --tcp-port $BOOTNODE_PORT \ --genesis-fork-version $GENESIS_FORK_VERSION \ - --output-dir $DATADIR/bootnode-temp + --output-dir $DATADIR/bootnode - # Output ENR to a temp dir and mv as "lcli generate-bootnode-enr" will not overwrite an empty dir (mounted volume) - mkdir -p $DATADIR/bootnode - mv $DATADIR/bootnode-temp/* $DATADIR/bootnode - rm -r $DATADIR/bootnode-temp + bootnode_enr=`cat $DATADIR/bootnode/enr.dat` + echo "- $bootnode_enr" > $TESTNET_DIR/boot_enr.yaml - echo "Generated bootnode enr" -else - echo "Found existing bootnode enr" + echo "Generated bootnode enr and written to $TESTNET_DIR/boot_enr.yaml" fi -bootnode_enr=`cat $DATADIR/bootnode/enr.dat` -echo "- $bootnode_enr" > $TESTNET_DIR/boot_enr.yaml -echo "Written bootnode enr to $TESTNET_DIR/boot_enr.yaml" - exec lighthouse boot_node \ --testnet-dir $TESTNET_DIR \ --port $BOOTNODE_PORT \ diff --git a/app/data/stacks/fixturenet-eth/README.md b/app/data/stacks/fixturenet-eth/README.md index c54237aa..7bd96506 100644 --- a/app/data/stacks/fixturenet-eth/README.md +++ b/app/data/stacks/fixturenet-eth/README.md @@ -117,8 +117,8 @@ Clear volumes created by this stack: ```bash # List all relevant volumes -$ docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data" +$ docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data" # Remove all the listed volumes -$ docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_bootnode_lighthouse_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data") +$ docker volume rm $(docker volume ls -q --filter "name=.*fixturenet_eth_bootnode_geth_data|.*fixturenet_eth_geth_1_data|.*fixturenet_eth_geth_2_data|.*fixturenet_eth_lighthouse_1_data|.*fixturenet_eth_lighthouse_2_data") ``` From ed4f40118fdf14f145c25b1a4d954a87ce1c9143 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Tue, 2 May 2023 13:18:29 +0530 Subject: [PATCH 67/67] Upgrade to use latest lighthouse release (#378) --- .../container-build/cerc-fixturenet-eth-lighthouse/Dockerfile | 2 +- app/data/container-build/cerc-lighthouse/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile b/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile index 2295262d..958d2b39 100644 --- a/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile +++ b/app/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile @@ -1,4 +1,4 @@ -FROM sigp/lcli:v3.2.1 AS lcli +FROM sigp/lcli:v4.1.0 AS lcli FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen FROM cerc/fixturenet-eth-geth:local AS fnetgeth diff --git a/app/data/container-build/cerc-lighthouse/Dockerfile b/app/data/container-build/cerc-lighthouse/Dockerfile index 7d4fe5d8..cab3af06 100644 --- a/app/data/container-build/cerc-lighthouse/Dockerfile +++ b/app/data/container-build/cerc-lighthouse/Dockerfile @@ -1,4 +1,4 @@ -FROM sigp/lighthouse:v4.0.1-modern +FROM sigp/lighthouse:v4.1.0-modern RUN apt-get update; apt-get install bash netcat curl less jq -y;