From 9cf3c5b71eeb6cd14f8e0d01bcb2f6ad0ed5de7f Mon Sep 17 00:00:00 2001 From: cventastic Date: Wed, 19 Oct 2022 12:21:22 +0200 Subject: [PATCH] replace bor with erigon for archive --- erigon-polygon.yml | 34 ++++++++++++++++++++++++++++ polygon/erigon/Dockerfile | 31 +++++++++++++++++++++++++ polygon/erigon/scripts/entrypoint.sh | 33 +++++++++++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 erigon-polygon.yml create mode 100644 polygon/erigon/Dockerfile create mode 100644 polygon/erigon/scripts/entrypoint.sh diff --git a/erigon-polygon.yml b/erigon-polygon.yml new file mode 100644 index 00000000..79c38352 --- /dev/null +++ b/erigon-polygon.yml @@ -0,0 +1,34 @@ +version: '3.1' + +services: + erigon-polygon: + build: + args: + ERIGON_VERSION: v0.0.3 + context: ./polygon/erigon + dockerfile: Dockerfile + environment: + - SNAPSHOT_URL=https://matic-blockchain-snapshots.s3-accelerate.amazonaws.com/matic-mainnet/erigon-archive-snapshot-2022-10-12.tar.gz + - BOOTSTRAP=1 + volumes: + - "bor-archive_data:/datadir" + ports: + - "40303:40303" + - "40303:40303/udp" + depends_on: + - heimdallr + restart: unless-stopped + stop_grace_period: 1m + labels: + - "traefik.enable=true" + - "traefik.http.middlewares.bor-stripprefix.stripprefix.prefixes=/polygon-archive" + - "traefik.http.services.bor.loadbalancer.server.port=8545" + - "traefik.http.routers.bor.entrypoints=websecure" + - "traefik.http.routers.bor.tls.certresolver=myresolver" + - "traefik.http.routers.bor.rule=Host(`$DOMAIN`) && PathPrefix(`/polygon-archive`)" + - "traefik.http.routers.bor.middlewares=bor-stripprefix, ipwhitelist" + networks: + - chains + +volumes: + bor-archive_data: diff --git a/polygon/erigon/Dockerfile b/polygon/erigon/Dockerfile new file mode 100644 index 00000000..b3af31bf --- /dev/null +++ b/polygon/erigon/Dockerfile @@ -0,0 +1,31 @@ +# Build Bor in a stock Go builder container +FROM golang:1.19-alpine as builder + +# Install packages we need +RUN apk add --no-cache make g++ gcc musl-dev linux-headers git + +# Grab ERIGON_VERSION from Build Args +ARG ERIGON_VERSION + +# Clone the repo to that folder +RUN git clone --recurse-submodules -j8 https://github.com/maticnetwork/erigon.git + +# change into repo +WORKDIR ./erigon + +# checkout version +RUN git checkout ${ERIGON_VERSION} + +# Build Bor +RUN make erigon + +# Pull Bor into a second stage deploy alpine container +FROM alpine:latest + +RUN apk add --no-cache ca-certificates curl jq +COPY --from=builder /go/erigon/build/bin/erigon /usr/local/bin/ + +# Set entrypoint +COPY ./scripts/entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod u+x /usr/local/bin/entrypoint.sh +ENTRYPOINT [ "/usr/local/bin/entrypoint.sh" ] diff --git a/polygon/erigon/scripts/entrypoint.sh b/polygon/erigon/scripts/entrypoint.sh new file mode 100644 index 00000000..440fd18a --- /dev/null +++ b/polygon/erigon/scripts/entrypoint.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +# exit script on any error +set -e + +# Set Bor Home Directory +ERIGON_HOME=/datadir + + +if [ "${BOOTSTRAP}" == 1 ] && [ -n "${SNAPSHOT_URL}" ] && [ ! -f "${ERIGON_HOME}/bootstrapped" ]; +then + echo "downloading snapshot from ${SNAPSHOT_URL}" + mkdir -p ${ERIGON_HOME}/bor/chaindata + wget --tries=0 -O - "${SNAPSHOT_URL}" | tar -xz -C ${ERIGON_HOME}/bor/chaindata && touch ${ERIGON_HOME}/bootstrapped +fi + +READY=$(curl -s http://heimdalld:26657/status | jq '.result.sync_info.catching_up') +while [[ "${READY}" != "false" ]]; +do + echo "Waiting for heimdalld to catch up." + sleep 30 + READY=$(curl -s heimdalld:26657/status | jq '.result.sync_info.catching_up') +done + +# add snap.keepblocks=true as mentioned on https://snapshot.polygon.technology/ + +exec erigon \ + --chain=bor-mainnet \ + --bor.heimdall=http://heimdallr:1317 \ + --datadir=${ERIGON_HOME} \ + --snap.keepblocks=true \ + --metrics --metrics.addr=0.0.0.0 --metrics.port=6060 \ + --pprof --pprof.addr=0.0.0.0 --pprof.port=6061 \ No newline at end of file