forked from cerc-io/stack-orchestrator
Add a SushiSwap stack (#482)
* Add a sushiswap stack with contract deployments * Add watcher services * Add a service for the info app * Add instructions to run smoke tests * Use sushi-info-watcher in demo mode * Turn off block prefetching * Fix sushiswap demo instructions * Use release version and add healthcheck in Lotus stack * Wait for Lotus node to start before sushiswap watchers --------- Co-authored-by: Nabarun <nabarun@deepstacksoft.com>
This commit is contained in:
parent
bccf711206
commit
4c72acea96
@ -30,6 +30,12 @@ services:
|
|||||||
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||||
- lotus_node_1_params:/var/tmp/filecoin-proof-parameters
|
- lotus_node_1_params:/var/tmp/filecoin-proof-parameters
|
||||||
- lotus-shared:/root/.lotus-shared
|
- lotus-shared:/root/.lotus-shared
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "1234"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 10
|
||||||
|
start_period: 3s
|
||||||
depends_on:
|
depends_on:
|
||||||
- lotus-miner
|
- lotus-miner
|
||||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||||
@ -51,6 +57,12 @@ services:
|
|||||||
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
- ../config/fixturenet-lotus/setup-node.sh:/docker-entrypoint-scripts.d/setup-node.sh
|
||||||
- lotus_node_2_params:/var/tmp/filecoin-proof-parameters
|
- lotus_node_2_params:/var/tmp/filecoin-proof-parameters
|
||||||
- lotus-shared:/root/.lotus-shared
|
- lotus-shared:/root/.lotus-shared
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-vz", "localhost", "1234"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 10
|
||||||
|
start_period: 3s
|
||||||
depends_on:
|
depends_on:
|
||||||
- lotus-miner
|
- lotus-miner
|
||||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
entrypoint: ["sh", "/docker-entrypoint-scripts.d/setup-node.sh"]
|
||||||
|
187
app/data/compose/docker-compose-watcher-sushiswap.yml
Normal file
187
app/data/compose/docker-compose-watcher-sushiswap.yml
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
version: '3.2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
sushiswap-watcher-db:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: postgres:14-alpine
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=vdbm
|
||||||
|
- POSTGRES_MULTIPLE_DATABASES=erc20-watcher,sushi-watcher,sushi-info-watcher,erc20-watcher-job-queue,sushi-watcher-job-queue,sushi-info-watcher-job-queue
|
||||||
|
- POSTGRES_EXTENSION=erc20-watcher-job-queue:pgcrypto,sushi-watcher-job-queue:pgcrypto,sushi-info-watcher-job-queue:pgcrypto
|
||||||
|
- POSTGRES_PASSWORD=password
|
||||||
|
command: ["postgres", "-c", "shared_preload_libraries=pg_stat_statements", "-c", "pg_stat_statements.track=all", "-c", "work_mem=2GB"]
|
||||||
|
volumes:
|
||||||
|
- ../config/postgresql/multiple-postgressql-databases.sh:/docker-entrypoint-initdb.d/multiple-postgressql-databases.sh
|
||||||
|
- ../config/postgresql/create-pg-stat-statements.sql:/docker-entrypoint-initdb.d/create-pg-stat-statements.sql
|
||||||
|
- sushiswap_watcher_db_data:/var/lib/postgresql/data
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:15435:5432"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "5432"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 10s
|
||||||
|
shm_size: '8GB'
|
||||||
|
|
||||||
|
erc20-watcher-server:
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
sushiswap-watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
image: cerc/watcher-sushiswap:local
|
||||||
|
working_dir: /app/packages/erc20-watcher
|
||||||
|
environment:
|
||||||
|
- DEBUG=vulcanize:*
|
||||||
|
command: ["node", "--enable-source-maps", "dist/server.js"]
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-sushiswap/erc20-watcher.toml:/app/packages/erc20-watcher/environments/local.toml
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:3005:3001"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "3001"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
sushi-watcher-job-runner:
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
sushiswap-watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
lotus-node-1:
|
||||||
|
condition: service_healthy
|
||||||
|
image: cerc/watcher-sushiswap:local
|
||||||
|
working_dir: /app/packages/uni-watcher
|
||||||
|
environment:
|
||||||
|
- DEBUG=vulcanize:*
|
||||||
|
command: ["node", "--enable-source-maps", "dist/job-runner.js"]
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-sushiswap/sushi-watcher.toml:/app/packages/uni-watcher/environments/local.toml
|
||||||
|
- ../config/watcher-sushiswap/sushi-watcher-test.toml:/app/packages/uni-watcher/environments/test.toml
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:9004:9000"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "9000"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
sushi-watcher-server:
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
sushiswap-watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
sushi-watcher-job-runner:
|
||||||
|
condition: service_healthy
|
||||||
|
image: cerc/watcher-sushiswap:local
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-sushiswap/lotus-params.env
|
||||||
|
environment:
|
||||||
|
- DEBUG=vulcanize:*
|
||||||
|
working_dir: /app/packages/uni-watcher
|
||||||
|
command: ["node", "--enable-source-maps", "dist/server.js"]
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-sushiswap/sushi-watcher.toml:/app/packages/uni-watcher/environments/local.toml
|
||||||
|
- ../config/watcher-sushiswap/sushi-watcher-test.toml:/app/packages/uni-watcher/environments/test.toml
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:3003:3003"
|
||||||
|
- "0.0.0.0:9005:9001"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "3003"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
sushi-info-watcher-job-runner:
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
sushiswap-watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
erc20-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
lotus-node-1:
|
||||||
|
condition: service_healthy
|
||||||
|
sushi-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
image: cerc/watcher-sushiswap:local
|
||||||
|
working_dir: /app/packages/uni-info-watcher
|
||||||
|
environment:
|
||||||
|
- DEBUG=vulcanize:*
|
||||||
|
command: ["node", "--enable-source-maps", "dist/job-runner.js"]
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-sushiswap/sushi-info-watcher.toml:/app/packages/uni-info-watcher/environments/local.toml
|
||||||
|
- ../config/watcher-sushiswap/sushi-info-watcher-test.toml:/app/packages/uni-info-watcher/environments/test.toml
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:9006:9002"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "9002"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
sushi-info-watcher-server:
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
sushiswap-watcher-db:
|
||||||
|
condition: service_healthy
|
||||||
|
erc20-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
sushi-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
sushi-info-watcher-job-runner:
|
||||||
|
condition: service_healthy
|
||||||
|
image: cerc/watcher-sushiswap:local
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-sushiswap/lotus-params.env
|
||||||
|
working_dir: /app/packages/uni-info-watcher
|
||||||
|
command: ["node", "--enable-source-maps", "dist/server.js"]
|
||||||
|
volumes:
|
||||||
|
- ../config/watcher-sushiswap/sushi-info-watcher.toml:/app/packages/uni-info-watcher/environments/local.toml
|
||||||
|
- ../config/watcher-sushiswap/sushi-info-watcher-test.toml:/app/packages/uni-info-watcher/environments/test.toml
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:3004:3004"
|
||||||
|
- "0.0.0.0:9007:9003"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "nc", "-v", "localhost", "3004"]
|
||||||
|
interval: 20s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 15
|
||||||
|
start_period: 5s
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
|
sushiswap-v3-info:
|
||||||
|
depends_on:
|
||||||
|
sushi-info-watcher-server:
|
||||||
|
condition: service_healthy
|
||||||
|
image: cerc/uniswap-v3-info:local
|
||||||
|
ports:
|
||||||
|
- "0.0.0.0:3006:3000"
|
||||||
|
|
||||||
|
# Deploys the core (UniswapV3Factory) contract
|
||||||
|
sushiswap-v3-core:
|
||||||
|
image: cerc/sushiswap-v3-core:local
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-sushiswap/lotus-params.env
|
||||||
|
|
||||||
|
# Deploys the periphery (NFPM, token, etc.) contracts
|
||||||
|
sushiswap-v3-periphery:
|
||||||
|
image: cerc/sushiswap-v3-periphery:local
|
||||||
|
env_file:
|
||||||
|
- ../config/watcher-sushiswap/lotus-params.env
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
sushiswap_watcher_db_data:
|
@ -33,7 +33,8 @@ echo "Daemon started."
|
|||||||
cp /devgen.car /root/.lotus-shared
|
cp /devgen.car /root/.lotus-shared
|
||||||
|
|
||||||
# publish bootnode peer info to shared volume
|
# publish bootnode peer info to shared volume
|
||||||
lotus net listen | awk 'NR==2{print}' > /root/.lotus-shared/miner.addr
|
# TODO: Improve exporting public address to shared volume
|
||||||
|
lotus net listen | awk 'NR==4{print}' > /root/.lotus-shared/miner.addr
|
||||||
|
|
||||||
# if miner not already initialized
|
# if miner not already initialized
|
||||||
if [ ! -d $LOTUS_MINER_PATH ]; then
|
if [ ! -d $LOTUS_MINER_PATH ]; then
|
||||||
|
39
app/data/config/watcher-sushiswap/erc20-watcher.toml
Normal file
39
app/data/config/watcher-sushiswap/erc20-watcher.toml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
[server]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 3001
|
||||||
|
mode = "eth_call"
|
||||||
|
kind = "lazy"
|
||||||
|
|
||||||
|
[metrics]
|
||||||
|
host = "127.0.0.1"
|
||||||
|
port = 9000
|
||||||
|
[metrics.gql]
|
||||||
|
port = 9001
|
||||||
|
|
||||||
|
[database]
|
||||||
|
type = "postgres"
|
||||||
|
host = "sushiswap-watcher-db"
|
||||||
|
port = 5432
|
||||||
|
database = "erc20-watcher"
|
||||||
|
username = "vdbm"
|
||||||
|
password = "password"
|
||||||
|
synchronize = true
|
||||||
|
logging = false
|
||||||
|
maxQueryExecutionTime = 100
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
[upstream.ethServer]
|
||||||
|
rpcProviderEndpoint = "http://lotus-node-1:1234/rpc/v1"
|
||||||
|
rpcClient = true
|
||||||
|
|
||||||
|
[upstream.cache]
|
||||||
|
name = "requests"
|
||||||
|
enabled = false
|
||||||
|
deleteOnStart = false
|
||||||
|
|
||||||
|
[jobQueue]
|
||||||
|
dbConnectionString = "postgres://vdbm:password@sushiswap-watcher-db:5432/erc20-watcher-job-queue"
|
||||||
|
maxCompletionLagInSecs = 300
|
||||||
|
jobDelayInMilliSecs = 100
|
||||||
|
eventsInBatch = 50
|
||||||
|
blockDelayInMilliSecs = 2000
|
6
app/data/config/watcher-sushiswap/lotus-params.env
Normal file
6
app/data/config/watcher-sushiswap/lotus-params.env
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Lotus node config
|
||||||
|
ETH_RPC_ENDPOINT="http://lotus-node-1:1234/rpc/v1"
|
||||||
|
CHAIN_ID=31415926
|
||||||
|
|
||||||
|
# From app/data/config/fixturenet-lotus/fund-account.sh
|
||||||
|
ACCOUNT_PRIVATE_KEY="0xc05fd3613bcd62a4f25e5eba1f464d0b76d74c3f771a7c2f13e26ad6439444b3"
|
@ -0,0 +1,45 @@
|
|||||||
|
[server]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 3004
|
||||||
|
# Use mode demo when running watcher locally.
|
||||||
|
# Mode demo whitelists all tokens so that entity values get updated.
|
||||||
|
mode = "demo"
|
||||||
|
|
||||||
|
[database]
|
||||||
|
type = "postgres"
|
||||||
|
host = "sushiswap-watcher-db"
|
||||||
|
port = 5432
|
||||||
|
database = "sushi-info-watcher"
|
||||||
|
username = "vdbm"
|
||||||
|
password = "password"
|
||||||
|
synchronize = true
|
||||||
|
logging = false
|
||||||
|
maxQueryExecutionTime = 100
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
[upstream.ethServer]
|
||||||
|
rpcProviderEndpoint = "http://lotus-node-1:1234/rpc/v1"
|
||||||
|
rpcClient = true
|
||||||
|
|
||||||
|
[upstream.cache]
|
||||||
|
name = "requests"
|
||||||
|
enabled = false
|
||||||
|
deleteOnStart = false
|
||||||
|
|
||||||
|
[upstream.uniWatcher]
|
||||||
|
gqlEndpoint = "http://sushi-watcher-server:3003/graphql"
|
||||||
|
gqlSubscriptionEndpoint = "ws://sushi-watcher-server:3003/graphql"
|
||||||
|
|
||||||
|
[upstream.tokenWatcher]
|
||||||
|
gqlEndpoint = "http://erc20-watcher-server:3001/graphql"
|
||||||
|
gqlSubscriptionEndpoint = "ws://erc20-watcher-server:3001/graphql"
|
||||||
|
|
||||||
|
[jobQueue]
|
||||||
|
dbConnectionString = "postgres://vdbm:password@sushiswap-watcher-db:5432/sushi-info-watcher-job-queue"
|
||||||
|
maxCompletionLagInSecs = 300
|
||||||
|
jobDelayInMilliSecs = 1000
|
||||||
|
eventsInBatch = 50
|
||||||
|
subgraphEventsOrder = true
|
||||||
|
blockDelayInMilliSecs = 2000
|
||||||
|
prefetchBlocksInMem = false
|
||||||
|
prefetchBlockCount = 10
|
90
app/data/config/watcher-sushiswap/sushi-info-watcher.toml
Normal file
90
app/data/config/watcher-sushiswap/sushi-info-watcher.toml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
[server]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 3004
|
||||||
|
mode = "demo"
|
||||||
|
kind = "active"
|
||||||
|
|
||||||
|
# Checkpointing state.
|
||||||
|
checkpointing = true
|
||||||
|
|
||||||
|
# Checkpoint interval in number of blocks.
|
||||||
|
checkpointInterval = 50000
|
||||||
|
|
||||||
|
# Enable state creation
|
||||||
|
enableState = false
|
||||||
|
|
||||||
|
# Max block range for which to return events in eventsInRange GQL query.
|
||||||
|
# Use -1 for skipping check on block range.
|
||||||
|
maxEventsBlockRange = 1000
|
||||||
|
|
||||||
|
# Interval in number of blocks at which to clear entities cache.
|
||||||
|
clearEntitiesCacheInterval = 1000
|
||||||
|
|
||||||
|
# Boolean to skip updating entity fields required in state creation and not required in the frontend.
|
||||||
|
skipStateFieldsUpdate = false
|
||||||
|
|
||||||
|
# Boolean to load GQL query nested entity relations sequentially.
|
||||||
|
loadRelationsSequential = false
|
||||||
|
|
||||||
|
# Max GQL API requests to process simultaneously (defaults to 1).
|
||||||
|
maxSimultaneousRequests = 1
|
||||||
|
|
||||||
|
# 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 = "0.0.0.0"
|
||||||
|
port = 9002
|
||||||
|
[metrics.gql]
|
||||||
|
port = 9003
|
||||||
|
|
||||||
|
[database]
|
||||||
|
type = "postgres"
|
||||||
|
host = "sushiswap-watcher-db"
|
||||||
|
port = 5432
|
||||||
|
database = "sushi-info-watcher"
|
||||||
|
username = "vdbm"
|
||||||
|
password = "password"
|
||||||
|
synchronize = true
|
||||||
|
logging = false
|
||||||
|
maxQueryExecutionTime = 100
|
||||||
|
|
||||||
|
[database.extra]
|
||||||
|
# maximum number of clients the pool should contain
|
||||||
|
max = 20
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
[upstream.ethServer]
|
||||||
|
rpcProviderEndpoint = "http://lotus-node-1:1234/rpc/v1"
|
||||||
|
rpcClient = true
|
||||||
|
|
||||||
|
[upstream.cache]
|
||||||
|
name = "requests"
|
||||||
|
enabled = false
|
||||||
|
deleteOnStart = false
|
||||||
|
|
||||||
|
[upstream.uniWatcher]
|
||||||
|
gqlEndpoint = "http://sushi-watcher-server:3003/graphql"
|
||||||
|
gqlSubscriptionEndpoint = "ws://sushi-watcher-server:3003/graphql"
|
||||||
|
|
||||||
|
[upstream.tokenWatcher]
|
||||||
|
gqlEndpoint = "http://erc20-watcher-server:3001/graphql"
|
||||||
|
gqlSubscriptionEndpoint = "ws://erc20-watcher-server:3001/graphql"
|
||||||
|
|
||||||
|
[jobQueue]
|
||||||
|
dbConnectionString = "postgres://vdbm:password@sushiswap-watcher-db:5432/sushi-info-watcher-job-queue"
|
||||||
|
maxCompletionLagInSecs = 300
|
||||||
|
jobDelayInMilliSecs = 1000
|
||||||
|
eventsInBatch = 50
|
||||||
|
subgraphEventsOrder = true
|
||||||
|
blockDelayInMilliSecs = 2000
|
||||||
|
prefetchBlocksInMem = false
|
||||||
|
prefetchBlockCount = 10
|
34
app/data/config/watcher-sushiswap/sushi-watcher-test.toml
Normal file
34
app/data/config/watcher-sushiswap/sushi-watcher-test.toml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[server]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 3003
|
||||||
|
|
||||||
|
[database]
|
||||||
|
type = "postgres"
|
||||||
|
host = "sushiswap-watcher-db"
|
||||||
|
port = 5432
|
||||||
|
database = "sushi-watcher"
|
||||||
|
username = "vdbm"
|
||||||
|
password = "password"
|
||||||
|
synchronize = true
|
||||||
|
logging = false
|
||||||
|
maxQueryExecutionTime = 100
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
[upstream.ethServer]
|
||||||
|
rpcProviderEndpoint = "http://lotus-node-1:1234/rpc/v1"
|
||||||
|
rpcClient = true
|
||||||
|
|
||||||
|
[upstream.cache]
|
||||||
|
name = "requests"
|
||||||
|
enabled = false
|
||||||
|
deleteOnStart = false
|
||||||
|
|
||||||
|
[jobQueue]
|
||||||
|
dbConnectionString = "postgres://vdbm:password@sushiswap-watcher-db:5432/sushi-watcher-job-queue"
|
||||||
|
maxCompletionLagInSecs = 300
|
||||||
|
jobDelayInMilliSecs = 0
|
||||||
|
eventsInBatch = 50
|
||||||
|
lazyUpdateBlockProgress = true
|
||||||
|
blockDelayInMilliSecs = 2000
|
||||||
|
prefetchBlocksInMem = false
|
||||||
|
prefetchBlockCount = 10
|
41
app/data/config/watcher-sushiswap/sushi-watcher.toml
Normal file
41
app/data/config/watcher-sushiswap/sushi-watcher.toml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
[server]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 3003
|
||||||
|
kind = "active"
|
||||||
|
|
||||||
|
[metrics]
|
||||||
|
host = "0.0.0.0"
|
||||||
|
port = 9000
|
||||||
|
[metrics.gql]
|
||||||
|
port = 9001
|
||||||
|
|
||||||
|
[database]
|
||||||
|
type = "postgres"
|
||||||
|
host = "sushiswap-watcher-db"
|
||||||
|
port = 5432
|
||||||
|
database = "sushi-watcher"
|
||||||
|
username = "vdbm"
|
||||||
|
password = "password"
|
||||||
|
synchronize = true
|
||||||
|
logging = false
|
||||||
|
maxQueryExecutionTime = 100
|
||||||
|
|
||||||
|
[upstream]
|
||||||
|
[upstream.ethServer]
|
||||||
|
rpcProviderEndpoint = "http://lotus-node-1:1234/rpc/v1"
|
||||||
|
rpcClient = true
|
||||||
|
|
||||||
|
[upstream.cache]
|
||||||
|
name = "requests"
|
||||||
|
enabled = false
|
||||||
|
deleteOnStart = false
|
||||||
|
|
||||||
|
[jobQueue]
|
||||||
|
dbConnectionString = "postgres://vdbm:password@sushiswap-watcher-db:5432/sushi-watcher-job-queue"
|
||||||
|
maxCompletionLagInSecs = 300
|
||||||
|
jobDelayInMilliSecs = 0
|
||||||
|
eventsInBatch = 50
|
||||||
|
lazyUpdateBlockProgress = true
|
||||||
|
blockDelayInMilliSecs = 2000
|
||||||
|
prefetchBlocksInMem = false
|
||||||
|
prefetchBlockCount = 10
|
@ -1,5 +1,5 @@
|
|||||||
#####################################
|
#####################################
|
||||||
FROM golang:1.19.7-buster AS lotus-builder
|
FROM golang:1.19.12-bullseye AS lotus-builder
|
||||||
MAINTAINER Lotus Development Team
|
MAINTAINER Lotus Development Team
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev
|
||||||
@ -59,7 +59,7 @@ COPY --from=lotus-builder /lib/*/libgcc_s.so.1 /lib/
|
|||||||
COPY --from=lotus-builder /lib/*/libutil.so.1 /lib/
|
COPY --from=lotus-builder /lib/*/libutil.so.1 /lib/
|
||||||
COPY --from=lotus-builder /usr/lib/*/libltdl.so.7 /lib/
|
COPY --from=lotus-builder /usr/lib/*/libltdl.so.7 /lib/
|
||||||
COPY --from=lotus-builder /usr/lib/*/libnuma.so.1 /lib/
|
COPY --from=lotus-builder /usr/lib/*/libnuma.so.1 /lib/
|
||||||
COPY --from=lotus-builder /usr/lib/*/libhwloc.so.5 /lib/
|
COPY --from=lotus-builder /usr/lib/*/libhwloc.so.* /lib/
|
||||||
COPY --from=lotus-builder /usr/lib/*/libOpenCL.so.1 /lib/
|
COPY --from=lotus-builder /usr/lib/*/libOpenCL.so.1 /lib/
|
||||||
|
|
||||||
RUN useradd -r -u 532 -U fc \
|
RUN useradd -r -u 532 -U fc \
|
||||||
@ -98,6 +98,9 @@ CMD ["-help"]
|
|||||||
#####################################
|
#####################################
|
||||||
FROM lotus-base AS lotus-all-in-one
|
FROM lotus-base AS lotus-all-in-one
|
||||||
|
|
||||||
|
# Install netcat for healthcheck
|
||||||
|
RUN apt-get update && apt-get install -y netcat
|
||||||
|
|
||||||
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
ENV FILECOIN_PARAMETER_CACHE /var/tmp/filecoin-proof-parameters
|
||||||
ENV LOTUS_MINER_PATH /var/lib/lotus-miner
|
ENV LOTUS_MINER_PATH /var/lib/lotus-miner
|
||||||
ENV LOTUS_PATH /var/lib/lotus
|
ENV LOTUS_PATH /var/lib/lotus
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
# Per lotus docs, 'releases' branch always contains latest stable release
|
# Use a release version tag to match the modified Dockerfile replaced in next step
|
||||||
git -C ${CERC_REPO_BASE_DIR}/lotus checkout releases
|
git -C ${CERC_REPO_BASE_DIR}/lotus checkout v1.23.3
|
||||||
|
|
||||||
# Replace repo's Dockerfile with modified one
|
# Replace repo's Dockerfile with modified one
|
||||||
cp ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/lotus/Dockerfile
|
cp ${SCRIPT_DIR}/Dockerfile ${CERC_REPO_BASE_DIR}/lotus/Dockerfile
|
||||||
|
14
app/data/container-build/cerc-sushiswap-v3-core/Dockerfile
Normal file
14
app/data/container-build/cerc-sushiswap-v3-core/Dockerfile
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
FROM node:18.15.0-alpine3.16
|
||||||
|
|
||||||
|
RUN apk --update --no-cache add git python3 alpine-sdk bash
|
||||||
|
RUN curl -L https://unpkg.com/@pnpm/self-installer | node
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN echo "Installing dependencies..." && \
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
# Keep container running for commands to be executed
|
||||||
|
CMD ["tail", "-f"]
|
7
app/data/container-build/cerc-sushiswap-v3-core/build.sh
Executable file
7
app/data/container-build/cerc-sushiswap-v3-core/build.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Build cerc/sushiswap-v3-core
|
||||||
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
|
docker build -t cerc/sushiswap-v3-core:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/sushiswap-v3-core
|
@ -0,0 +1,13 @@
|
|||||||
|
FROM node:18.15.0-alpine3.16
|
||||||
|
|
||||||
|
RUN apk --update --no-cache add git python3 alpine-sdk bash
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN echo "Installing dependencies..." && \
|
||||||
|
yarn install
|
||||||
|
|
||||||
|
# Keep container running for commands to be executed
|
||||||
|
CMD ["tail", "-f"]
|
7
app/data/container-build/cerc-sushiswap-v3-periphery/build.sh
Executable file
7
app/data/container-build/cerc-sushiswap-v3-periphery/build.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Build cerc/sushiswap-v3-periphery
|
||||||
|
source ${CERC_CONTAINER_BASE_DIR}/build-base.sh
|
||||||
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
|
||||||
|
docker build -t cerc/sushiswap-v3-periphery:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/sushiswap-v3-periphery
|
10
app/data/container-build/cerc-watcher-sushiswap/Dockerfile
Normal file
10
app/data/container-build/cerc-watcher-sushiswap/Dockerfile
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
FROM node:18.15.0-alpine3.16
|
||||||
|
|
||||||
|
RUN apk --update --no-cache add git python3 alpine-sdk bash
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN echo "Building uniswap-watcher-ts" && \
|
||||||
|
yarn && yarn build && yarn build:contracts
|
9
app/data/container-build/cerc-watcher-sushiswap/build.sh
Executable file
9
app/data/container-build/cerc-watcher-sushiswap/build.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build cerc/watcher-sushiswap
|
||||||
|
|
||||||
|
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:local -f ${SCRIPT_DIR}/Dockerfile ${build_command_args} ${CERC_REPO_BASE_DIR}/uniswap-watcher-ts
|
@ -44,3 +44,6 @@ cerc/lotus
|
|||||||
cerc/go-opera
|
cerc/go-opera
|
||||||
cerc/lasso
|
cerc/lasso
|
||||||
cerc/reth
|
cerc/reth
|
||||||
|
cerc/sushiswap-v3-core
|
||||||
|
cerc/sushiswap-v3-periphery
|
||||||
|
cerc/watcher-sushiswap
|
||||||
|
@ -30,3 +30,4 @@ fixturenet-lotus
|
|||||||
mainnet-go-opera
|
mainnet-go-opera
|
||||||
lasso
|
lasso
|
||||||
reth
|
reth
|
||||||
|
watcher-sushiswap
|
||||||
|
@ -39,3 +39,5 @@ github.com/cerc-io/lasso
|
|||||||
github.com/paradigmxyz/reth
|
github.com/paradigmxyz/reth
|
||||||
git.vdb.to/cerc-io/plugeth
|
git.vdb.to/cerc-io/plugeth
|
||||||
git.vdb.to/cerc-io/plugeth-statediff
|
git.vdb.to/cerc-io/plugeth-statediff
|
||||||
|
github.com/cerc-io/sushiswap-v3-core
|
||||||
|
github.com/cerc-io/sushiswap-v3-periphery
|
||||||
|
@ -16,13 +16,13 @@ $ laconic-so --stack fixturenet-lotus deploy --cluster lotus up
|
|||||||
```
|
```
|
||||||
Correct operation should be verified by checking the container logs with:
|
Correct operation should be verified by checking the container logs with:
|
||||||
```
|
```
|
||||||
$ laconic-so --stack fixturenet-lotus deploy logs lotus-miner
|
$ laconic-so --stack fixturenet-lotus deploy --cluster lotus logs lotus-miner
|
||||||
$ laconic-so --stack fixturenet-lotus deploy logs lotus-node-1
|
$ laconic-so --stack fixturenet-lotus deploy --cluster lotus logs lotus-node-1
|
||||||
$ laconic-so --stack fixturenet-lotus deploy logs lotus-node-2
|
$ laconic-so --stack fixturenet-lotus deploy --cluster lotus logs lotus-node-2
|
||||||
```
|
```
|
||||||
or by checking the chain status on each node:
|
or by checking the chain status on each node:
|
||||||
```
|
```
|
||||||
$ laconic-so --stack fixturenet-lotus deploy exec lotus-miner "lotus status"
|
$ laconic-so --stack fixturenet-lotus deploy --cluster lotus exec lotus-miner "lotus status"
|
||||||
$ laconic-so --stack fixturenet-lotus deploy exec lotus-node-1 "lotus status"
|
$ laconic-so --stack fixturenet-lotus deploy --cluster lotus exec lotus-node-1 "lotus status"
|
||||||
$ laconic-so --stack fixturenet-lotus deploy exec lotus-node-2 "lotus status"
|
$ laconic-so --stack fixturenet-lotus deploy --cluster lotus exec lotus-node-2 "lotus status"
|
||||||
```
|
```
|
||||||
|
45
app/data/stacks/sushiswap/README.md
Normal file
45
app/data/stacks/sushiswap/README.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# SushiSwap
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Clone required repositories:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack sushiswap setup-repositories --git-ssh
|
||||||
|
```
|
||||||
|
|
||||||
|
Build the container images:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack sushiswap build-containers
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
|
||||||
|
Deploy the stack:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack sushiswap deploy --cluster sushiswap up
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tests
|
||||||
|
|
||||||
|
Follow [smoke-tests.md](./smoke-tests.md) to run smoke tests
|
||||||
|
|
||||||
|
## Clean up
|
||||||
|
|
||||||
|
Stop all the services running in background run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
laconic-so --stack sushiswap deploy --cluster sushiswap down
|
||||||
|
```
|
||||||
|
|
||||||
|
Clear volumes created by this stack:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# List all relevant volumes
|
||||||
|
docker volume ls -q --filter "name=sushiswap"
|
||||||
|
|
||||||
|
# Remove all the listed volumes
|
||||||
|
docker volume rm $(docker volume ls -q --filter "name=sushiswap")
|
||||||
|
```
|
71
app/data/stacks/sushiswap/smoke-tests.md
Normal file
71
app/data/stacks/sushiswap/smoke-tests.md
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# SushiSwap Watcher Smoke Tests
|
||||||
|
|
||||||
|
## sushi-watcher
|
||||||
|
|
||||||
|
Deploy required contracts and set the addresses to variables:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Deploy UniswapV3Factory
|
||||||
|
docker exec -it sushiswap-sushiswap-v3-core-1 pnpm hardhat --network docker deploy --tags UniswapV3Factory
|
||||||
|
|
||||||
|
# Set the returned address to a variable
|
||||||
|
export FACTORY_ADDRESS=<FACTORY_ADDRESS>
|
||||||
|
|
||||||
|
# Deploy TestUniswapV3Callee
|
||||||
|
docker exec -it sushiswap-sushiswap-v3-core-1 pnpm hardhat --network docker deploy --tags TestUniswapV3Callee
|
||||||
|
|
||||||
|
# Set the returned address to a variable
|
||||||
|
export UNISWAP_CALLEE_ADDRESS=<UNISWAP_CALLEE_ADDRESS>
|
||||||
|
|
||||||
|
# Deploy NFPM contract
|
||||||
|
docker exec -it sushiswap-sushiswap-v3-periphery-1 bash -c "export FACTORY_ADDRESS=$FACTORY_ADDRESS && yarn hardhat --network docker deploy --tags NonfungiblePositionManager"
|
||||||
|
|
||||||
|
# Set the returned address to a variable
|
||||||
|
export POSITION_MANAGER_ADDRESS=<POSITION_MANAGER_ADDRESS>
|
||||||
|
|
||||||
|
# Deploy two test tokens
|
||||||
|
docker exec -it sushiswap-sushiswap-v3-periphery-1 yarn hardhat --network docker deploy --tags TestERC20
|
||||||
|
docker exec -it sushiswap-sushiswap-v3-periphery-1 yarn hardhat --network docker deploy --tags TestERC20
|
||||||
|
|
||||||
|
# Set the returned addresses to variables
|
||||||
|
export TOKEN0_ADDRESS=<TOKEN0_ADDRESS>
|
||||||
|
export TOKEN1_ADDRESS=<TOKEN1_ADDRESS>
|
||||||
|
```
|
||||||
|
|
||||||
|
Watch the contracts:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Watch factory contract
|
||||||
|
docker exec -it sushiswap-sushi-watcher-server-1 bash -c "yarn watch:contract --address $FACTORY_ADDRESS --kind factory --startingBlock 100 --checkpoint false"
|
||||||
|
docker exec -it sushiswap-sushi-info-watcher-server-1 bash -c "yarn watch:contract --address $FACTORY_ADDRESS --kind factory --startingBlock 100 --checkpoint false"
|
||||||
|
|
||||||
|
# Watch NFPM contract
|
||||||
|
docker exec -it sushiswap-sushi-watcher-server-1 bash -c "yarn watch:contract --address $POSITION_MANAGER_ADDRESS --kind nfpm --startingBlock 100 --checkpoint false"
|
||||||
|
docker exec -it sushiswap-sushi-info-watcher-server-1 bash -c "yarn watch:contract --address $POSITION_MANAGER_ADDRESS --kind nfpm --startingBlock 100 --checkpoint false"
|
||||||
|
```
|
||||||
|
|
||||||
|
Run the smoke test:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec -it sushiswap-sushi-watcher-server-1 bash -c "export TOKEN0_ADDRESS=$TOKEN0_ADDRESS && export TOKEN1_ADDRESS=$TOKEN1_ADDRESS && export UNISWAP_CALLEE_ADDRESS=$UNISWAP_CALLEE_ADDRESS && yarn smoke-test"
|
||||||
|
```
|
||||||
|
|
||||||
|
## sushi-info-watcher
|
||||||
|
|
||||||
|
Deploy required contracts and set the addresses to variables:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Deploy two test tokens
|
||||||
|
docker exec -it sushiswap-sushiswap-v3-periphery-1 yarn hardhat --network docker deploy --tags TestERC20
|
||||||
|
docker exec -it sushiswap-sushiswap-v3-periphery-1 yarn hardhat --network docker deploy --tags TestERC20
|
||||||
|
|
||||||
|
# Set the returned addresses to variables
|
||||||
|
export TOKEN0_ADDRESS=<TOKEN0_ADDRESS>
|
||||||
|
export TOKEN1_ADDRESS=<TOKEN1_ADDRESS>
|
||||||
|
```
|
||||||
|
|
||||||
|
Run the smoke test:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec -it sushiswap-sushi-info-watcher-server-1 bash -c "export TOKEN0_ADDRESS=$TOKEN0_ADDRESS && export TOKEN1_ADDRESS=$TOKEN1_ADDRESS && export UNISWAP_CALLEE_ADDRESS=$UNISWAP_CALLEE_ADDRESS && yarn smoke-test"
|
||||||
|
```
|
22
app/data/stacks/sushiswap/stack.yml
Normal file
22
app/data/stacks/sushiswap/stack.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
version: "1.0"
|
||||||
|
name: sushiswap
|
||||||
|
description: "End-to-end SushiSwap watcher stack"
|
||||||
|
repos:
|
||||||
|
## fixturenet-lotus repo
|
||||||
|
- github.com/filecoin-project/lotus
|
||||||
|
## sushiswap repos
|
||||||
|
- github.com/cerc-io/sushiswap-v3-core@watcher-ts
|
||||||
|
- github.com/cerc-io/sushiswap-v3-periphery@watcher-ts
|
||||||
|
- github.com/vulcanize/uniswap-watcher-ts@sushiswap
|
||||||
|
- github.com/vulcanize/uniswap-v3-info
|
||||||
|
containers:
|
||||||
|
## fixturenet-lotus image
|
||||||
|
- cerc/lotus
|
||||||
|
## sushiswap images
|
||||||
|
- cerc/sushiswap-v3-core
|
||||||
|
- cerc/sushiswap-v3-periphery
|
||||||
|
- cerc/watcher-sushiswap
|
||||||
|
- cerc/uniswap-v3-info
|
||||||
|
pods:
|
||||||
|
- fixturenet-lotus
|
||||||
|
- watcher-sushiswap
|
Loading…
Reference in New Issue
Block a user