From f636e6d84447050ad33d5bf17b119a2ed4d14dff Mon Sep 17 00:00:00 2001 From: Prathamesh Musale Date: Tue, 20 Feb 2024 16:58:53 +0530 Subject: [PATCH] Add a pod for mobymask v3 demo watcher and add fixtures --- ...ocker-compose-watcher-mobymask-v3-demo.yml | 88 ++++++++++++++ .../optimism-contracts/fund-accounts-on-l2.sh | 6 +- .../deploy-and-generate-invite.sh | 80 +++++++++++++ .../watcher-mobymask-v3-demo/local/config.env | 7 ++ .../local/keys/watcher-1.json | 20 ++++ .../local/keys/watcher-2.json | 20 ++++ .../local/keys/watcher-3.json | 20 ++++ .../watcher-mobymask-v3-demo/start-server.sh | 112 ++++++++++++++++++ .../watcher-config-rates.toml | 14 +++ .../watcher-config-template.toml | 111 +++++++++++++++++ .../data/stacks/mobymask-v3-demo/stack.yml | 2 +- 11 files changed, 477 insertions(+), 3 deletions(-) create mode 100644 stack_orchestrator/data/compose/docker-compose-watcher-mobymask-v3-demo.yml create mode 100755 stack_orchestrator/data/config/watcher-mobymask-v3-demo/deploy-and-generate-invite.sh create mode 100644 stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/config.env create mode 100644 stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-1.json create mode 100644 stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-2.json create mode 100644 stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-3.json create mode 100755 stack_orchestrator/data/config/watcher-mobymask-v3-demo/start-server.sh create mode 100644 stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-rates.toml create mode 100644 stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-template.toml diff --git a/stack_orchestrator/data/compose/docker-compose-watcher-mobymask-v3-demo.yml b/stack_orchestrator/data/compose/docker-compose-watcher-mobymask-v3-demo.yml new file mode 100644 index 00000000..3876ab23 --- /dev/null +++ b/stack_orchestrator/data/compose/docker-compose-watcher-mobymask-v3-demo.yml @@ -0,0 +1,88 @@ +version: '3.2' + +services: + # Starts the PostgreSQL database for watcher + mobymask-watcher-db: + restart: unless-stopped + image: postgres:14-alpine + environment: + - POSTGRES_USER=vdbm + - POSTGRES_MULTIPLE_DATABASES=mobymask-watcher-1,mobymask-watcher-1-job-queue,mobymask-watcher-2,mobymask-watcher-2-job-queue,mobymask-watcher-3,mobymask-watcher-3-job-queue + - POSTGRES_EXTENSION=mobymask-watcher-1-job-queue:pgcrypto,mobymask-watcher-2-job-queue:pgcrypto,mobymask-watcher-3-job-queue:pgcrypto + - POSTGRES_PASSWORD=password + volumes: + - ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh + - mobymask_watcher_db_data:/var/lib/postgresql/data + ports: + - "127.0.0.1:15432:5432" + healthcheck: + test: ["CMD", "nc", "-v", "localhost", "5432"] + interval: 20s + timeout: 5s + retries: 15 + start_period: 10s + + # Deploys the MobyMask contract and generates an invite link + # Deployment is skipped if CERC_DEPLOYED_CONTRACT env is set + mobymask: + image: cerc/mobymask:local + working_dir: /app/packages/server + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + # ENV: "PROD" + CERC_ETH_RPC_ENDPOINT: ${CERC_ETH_RPC_ENDPOINT} + CERC_PRIVATE_KEY_DEPLOYER: ${CERC_PRIVATE_KEY_DEPLOYER} + CERC_MOBYMASK_APP_BASE_URI: ${CERC_MOBYMASK_APP_BASE_URI} + CERC_DEPLOYED_CONTRACT: ${CERC_DEPLOYED_CONTRACT} + command: ["bash", "-c", "./deploy-and-generate-invite.sh"] + volumes: + - ../config/watcher-mobymask-v3-demo/deploy-and-generate-invite.sh:/app/packages/server/deploy-and-generate-invite.sh + - mobymask_deployment:/app/packages/server + extra_hosts: + - "host.docker.internal:host-gateway" + + # Starts the MobyMask v3 watcher server + mobymask-watcher-1-server: + image: cerc/watcher-mobymask-v3:local + restart: unless-stopped + depends_on: + mobymask-watcher-db: + condition: service_healthy + mobymask: + condition: service_completed_successfully + nitro-contracts: + condition: service_completed_successfully + environment: + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} + CERC_WATCHER_INDEX: 1 + CERC_ETH_RPC_QUERY_ENDPOINT: ${CERC_ETH_RPC_QUERY_ENDPOINT} + CERC_ETH_RPC_MUTATION_ENDPOINT: ${CERC_ETH_RPC_MUTATION_ENDPOINT} + CERC_NITRO_CHAIN_URL: ${CERC_NITRO_CHAIN_URL} + command: ["bash", "./start-server.sh"] + volumes: + - ../config/watcher-mobymask-v3-demo/watcher-config-template.toml:/app/environments/watcher-config-template.toml + - ../config/watcher-mobymask-v3-demo/watcher-config-rates.toml:/app/environments/rates.toml + - ../config/watcher-mobymask-v3-demo/local/keys:/app/keys + - ../config/watcher-mobymask-v3-demo/start-server.sh:/app/start-server.sh + - watcher_nitro_data:/app/out/nitro-db + - nitro_deployment:/nitro + - mobymask_deployment:/server + # Expose GQL, metrics and relay node ports + ports: + - "3001" + - "9001" + - "9090" + healthcheck: + test: ["CMD", "busybox", "nc", "localhost", "9090"] + interval: 20s + timeout: 5s + retries: 15 + start_period: 5s + extra_hosts: + - "host.docker.internal:host-gateway" + +volumes: + mobymask_watcher_db_data: + mobymask_deployment: + nitro_deployment: + watcher_nitro_data: diff --git a/stack_orchestrator/data/config/fixturenet-optimism/optimism-contracts/fund-accounts-on-l2.sh b/stack_orchestrator/data/config/fixturenet-optimism/optimism-contracts/fund-accounts-on-l2.sh index 1248f6cc..c850cbf4 100755 --- a/stack_orchestrator/data/config/fixturenet-optimism/optimism-contracts/fund-accounts-on-l2.sh +++ b/stack_orchestrator/data/config/fixturenet-optimism/optimism-contracts/fund-accounts-on-l2.sh @@ -4,6 +4,8 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi +echo "Funding accounts on L2" + CERC_L1_RPC="${CERC_L1_RPC:-${DEFAULT_CERC_L1_RPC}}" CERC_L1_CHAIN_ID="${CERC_L1_CHAIN_ID:-${DEFAULT_CERC_L1_CHAIN_ID}}" @@ -24,8 +26,8 @@ DEPLOYMENT_CONTEXT="$CERC_L1_CHAIN_ID" BRIDGE=$(cat /l1-deployment/$DEPLOYMENT_CONTEXT/L1StandardBridgeProxy.json | jq -r .address) # Send balance to bridge contract on L1 -cast send --from $ACCOUNT_1 --rpc-url $CERC_L1_RPC --value 1000ether $BRIDGE --private-key $ACCOUNT_1_KEY -cast send --from $ACCOUNT_2 --rpc-url $CERC_L1_RPC --value 1000ether $BRIDGE --private-key $ACCOUNT_2_KEY +cast send --from $ACCOUNT_1 --rpc-url $CERC_L1_RPC --value 10000ether $BRIDGE --private-key $ACCOUNT_1_KEY +cast send --from $ACCOUNT_2 --rpc-url $CERC_L1_RPC --value 10000ether $BRIDGE --private-key $ACCOUNT_2_KEY echo "Following accounts have been funded; use them for transactions on L2:" echo "${ACCOUNT_1}" diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/deploy-and-generate-invite.sh b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/deploy-and-generate-invite.sh new file mode 100755 index 00000000..b325d21d --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/deploy-and-generate-invite.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +# From env: +# CERC_ETH_RPC_ENDPOINT +# CERC_MOBYMASK_APP_BASE_URI +# CERC_DEPLOYED_CONTRACT +# CERC_PRIVATE_KEY_DEPLOYER + +# 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 ETH RPC endpoint ${CERC_ETH_RPC_ENDPOINT}" + +# Wait till ETH RPC endpoint is available with block number > 1 +retry_interval=5 +while true; do + block_number_hex=$(curl -s -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' ${CERC_ETH_RPC_ENDPOINT} | jq -r '.result') + + # Check if the request call was successful + if [ $? -ne 0 ]; then + echo "RPC endpoint not yet available, retrying in $retry_interval seconds..." + sleep $retry_interval + continue + fi + + # Convert hex to decimal + block_number_dec=$(printf %u ${block_number_hex}) + + # Check if block number is > 1 to avoid failures in the deployment + if [ "$block_number_dec" -ge 1 ]; then + echo "RPC endpoint is up" + break + else + echo "RPC endpoint not yet available, retrying in $retry_interval seconds..." + sleep $retry_interval + continue + fi +done + +echo "Using CERC_PRIVATE_KEY_DEPLOYER from env" + +# Create the required JSON and write it to a file +secrets_file="secrets.json" +secrets_json=$(jq -n \ + --arg privateKey "$CERC_PRIVATE_KEY_DEPLOYER" \ + --arg rpcUrl "$CERC_ETH_RPC_ENDPOINT" \ + --arg baseURI "$CERC_MOBYMASK_APP_BASE_URI" \ + '.privateKey = $privateKey | .rpcUrl = $rpcUrl | .baseURI = $baseURI') +echo "$secrets_json" > "${secrets_file}" + +export RPC_URL="${CERC_ETH_RPC_ENDPOINT}" + +# Check and exit if a deployment already exists (on restarts) +if [ -f ./config.json ]; then + echo "config.json already exists, checking the contract deployment" + + # Read JSON file + deployment_details=$(cat config.json) + deployed_contract=$(echo "$deployment_details" | jq -r '.address') + + cd ../hardhat + if yarn verifyDeployment --network optimism --contract "${deployed_contract}"; then + echo "Deployment verfication successful" + cd ../server + else + echo "Deployment verfication failed, please clear MobyMask deployment volume before starting" + exit 1 + fi +fi + +npm run deployAndGenerateInvite diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/config.env b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/config.env new file mode 100644 index 00000000..3b2c1638 --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/config.env @@ -0,0 +1,7 @@ +CERC_ETH_RPC_ENDPOINT="http://op-geth:8545" +CERC_PRIVATE_KEY_DEPLOYER="0xbe4aa664815ea3bc3d63118649a733f6c96b243744310806ecb6d96359ab62cf" # L1 faucet account #4 +CERC_MOBYMASK_APP_BASE_URI="http://127.0.0.1:3004/#" + +CERC_ETH_RPC_QUERY_ENDPOINT="http://op-geth:8545" +CERC_ETH_RPC_MUTATION_ENDPOINT="http://op-geth:8545" +CERC_NITRO_CHAIN_URL="http://op-geth:8546" diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-1.json b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-1.json new file mode 100644 index 00000000..d4dfdfc7 --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-1.json @@ -0,0 +1,20 @@ +{ + "peerId": { + "id": "12D3KooWAMjBkFCT9DtCnSDcxftxJzSuTBvzVojabv64cnEvX4AZ", + "privKey": "CAESQAKCrnY0QKTky1I18fqn+VPydXGUv1NYiV+nVKqBFkw/CAjE9sKKIDGnYAo8mivnI6dngFenERY+0Q8AJrPTaXY=", + "pubKey": "CAESIAgIxPbCiiAxp2AKPJor5yOnZ4BXpxEWPtEPACaz02l2" + }, + "relayPeerId": { + "id": "12D3KooWNQJDGtH3YAZk2qG1ZbcoQvw6HaD814pfd9HHQthgX63K", + "privKey": "CAESQGc996T2OuyV3aY+hnna+GIexKBEcE6jDNX/RaofHr58uv2EYxXm4kcL2tO2tKgnPgtkegHFdjqy6h/xOA+YMZo=", + "pubKey": "CAESILr9hGMV5uJHC9rTtrSoJz4LZHoBxXY6suof8TgPmDGa" + }, + "peer": { + "privateKey": "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + "nitroPrivateKey": "2d999770f7b5d49b694080f987b82bbc9fc9ac2b4dcc10b0f8aba7d700f69c6d" + }, + "consensus": { + "publicKey": "02cd17b05ca998955be5ca7bf4fd4531243d438f1aae7ce8a0ed5159f53cee5b40", + "privateKey": "67d80505614bdf61fca11cbad31d93acb2c7df1c653dc25975d77d05f05f154f" + } +} diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-2.json b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-2.json new file mode 100644 index 00000000..7bf99cb3 --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-2.json @@ -0,0 +1,20 @@ +{ + "peerId": { + "id": "12D3KooWBNEbY3QS4y23ngupDw9PDc4bvNvRJGVRejjV9EZLjux5", + "privKey": "CAESQGSTw0ymvn8+wX9Dbvyr4/Gib1q2voe0CC0VyeClMQP6FwW14x0fpRbBIx0XhLdxWHkRndphVg3gVAHyC+7ZI8o=", + "pubKey": "CAESIBcFteMdH6UWwSMdF4S3cVh5EZ3aYVYN4FQB8gvu2SPK" + }, + "relayPeerId": { + "id": "12D3KooWPpBt2coC5BKEsewogHSkdgdyY9guUHJBgJFZoh66R4UL", + "privKey": "CAESQBdoGZzpiHsE8GlIhGGP+tl6A13sIPxOhgSwsWZR4cwmz/f7627X5GQRLD41ikH6oZ7ZeSbiiPsBtelL1+t3M80=", + "pubKey": "CAESIM/3++tu1+RkESw+NYpB+qGe2Xkm4oj7AbXpS9frdzPN" + }, + "peer": { + "privateKey": "59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", + "nitroPrivateKey": "0279651921cd800ac560c21ceea27aab0107b67daf436cdd25ce84cad30159b4" + }, + "consensus": { + "publicKey": "029c8035b3e9401b8f178f7c37285b5cb22501e017340e2058b3b842f2a1f0ae45", + "privateKey": "0261008e8e3ec808168e99333599da38ca59a056a2ae4510a6ad3d8b5cb0918c" + } +} diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-3.json b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-3.json new file mode 100644 index 00000000..5129c8c5 --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/local/keys/watcher-3.json @@ -0,0 +1,20 @@ +{ + "peerId": { + "id": "12D3KooWSRH6ftgkAZsKZK7UX1Zr6Hx6YAsEepHqzopFszqfTxxi", + "privKey": "CAESQHBjlHxfVhZ2gXsBItrIEEgSGKcjMkFiGs3PPz9E3ace9qyWEkvR4oit5ve9SAROVoh20hoa42IC91NIafMaqws=", + "pubKey": "CAESIPaslhJL0eKIreb3vUgETlaIdtIaGuNiAvdTSGnzGqsL" + }, + "relayPeerId": { + "id": "12D3KooWLudDC3NnS8k9xLiqTZcS9xbFNrGSttu5GPynQgNgenPW", + "privKey": "CAESQHuEXPB1hTQATlZaNRQnAfSvnfYUeLF9PjSNKp9L33K2pMl37tTBYghnfQ0yluse0zHOIXRJM+9+ARn9+jIr0gU=", + "pubKey": "CAESIKTJd+7UwWIIZ30NMpbrHtMxziF0STPvfgEZ/foyK9IF" + }, + "peer": { + "privateKey": "47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a", + "nitroPrivateKey": "58368d20ff12f17669c06158c21d885897aa56f9be430edc789614bf9851d53f" + }, + "consensus": { + "publicKey": "039160c244a7ad8be16a64bdb69e6dbacdcfe20b37076792a0d06032a8097468ca", + "privateKey": "8894685fe81001d75662b079905472699373967451d1255ee5fc669d0a09a9ca" + } +} diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/start-server.sh b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/start-server.sh new file mode 100755 index 00000000..96a982bf --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/start-server.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +set -e +if [ -n "$CERC_SCRIPT_DEBUG" ]; then + set -x +fi + +watcher_keys_dir="./keys" + +echo "Watcher index: ${CERC_WATCHER_INDEX}" +echo "Using RPC query endpoint ${CERC_ETH_RPC_QUERY_ENDPOINT}" +echo "Using RPC mutation endpoint ${CERC_ETH_RPC_MUTATION_ENDPOINT}" +echo "Using Nitro chain URL ${CERC_NITRO_CHAIN_URL}" + +WATCHER_DB="mobymask-watcher-${CERC_WATCHER_INDEX}" + +# Use the docker container's host IP for relay multiaddr in peer config +CERC_RELAY_MULTIADDR="/dns4/mobymask-watcher-${CERC_WATCHER_INDEX}-server/tcp/9090/ws/p2p/$(jq -r '.relayPeerId.id' /app/keys/watcher-${CERC_WATCHER_INDEX}.json)" + +# Assign deployed contract address from server config (created by mobymask container after deploying contract) +CONTRACT_ADDRESS=$(jq -r '.address' /server/config.json | tr -d '"') + +nitro_addresses_file="/nitro/nitro-addresses.json" +nitro_addresses_destination_file="./src/nitro-addresses.json" +if [ -f ${nitro_addresses_file} ]; then + echo "Using Nitro addresses from ${nitro_addresses_file}:" + cat "$nitro_addresses_file" + cat "$nitro_addresses_file" > "$nitro_addresses_destination_file" +else + echo "Nitro addresses not available" + exit 1 +fi + +# Build after setting the Nitro addresses +yarn build + +PEER_ID_FILE='./peer-id.json' +RELAY_PEER_ID_FILE='./relay-id.json' + +# Create watcher party array +watcher_parties=() + +# Iterate over each fixture JSON file +for watcher_keys_file in "$watcher_keys_dir"/*.json; do + # Extract the filename without the path and extension + filename=$(basename "$watcher_keys_file" .json) + + # Read the consensus keys + peer_id=$(jq -r '.peerId.id' "$watcher_keys_file") + + # Read the consensus keys + consensus_public_key=$(jq -r '.consensus.publicKey' "$watcher_keys_file") + consensus_private_key=$(jq -r '.consensus.privateKey' "$watcher_keys_file") + + # Append watcher party + watcher_party=$(jq -n \ + --arg peerId "$peer_id" \ + --arg publicKey "$consensus_public_key" \ + '.peerId = $peerId | .publicKey = $publicKey') + watcher_parties+=("$watcher_party") + + if [ "$filename" = "watcher-${CERC_WATCHER_INDEX}" ]; then + # Export watcher peer and relay ids + peer_id_data=$(jq '.peerId' "$watcher_keys_file") + relay_peer_id_data=$(jq '.relayPeerId' "$watcher_keys_file") + echo "$peer_id_data" > "${PEER_ID_FILE}" + echo "$relay_peer_id_data" > "${RELAY_PEER_ID_FILE}" + + # Set peer and nitro account keys + CERC_PRIVATE_KEY_PEER=$(jq -r '.peer.privateKey' "$watcher_keys_file") + CERC_WATCHER_NITRO_PK=$(jq -r '.peer.nitroPrivateKey' "$watcher_keys_file") + + # Set consensus keys for this peer + CONSENSUS_PUBLIC_KEY=${consensus_public_key} + CONSENSUS_PRIVATE_KEY=${consensus_private_key} + fi +done + +echo "Consensus module enabled" +CONSENSUS_ENABLED=true +WATCHER_PARTY_PEERS_FILE='./watcher-party-peers.json' + +# Export watcher party file +watcher_parties_json=$(printf '%s\n' "${watcher_parties[@]}" | jq -s .) +echo "$watcher_parties_json" > "${WATCHER_PARTY_PEERS_FILE}" +echo "Watcher party peers exported to ${WATCHER_PARTY_PEERS_FILE}" + +# TODO: Configure +CERC_RELAY_PEERS=[] + +# 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_RELAY_PEERS|${CERC_RELAY_PEERS}|g; \ + s|REPLACE_WITH_CERC_RELAY_MULTIADDR|${CERC_RELAY_MULTIADDR}|g; \ + s/REPLACE_WITH_CERC_PRIVATE_KEY_PEER/${CERC_PRIVATE_KEY_PEER}/g; \ + s/REPLACE_WITH_CERC_WATCHER_NITRO_PK/${CERC_WATCHER_NITRO_PK}/g; \ + s/REPLACE_WITH_CONTRACT_ADDRESS/${CONTRACT_ADDRESS}/g; \ + s|REPLACE_WITH_CERC_NITRO_CHAIN_URL|${CERC_NITRO_CHAIN_URL}|g; \ + s/REPLACE_WITH_CONSENSUS_ENABLED/${CONSENSUS_ENABLED}/g; \ + s/REPLACE_WITH_CONSENSUS_PUBLIC_KEY/${CONSENSUS_PUBLIC_KEY}/g; \ + s/REPLACE_WITH_CONSENSUS_PRIVATE_KEY/${CONSENSUS_PRIVATE_KEY}/g; \ + s|REPLACE_WITH_WATCHER_PARTY_PEERS_FILE|${WATCHER_PARTY_PEERS_FILE}|g; \ + s|REPLACE_WITH_CERC_ETH_RPC_QUERY_ENDPOINT|${CERC_ETH_RPC_QUERY_ENDPOINT}|g; \ + s|REPLACE_WITH_CERC_ETH_RPC_MUTATION_ENDPOINT|${CERC_ETH_RPC_MUTATION_ENDPOINT}|g; \ + s|REPLACE_WITH_WATCHER_DB|${WATCHER_DB}| ") + +# Write the modified content to a new file +echo "$WATCHER_CONFIG" > environments/local.toml + +echo 'Running watcher server' +yarn server diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-rates.toml b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-rates.toml new file mode 100644 index 00000000..ebb8f8a1 --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-rates.toml @@ -0,0 +1,14 @@ +freeQueriesLimit = 10 + +freeQueriesList = [] + +[queries] + multiNonce = '50' + _owner = '50' + isRevoked = '50' + isPhisher = '50' + isMember = '50' + +[mutations] + invoke = '100' + revoke = '100' diff --git a/stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-template.toml b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-template.toml new file mode 100644 index 00000000..f2ec9eed --- /dev/null +++ b/stack_orchestrator/data/config/watcher-mobymask-v3-demo/watcher-config-template.toml @@ -0,0 +1,111 @@ +[server] + host = "0.0.0.0" + port = 3001 + kind = "lazy" + + # Checkpointing state. + checkpointing = false + + # Checkpoint interval in number of blocks. + checkpointInterval = 2000 + + # Enable state creation + enableState = false + + # Boolean to filter logs by contract. + filterLogs = true + + # Max block range for which to return events in eventsInRange GQL query. + # Use -1 for skipping check on block range. + maxEventsBlockRange = -1 + + # Flag to specify whether RPC endpoint supports block hash as block tag parameter + rpcSupportsBlockHashParam = true + + [server.p2p] + enableRelay = true + enablePeer = true + + [server.p2p.relay] + host = "0.0.0.0" + port = 9090 + relayPeers = REPLACE_WITH_CERC_RELAY_PEERS + denyMultiaddrs = [] + peerIdFile = './relay-id.json' + announce = '' + pubsub = '' + enableDebugInfo = true + + [server.p2p.peer] + relayMultiaddr = 'REPLACE_WITH_CERC_RELAY_MULTIADDR' + pubSubTopic = 'mobymask' + denyMultiaddrs = [] + peerIdFile = './peer-id.json' + pubsub = '' + enableDebugInfo = true + enableL2Txs = true + pingInterval = 4000 + pingTimeout = 1500 + maxRelayConnections = 10 + + [server.p2p.peer.l2TxsConfig] + privateKey = 'REPLACE_WITH_CERC_PRIVATE_KEY_PEER' + contractAddress = 'REPLACE_WITH_CONTRACT_ADDRESS' + + [server.p2p.nitro] + chainUrl = 'REPLACE_WITH_CERC_NITRO_CHAIN_URL' + store = './out/nitro-db' + privateKey = 'REPLACE_WITH_CERC_WATCHER_NITRO_PK' + chainPrivateKey = 'REPLACE_WITH_CERC_PRIVATE_KEY_PEER' + + [server.p2p.nitro.payments] + ratesFile = './environments/rates.toml' + requestTimeoutInSecs = 10 + + [server.p2p.nitro.payments.cache] + maxAccounts = 1000 + accountTTLInSecs = 1800 + maxVouchersPerAccount = 1000 + voucherTTLInSecs = 300 + maxPaymentChannels = 10000 + paymentChannelTTLInSecs = 1800 + + [server.p2p.consensus] + enabled = REPLACE_WITH_CONSENSUS_ENABLED + publicKey = 'REPLACE_WITH_CONSENSUS_PUBLIC_KEY' + privateKey = 'REPLACE_WITH_CONSENSUS_PRIVATE_KEY' + watcherPartyPeersFile = 'REPLACE_WITH_WATCHER_PARTY_PEERS_FILE' + +[metrics] + host = "0.0.0.0" + port = 9000 + [metrics.gql] + port = 9001 + +[database] + type = "postgres" + host = "mobymask-watcher-db" + port = 5432 + database = "REPLACE_WITH_WATCHER_DB" + username = "vdbm" + password = "password" + synchronize = true + logging = false + +[upstream] + [upstream.ethServer] + gqlApiEndpoint = "http://ipld-eth-server:8083/graphql" + rpcProviderEndpoint = 'REPLACE_WITH_CERC_ETH_RPC_QUERY_ENDPOINT' + rpcProviderMutationEndpoint = 'REPLACE_WITH_CERC_ETH_RPC_MUTATION_ENDPOINT' + + [upstream.cache] + name = "requests" + enabled = false + deleteOnStart = false + +[jobQueue] + dbConnectionString = "postgres://vdbm:password@mobymask-watcher-db/REPLACE_WITH_WATCHER_DB-job-queue" + maxCompletionLagInSecs = 300 + jobDelayInMilliSecs = 100 + eventsInBatch = 50 + blockDelayInMilliSecs = 60000 diff --git a/stack_orchestrator/data/stacks/mobymask-v3-demo/stack.yml b/stack_orchestrator/data/stacks/mobymask-v3-demo/stack.yml index 86da1a01..57cda474 100644 --- a/stack_orchestrator/data/stacks/mobymask-v3-demo/stack.yml +++ b/stack_orchestrator/data/stacks/mobymask-v3-demo/stack.yml @@ -42,6 +42,6 @@ pods: - fixturenet-eth - fixturenet-optimism - nitro-contracts - - watcher-mobymask-v3 + - watcher-mobymask-v3-demo - mobymask-snap - mobymask-app-v3