From 3262ebe4acf957c8266615e15b6e776ca18e1171 Mon Sep 17 00:00:00 2001 From: prathamesh0 <42446521+prathamesh0@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:51:55 +0530 Subject: [PATCH] Setup ipld-eth-server communicating with a remote Nitro node (#587) * Use durable store for in-process Nitro node * Update setup for external go-nitro node * Add a separate service for ipld-eth-server with remote Nitro node * Update repo branches / versions * Wait for external Nitro node endpoint and update instructions * Update repo branches --- app/data/compose/docker-compose-go-nitro.yml | 27 +++----- ...ocker-compose-ipld-eth-server-payments.yml | 58 +++++++++++++++-- app/data/compose/docker-compose-ponder.yml | 6 +- .../docker-compose-watcher-mobymask-v3.yml | 2 +- app/data/config/go-nitro/run-nitro-node.sh | 2 +- app/data/config/ipld-eth-server/entrypoint.sh | 61 +++++++++++------ .../watcher-mobymask-v3/mobymask-params.env | 2 +- .../container-build/cerc-go-nitro/Dockerfile | 16 +++++ .../container-build/cerc-go-nitro/build.sh | 4 +- app/data/stacks/fixturenet-payments/README.md | 10 ++- app/data/stacks/fixturenet-payments/demo.md | 65 ++++++++++--------- app/data/stacks/fixturenet-payments/stack.yml | 14 ++-- 12 files changed, 180 insertions(+), 87 deletions(-) create mode 100644 app/data/container-build/cerc-go-nitro/Dockerfile diff --git a/app/data/compose/docker-compose-go-nitro.yml b/app/data/compose/docker-compose-go-nitro.yml index 69b3afc8..552f621c 100644 --- a/app/data/compose/docker-compose-go-nitro.yml +++ b/app/data/compose/docker-compose-go-nitro.yml @@ -11,10 +11,13 @@ services: condition: service_completed_successfully environment: CERC_NITRO_CHAIN_URL: ${CERC_NITRO_CHAIN_URL:-ws://fixturenet-eth-geth-1:8546} - CERC_NITRO_PK: ${CERC_NITRO_PK:-2d999770f7b5d49b694080f987b82bbc9fc9ac2b4dcc10b0f8aba7d700f69c6d} - CERC_NITRO_CHAIN_PK: ${CERC_NITRO_CHAIN_PK:-570b909da9669b2f35a0b1ac70b8358516d55ae1b5b3710e95e9a94395090597} + CERC_NITRO_PK: ${CERC_NITRO_PK:-f36f6dd450892224ee113899195ef922a4795d41c32cafb386d9aab6e0b7b0c6} + CERC_NITRO_CHAIN_PK: ${CERC_NITRO_CHAIN_PK:-888814df89c4358d7ddb3fa4b0213e7331239a80e1f013eaa7b2deca2a41a218} CERC_NITRO_USE_DURABLE_STORE: ${CERC_NITRO_USE_DURABLE_STORE:-true} CERC_NITRO_DURABLE_STORE_FOLDER: ${CERC_NITRO_DURABLE_STORE_FOLDER:-/app/data/nitro-store} + CERC_NITRO_MSG_PORT: ${CERC_NITRO_MSG_PORT:-3006} + CERC_NITRO_WS_MSG_PORT: ${CERC_NITRO_WS_MSG_PORT:-5006} + CERC_NITRO_RPC_PORT: ${CERC_NITRO_RPC_PORT:-4006} CERC_NA_ADDRESS: ${CERC_NA_ADDRESS} CERC_VPA_ADDRESS: ${CERC_VPA_ADDRESS} CERC_CA_ADDRESS: ${CERC_CA_ADDRESS} @@ -24,25 +27,15 @@ services: - nitro_deployment:/app/deployment - ../config/go-nitro/run-nitro-node.sh:/app/run-nitro-node.sh healthcheck: - test: ["CMD", "nc", "-vz", "localhost", "4005"] - interval: 10s + test: ["CMD", "nc", "-vz", "localhost", "4006"] + interval: 30s timeout: 5s retries: 10 start_period: 10s ports: - - "3005" - - "4005:4005" - - "5005:5005" - - nitro-rpc-client: - image: cerc/nitro-rpc-client:local - hostname: nitro-rpc-client - restart: on-failure - depends_on: - # Wait for the go-nitro node to start - go-nitro: - condition: service_healthy - command: ["bash", "-c", "tail -f /dev/null"] + - "3006:3006" + - "4006:4006" + - "5006:5006" volumes: go_nitro_data: diff --git a/app/data/compose/docker-compose-ipld-eth-server-payments.yml b/app/data/compose/docker-compose-ipld-eth-server-payments.yml index 4fe97c6b..30cb94c2 100644 --- a/app/data/compose/docker-compose-ipld-eth-server-payments.yml +++ b/app/data/compose/docker-compose-ipld-eth-server-payments.yml @@ -1,6 +1,6 @@ version: "3.2" services: - ipld-eth-server: + ipld-eth-server-1: restart: unless-stopped depends_on: ipld-eth-db: @@ -27,11 +27,12 @@ services: PROM_HTTP_PORT: "8090" LOG_LEVEL: "debug" CERC_REMOTE_DEBUG: ${CERC_REMOTE_DEBUG:-true} + NITRO_RUN_NODE_IN_PROCESS: ${CERC_NITRO_RUN_NODE_IN_PROCESS:-true} NITRO_PK: ${CERC_NITRO_PK:-2d999770f7b5d49b694080f987b82bbc9fc9ac2b4dcc10b0f8aba7d700f69c6d} NITRO_CHAIN_PK: ${CERC_NITRO_CHAIN_PK:-570b909da9669b2f35a0b1ac70b8358516d55ae1b5b3710e95e9a94395090597} NITRO_CHAIN_URL: ${CERC_NITRO_CHAIN_URL:-ws://fixturenet-eth-geth-1:8546} - NITRO_USE_DURABLE_STORE: ${CERC_NITRO_USE_DURABLE_STORE:-false} - NITRO_DURABLE_STORE_FOLDER: ${CERC_NITRO_DURABLE_STORE_FOLDER:-/app/data/nitro-store} + NITRO_USE_DURABLE_STORE: ${CERC_NITRO_USE_DURABLE_STORE:-true} + NITRO_DURABLE_STORE_FOLDER: ${CERC_NITRO_DURABLE_STORE_FOLDER:-/app/nitro-data/nitro-store} CERC_NA_ADDRESS: ${CERC_NA_ADDRESS} CERC_VPA_ADDRESS: ${CERC_VPA_ADDRESS} CERC_CA_ADDRESS: ${CERC_CA_ADDRESS} @@ -40,7 +41,7 @@ services: - type: bind source: ../config/ipld-eth-server/chain.json target: /tmp/chain.json - - eth_server_nitro_data:/app/data + - eth_server_nitro_data:/app/nitro-data - nitro_deployment:/app/deployment - ../config/ipld-eth-server/entrypoint.sh:/app/entrypoint.sh ports: @@ -48,7 +49,7 @@ services: - "8082" - "8090" - "40000" - - "3005" + - "3005:3005" - "4005:4005" - "5005:5005" healthcheck: @@ -58,6 +59,53 @@ services: retries: 15 start_period: 5s + ipld-eth-server-2: + restart: unless-stopped + depends_on: + ipld-eth-db: + condition: service_healthy + image: cerc/ipld-eth-server:local + environment: + SERVER_HTTP_PATH: 0.0.0.0:8081 + SERVER_GRAPHQL: "true" + SERVER_GRAPHQLPATH: 0.0.0.0:8082 + VDB_COMMAND: "serve" + ETH_CHAIN_CONFIG: "/tmp/chain.json" + DATABASE_NAME: cerc_testing + DATABASE_HOSTNAME: ipld-eth-db + DATABASE_PORT: 5432 + DATABASE_USER: "vdbm" + DATABASE_PASSWORD: "password" + ETH_CHAIN_ID: 99 + ETH_FORWARD_ETH_CALLS: "false" + ETH_FORWARD_GET_STORAGE_AT: "false" + ETH_PROXY_ON_ERROR: "false" + METRICS: "true" + PROM_HTTP: "true" + PROM_HTTP_ADDR: "0.0.0.0" + PROM_HTTP_PORT: "8090" + LOG_LEVEL: "debug" + CERC_REMOTE_DEBUG: ${CERC_REMOTE_DEBUG:-true} + NITRO_RUN_NODE_IN_PROCESS: ${CERC_NITRO_RUN_NODE_IN_PROCESS:-false} + NITRO_ENDPOINT: ${CERC_NITRO_ENDPOINT:-go-nitro:4006/api/v1} + entrypoint: ["bash", "-c", "/app/entrypoint.sh"] + volumes: + - type: bind + source: ../config/ipld-eth-server/chain.json + target: /tmp/chain.json + - ../config/ipld-eth-server/entrypoint.sh:/app/entrypoint.sh + ports: + - "8081" + - "8082" + - "8090" + - "40000" + healthcheck: + test: ["CMD", "nc", "-v", "localhost", "8081"] + interval: 20s + timeout: 5s + retries: 15 + start_period: 5s + volumes: eth_server_nitro_data: nitro_deployment: diff --git a/app/data/compose/docker-compose-ponder.yml b/app/data/compose/docker-compose-ponder.yml index 03c53040..517e26ab 100644 --- a/app/data/compose/docker-compose-ponder.yml +++ b/app/data/compose/docker-compose-ponder.yml @@ -8,13 +8,13 @@ services: working_dir: /app/examples/token-erc20 environment: CERC_PONDER_CHAIN_ID: ${PONDER_CHAIN_ID:-99} - CERC_PONDER_RPC_URL_1: ${PONDER_RPC_URL_1:-http://ipld-eth-server:8081} + CERC_PONDER_RPC_URL_1: ${PONDER_RPC_URL_1:-http://ipld-eth-server-2:8081} CERC_PONDER_NITRO_PK: ${CERC_PONDER_INDEXER_NITRO_PK:-58368d20ff12f17669c06158c21d885897aa56f9be430edc789614bf9851d53f} CERC_PONDER_NITRO_CHAIN_PK: ${CERC_PONDER_INDEXER_NITRO_CHAIN_PK:-fb1e9af328c283ca3e2486e7c24d13582b7912057d8b9542ff41503c85bc05c0} CERC_PONDER_NITRO_CHAIN_URL: ${CERC_PONDER_NITRO_CHAIN_URL:-http://fixturenet-eth-geth-1:8546} CERC_RELAY_MULTIADDR: ${CERC_RELAY_MULTIADDR} - CERC_UPSTREAM_NITRO_ADDRESS: ${CERC_UPSTREAM_NITRO_ADDRESS:-0xAAA6628Ec44A8a742987EF3A114dDFE2D4F7aDCE} - CERC_UPSTREAM_NITRO_MULTIADDR: ${CERC_UPSTREAM_NITRO_MULTIADDR:-/dns4/ipld-eth-server/tcp/5005/ws/p2p/16Uiu2HAmSjXJqsyBJgcBUU2HQmykxGseafSatbpq5471XmuaUqyv} + CERC_UPSTREAM_NITRO_ADDRESS: ${CERC_UPSTREAM_NITRO_ADDRESS:-0x660a4bEF3fbC863Fcd8D3CDB39242aE513d7D92e} + CERC_UPSTREAM_NITRO_MULTIADDR: ${CERC_UPSTREAM_NITRO_MULTIADDR:-/dns4/go-nitro/tcp/5006/ws/p2p/16Uiu2HAmNUiX7bpCpbo5JdqEebp85ptGU2Vk2AT9E3BykvbwQ3F9} CERC_UPSTREAM_NITRO_PAY_AMOUNT: ${CERC_UPSTREAM_NITRO_PAY_AMOUNT:-100} command: ["bash", "./ponder-start.sh"] volumes: diff --git a/app/data/compose/docker-compose-watcher-mobymask-v3.yml b/app/data/compose/docker-compose-watcher-mobymask-v3.yml index 83257a08..075c34e6 100644 --- a/app/data/compose/docker-compose-watcher-mobymask-v3.yml +++ b/app/data/compose/docker-compose-watcher-mobymask-v3.yml @@ -89,7 +89,7 @@ services: CERC_PEER_ID: ${CERC_PEER_ID} CERC_ENABLE_UPSTREAM_PAYMENTS: ${CERC_ENABLE_UPSTREAM_PAYMENTS} CERC_UPSTREAM_NITRO_ADDRESS: ${CERC_UPSTREAM_NITRO_ADDRESS:-0xAAA6628Ec44A8a742987EF3A114dDFE2D4F7aDCE} - CERC_UPSTREAM_NITRO_MULTIADDR: ${CERC_UPSTREAM_NITRO_MULTIADDR:-/dns4/ipld-eth-server/tcp/5005/ws/p2p/16Uiu2HAmSjXJqsyBJgcBUU2HQmykxGseafSatbpq5471XmuaUqyv} + CERC_UPSTREAM_NITRO_MULTIADDR: ${CERC_UPSTREAM_NITRO_MULTIADDR:-/dns4/ipld-eth-server-1/tcp/5005/ws/p2p/16Uiu2HAmSjXJqsyBJgcBUU2HQmykxGseafSatbpq5471XmuaUqyv} CERC_UPSTREAM_NITRO_PAY_AMOUNT: ${CERC_UPSTREAM_NITRO_PAY_AMOUNT:-100} command: ["bash", "./start-server.sh"] volumes: diff --git a/app/data/config/go-nitro/run-nitro-node.sh b/app/data/config/go-nitro/run-nitro-node.sh index 546e9448..249937ef 100755 --- a/app/data/config/go-nitro/run-nitro-node.sh +++ b/app/data/config/go-nitro/run-nitro-node.sh @@ -47,4 +47,4 @@ while true; do sleep $retry_interval done -./nitro -chainurl ${CERC_NITRO_CHAIN_URL} -msgport 3005 -rpcport 4005 -wsmsgport 5005 -pk ${CERC_NITRO_PK} -chainpk ${CERC_NITRO_CHAIN_PK} -naaddress ${NA_ADDRESS} -vpaaddress ${VPA_ADDRESS} -caaddress ${CA_ADDRESS} -usedurablestore ${CERC_NITRO_USE_DURABLE_STORE} -durablestorefolder ${CERC_NITRO_DURABLE_STORE_FOLDER} +./nitro -chainurl ${CERC_NITRO_CHAIN_URL} -msgport ${CERC_NITRO_MSG_PORT} -rpcport ${CERC_NITRO_RPC_PORT} -wsmsgport ${CERC_NITRO_WS_MSG_PORT} -publicip "0.0.0.0" -pk ${CERC_NITRO_PK} -chainpk ${CERC_NITRO_CHAIN_PK} -naaddress ${NA_ADDRESS} -vpaaddress ${VPA_ADDRESS} -caaddress ${CA_ADDRESS} -usedurablestore ${CERC_NITRO_USE_DURABLE_STORE} -durablestorefolder ${CERC_NITRO_DURABLE_STORE_FOLDER} -tlscertfilepath "" -tlsKeyFilepath "" diff --git a/app/data/config/ipld-eth-server/entrypoint.sh b/app/data/config/ipld-eth-server/entrypoint.sh index effe9dee..37e232c6 100755 --- a/app/data/config/ipld-eth-server/entrypoint.sh +++ b/app/data/config/ipld-eth-server/entrypoint.sh @@ -1,34 +1,57 @@ #!/bin/sh -nitro_addresses_file="/app/deployment/nitro-addresses.json" +read_nitro_addresses() { + nitro_addresses_file="/app/deployment/nitro-addresses.json" -# Check if CERC_NA_ADDRESS environment variable is set -if [ -n "$CERC_NA_ADDRESS" ]; then - echo "CERC_NA_ADDRESS is set to '$CERC_NA_ADDRESS'" - echo "CERC_VPA_ADDRESS is set to '$CERC_VPA_ADDRESS'" - echo "CERC_CA_ADDRESS is set to '$CERC_CA_ADDRESS'" - echo "Using the above Nitro addresses" + # Check if CERC_NA_ADDRESS environment variable is set + if [ -n "$CERC_NA_ADDRESS" ]; then + echo "CERC_NA_ADDRESS is set to '$CERC_NA_ADDRESS'" + echo "CERC_VPA_ADDRESS is set to '$CERC_VPA_ADDRESS'" + echo "CERC_CA_ADDRESS is set to '$CERC_CA_ADDRESS'" + echo "Using the above Nitro addresses" - export NITRO_NA_ADDRESS=${CERC_NA_ADDRESS} - export NITRO_VPA_ADDRESS=${CERC_VPA_ADDRESS} - export NITRO_CA_ADDRESS=${CERC_CA_ADDRESS} -else - # Read addresses from a file - # Keep retrying until found - echo "Reading Nitro addresses from ${nitro_addresses_file}" + export NITRO_NA_ADDRESS=${CERC_NA_ADDRESS} + export NITRO_VPA_ADDRESS=${CERC_VPA_ADDRESS} + export NITRO_CA_ADDRESS=${CERC_CA_ADDRESS} + else + # Read addresses from a file + # Keep retrying until found + echo "Reading Nitro addresses from ${nitro_addresses_file}" + retry_interval=5 + while true; do + if [[ -e "$nitro_addresses_file" ]]; then + export NITRO_NA_ADDRESS=$(jq -r '.nitroAdjudicatorAddress' ${nitro_addresses_file}) + export NITRO_VPA_ADDRESS=$(jq -r '.virtualPaymentAppAddress' ${nitro_addresses_file}) + export NITRO_CA_ADDRESS=$(jq -r '.consensusAppAddress' ${nitro_addresses_file}) + + break + else + echo "File not yet available, retrying in $retry_interval seconds..." + sleep $retry_interval + fi + done + fi +} + +wait_for_nitro_endpoint() { retry_interval=5 while true; do - if [[ -e "$nitro_addresses_file" ]]; then - export NITRO_NA_ADDRESS=$(jq -r '.nitroAdjudicatorAddress' ${nitro_addresses_file}) - export NITRO_VPA_ADDRESS=$(jq -r '.virtualPaymentAppAddress' ${nitro_addresses_file}) - export NITRO_CA_ADDRESS=$(jq -r '.consensusAppAddress' ${nitro_addresses_file}) + curl -I -s -o /dev/null $NITRO_ENDPOINT/health + if [ $? -eq 0 ]; then + echo "Nitro endpoint is up" break else - echo "File not yet available, retrying in $retry_interval seconds..." + echo "Nitro endpoint not available yet, retrying in $retry_interval seconds..." sleep $retry_interval fi done +} + +if [ "$NITRO_RUN_NODE_IN_PROCESS" = "true" ]; then + read_nitro_addresses +else + wait_for_nitro_endpoint fi echo "Beginning the ipld-eth-server process" diff --git a/app/data/config/watcher-mobymask-v3/mobymask-params.env b/app/data/config/watcher-mobymask-v3/mobymask-params.env index 0781d729..7a3f5deb 100644 --- a/app/data/config/watcher-mobymask-v3/mobymask-params.env +++ b/app/data/config/watcher-mobymask-v3/mobymask-params.env @@ -4,7 +4,7 @@ DEFAULT_CERC_ETH_RPC_ENDPOINT="http://fixturenet-eth-geth-1:8545" # ETH RPC endpoint used for queries in the watcher -DEFAULT_CERC_ETH_RPC_QUERY_ENDPOINT="http://ipld-eth-server:8081" +DEFAULT_CERC_ETH_RPC_QUERY_ENDPOINT="http://ipld-eth-server-1:8081" # ETH RPC endpoint used for mutations in the watcher DEFAULT_CERC_ETH_RPC_MUTATION_ENDPOINT="http://fixturenet-eth-geth-1:8545" diff --git a/app/data/container-build/cerc-go-nitro/Dockerfile b/app/data/container-build/cerc-go-nitro/Dockerfile new file mode 100644 index 00000000..1d0e31b4 --- /dev/null +++ b/app/data/container-build/cerc-go-nitro/Dockerfile @@ -0,0 +1,16 @@ +FROM golang:1.21-bullseye AS builder + +# Copy files into image +WORKDIR /app +COPY . . + +# Build the binary +RUN go build -v -o nitro . + +# Reduce image size +FROM debian:bullseye-slim +RUN apt-get update +RUN apt-get install -y ca-certificates jq netcat +RUN rm -rf /var/lib/apt/lists/* +WORKDIR /app +COPY --from=builder /app/nitro . diff --git a/app/data/container-build/cerc-go-nitro/build.sh b/app/data/container-build/cerc-go-nitro/build.sh index 0637f46d..28bdde44 100755 --- a/app/data/container-build/cerc-go-nitro/build.sh +++ b/app/data/container-build/cerc-go-nitro/build.sh @@ -3,4 +3,6 @@ source ${CERC_CONTAINER_BASE_DIR}/build-base.sh -docker build -t cerc/go-nitro:local -f ${CERC_REPO_BASE_DIR}/go-nitro/docker/local/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/go-nitro +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +docker build -t cerc/go-nitro:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/go-nitro diff --git a/app/data/stacks/fixturenet-payments/README.md b/app/data/stacks/fixturenet-payments/README.md index 07ce1925..efc401b4 100644 --- a/app/data/stacks/fixturenet-payments/README.md +++ b/app/data/stacks/fixturenet-payments/README.md @@ -24,14 +24,18 @@ Deploy the stack: laconic-so --stack fixturenet-payments deploy --cluster payments up # Exposed on host ports: -# 4005: go-nitro node's RPC endpoint -# 5005: go-nitro node's p2p endpoint +# 32***: geth in statediffing mode and ipld-eth-server(s) +# 4005: in-process go-nitro node's RPC endpoint +# 3005: in-process go-nitro node's p2p TCP endpoint +# 5005: in-process go-nitro node's p2p WS endpoin +# 4006: out-of-process go-nitro node's RPC endpoint +# 3006: out-of-process go-nitro node's p2p TCP endpoint +# 5006: out-of-process go-nitro node's p2p WS endpoint # 15432: MobyMask v3 watcher's db endpoint # 3001: MobyMask v3 watcher endpoint # 9090: MobyMask v3 watcher relay node endpoint # 8080: MobyMask snap # 3004: MobyMask v3 app -# 32***: geth in statediffing mode ``` ## Demo diff --git a/app/data/stacks/fixturenet-payments/demo.md b/app/data/stacks/fixturenet-payments/demo.md index 2a9a29ef..910f0dde 100644 --- a/app/data/stacks/fixturenet-payments/demo.md +++ b/app/data/stacks/fixturenet-payments/demo.md @@ -3,15 +3,17 @@ Stack components: * `ipld-eth-db` database for statediffed data * Local geth + lighthouse blockchain "fixturenet" running in statediffing mode -* `ipld-eth-server` which runs an ETH RPC API and a GQL server; serves data from `ipld-eth-db`; also runs an in-process go-nitro node for payments required for configured RPC requests -* A MobyMask v3 watcher that pays the `ipld-eth-server` for ETH RPC requests +* `ipld-eth-server-1` and `ipld-eth-server-2` both of which run an ETH RPC API and a GQL server; they both serve data from `ipld-eth-db` +* `ipld-eth-server-1` runs an in-process go-nitro node for payments required for configured RPC requests +* A go-nitro deployment acting as the remote Nitro node for `ipld-eth-server-2` +* A MobyMask v3 watcher that pays the `ipld-eth-server-1` for ETH RPC requests * A MobyMask v3 app that pays the watcher for reads (GQL queries) and writes -* An example ERC20 Ponder indexer app that pays the `ipld-eth-server` for ETH RPC requests +* An example ERC20 Ponder indexer app that pays the `ipld-eth-server-2` for ETH RPC requests * An example ERC20 Ponder watcher app that pays the Ponder indexer app for GQL queries ## Setup -* On starting the stack, MobyMask watcher creates a payment channel with the `ipld-eth-server`'s Nitro node. Check watcher logs and wait for the same: +* On starting the stack, MobyMask watcher creates a payment channel with the `ipld-eth-server-1`'s (in-process) Nitro node. Check watcher logs and wait for the same: ```bash docker logs -f $(docker ps -aq --filter name="mobymask-watcher-server") @@ -37,7 +39,7 @@ Stack components: * Check the payment channel status: ```bash - docker exec payments-nitro-rpc-client-1 npm exec -c "nitro-rpc-client get-payment-channel $WATCHER_UPSTREAM_PAYMENT_CHANNEL -h ipld-eth-server -p 4005" + docker exec payments-nitro-rpc-client-1 npm exec -c "nitro-rpc-client get-payment-channel $WATCHER_UPSTREAM_PAYMENT_CHANNEL -s false -h ipld-eth-server-1 -p 4005" # Expected output: # { @@ -53,10 +55,16 @@ Stack components: # } ``` -* In another terminal, check `ipld-eth-server`'s logs to keep track of incoming payments and RPC requests: +* In another terminal, check `ipld-eth-server-1`'s logs to keep track of incoming payments and RPC requests from the MobyMask watcher: ```bash - docker logs -f $(docker ps -aq --filter name="ipld-eth-server") + docker logs -f $(docker ps -aq --filter name="ipld-eth-server-1") + ``` + +* In another terminal, check `ipld-eth-server-2`'s logs to keep track of incoming RPC requests from the Ponder app in indexer mode: + + ```bash + docker logs -f $(docker ps -aq --filter name="ipld-eth-server-2") ``` * MetaMask flask wallet setup for running the MobyMask app: @@ -134,6 +142,7 @@ Stack components: ```bash # Expected output: # ... + # laconic:payments Received a payment voucher of 50 from 0x86804299822212c070178B5135Ba6DdAcFC357D3 # laconic:payments Serving a paid query for 0x86804299822212c070178B5135Ba6DdAcFC357D3 # vulcanize:resolver isPhisher 0x98ae4f9e9d01cc892adfe6871e1db0287039e0c183d3b5bb31d724228c114744 0x2B6AFbd4F479cE4101Df722cF4E05F941523EaD9 TWT:ash1 # vulcanize:indexer isPhisher: db miss, fetching from upstream server @@ -143,16 +152,15 @@ Stack components: # laconic:payments Making RPC call: eth_chainId # laconic:payments Making RPC call: eth_getStorageAt # 2023-10-13T06:34:00.483Z ts-nitro:engine {"msg":"Sent message","_msg":{"to":"0xAAA662","from":"0xBBB676",# "payloadSummaries":[],"proposalSummaries":[],"payments":[{"amount":300,"channelId":"0x9a4bdfe03c8e72f368aab07e6bd18f1cd6821170e1a93e59864aad6ee6a853a2"}],"rejectedObjectives":[]}} - ``` - * The watcher makes several ETH RPC requests to `ipld-eth-server` to fetch data required for satisfying the GQL request(s); check `ipld-eth-server` logs for charged RPC requests (`eth_getBlockByHash`, `eth_getBlockByNumber`, `eth_getStorageAt`): + * The watcher makes several ETH RPC requests to `ipld-eth-server-1` to fetch data required for satisfying the GQL request(s); check `ipld-eth-server-1` logs for charged RPC requests (`eth_getBlockByHash`, `eth_getBlockByNumber`, `eth_getStorageAt`): ```bash # Expected output: # ... # 2023/10/13 06:34:57 INFO Received a voucher payer=0xBBB676f9cFF8D242e9eaC39D063848807d3D1D94 amount=100 - # 2023/10/13 06:34:59 INFO Serving a paid RPC request method=eth_getBlockByHash sender=0xBBB676f9cFF8D242e9eaC39D063848807d3D1D94 + # 2023/10/13 06:34:59 INFO Serving a paid RPC request method=eth_getBlockByHash cost=50 sender=0xBBB676f9cFF8D242e9eaC39D063848807d3D1D94 # time="2023-10-13T06:34:59Z" level=debug msg=START api_method=eth_getBlockByHash api_params="[0x46411a554f30e607bdd79cd157a60a7c8b314c0709557be3357ed2fef53d6c3d false]" api_reqid=52 conn="192.168.64.4:59644" user_id= uuid=a1893211-6992-11ee-a67a-0242c0a8400c # WARN [10-13|06:34:59.133] Attempting GerRPCCalls, but default PluginLoader has not been initialized # time="2023-10-13T06:34:59Z" level=debug msg=END api_method=eth_getBlockByHash api_params="[0x46411a554f30e607bdd79cd157a60a7c8b314c0709557be3357ed2fef53d6c3d false]" api_reqid=52 conn="192.168.64.4:59644" duration=5 user_id= uuid=a1893211-6992-11ee-a67a-0242c0a8400c @@ -160,7 +168,7 @@ Stack components: # time="2023-10-13T06:34:59Z" level=debug msg=START api_method=eth_chainId api_params="[]" api_reqid=53 conn="192.168.64.4:59658" user_id= uuid=a18a96d9-6992-11ee-a67a-0242c0a8400c # time="2023-10-13T06:34:59Z" level=debug msg=END api_method=eth_chainId api_params="[]" api_reqid=53 conn="192.168.64.4:59658" duration=0 user_id= uuid=a18a96d9-6992-11ee-a67a-0242c0a8400c # 2023/10/13 06:34:59 INFO Received a voucher payer=0xBBB676f9cFF8D242e9eaC39D063848807d3D1D94 amount=100 - # 2023/10/13 06:35:01 INFO Serving a paid RPC request method=eth_getStorageAt sender=0xBBB676f9cFF8D242e9eaC39D063848807d3D1D94 + # 2023/10/13 06:35:01 INFO Serving a paid RPC request method=eth_getStorageAt cost=50 sender=0xBBB676f9cFF8D242e9eaC39D063848807d3D1D94 # time="2023-10-13T06:35:01Z" level=debug msg=START api_method=eth_getStorageAt api_params="[0x2b6afbd4f479ce4101df722cf4e05f941523ead9 0xf76621c2cc1c1705fabbc22d30ffc5ded7f26e4995feb8d1c9812a2697ba1278 0x46411a554f30e607bdd79cd157a60a7c8b314c0709557be3357ed2fef53d6c3d]" api_reqid=54 conn="192.168.64.4:59660" user_id= uuid=a2bd75d2-6992-11ee-a67a-0242c0a8400c # time="2023-10-13T06:35:01Z" level=debug msg=END api_method=eth_getStorageAt api_params="[0x2b6afbd4f479ce4101df722cf4e05f941523ead9 0xf76621c2cc1c1705fabbc22d30ffc5ded7f26e4995feb8d1c9812a2697ba1278 0x46411a554f30e607bdd79cd157a60a7c8b314c0709557be3357ed2fef53d6c3d]" api_reqid=54 conn="192.168.64.4:59660" duration=7 user_id= uuid=a2bd75d2-6992-11ee-a67a-0242c0a8400c ``` @@ -186,10 +194,10 @@ Stack components: # } ``` -* Check the watcher - ipld-eth-server payment channel status after a few requests: +* Check the watcher - ipld-eth-server-1 payment channel status after a few requests: ```bash - docker exec payments-nitro-rpc-client-1 npm exec -c "nitro-rpc-client get-payment-channel $WATCHER_UPSTREAM_PAYMENT_CHANNEL -h ipld-eth-server -p 4005" + docker exec payments-nitro-rpc-client-1 npm exec -c "nitro-rpc-client get-payment-channel $WATCHER_UPSTREAM_PAYMENT_CHANNEL -s false -h ipld-eth-server-1 -p 4005" # Expected output ('PaidSoFar' should be non zero): # { @@ -216,9 +224,9 @@ Stack components: # 08:00:28.701 INFO payment Nitro node setup with address 0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d # laconic:payments Starting voucher subscription... +0ms # ... - # 09:58:54.288 INFO payment Creating ledger channel with nitro node 0xAAA6628Ec44A8a742987EF3A114dDFE2D4F7aDCE + # 09:58:54.288 INFO payment Creating ledger channel with nitro node 0x660a4bEF3fbC863Fcd8D3CDB39242aE513d7D92e # ... - # 09:59:14.230 INFO payment Creating payment channel with nitro node 0xAAA6628Ec44A8a742987EF3A114dDFE2D4F7aDCE + # 09:59:14.230 INFO payment Creating payment channel with nitro node 0x660a4bEF3fbC863Fcd8D3CDB39242aE513d7D92e # ... # 09:59:14.329 INFO payment Using payment channel 0x10f049519bc3f862e2b26e974be8666886228f30ea54aab06e2f23718afffab0 ``` @@ -229,30 +237,29 @@ Stack components: export PONDER_UPSTREAM_PAYMENT_CHANNEL= ``` -* On starting the Ponder app in indexer mode, it creates a payment channel with the `ipld-eth-server`'s Nitro node and then starts the historical sync service +* On starting the Ponder app in indexer mode, it creates a payment channel with the `ipld-eth-server-2`'s (external) Nitro node and then starts the historical sync service -* The sync service makes several ETH RPC requests to the `ipld-eth-server` to fetch required data; check the `ipld-eth-server` logs for charged RPC requests (`eth_getBlockByNumber`, `eth_getLogs`): +* The sync service makes several ETH RPC requests to the `ipld-eth-server-2` to fetch required data; check the `ipld-eth-server-2` logs for charged RPC requests (`eth_getBlockByNumber`, `eth_getLogs`): ```bash # Expected output: # ... - # 2023/10/13 06:59:49 INFO Received a voucher payer=0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d amount=100 - # time="2023-10-13T06:59:51Z" level=debug msg=START api_method=eth_getLogs api_params="[map[address:0x32353a6c91143bfd6c7d363b546e62a9a2489a20 fromBlock:0x5 toBlock:0x68]]" api_reqid=1 conn="192.168.64.2:55578" user_id= uuid=1aedde38-6996-11ee-a67a-0242c0a8400c - # 2023/10/13 06:59:51 INFO Serving a paid RPC request method=eth_getLogs sender=0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d - # WARN [10-13|06:59:51.287] Attempting GerRPCCalls, but default PluginLoader has not been initialized - # time="2023-10-13T06:59:51Z" level=debug msg="retrieving log cids for receipt ids" - # time="2023-10-13T06:59:51Z" level=debug msg=END api_method=eth_getLogs api_params="[map[address:0x32353a6c91143bfd6c7d363b546e62a9a2489a20 fromBlock:0x5 toBlock:0x68]]" api_reqid=1 conn="192.168.64.2:55578" duration=17 user_id= uuid=1aedde38-6996-11ee-a67a-0242c0a8400c - # 2023/10/13 06:59:51 INFO Received a voucher payer=0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d amount=100 - # 2023/10/13 06:59:53 INFO Serving a paid RPC request method=eth_getBlockByNumber sender=0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d - # 2023/10/13 06:59:53 INFO Received a voucher payer=0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d amount=100 - + # 2023/10/18 05:29:38 INFO Serving a paid RPC request method=eth_getBlockByNumber cost=50 sender=0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d + # time="2023-10-18T05:29:38Z" level=debug msg=START api_method=eth_getBlockByNumber api_params="[latest true]" api_reqid=0 conn="172.26.0.19:42306" user_id= uuid=54992dc3-6d77-11ee-9ede-0242ac1a000f + # WARN [10-18|05:29:38.292] Attempting GerRPCCalls, but default PluginLoader has not been initialized + # time="2023-10-18T05:29:38Z" level=debug msg=END api_method=eth_getBlockByNumber api_params="[latest true]" api_reqid=0 conn="172.26.0.19:42306" duration=22 user_id= uuid=54992dc3-6d77-11ee-9ede-0242ac1a000f + # time="2023-10-18T05:29:40Z" level=debug msg=START api_method=eth_getLogs api_params="[map[address:0x32353a6c91143bfd6c7d363b546e62a9a2489a20 fromBlock:0x5 toBlock:0x68]]" api_reqid=1 conn="172.26.0.19:42306" user_id= uuid=55d19200-6d77-11ee-9ede-0242ac1a000f + # 2023/10/18 05:29:40 INFO Serving a paid RPC request method=eth_getLogs cost=50 sender=0x67D5b55604d1aF90074FcB69b8C51838FFF84f8d + # WARN [10-18|05:29:40.340] Attempting GerRPCCalls, but default PluginLoader has not been initialized + # time="2023-10-18T05:29:40Z" level=debug msg="retrieving log cids for receipt ids" + # time="2023-10-18T05:29:40Z" level=debug msg=END api_method=eth_getLogs api_params="[map[address:0x32353a6c91143bfd6c7d363b546e62a9a2489a20 fromBlock:0x5 toBlock:0x68]]" api_reqid=1 conn="172.26.0.19:42306" duration=20 user_id= uuid=55d19200-6d77-11ee-9ede-0242ac1a000f # ... ``` -* Check the ponder - ipld-eth-server payment channel status: +* Check the ponder - ipld-eth-server-2 payment channel status: ```bash - docker exec payments-nitro-rpc-client-1 npm exec -c "nitro-rpc-client get-payment-channel $PONDER_UPSTREAM_PAYMENT_CHANNEL -h ipld-eth-server -p 4005" + docker exec payments-nitro-rpc-client-1 npm exec -c "nitro-rpc-client get-payment-channel $PONDER_UPSTREAM_PAYMENT_CHANNEL -s false -h go-nitro -p 4006" # Expected output ('PaidSoFar' is non zero): # { diff --git a/app/data/stacks/fixturenet-payments/stack.yml b/app/data/stacks/fixturenet-payments/stack.yml index 14aba43b..f18b0064 100644 --- a/app/data/stacks/fixturenet-payments/stack.yml +++ b/app/data/stacks/fixturenet-payments/stack.yml @@ -9,15 +9,15 @@ repos: # ipld-eth-server with payments -- to be used by ipld-eth-server-payments pod - git.vdb.to/cerc-io/ipld-eth-server@payments # nitro repo - - github.com/cerc-io/ts-nitro@v0.1.13 - - github.com/cerc-io/go-nitro@v0.1.1-ts-port-0.1.7 + - github.com/cerc-io/ts-nitro@v0.1.15 + - github.com/cerc-io/go-nitro@ts-interop # TODO: Use release # mobymask watcher repos - - github.com/cerc-io/watcher-ts@v0.2.65 - - github.com/cerc-io/mobymask-v2-watcher-ts@v0.2.3 + - github.com/cerc-io/watcher-ts@v0.2.66 + - github.com/cerc-io/mobymask-v2-watcher-ts@v0.2.4 - github.com/cerc-io/MobyMask@v0.1.3 # mobymask app repos - github.com/cerc-io/mobymask-snap - - github.com/cerc-io/mobymask-ui@v0.2.1 + - github.com/cerc-io/mobymask-ui@v0.2.2 # ponder repo - github.com/cerc-io/ponder@laconic-esm containers: @@ -31,7 +31,7 @@ containers: - cerc/ipld-eth-db - cerc/ipld-eth-server - cerc/nitro-contracts - # - cerc/go-nitro + - cerc/go-nitro - cerc/nitro-rpc-client # mobymask watcher images - cerc/watcher-ts @@ -47,7 +47,7 @@ pods: - ipld-eth-server-payments - ipld-eth-db - nitro-contracts - # - go-nitro + - go-nitro - nitro-rpc-client - watcher-mobymask-v3 - mobymask-snap