From 8d6ceb6794475122a27386facdf9bb1ca4656b69 Mon Sep 17 00:00:00 2001 From: goldsquid Date: Fri, 24 Oct 2025 16:32:06 +0700 Subject: [PATCH] linea now with maru --- .../besu/linea-mainnet-besu-pruned-bonsai.yml | 41 ++++++++++++++ .../besu/linea-sepolia-besu-pruned-bonsai.yml | 41 ++++++++++++++ .../linea-mainnet-erigon3-archive-trace.yml | 38 +++++++++++++ .../linea-mainnet-erigon3-minimal-trace.yml | 38 +++++++++++++ .../linea-mainnet-erigon3-pruned-trace.yml | 38 +++++++++++++ .../linea-sepolia-erigon3-archive-trace.yml | 38 +++++++++++++ .../linea-sepolia-erigon3-minimal-trace.yml | 38 +++++++++++++ .../linea-sepolia-erigon3-pruned-trace.yml | 38 +++++++++++++ linea/mainnet/maru/config.toml.template | 54 +++++++++++++++++++ linea/mainnet/maru/genesis.json | 20 +++++++ linea/mainnet/maru/log4j.xml | 23 ++++++++ linea/maru.Dockerfile | 5 ++ .../{maru.toml => maru/config.toml.template} | 24 +++++---- .../{maru-genesis.json => maru/genesis.json} | 0 linea/sepolia/maru/log4j.xml | 23 ++++++++ 15 files changed, 449 insertions(+), 10 deletions(-) create mode 100644 linea/mainnet/maru/config.toml.template create mode 100644 linea/mainnet/maru/genesis.json create mode 100644 linea/mainnet/maru/log4j.xml create mode 100644 linea/maru.Dockerfile rename linea/sepolia/{maru.toml => maru/config.toml.template} (53%) rename linea/sepolia/{maru-genesis.json => maru/genesis.json} (100%) create mode 100644 linea/sepolia/maru/log4j.xml diff --git a/linea/besu/linea-mainnet-besu-pruned-bonsai.yml b/linea/besu/linea-mainnet-besu-pruned-bonsai.yml index 09a748eb..ec569894 100644 --- a/linea/besu/linea-mainnet-besu-pruned-bonsai.yml +++ b/linea/besu/linea-mainnet-besu-pruned-bonsai.yml @@ -57,6 +57,10 @@ services: - --Xeth-capability-max=67 - --data-path=/opt/besu/database - --data-storage-format=BONSAI + - --engine-host-allowlist=* + - --engine-jwt-secret=/jwtsecret + - --engine-rpc-enabled=true + - --engine-rpc-port=8551 - --fast-sync-min-peers=1 - --host-allowlist=* - --metrics-enabled=true @@ -83,6 +87,7 @@ services: volumes: - ${LINEA_MAINNET_BESU_PRUNED_BONSAI_DATA:-linea-mainnet-besu-pruned-bonsai}:/opt/besu/database - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -108,8 +113,44 @@ services: - ${NO_SSL:+traefik.http.routers.linea-mainnet-besu-pruned-bonsai-ws.rule=(Path(`/linea-mainnet`) || Path(`/linea-mainnet/`)) && Headers(`Upgrade`, `websocket`)} - traefik.http.routers.linea-mainnet-besu-pruned-bonsai-ws.middlewares=linea-mainnet-besu-pruned-bonsai-stripprefix, ipallowlist + linea-mainnet-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_MAINNET_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_MAINNET_MARU_VERSION:-bcfdb43} + ports: + - 19816:19816 + - 19816:19816/udp + expose: + - 8080 + environment: + - EL_HOST=linea-mainnet + - IP=${IP} + - L1_RPC=${ETHEREUM_MAINNET_EXECUTION_RPC} + - P2P_PORT=19816 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_MAINNET_BESU_PRUNED_BONSAI__MARU_DATA:-linea-mainnet-besu-pruned-bonsai_maru}:/opt/maru/data + - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-mainnet-besu-pruned-bonsai: + linea-mainnet-besu-pruned-bonsai_maru: x-upstreams: - id: $${ID} diff --git a/linea/besu/linea-sepolia-besu-pruned-bonsai.yml b/linea/besu/linea-sepolia-besu-pruned-bonsai.yml index 3535ae05..b56ffe77 100644 --- a/linea/besu/linea-sepolia-besu-pruned-bonsai.yml +++ b/linea/besu/linea-sepolia-besu-pruned-bonsai.yml @@ -57,6 +57,10 @@ services: - --Xeth-capability-max=67 - --data-path=/opt/besu/database - --data-storage-format=BONSAI + - --engine-host-allowlist=* + - --engine-jwt-secret=/jwtsecret + - --engine-rpc-enabled=true + - --engine-rpc-port=8551 - --fast-sync-min-peers=1 - --host-allowlist=* - --metrics-enabled=true @@ -83,6 +87,7 @@ services: volumes: - ${LINEA_SEPOLIA_BESU_PRUNED_BONSAI_DATA:-linea-sepolia-besu-pruned-bonsai}:/opt/besu/database - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -108,8 +113,44 @@ services: - ${NO_SSL:+traefik.http.routers.linea-sepolia-besu-pruned-bonsai-ws.rule=(Path(`/linea-sepolia`) || Path(`/linea-sepolia/`)) && Headers(`Upgrade`, `websocket`)} - traefik.http.routers.linea-sepolia-besu-pruned-bonsai-ws.middlewares=linea-sepolia-besu-pruned-bonsai-stripprefix, ipallowlist + linea-sepolia-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_SEPOLIA_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_SEPOLIA_MARU_VERSION:-bcfdb43} + ports: + - 19691:19691 + - 19691:19691/udp + expose: + - 8080 + environment: + - EL_HOST=linea-sepolia + - IP=${IP} + - L1_RPC=${ETHEREUM_SEPOLIA_EXECUTION_RPC} + - P2P_PORT=19691 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_SEPOLIA_BESU_PRUNED_BONSAI__MARU_DATA:-linea-sepolia-besu-pruned-bonsai_maru}:/opt/maru/data + - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-sepolia-besu-pruned-bonsai: + linea-sepolia-besu-pruned-bonsai_maru: x-upstreams: - id: $${ID} diff --git a/linea/erigon3/linea-mainnet-erigon3-archive-trace.yml b/linea/erigon3/linea-mainnet-erigon3-archive-trace.yml index 49fe51c5..e7dcc8e1 100644 --- a/linea/erigon3/linea-mainnet-erigon3-archive-trace.yml +++ b/linea/erigon3/linea-mainnet-erigon3-archive-trace.yml @@ -61,6 +61,7 @@ services: - --bootnodes=enode://069800db9e6e0ec9cadca670994ef1aea2cfd3d88133e63ecadbc1cdbd1a5847b09838ee08d8b5f02a9c32ee13abeb4d4104bb5514e5322c9d7ee19f41ff3e51@3.132.73.210:31002,enode://a8e03a71eab12ec4b47bb6e19169d8e4dc7a58373a2476969bbe463f2dded6003037fa4dd5f71e15027f7fc8d7340956fbbefed67ddd116ac19a7f74da034b61@3.132.73.210:31003,enode://97706526cf79df9d930003644f9156805f6c8bd964fc79e083444f7014ce10c9bdd2c5049e63b58040dca1d4c82ebef970822198cf0714de830cff4111534ff1@18.223.198.165:31004,enode://24e1c654a801975a96b7f54ebd7452ab15777fc635c1db25bdbd4425fdb04e7f4768e9e838a87ab724320a765e41631d5d37758c933ad0e8668693558125c8aa@18.223.198.165:31000,enode://27010891d960f73d272a553f72b6336c6698db3ade98d631f09c764e57674a797be5ebc6829ddbb65ab564f439ebc75215d20aa98b6f351d12ea623e7d139ac3@3.132.73.210:31001,enode://228e1b8a4931e46f383e30721dac21fb8fb4e5e1b32c870e13b25478c82db3dc1cd9e7ceb93d302a766466b55638cc9c5cbfc43aa48fa41ced19baf365951f76@3.1.142.64:31002,enode://c22eb0d40fc3ad5ea710aeddea906567778166bfe18c157955e8c39b23a46c45db18a0fa2ba07f2b64c81178a8c796aec2a29151533920ead06fcdfc6d8d03c6@47.128.192.57:31004,enode://8ce733abe39fd7ae0a278b9893f85c1193c611a3886168690dd843435460f22cc4d61f9e8d0ace7f5905836a665319a31cccdaacdada2acc69972c382ecce7db@3.1.142.64:31003,enode://b7c1b2bed65a855f7a2104aac9a14674dfdf018fdac763415b373b29ce18cdb81d36328ba4e5c9f12629f3a50c3e8f9ee048f22dbdbe93a82813da89c6b81334@51.20.235.126:31004,enode://95270e0550848a72fb141cf27f1c4ea10714edde365b411dc0fa06c81c0f282ce155eb9fa472b6b8bb9ee98395eeaf4c5a7b02a01fe58b37ea98ba152eda4c37@13.50.94.193:31000,enode://72013391755f24f08567b932feeeec4c893c06e0b1fb480890c83bf87fd277ad86a5ab9cb586db9ae9970371a2f8cb0c96f6c9f69045abca0fb801db7f047138@51.20.235.126:31001 - --datadir=/root/.local/share/erigon - --db.size.limit=600GB + - --externalcl=true - --http - --http.addr=0.0.0.0 - --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,ots @@ -90,6 +91,7 @@ services: volumes: - ${LINEA_MAINNET_ERIGON3_ARCHIVE_TRACE_DATA:-linea-mainnet-erigon3-archive-trace}:/root/.local/share/erigon - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -106,8 +108,44 @@ services: - traefik.http.routers.linea-mainnet-erigon3-archive-trace.middlewares=linea-mainnet-erigon3-archive-trace-stripprefix, ipallowlist shm_size: 2gb + linea-mainnet-erigon3-archive-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_MAINNET_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_MAINNET_MARU_VERSION:-bcfdb43} + ports: + - 15060:15060 + - 15060:15060/udp + expose: + - 8080 + environment: + - EL_HOST=linea-mainnet-erigon3-archive + - IP=${IP} + - L1_RPC=${ETHEREUM_MAINNET_EXECUTION_RPC} + - P2P_PORT=15060 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_MAINNET_ERIGON3_ARCHIVE_TRACE__MARU_DATA:-linea-mainnet-erigon3-archive-trace_maru}:/opt/maru/data + - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-mainnet-erigon3-archive-trace: + linea-mainnet-erigon3-archive-trace_maru: x-upstreams: - id: $${ID} diff --git a/linea/erigon3/linea-mainnet-erigon3-minimal-trace.yml b/linea/erigon3/linea-mainnet-erigon3-minimal-trace.yml index 24c245fd..76ee0d5b 100644 --- a/linea/erigon3/linea-mainnet-erigon3-minimal-trace.yml +++ b/linea/erigon3/linea-mainnet-erigon3-minimal-trace.yml @@ -61,6 +61,7 @@ services: - --bootnodes=enode://069800db9e6e0ec9cadca670994ef1aea2cfd3d88133e63ecadbc1cdbd1a5847b09838ee08d8b5f02a9c32ee13abeb4d4104bb5514e5322c9d7ee19f41ff3e51@3.132.73.210:31002,enode://a8e03a71eab12ec4b47bb6e19169d8e4dc7a58373a2476969bbe463f2dded6003037fa4dd5f71e15027f7fc8d7340956fbbefed67ddd116ac19a7f74da034b61@3.132.73.210:31003,enode://97706526cf79df9d930003644f9156805f6c8bd964fc79e083444f7014ce10c9bdd2c5049e63b58040dca1d4c82ebef970822198cf0714de830cff4111534ff1@18.223.198.165:31004,enode://24e1c654a801975a96b7f54ebd7452ab15777fc635c1db25bdbd4425fdb04e7f4768e9e838a87ab724320a765e41631d5d37758c933ad0e8668693558125c8aa@18.223.198.165:31000,enode://27010891d960f73d272a553f72b6336c6698db3ade98d631f09c764e57674a797be5ebc6829ddbb65ab564f439ebc75215d20aa98b6f351d12ea623e7d139ac3@3.132.73.210:31001,enode://228e1b8a4931e46f383e30721dac21fb8fb4e5e1b32c870e13b25478c82db3dc1cd9e7ceb93d302a766466b55638cc9c5cbfc43aa48fa41ced19baf365951f76@3.1.142.64:31002,enode://c22eb0d40fc3ad5ea710aeddea906567778166bfe18c157955e8c39b23a46c45db18a0fa2ba07f2b64c81178a8c796aec2a29151533920ead06fcdfc6d8d03c6@47.128.192.57:31004,enode://8ce733abe39fd7ae0a278b9893f85c1193c611a3886168690dd843435460f22cc4d61f9e8d0ace7f5905836a665319a31cccdaacdada2acc69972c382ecce7db@3.1.142.64:31003,enode://b7c1b2bed65a855f7a2104aac9a14674dfdf018fdac763415b373b29ce18cdb81d36328ba4e5c9f12629f3a50c3e8f9ee048f22dbdbe93a82813da89c6b81334@51.20.235.126:31004,enode://95270e0550848a72fb141cf27f1c4ea10714edde365b411dc0fa06c81c0f282ce155eb9fa472b6b8bb9ee98395eeaf4c5a7b02a01fe58b37ea98ba152eda4c37@13.50.94.193:31000,enode://72013391755f24f08567b932feeeec4c893c06e0b1fb480890c83bf87fd277ad86a5ab9cb586db9ae9970371a2f8cb0c96f6c9f69045abca0fb801db7f047138@51.20.235.126:31001 - --datadir=/root/.local/share/erigon - --db.size.limit=600GB + - --externalcl=true - --http - --http.addr=0.0.0.0 - --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,ots @@ -91,6 +92,7 @@ services: volumes: - ${LINEA_MAINNET_ERIGON3_MINIMAL_TRACE_DATA:-linea-mainnet-erigon3-minimal-trace}:/root/.local/share/erigon - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -107,8 +109,44 @@ services: - traefik.http.routers.linea-mainnet-erigon3-minimal-trace.middlewares=linea-mainnet-erigon3-minimal-trace-stripprefix, ipallowlist shm_size: 2gb + linea-mainnet-erigon3-minimal-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_MAINNET_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_MAINNET_MARU_VERSION:-bcfdb43} + ports: + - 19000:19000 + - 19000:19000/udp + expose: + - 8080 + environment: + - EL_HOST=linea-mainnet-erigon3-minimal + - IP=${IP} + - L1_RPC=${ETHEREUM_MAINNET_EXECUTION_RPC} + - P2P_PORT=19000 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_MAINNET_ERIGON3_MINIMAL_TRACE__MARU_DATA:-linea-mainnet-erigon3-minimal-trace_maru}:/opt/maru/data + - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-mainnet-erigon3-minimal-trace: + linea-mainnet-erigon3-minimal-trace_maru: x-upstreams: - id: $${ID} diff --git a/linea/erigon3/linea-mainnet-erigon3-pruned-trace.yml b/linea/erigon3/linea-mainnet-erigon3-pruned-trace.yml index 22df05c2..b7ef75f8 100644 --- a/linea/erigon3/linea-mainnet-erigon3-pruned-trace.yml +++ b/linea/erigon3/linea-mainnet-erigon3-pruned-trace.yml @@ -61,6 +61,7 @@ services: - --bootnodes=enode://069800db9e6e0ec9cadca670994ef1aea2cfd3d88133e63ecadbc1cdbd1a5847b09838ee08d8b5f02a9c32ee13abeb4d4104bb5514e5322c9d7ee19f41ff3e51@3.132.73.210:31002,enode://a8e03a71eab12ec4b47bb6e19169d8e4dc7a58373a2476969bbe463f2dded6003037fa4dd5f71e15027f7fc8d7340956fbbefed67ddd116ac19a7f74da034b61@3.132.73.210:31003,enode://97706526cf79df9d930003644f9156805f6c8bd964fc79e083444f7014ce10c9bdd2c5049e63b58040dca1d4c82ebef970822198cf0714de830cff4111534ff1@18.223.198.165:31004,enode://24e1c654a801975a96b7f54ebd7452ab15777fc635c1db25bdbd4425fdb04e7f4768e9e838a87ab724320a765e41631d5d37758c933ad0e8668693558125c8aa@18.223.198.165:31000,enode://27010891d960f73d272a553f72b6336c6698db3ade98d631f09c764e57674a797be5ebc6829ddbb65ab564f439ebc75215d20aa98b6f351d12ea623e7d139ac3@3.132.73.210:31001,enode://228e1b8a4931e46f383e30721dac21fb8fb4e5e1b32c870e13b25478c82db3dc1cd9e7ceb93d302a766466b55638cc9c5cbfc43aa48fa41ced19baf365951f76@3.1.142.64:31002,enode://c22eb0d40fc3ad5ea710aeddea906567778166bfe18c157955e8c39b23a46c45db18a0fa2ba07f2b64c81178a8c796aec2a29151533920ead06fcdfc6d8d03c6@47.128.192.57:31004,enode://8ce733abe39fd7ae0a278b9893f85c1193c611a3886168690dd843435460f22cc4d61f9e8d0ace7f5905836a665319a31cccdaacdada2acc69972c382ecce7db@3.1.142.64:31003,enode://b7c1b2bed65a855f7a2104aac9a14674dfdf018fdac763415b373b29ce18cdb81d36328ba4e5c9f12629f3a50c3e8f9ee048f22dbdbe93a82813da89c6b81334@51.20.235.126:31004,enode://95270e0550848a72fb141cf27f1c4ea10714edde365b411dc0fa06c81c0f282ce155eb9fa472b6b8bb9ee98395eeaf4c5a7b02a01fe58b37ea98ba152eda4c37@13.50.94.193:31000,enode://72013391755f24f08567b932feeeec4c893c06e0b1fb480890c83bf87fd277ad86a5ab9cb586db9ae9970371a2f8cb0c96f6c9f69045abca0fb801db7f047138@51.20.235.126:31001 - --datadir=/root/.local/share/erigon - --db.size.limit=600GB + - --externalcl=true - --http - --http.addr=0.0.0.0 - --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,ots @@ -90,6 +91,7 @@ services: volumes: - ${LINEA_MAINNET_ERIGON3_PRUNED_TRACE_DATA:-linea-mainnet-erigon3-pruned-trace}:/root/.local/share/erigon - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -106,8 +108,44 @@ services: - traefik.http.routers.linea-mainnet-erigon3-pruned-trace.middlewares=linea-mainnet-erigon3-pruned-trace-stripprefix, ipallowlist shm_size: 2gb + linea-mainnet-erigon3-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_MAINNET_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_MAINNET_MARU_VERSION:-bcfdb43} + ports: + - 17622:17622 + - 17622:17622/udp + expose: + - 8080 + environment: + - EL_HOST=linea-mainnet-erigon3 + - IP=${IP} + - L1_RPC=${ETHEREUM_MAINNET_EXECUTION_RPC} + - P2P_PORT=17622 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_MAINNET_ERIGON3_PRUNED_TRACE__MARU_DATA:-linea-mainnet-erigon3-pruned-trace_maru}:/opt/maru/data + - ./linea/mainnet:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-mainnet-erigon3-pruned-trace: + linea-mainnet-erigon3-pruned-trace_maru: x-upstreams: - id: $${ID} diff --git a/linea/erigon3/linea-sepolia-erigon3-archive-trace.yml b/linea/erigon3/linea-sepolia-erigon3-archive-trace.yml index 543d9617..7398af79 100644 --- a/linea/erigon3/linea-sepolia-erigon3-archive-trace.yml +++ b/linea/erigon3/linea-sepolia-erigon3-archive-trace.yml @@ -61,6 +61,7 @@ services: - --bootnodes=enode://6f20afbe4397e51b717a7c1ad3095e79aee48c835eebd9237a3e8a16951ade1fe0e66e981e30ea269849fcb6ba03d838da37f524fabd2a557474194a2e2604fa@18.221.100.27:31002,enode://ce1e0d8e0500cb5c0ac56bdcdafb2d6320c3a2c5125b5ccf12f5dfc9b47ee74acbcafc32559017613136c9c36a0ce74ba4f83b7fb8244f099f3b15708d9d3129@3.23.75.47:31000,enode://1b026a5eb0ae74300f58987d235ef0e3a550df963345cb3574be3b0b54378bd11f14dfd515a8976f2c2d2826090e9507b8ccc24f896a9ffffffcabcfd996a733@3.129.120.128:31001 - --datadir=/root/.local/share/erigon - --db.size.limit=600GB + - --externalcl=true - --http - --http.addr=0.0.0.0 - --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,ots @@ -90,6 +91,7 @@ services: volumes: - ${LINEA_SEPOLIA_ERIGON3_ARCHIVE_TRACE_DATA:-linea-sepolia-erigon3-archive-trace}:/root/.local/share/erigon - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -106,8 +108,44 @@ services: - traefik.http.routers.linea-sepolia-erigon3-archive-trace.middlewares=linea-sepolia-erigon3-archive-trace-stripprefix, ipallowlist shm_size: 2gb + linea-sepolia-erigon3-archive-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_SEPOLIA_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_SEPOLIA_MARU_VERSION:-bcfdb43} + ports: + - 17235:17235 + - 17235:17235/udp + expose: + - 8080 + environment: + - EL_HOST=linea-sepolia-erigon3-archive + - IP=${IP} + - L1_RPC=${ETHEREUM_SEPOLIA_EXECUTION_RPC} + - P2P_PORT=17235 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_SEPOLIA_ERIGON3_ARCHIVE_TRACE__MARU_DATA:-linea-sepolia-erigon3-archive-trace_maru}:/opt/maru/data + - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-sepolia-erigon3-archive-trace: + linea-sepolia-erigon3-archive-trace_maru: x-upstreams: - id: $${ID} diff --git a/linea/erigon3/linea-sepolia-erigon3-minimal-trace.yml b/linea/erigon3/linea-sepolia-erigon3-minimal-trace.yml index 51c5bdc7..1c99e2b8 100644 --- a/linea/erigon3/linea-sepolia-erigon3-minimal-trace.yml +++ b/linea/erigon3/linea-sepolia-erigon3-minimal-trace.yml @@ -61,6 +61,7 @@ services: - --bootnodes=enode://6f20afbe4397e51b717a7c1ad3095e79aee48c835eebd9237a3e8a16951ade1fe0e66e981e30ea269849fcb6ba03d838da37f524fabd2a557474194a2e2604fa@18.221.100.27:31002,enode://ce1e0d8e0500cb5c0ac56bdcdafb2d6320c3a2c5125b5ccf12f5dfc9b47ee74acbcafc32559017613136c9c36a0ce74ba4f83b7fb8244f099f3b15708d9d3129@3.23.75.47:31000,enode://1b026a5eb0ae74300f58987d235ef0e3a550df963345cb3574be3b0b54378bd11f14dfd515a8976f2c2d2826090e9507b8ccc24f896a9ffffffcabcfd996a733@3.129.120.128:31001 - --datadir=/root/.local/share/erigon - --db.size.limit=600GB + - --externalcl=true - --http - --http.addr=0.0.0.0 - --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,ots @@ -91,6 +92,7 @@ services: volumes: - ${LINEA_SEPOLIA_ERIGON3_MINIMAL_TRACE_DATA:-linea-sepolia-erigon3-minimal-trace}:/root/.local/share/erigon - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -107,8 +109,44 @@ services: - traefik.http.routers.linea-sepolia-erigon3-minimal-trace.middlewares=linea-sepolia-erigon3-minimal-trace-stripprefix, ipallowlist shm_size: 2gb + linea-sepolia-erigon3-minimal-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_SEPOLIA_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_SEPOLIA_MARU_VERSION:-bcfdb43} + ports: + - 17410:17410 + - 17410:17410/udp + expose: + - 8080 + environment: + - EL_HOST=linea-sepolia-erigon3-minimal + - IP=${IP} + - L1_RPC=${ETHEREUM_SEPOLIA_EXECUTION_RPC} + - P2P_PORT=17410 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_SEPOLIA_ERIGON3_MINIMAL_TRACE__MARU_DATA:-linea-sepolia-erigon3-minimal-trace_maru}:/opt/maru/data + - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-sepolia-erigon3-minimal-trace: + linea-sepolia-erigon3-minimal-trace_maru: x-upstreams: - id: $${ID} diff --git a/linea/erigon3/linea-sepolia-erigon3-pruned-trace.yml b/linea/erigon3/linea-sepolia-erigon3-pruned-trace.yml index 520eda75..05b43c37 100644 --- a/linea/erigon3/linea-sepolia-erigon3-pruned-trace.yml +++ b/linea/erigon3/linea-sepolia-erigon3-pruned-trace.yml @@ -61,6 +61,7 @@ services: - --bootnodes=enode://6f20afbe4397e51b717a7c1ad3095e79aee48c835eebd9237a3e8a16951ade1fe0e66e981e30ea269849fcb6ba03d838da37f524fabd2a557474194a2e2604fa@18.221.100.27:31002,enode://ce1e0d8e0500cb5c0ac56bdcdafb2d6320c3a2c5125b5ccf12f5dfc9b47ee74acbcafc32559017613136c9c36a0ce74ba4f83b7fb8244f099f3b15708d9d3129@3.23.75.47:31000,enode://1b026a5eb0ae74300f58987d235ef0e3a550df963345cb3574be3b0b54378bd11f14dfd515a8976f2c2d2826090e9507b8ccc24f896a9ffffffcabcfd996a733@3.129.120.128:31001 - --datadir=/root/.local/share/erigon - --db.size.limit=600GB + - --externalcl=true - --http - --http.addr=0.0.0.0 - --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,ots @@ -90,6 +91,7 @@ services: volumes: - ${LINEA_SEPOLIA_ERIGON3_PRUNED_TRACE_DATA:-linea-sepolia-erigon3-pruned-trace}:/root/.local/share/erigon - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro - /slowdisk:/slowdisk logging: *logging-defaults labels: @@ -106,8 +108,44 @@ services: - traefik.http.routers.linea-sepolia-erigon3-pruned-trace.middlewares=linea-sepolia-erigon3-pruned-trace-stripprefix, ipallowlist shm_size: 2gb + linea-sepolia-erigon3-node: + build: + context: ./linea + dockerfile: maru.Dockerfile + args: + MARU_IMAGE: ${LINEA_SEPOLIA_MARU_IMAGE:-consensys/maru} + MARU_VERSION: ${LINEA_SEPOLIA_MARU_VERSION:-bcfdb43} + ports: + - 15620:15620 + - 15620:15620/udp + expose: + - 8080 + environment: + - EL_HOST=linea-sepolia-erigon3 + - IP=${IP} + - L1_RPC=${ETHEREUM_SEPOLIA_EXECUTION_RPC} + - P2P_PORT=15620 + entrypoint: [/bin/bash, -c] + command: + - | + envsubst < /config/maru/config.toml.template > /config.toml + exec java -Dlog4j2.configurationFile=/config/maru/log4j.xml -jar /opt/consensys/maru/maru.jar --config=/config.toml --maru-genesis-file=/config/maru/genesis.json "$@" + restart: unless-stopped + networks: + - chains + volumes: + - ${LINEA_SEPOLIA_ERIGON3_PRUNED_TRACE__MARU_DATA:-linea-sepolia-erigon3-pruned-trace_maru}:/opt/maru/data + - ./linea/sepolia:/config + - .jwtsecret:/jwtsecret:ro + logging: *logging-defaults + labels: + - prometheus-scrape.enabled=true + - prometheus-scrape.port=9090 + - prometheus-scrape.path=/debug/metrics/prometheus + volumes: linea-sepolia-erigon3-pruned-trace: + linea-sepolia-erigon3-pruned-trace_maru: x-upstreams: - id: $${ID} diff --git a/linea/mainnet/maru/config.toml.template b/linea/mainnet/maru/config.toml.template new file mode 100644 index 00000000..17457ba2 --- /dev/null +++ b/linea/mainnet/maru/config.toml.template @@ -0,0 +1,54 @@ +# Uncomment the below [linea] section for finalized L2 block tag +[linea] +contract-address = "0xd19d4B5d358258f05D7B411E21A1460D11B0876F" +l1-eth-api = { endpoint = "${L1_RPC}" } +l1-polling-interval = "6 seconds" +l1-highest-block-tag = "finalized" + +[persistence] +data-path = "/opt/maru/data" +private-key-path = "/opt/maru/private-key" + +[p2p] +port = ${P2P_PORT} # Default port (can be same as discovery) +ip-address = "0.0.0.0" +static-peers = [ + "/ip4/18.223.198.165/tcp/31005/p2p/16Uiu2HAmSJSpgBxVoMcRZ4u8CQbTgfPrbw6u7xH1BnMgwAQZAm91", + "/ip4/18.190.136.59/tcp/31006/p2p/16Uiu2HAm5DpcTYVLzZf45unDDrY9wYVbqeFnPo4CrpnF3tyXV3o8", + "/ip4/13.50.94.193/tcp/31003/p2p/16Uiu2HAmVcX8oB9KxmJdVAGybMyxuqtbY959i6uaew1agDBv9wk3", + "/ip4/3.1.142.64/tcp/31000/p2p/16Uiu2HAkuaxfz8ftqSSfG6hKG7B7MCUD9boXvawxKXz9eq7R6Tmi", + "/ip4/52.77.66.99/tcp/31001/p2p/16Uiu2HAmGNP9fqUnfCb5v8VAWczW12qmsEnYhNUw2v652Px9Kz5V" +] +reconnect-delay = "500ms" + +[p2p.discovery] +port = ${P2P_PORT} +advertise-ip = ${IP} + +[payload-validator] +# Besu and Geth node as execution layer client +engine-api-endpoint = { endpoint = "http://${EL_HOST}:8551", jwt-secret-path = "/jwtsecret" } +eth-api-endpoint = { endpoint = "http://${EL_HOST}:8545" } +payload-validation-enabled = false + +[observability] +port = 9090 +jvm-metrics-enabled = true +prometheus-metrics-enabled = true + +[api] +port = 8080 + +[syncing] +peer-chain-height-polling-interval = "5s" +el-sync-status-refresh-interval = "5s" +sync-target-selection = "Highest" +desync-tolerance = 0 + +[syncing.download] +block-range-request-timeout = "10s" +blocks-batch-size = 10 +blocks-parallelism = 10 +max-retries = 5 +backoff-delay = "1s" +use-unconditional-random-download-peer = false \ No newline at end of file diff --git a/linea/mainnet/maru/genesis.json b/linea/mainnet/maru/genesis.json new file mode 100644 index 00000000..b7820e20 --- /dev/null +++ b/linea/mainnet/maru/genesis.json @@ -0,0 +1,20 @@ +{ + "chainId": 59144, + "config": { + "0": { + "type": "difficultyAwareQbft", + "blockTimeSeconds": 1, + "postTtdConfig": { + "validatorSet": ["0x9f31730181441beb67b10efaed5773767ea959bc"], + "elFork": "Paris" + }, + "terminalTotalDifficulty": 49575263 + }, + "1761213600": { + "type": "qbft", + "validatorSet": ["0x9f31730181441beb67b10efaed5773767ea959bc"], + "blockTimeSeconds": 1, + "elFork": "Shanghai" + } + } + } \ No newline at end of file diff --git a/linea/mainnet/maru/log4j.xml b/linea/mainnet/maru/log4j.xml new file mode 100644 index 00000000..adeac6ad --- /dev/null +++ b/linea/mainnet/maru/log4j.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/linea/maru.Dockerfile b/linea/maru.Dockerfile new file mode 100644 index 00000000..8db71865 --- /dev/null +++ b/linea/maru.Dockerfile @@ -0,0 +1,5 @@ +ARG MARU_IMAGE=consensys/maru +ARG MARU_VERSION=bcfdb4 +FROM ${MARU_IMAGE}:${MARU_VERSION} + +RUN apt-get update && apt-get install -y gettext && rm -rf /var/lib/apt/lists/* \ No newline at end of file diff --git a/linea/sepolia/maru.toml b/linea/sepolia/maru/config.toml.template similarity index 53% rename from linea/sepolia/maru.toml rename to linea/sepolia/maru/config.toml.template index 99a6e0a3..923546a1 100644 --- a/linea/sepolia/maru.toml +++ b/linea/sepolia/maru/config.toml.template @@ -1,29 +1,33 @@ -# IMPORTANT: No [qbft] section = follower node (not validator) - +# Uncomment the below [linea] section for finalized L2 block tag [linea] contract-address = "0xB218f8A4Bc926cF1cA7b3423c154a0D627Bdb7E5" -l1-eth-api = { endpoint = "" } +l1-eth-api = { endpoint = "${L1_RPC}" } l1-polling-interval = "6 seconds" l1-highest-block-tag = "finalized" [persistence] -data-path = "/opt/maru/data" +data-path = "/opt/maru/data" private-key-path = "/opt/maru/private-key" [p2p] -port = 9000 # Default port (can be same as discovery) +port = ${P2P_PORT} # Default port (can be same as discovery) ip-address = "0.0.0.0" -static-peers = ["/ip4/3.129.120.128/tcp/31005/p2p/16Uiu2HAmR33t8RZiAHovuH9iH2UuUrajrbfyYowiYDAQo3D5Y9wg", "/ip4/3.129.120.128/tcp/31006/p2p/16Uiu2HAm9HB5oNmnmj8yY6T7dfhLVidVzYqa8QVDtEthkMr6b8tx"] +static-peers = [ + "/ip4/3.129.120.128/tcp/31005/p2p/16Uiu2HAmR33t8RZiAHovuH9iH2UuUrajrbfyYowiYDAQo3D5Y9wg", + "/ip4/3.129.120.128/tcp/31006/p2p/16Uiu2HAm9HB5oNmnmj8yY6T7dfhLVidVzYqa8QVDtEthkMr6b8tx" +] reconnect-delay = "500ms" [p2p.discovery] -port = 9000 -bootnodes = [] +port = ${P2P_PORT} +advertise-ip = ${IP} refresh-interval = "3s" [payload-validator] -engine-api-endpoint = { endpoint = "http://linea-besu:8550" } # Match Besu port! -eth-api-endpoint = { endpoint = "http://linea-besu:8545" } +# Besu and Geth node as execution layer client +engine-api-endpoint = { endpoint = "http://${EL_HOST}:8551", jwt-secret-path = "/jwtsecret" } +eth-api-endpoint = { endpoint = "http://${EL_HOST}:8545" } +payload-validation-enabled = false [observability] port = 9090 diff --git a/linea/sepolia/maru-genesis.json b/linea/sepolia/maru/genesis.json similarity index 100% rename from linea/sepolia/maru-genesis.json rename to linea/sepolia/maru/genesis.json diff --git a/linea/sepolia/maru/log4j.xml b/linea/sepolia/maru/log4j.xml new file mode 100644 index 00000000..adeac6ad --- /dev/null +++ b/linea/sepolia/maru/log4j.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file