Skip to content

Commit

Permalink
Add a sushiswap-v3 watcher stack (#638)
Browse files Browse the repository at this point in the history
* Add a sushiswap-v3 watcher stack

* Add services for watcher db and server

* Add service for watcher job-runner

* Use 0.0.0.0 for watcher server config

---------

Co-authored-by: Nabarun <[email protected]>
  • Loading branch information
prathamesh0 and nikugogoi authored Nov 13, 2023
1 parent 414b887 commit 95e881b
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
version: '3.2'

services:
sushiswap-v3-watcher-db:
restart: unless-stopped
image: postgres:14-alpine
environment:
- POSTGRES_USER=vdbm
- POSTGRES_MULTIPLE_DATABASES=sushiswap-v3-watcher,sushiswap-v3-watcher-job-queue
- POSTGRES_EXTENSION=sushiswap-v3-watcher-job-queue:pgcrypto
- POSTGRES_PASSWORD=password
volumes:
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
- sushiswap_v3_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

sushiswap-v3-watcher-job-runner:
restart: unless-stopped
depends_on:
sushiswap-v3-watcher-db:
condition: service_healthy
image: cerc/watcher-sushiswap-v3:local
environment:
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
CERC_ETH_RPC_ENDPOINT: ${CERC_ETH_RPC_ENDPOINT}
command: ["bash", "./start-job-runner.sh"]
volumes:
- ../config/watcher-sushiswap-v3/watcher-config-template.toml:/app/environments/watcher-config-template.toml
- ../config/watcher-sushiswap-v3/start-job-runner.sh:/app/start-job-runner.sh
ports:
- "127.0.0.1:9000:9000"
healthcheck:
test: ["CMD", "nc", "-v", "localhost", "9000"]
interval: 20s
timeout: 5s
retries: 15
start_period: 5s
extra_hosts:
- "host.docker.internal:host-gateway"

sushiswap-v3-watcher-server:
restart: unless-stopped
depends_on:
sushiswap-v3-watcher-db:
condition: service_healthy
sushiswap-v3-watcher-job-runner:
condition: service_healthy
image: cerc/watcher-sushiswap-v3:local
environment:
CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG}
CERC_ETH_RPC_ENDPOINT: ${CERC_ETH_RPC_ENDPOINT}
SUSHISWAP_START_BLOCK: ${SUSHISWAP_START_BLOCK:- 2867560}
command: ["bash", "./start-server.sh"]
volumes:
- ../config/watcher-sushiswap-v3/watcher-config-template.toml:/app/environments/watcher-config-template.toml
- ../config/watcher-sushiswap-v3/start-server.sh:/app/start-server.sh
ports:
- "127.0.0.1:3008:3008"
- "127.0.0.1:9001:9001"
healthcheck:
test: ["CMD", "nc", "-v", "localhost", "3008"]
interval: 20s
timeout: 5s
retries: 15
start_period: 5s
extra_hosts:
- "host.docker.internal:host-gateway"

volumes:
sushiswap_v3_watcher_db_data:
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/sh

set -e
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
set -x
fi
set -u

echo "Using ETH RPC endpoint ${CERC_ETH_RPC_ENDPOINT}"

# 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_ETH_RPC_ENDPOINT|${CERC_ETH_RPC_ENDPOINT}| ")

# Write the modified content to a new file
echo "$WATCHER_CONFIG" > environments/local.toml

echo "Running job-runner..."
DEBUG=vulcanize:* exec node --enable-source-maps dist/job-runner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/sh

set -e
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
set -x
fi
set -u

echo "Using ETH RPC endpoint ${CERC_ETH_RPC_ENDPOINT}"

# 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_ETH_RPC_ENDPOINT|${CERC_ETH_RPC_ENDPOINT}| ")

# Write the modified content to a new file
echo "$WATCHER_CONFIG" > environments/local.toml

echo "Initializing watcher..."
yarn fill --start-block $SUSHISWAP_START_BLOCK --end-block $((SUSHISWAP_START_BLOCK + 1))

echo "Running server..."
DEBUG=vulcanize:* exec node --enable-source-maps dist/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
[server]
host = "0.0.0.0"
port = 3008
kind = "active"

# Checkpointing state.
checkpointing = true

# Checkpoint interval in number of blocks.
checkpointInterval = 2000

# Enable state creation
# CAUTION: Disable only if state creation is not desired or can be filled subsequently
enableState = false

subgraphPath = "./subgraph-build"

# Interval to restart wasm instance periodically
wasmRestartBlocksInterval = 20

# Interval in number of blocks at which to clear entities cache.
clearEntitiesCacheInterval = 1000

# Max block range for which to return events in eventsInRange GQL query.
# Use -1 for skipping check on block range.
maxEventsBlockRange = 1000

# Flag to specify whether RPC endpoint supports block hash as block tag parameter
rpcSupportsBlockHashParam = false

# GQL cache settings
[server.gqlCache]
enabled = true

# Max in-memory cache size (in bytes) (default 8 MB)
# maxCacheSize

# GQL cache-control max-age settings (in seconds)
maxAge = 15
timeTravelMaxAge = 86400 # 1 day

[metrics]
host = "127.0.0.1"
port = 9000
[metrics.gql]
port = 9001

[database]
type = "postgres"
host = "sushiswap-v3-watcher-db"
port = 5432
database = "sushiswap-v3-watcher"
username = "vdbm"
password = "password"
synchronize = true
logging = false

[upstream]
[upstream.ethServer]
rpcProviderEndpoint = "REPLACE_WITH_CERC_ETH_RPC_ENDPOINT"

# Boolean flag to specify if rpc-eth-client should be used for RPC endpoint instead of ipld-eth-client (ipld-eth-server GQL client)
rpcClient = true

# Boolean flag to specify if rpcProviderEndpoint is an FEVM RPC endpoint
isFEVM = true

# Boolean flag to filter event logs by contracts
filterLogsByAddresses = true
# Boolean flag to filter event logs by topics
filterLogsByTopics = true

[upstream.cache]
name = "requests"
enabled = false
deleteOnStart = false

[jobQueue]
dbConnectionString = "postgres://vdbm:password@sushiswap-v3-watcher-db/sushiswap-v3-watcher-job-queue"
maxCompletionLagInSecs = 300
jobDelayInMilliSecs = 100
eventsInBatch = 50
subgraphEventsOrder = true
blockDelayInMilliSecs = 2000
prefetchBlocksInMem = false
prefetchBlockCount = 10

# Boolean to switch between modes of processing events when starting the server.
# Setting to true will fetch filtered events and required blocks in a range of blocks and then process them.
# Setting to false will fetch blocks consecutively with its events and then process them (Behaviour is followed in realtime processing near head).
useBlockRanges = true

# Block range in which logs are fetched during historical blocks processing
historicalLogsBlockRange = 2000

# Max block range of historical processing after which it waits for completion of events processing
# If set to -1 historical processing does not wait for events processing and completes till latest canonical block
historicalMaxFetchAhead = 10000
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FROM node:18.17.1-alpine3.18

RUN apk --update --no-cache add git python3 alpine-sdk bash curl jq

WORKDIR /app

COPY . .

RUN echo "Installing dependencies and building sushiswap-v3-watcher-ts" && \
yarn && yarn build
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
# Build cerc/watcher-sushiswap-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-sushiswap-v3:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/sushiswap-v3-watcher-ts
62 changes: 62 additions & 0 deletions stack_orchestrator/data/stacks/sushiswap-v3/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# SushiSwap v3 Watcher

## Setup

Clone required repositories:

```bash
laconic-so --stack sushiswap-v3 setup-repositories --git-ssh --pull
```

Build the container images:

```bash
laconic-so --stack sushiswap-v3 build-containers
```

## Deploy

### Configuration

Create and update an env file to be used in the next step:

```bash
# External Filecoin (ETH RPC) endpoint to point the watcher
CERC_ETH_RPC_ENDPOINT=
```

### Deploy the stack

```bash
laconic-so --stack sushiswap-v3 deploy --cluster sushiswap_v3 --env-file <PATH_TO_ENV_FILE> up
```

* To list down and monitor the running containers:

```bash
laconic-so --stack sushiswap-v3 deploy --cluster sushiswap_v3 ps

# With status
docker ps -a

# Check logs for a container
docker logs -f <CONTAINER_ID>
```

## Clean up

Stop all the services running in background:

```bash
laconic-so --stack sushiswap-v3 deploy --cluster sushiswap_v3 down
```

Clear volumes created by this stack:

```bash
# List all relevant volumes
docker volume ls -q --filter "name=sushiswap_v3"

# Remove all the listed volumes
docker volume rm $(docker volume ls -q --filter "name=sushiswap_v3")
```
9 changes: 9 additions & 0 deletions stack_orchestrator/data/stacks/sushiswap-v3/stack.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: "1.0"
name: sushiswap-v3
description: "SushiSwap v3 watcher stack"
repos:
- github.com/cerc-io/[email protected]
containers:
- cerc/watcher-sushiswap-v3
pods:
- watcher-sushiswap-v3

0 comments on commit 95e881b

Please sign in to comment.