From 0577349c5d9b56cd92f8200d18e541c72d1068bb Mon Sep 17 00:00:00 2001 From: Yin Guanhao Date: Tue, 14 Jun 2022 11:26:15 +0800 Subject: [PATCH] feat: add godwoken readonly node and enable mem-pool p2p sync (#276) * feat: add godwoken readonly node and enable mem-pool p2p sync * fix godwoken readonly port don't conflict with v0 * web3-indexer use readonly node RPC * web3-indexer depends on godwoken-readonly healthy * Bump godwoken-prebuilds to refs/pull/721/merge This image was built by Flouse/godwoken-docker-prebuilds@f03dd56. Co-authored-by: Flouse --- .gitignore | 2 ++ docker/docker-compose.yml | 35 +++++++++++++++++++++++-- docker/layer2/config/web3-config.env | 6 ++--- docker/layer2/entrypoint-readonly.sh | 38 ++++++++++++++++++++++++++++ docker/layer2/entrypoint.sh | 7 ++++- docker/manual-godwoken.compose.yml | 4 +++ kicker | 20 +++------------ 7 files changed, 88 insertions(+), 24 deletions(-) create mode 100755 docker/layer2/entrypoint-readonly.sh diff --git a/.gitignore b/.gitignore index d736b2c7..3d7b29fe 100644 --- a/.gitignore +++ b/.gitignore @@ -43,9 +43,11 @@ plugins/gw-schema/tmp /docker/layer1/ckb2/data/ /docker/layer1/ckb3/data/ /docker/layer2/data/ +/docker/layer2/data-readonly/ /docker/layer2/config/scripts-deployment.json /docker/layer2/config/rollup-genesis-deployment.json /docker/layer2/config/godwoken-config.toml +/docker/layer2/config/godwoken-config-readonly.toml /docker/layer2/config/polyjuice-root-account-id /docker/layer2/config/web3-indexer-config.toml /docker/manual-artifacts/ diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index c87bac87..03c5af64 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -70,7 +70,7 @@ services: condition: service_completed_successfully godwoken: - image: ghcr.io/keroro520/godwoken-prebuilds:v1-godwoken-d3eb41a-202205310512 + image: ghcr.io/flouse/godwoken-prebuilds:1.2-gw-pull-721-merge-202206140118 healthcheck: test: /var/lib/layer2/healthcheck.sh start_period: 10s @@ -106,6 +106,35 @@ services: check-ckb-started-successfully: condition: service_completed_successfully + godwoken-readonly: + image: ghcr.io/flouse/godwoken-prebuilds:1.2-gw-pull-721-merge-202206140118 + healthcheck: + test: /var/lib/layer2/healthcheck.sh + start_period: 10s + interval: 30s + retries: 600 + environment: + RUST_LOG: info,gw_generator=debug + GODWOKEN_MODE: readonly + RUST_BACKTRACE: full + STORE_PATH: /var/lib/layer2/data-readonly + ACCOUNTS_DIR: /accounts + GITHUB_RUN_ID: ${GITHUB_RUN_ID:-""} + volumes: + - ./layer2:/var/lib/layer2 + - ../accounts:/accounts:ro + ports: + - 28119:8119 # rpc + - 28120:8120 # err_receipt_ws_listen + entrypoint: "/var/lib/layer2/entrypoint-readonly.sh" + deploy: + restart_policy: + condition: on-failure + max_attempts: 1 + depends_on: + godwoken: + condition: service_healthy + web3: image: nervos/godwoken-web3-prebuilds:v1.1.2-rc1 healthcheck: @@ -132,6 +161,8 @@ services: condition: service_completed_successfully godwoken: condition: service_healthy + godwoken-readonly: + condition: service_healthy postgres: condition: service_started redis: @@ -154,7 +185,7 @@ services: depends_on: web3: condition: service_healthy - godwoken: + godwoken-readonly: condition: service_healthy postgres: condition: service_started diff --git a/docker/layer2/config/web3-config.env b/docker/layer2/config/web3-config.env index ccae0804..6b51739c 100644 --- a/docker/layer2/config/web3-config.env +++ b/docker/layer2/config/web3-config.env @@ -3,8 +3,6 @@ DATABASE_URL=postgres://user:password@postgres:5432/lumos REDIS_URL=redis://redis:6379 -GODWOKEN_JSON_RPC=http://godwoken:8119 -# TODO: add Godwoken readonly node -# GODWOKEN_READONLY_JSON_RPC= - EXTRA_ESTIMATE_GAS=20000 +GODWOKEN_JSON_RPC=http://godwoken:8119 +GODWOKEN_READONLY_JSON_RPC=http://godwoken-readonly:8119 diff --git a/docker/layer2/entrypoint-readonly.sh b/docker/layer2/entrypoint-readonly.sh new file mode 100755 index 00000000..07361413 --- /dev/null +++ b/docker/layer2/entrypoint-readonly.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +set -o errexit + +WORKSPACE="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" +CONFIG_DIR="$WORKSPACE/config" + +function generate-godwoken-readonly-config() { + log "start" + if [ -s "$CONFIG_DIR/godwoken-config-readonly.toml" ]; then + log "$CONFIG_DIR/godwoken-config-readonly.toml already exists, skip" + return 0 + fi + + cp $CONFIG_DIR/godwoken-config.toml $CONFIG_DIR/godwoken-config-readonly.toml + + sed -i 's#^node_mode = .*$#node_mode = '"'$GODWOKEN_MODE'"'#' $CONFIG_DIR/godwoken-config-readonly.toml + sed -i 's#^path = .*$#path = '"'$STORE_PATH'"'#' $CONFIG_DIR/godwoken-config-readonly.toml + sed -i 's@listen = "/ip4/.*"@dial = ["/dns4/godwoken/tcp/9999"]@' $CONFIG_DIR/godwoken-config-readonly.toml + + log "Generate file \"$CONFIG_DIR/godwoken-config-readonly.toml\"" +} + +function log() { + echo "[${FUNCNAME[1]}] $1" +} + +function main() { + godwoken --version + gw-tools --version + + # Setup Godwoken-readonly at the first time + generate-godwoken-readonly-config + + exec godwoken run -c $CONFIG_DIR/godwoken-config-readonly.toml +} + +main "$@" diff --git a/docker/layer2/entrypoint.sh b/docker/layer2/entrypoint.sh index 48b51a36..7512256e 100755 --- a/docker/layer2/entrypoint.sh +++ b/docker/layer2/entrypoint.sh @@ -140,6 +140,11 @@ function generate-godwoken-config() { if [ ! -z "$STORE_PATH" ]; then sed -i 's#^path = .*$#path = '"'$STORE_PATH'"'#' $CONFIG_DIR/godwoken-config.toml fi + cat >> $CONFIG_DIR/godwoken-config.toml <