Compare commits

...

26 Commits

Author SHA1 Message Date
9f0a7b2b9d worldchain-mainnet: add --strip-components=1 to snapshot-finish extract
The reth_full.tar.lz4 archive has a top-level reth/ directory; without
strip-components, extraction nests db/ under reth/ and wastes hours on
re-extraction (reseed.sh already had the flag).
2026-07-07 06:52:47 +00:00
41d4dd0d5c deploy: regenerate compose from vibe-node main 218c002b232e 2026-07-07 06:00:03 +00:00
33ea38b8d9 mode: add optimism.eip1559DenominatorCanyon=250 to mainnet genesis
Canyon-fork EIP-1559 denominator, present in the authoritative genesis
on rpc-de-32 but missing from the committed copy. Matches the fork-time
addition in d4fc9487.
2026-07-07 01:02:48 +00:00
d4fc948794 mode: add mainnet L2 fork times to genesis.json config
Add the post-Regolith OP-stack fork activation timestamps (canyon through
karst) to op/mode/mainnet/genesis.json, sourced from the authoritative
copy running on rpc-de-32 (sha256 ea320f6a). The committed genesis was
missing every fork time after regolithTime, so op-reth could not apply
the L2 hardfork schedule.

canyonTime=shanghaiTime=1704992401, deltaTime=1708560000,
ecotoneTime=1710374401, fjordTime=1720627201, graniteTime=1726070401,
holoceneTime=1736445601, isthmusTime=1746806401, jovianTime=1764691201,
karstTime=1783526401.
2026-07-06 15:39:48 +00:00
goldsquid
6ec29db531 fix 2026-07-06 22:24:00 +07:00
goldsquid
c14a357773 reth for mode 2026-07-06 22:02:42 +07:00
a397561afa ethereum: bump prysm v7.1.4 → v7.1.6 on mainnet only
Update Prysm beacon-chain image default for ethereum mainnet profiles
(geth pruned/minimal + reth trace); sepolia and hoodi remain on v7.1.4.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-06 14:38:43 +00:00
57db6a16fa multicurl: fix cat: '': No such file or directory when called without -o
$temp_file is only created when curl is invoked with -o (the -o loop
above), but the post-success null/error check always ran `cat "$temp_file"`.
When a caller omits -o (e.g. check-health.sh's Cosmos reference RPC), the
variable is empty, so bash executed `cat ""` and printed
"cat: '': No such file or directory" — once per show-status run.

In that no-o case the body is already captured in $output, so read the
response from $output when $temp_file is unset, and from $temp_file when
it exists. Behaviour with -o is unchanged; the result==null / JSON-RPC
error skip-to-next-URL fallback is preserved in both paths.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 14:00:30 +00:00
goldsquid
ea15f31844 fix 2026-07-06 20:53:10 +07:00
6d41b16150 deploy: regenerate compose from vibe-node main c828f26e351e 2026-07-06 13:35:00 +00:00
goldsquid
dec01b5a18 fix 2026-07-06 20:20:48 +07:00
goldsquid
5b33030773 fix 2026-07-06 20:10:56 +07:00
c83f2cc5de deploy: regenerate compose from vibe-node main 8ef91b9ce256 2026-07-06 13:04:10 +00:00
goldsquid
ce7f278f77 fix 2026-07-06 19:56:34 +07:00
goldsquid
d9072c7b4d fix 2026-07-06 19:34:01 +07:00
goldsquid
0e4b69c65d fix 2026-07-06 19:29:29 +07:00
goldsquid
27b33458de better discovery 2026-07-06 19:27:39 +07:00
8684fbb96b katana mainnet op-reth: execution-layer sync + conduit bootnodes
op-node env (env/op/katana/mainnet/node.env):
- OP_NODE_SYNCMODE: consensus-layer -> execution-layer
- add OP_NODE_SYNCMODE_OFFSET_EL_SAFE=12h
- add OP_NODE_P2P_BOOTNODES (conduit katana bootnodes)
- drop OP_NODE_L2_SKIP_SYNC_START_CHECK=true (global default false applies)

Regenerates katana-mainnet-op-reth-pruned-trace + -archive-trace.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 11:04:20 +00:00
2418c15d52 deploy: regenerate compose from vibe-node main f045d7a27b13 2026-07-06 09:32:53 +00:00
1760023975 sonic: bump Dockerfile Go base image 1.24 -> 1.26 for v2.2.0
v2.2.0 requires go 1.26.0 per upstream go.mod.
2026-07-06 01:58:26 +00:00
cf6fda7fa6 deploy: regenerate compose from vibe-node main 16db41852a31 2026-07-06 00:34:02 +00:00
goldsquid
a498b12b45 fix 2026-07-06 07:29:12 +07:00
55df34de69 ronin-saigon op-reth: op-node consensus-layer CL-sync (SKIP_SYNC_START_CHECK=true)
Match ronin-mainnet's EigenDA alt-DA recipe on both saigon profiles
(archive-trace + pruned-trace): OP_NODE_SYNCMODE execution-layer ->
consensus-layer and OP_NODE_L2_SKIP_SYNC_START_CHECK false -> true.
Hand-maintained edit (these CL-sync flags are not template-driven);
do NOT regenerate saigon via update.sh or it reverts. Mainnet untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-06 00:21:39 +00:00
6311aeae0b deploy: regenerate compose from vibe-node main 6463a06bc49f 2026-07-05 14:23:54 +00:00
f1661bd650 op/bnb,op/manta-pacific,op/blast: remove non-migratable kona compose profiles
Custom op-node forks on these chains cannot run kona-node; drop the
orphaned --kona.yml compose files and registry entries.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 09:37:06 +00:00
8bd024823b Remove broken kona-node variants for diverged OP chains; add worldchain reth+kona
Drop --kona compose profiles for base, fraxtal, zircuit, xlayer, and superseed
where kona-node v1.6.1 stalls or hash-mismatches on custom rollups. Add
worldchain-mainnet-op-reth-pruned-trace--kona for the planned geth→reth+kona swap.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 07:22:04 +00:00
125 changed files with 829 additions and 9732 deletions

View File

@@ -82,6 +82,7 @@ services:
- --auth-ipc.path=/sockets/auth.ipc
- --chain=arc-mainnet
- --datadir=/data/execution
- --debug
- --disable-discovery
- --enable-arc-rpc
- --http
@@ -92,6 +93,7 @@ services:
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --rpc.forwarder=https://rpc.arc.network/
- --trace
restart: unless-stopped
stop_grace_period: 5m
depends_on:

View File

@@ -82,6 +82,7 @@ services:
- --auth-ipc.path=/sockets/auth.ipc
- --chain=arc-mainnet
- --datadir=/data/execution
- --debug
- --disable-discovery
- --enable-arc-rpc
- --full
@@ -93,6 +94,7 @@ services:
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --rpc.forwarder=https://rpc.arc.network/
- --trace
restart: unless-stopped
stop_grace_period: 5m
depends_on:

View File

@@ -82,6 +82,7 @@ services:
- --auth-ipc.path=/sockets/auth.ipc
- --chain=arc-testnet
- --datadir=/data/execution
- --debug
- --disable-discovery
- --enable-arc-rpc
- --http
@@ -92,6 +93,7 @@ services:
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --rpc.forwarder=https://rpc.quicknode.testnet.arc.network/
- --trace
restart: unless-stopped
stop_grace_period: 5m
depends_on:

View File

@@ -82,6 +82,7 @@ services:
- --auth-ipc.path=/sockets/auth.ipc
- --chain=arc-testnet
- --datadir=/data/execution
- --debug
- --disable-discovery
- --enable-arc-rpc
- --full
@@ -93,6 +94,7 @@ services:
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --rpc.forwarder=https://rpc.quicknode.testnet.arc.network/
- --trace
restart: unless-stopped
stop_grace_period: 5m
depends_on:

View File

@@ -0,0 +1,182 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:arc/reth/arc-testnet-reth-pruned.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/arc-testnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
arc-testnet-consensus-init:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.7.2}
user: 0:0
entrypoint: [/usr/local/bin/arc-node-consensus, init]
command:
- --home=/data/consensus
restart: no
networks:
- chains
volumes:
- ${ARC_TESTNET_RETH_PRUNED_CONSENSUS_DATA:-arc-testnet-reth-pruned-consensus}:/data/consensus
logging: *logging-defaults
arc-testnet-sockets-init:
image: debian:bookworm-slim
entrypoint: [/bin/sh, -c]
command: [rm -f /sockets/*.ipc && chown 999:999 /sockets]
restart: no
depends_on:
arc-testnet-consensus-init:
condition: service_completed_successfully
networks:
- chains
volumes:
- arc-testnet-reth-pruned-sockets:/sockets
logging: *logging-defaults
arc-testnet:
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_TESTNET_RETH_VERSION:-0.7.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: 0:0
expose:
- 8545
- 9001
entrypoint: [/usr/local/bin/arc-node-execution, node]
command:
- --auth-ipc
- --auth-ipc.path=/sockets/auth.ipc
- --chain=arc-testnet
- --datadir=/data/execution
- --disable-discovery
- --enable-arc-rpc
- --full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,txpool,trace,debug
- --http.port=8545
- --ipcpath=/sockets/reth.ipc
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --rpc.forwarder=https://rpc.quicknode.testnet.arc.network/
restart: unless-stopped
stop_grace_period: 5m
depends_on:
arc-testnet-sockets-init:
condition: service_completed_successfully
networks:
- chains
volumes:
- ${ARC_TESTNET_RETH_PRUNED_EXECUTION_DATA:-arc-testnet-reth-pruned-execution}:/data/execution
- /slowdisk:/slowdisk
- arc-testnet-reth-pruned-sockets:/sockets
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.arc-testnet-reth-pruned-stripprefix.stripprefix.prefixes=/arc-testnet
- traefik.http.services.arc-testnet-reth-pruned.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.arc-testnet-reth-pruned.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.arc-testnet-reth-pruned.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.arc-testnet-reth-pruned.rule=Host(`$DOMAIN`) && (Path(`/arc-testnet`) || Path(`/arc-testnet/`))}
- ${NO_SSL:+traefik.http.routers.arc-testnet-reth-pruned.rule=Path(`/arc-testnet`) || Path(`/arc-testnet/`)}
- traefik.http.routers.arc-testnet-reth-pruned.middlewares=arc-testnet-reth-pruned-stripprefix, ipallowlist
shm_size: 2gb
arc-testnet-node:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.7.2}
user: 0:0
expose:
- 31000
- 29000
entrypoint: [/usr/local/bin/arc-node-consensus, start]
command:
- --eth-socket=/sockets/reth.ipc
- --execution-persistence-backpressure
- --execution-persistence-backpressure-threshold=200
- --execution-socket=/sockets/auth.ipc
- --follow
- --follow.endpoint=https://rpc.quicknode.testnet.arc.network,wss=rpc.quicknode.testnet.arc.network
- --follow.endpoint=https://rpc.drpc.testnet.arc.network,wss=rpc.drpc.testnet.arc.network
- --follow.endpoint=https://rpc.blockdaemon.testnet.arc.network,wss=rpc.blockdaemon.testnet.arc.network/websocket
- --full
- --home=/data/consensus
- --metrics=0.0.0.0:29000
- --rpc.addr=0.0.0.0:31000
restart: unless-stopped
stop_grace_period: 5m
depends_on:
arc-testnet-consensus-init:
condition: service_completed_successfully
arc-testnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ${ARC_TESTNET_RETH_PRUNED_CONSENSUS_DATA:-arc-testnet-reth-pruned-consensus}:/data/consensus
- arc-testnet-reth-pruned-sockets:/sockets
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=29000
volumes:
arc-testnet-reth-pruned-consensus:
arc-testnet-reth-pruned-execution:
arc-testnet-reth-pruned-sockets:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
chain: arc-testnet
method-groups:
enabled:
- debug
- filter
- trace
methods:
enabled:
- name: txpool_content
...

View File

@@ -61,7 +61,7 @@ x-logging-defaults: &logging-defaults
services:
berachain-bepolia-reth:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.1}
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -61,7 +61,7 @@ x-logging-defaults: &logging-defaults
services:
berachain-bepolia-reth-pruned:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.1}
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

File diff suppressed because it is too large Load Diff

View File

@@ -107,7 +107,7 @@ services:
- traefik.http.routers.ethereum-mainnet-geth-minimal-pebble-path.middlewares=ethereum-mainnet-geth-minimal-pebble-path-stripprefix, ipallowlist
ethereum-mainnet-geth-minimal-node:
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.4}
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.6}
ports:
- 19551:19551
- 19551:19551/udp

View File

@@ -103,7 +103,7 @@ services:
- traefik.http.routers.ethereum-mainnet-geth-pruned-pebble-path.middlewares=ethereum-mainnet-geth-pruned-pebble-path-stripprefix, ipallowlist
ethereum-mainnet-geth-node:
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.4}
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.6}
ports:
- 17023:17023
- 17023:17023/udp

View File

@@ -108,7 +108,7 @@ services:
shm_size: 2gb
ethereum-mainnet-reth-node:
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.4}
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.6}
ports:
- 19563:19563
- 19563:19563/udp

View File

@@ -109,7 +109,7 @@ services:
shm_size: 2gb
ethereum-mainnet-reth-pruned-node:
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.4}
image: ${ETHEREUM_PRYSM_IMAGE:-prysmaticlabs/prysm-beacon-chain}:${ETHEREUM_MAINNET_PRYSM_VERSION:-v7.1.6}
ports:
- 15150:15150
- 15150:15150/udp

View File

@@ -134,6 +134,28 @@ x-upstreams:
- filter
methods:
disabled:
# v2.2.0 removed Go profiling/runtime debug namespace methods
- name: debug_verbosity
- name: debug_vmodule
- name: debug_memStats
- name: debug_gcStats
- name: debug_cpuProfile
- name: debug_startCPUProfile
- name: debug_stopCPUProfile
- name: debug_goTrace
- name: debug_startGoTrace
- name: debug_stopGoTrace
- name: debug_blockProfile
- name: debug_setBlockProfileRate
- name: debug_writeBlockProfile
- name: debug_mutexProfile
- name: debug_setMutexProfileFraction
- name: debug_writeMutexProfile
- name: debug_writeMemProfile
- name: debug_stacks
- name: debug_freeOSMemory
- name: debug_setGCPercent
- name: debug_setMemoryLimit
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only

View File

@@ -134,6 +134,28 @@ x-upstreams:
- filter
methods:
disabled:
# v2.2.0 removed Go profiling/runtime debug namespace methods
- name: debug_verbosity
- name: debug_vmodule
- name: debug_memStats
- name: debug_gcStats
- name: debug_cpuProfile
- name: debug_startCPUProfile
- name: debug_stopCPUProfile
- name: debug_goTrace
- name: debug_startGoTrace
- name: debug_stopGoTrace
- name: debug_blockProfile
- name: debug_setBlockProfileRate
- name: debug_writeBlockProfile
- name: debug_mutexProfile
- name: debug_setMutexProfileFraction
- name: debug_writeMutexProfile
- name: debug_writeMemProfile
- name: debug_stacks
- name: debug_freeOSMemory
- name: debug_setGCPercent
- name: debug_setMemoryLimit
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only

View File

@@ -47,7 +47,14 @@ for url in "${urls[@]}"; do
# null result (a lagging endpoint that doesn't have the requested block/data yet).
# Without the result==null check the first endpoint's {"result":null} was accepted as
# success and the remaining fallback URLs were never tried.
if cat "$temp_file" | jq -e 'has("error") or (.result == null)' > /dev/null 2>&1; then
# $temp_file only exists when curl was called with -o (see the -o loop above).
# When a caller omits -o, the body is already in $output, so reading cat "" would
# emit "cat: '': No such file or directory". Read from whichever place holds the body.
response_body="$output"
if [ -n "$temp_file" ]; then
response_body=$(cat "$temp_file")
fi
if echo "$response_body" | jq -e 'has("error") or (.result == null)' > /dev/null 2>&1; then
continue # Try the next URL
fi

View File

@@ -1,203 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/erigon/base-mainnet-op-erigon-archive-trace--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-mainnet-op-erigon \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-mainnet-op-erigon:
image: ${BASE_ERIGON_IMAGE:-testinprod/op-erigon}:${BASE_MAINNET_ERIGON_VERSION:-v2.61.3-0.10.1}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 13092:13092
- 13092:13092/udp
- 33092:33092
- 33092:33092/udp
- 38092:38092
- 38092:38092/udp
expose:
- 8545
- 6060
- 8551
entrypoint: [erigon]
command:
- --chain=base-mainnet
- --datadir=/root/.local/share/erigon
- --db.size.limit=8TB
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --p2p.allowed-ports=33092
- --p2p.allowed-ports=38092
- --port=13092
- --rollup.sequencerhttp=https://mainnet-sequencer.base.org
- --rpc.gascap=6000000000
- --rpc.returndata.limit=1500000
- --http
- --http.addr=0.0.0.0
- --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_MAINNET_OP_ERIGON_ARCHIVE_TRACE_DATA:-base-mainnet-op-erigon-archive-trace}:/root/.local/share/erigon
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-erigon-archive-trace-stripprefix.stripprefix.prefixes=/base-mainnet-op-erigon
- traefik.http.services.base-mainnet-op-erigon-archive-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-erigon-archive-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-erigon-archive-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-erigon-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/base-mainnet-op-erigon`) || Path(`/base-mainnet-op-erigon/`))}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-erigon-archive-trace.rule=Path(`/base-mainnet-op-erigon`) || Path(`/base-mainnet-op-erigon/`)}
- traefik.http.routers.base-mainnet-op-erigon-archive-trace.middlewares=base-mainnet-op-erigon-archive-trace-stripprefix, ipallowlist
shm_size: 2gb
base-mainnet-op-erigon-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 18092:18092
- 18092:18092/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=8453
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-mainnet-op-erigon:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18092
- KONA_NODE_P2P_LISTEN_UDP_PORT=18092
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-mainnet-op-erigon:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-erigon-archive-trace-node-stripprefix.stripprefix.prefixes=/base-mainnet-op-erigon/node
- traefik.http.services.base-mainnet-op-erigon-archive-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-erigon-archive-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-erigon-archive-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-erigon-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-mainnet-op-erigon/node`)}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-erigon-archive-trace-node.rule=PathPrefix(`/base-mainnet-op-erigon/node`)}
- traefik.http.routers.base-mainnet-op-erigon-archive-trace-node.middlewares=base-mainnet-op-erigon-archive-trace-node-stripprefix, ipallowlist
volumes:
base-mainnet-op-erigon-archive-trace:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
# non standard erigon only
- name: eth_getBlockReceipts
- name: eth_protocolVersion
- name: eth_callMany
- name: eth_callBundle
- name: debug_accountAt
- name: debug_traceCallMany
- name: erigon_getHeaderByHash
- name: erigon_getBlockReceiptsByBlockHash
- name: erigon_getHeaderByNumber
- name: erigon_getLogsByHash
- name: erigon_forks
- name: erigon_getBlockByTimestamp
- name: erigon_BlockNumber
- name: erigon_getLatestLogs
...

View File

@@ -1,203 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/erigon/base-sepolia-op-erigon-archive-trace--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-sepolia-op-erigon \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-sepolia-op-erigon:
image: ${BASE_ERIGON_IMAGE:-testinprod/op-erigon}:${BASE_SEPOLIA_ERIGON_VERSION:-v2.61.3-0.10.1}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 13487:13487
- 13487:13487/udp
- 33487:33487
- 33487:33487/udp
- 38487:38487
- 38487:38487/udp
expose:
- 8545
- 6060
- 8551
entrypoint: [erigon]
command:
- --chain=base-sepolia
- --datadir=/root/.local/share/erigon
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --p2p.allowed-ports=33487
- --p2p.allowed-ports=38487
- --port=13487
- --rollup.sequencerhttp=https://sepolia-sequencer.base.org
- --rpc.gascap=6000000000
- --rpc.returndata.limit=1500000
- --http
- --http.addr=0.0.0.0
- --http.api=eth,erigon,web3,net,debug,trace,txpool,admin,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_SEPOLIA_OP_ERIGON_ARCHIVE_TRACE_DATA:-base-sepolia-op-erigon-archive-trace}:/root/.local/share/erigon
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-erigon-archive-trace-stripprefix.stripprefix.prefixes=/base-sepolia-op-erigon
- traefik.http.services.base-sepolia-op-erigon-archive-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-erigon-archive-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-erigon-archive-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-erigon-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/base-sepolia-op-erigon`) || Path(`/base-sepolia-op-erigon/`))}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-erigon-archive-trace.rule=Path(`/base-sepolia-op-erigon`) || Path(`/base-sepolia-op-erigon/`)}
- traefik.http.routers.base-sepolia-op-erigon-archive-trace.middlewares=base-sepolia-op-erigon-archive-trace-stripprefix, ipallowlist
shm_size: 2gb
base-sepolia-op-erigon-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 18487:18487
- 18487:18487/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=84532
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-sepolia-op-erigon:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18487
- KONA_NODE_P2P_LISTEN_UDP_PORT=18487
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-sepolia-op-erigon:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-erigon-archive-trace-node-stripprefix.stripprefix.prefixes=/base-sepolia-op-erigon/node
- traefik.http.services.base-sepolia-op-erigon-archive-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-erigon-archive-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-erigon-archive-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-erigon-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-sepolia-op-erigon/node`)}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-erigon-archive-trace-node.rule=PathPrefix(`/base-sepolia-op-erigon/node`)}
- traefik.http.routers.base-sepolia-op-erigon-archive-trace-node.middlewares=base-sepolia-op-erigon-archive-trace-node-stripprefix, ipallowlist
volumes:
base-sepolia-op-erigon-archive-trace:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base-sepolia
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
# non standard erigon only
- name: eth_getBlockReceipts
- name: eth_protocolVersion
- name: eth_callMany
- name: eth_callBundle
- name: debug_accountAt
- name: debug_traceCallMany
- name: erigon_getHeaderByHash
- name: erigon_getBlockReceiptsByBlockHash
- name: erigon_getHeaderByNumber
- name: erigon_getLogsByHash
- name: erigon_forks
- name: erigon_getBlockByTimestamp
- name: erigon_BlockNumber
- name: erigon_getLatestLogs
...

View File

@@ -65,10 +65,9 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --nodiscover
- --p2p.allowed-ports=33212
- --p2p.allowed-ports=38212
- --port=13212
- --rollup.sequencerhttp=https://sepolia.mode.network
- --rpc.gascap=6000000000
- --rpc.returndata.limit=1500000

View File

@@ -65,10 +65,9 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --nodiscover
- --p2p.allowed-ports=33212
- --p2p.allowed-ports=38212
- --port=13212
- --rollup.sequencerhttp=https://sepolia.mode.network
- --rpc.gascap=6000000000
- --rpc.returndata.limit=1500000
@@ -116,6 +115,7 @@ services:
- OP_NODE_L1_ETH_RPC=${MODE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L1_TRUST_RPC=false
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_KIND=erigon
- OP_NODE_L2_ENGINE_RPC=http://mode-sepolia-op-erigon:8551
@@ -135,7 +135,7 @@ services:
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=execution-layer
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -1,196 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/base-mainnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-mainnet-archive:
image: ${BASE_GETH_IMAGE:-ghcr.io/base/node-geth}:${BASE_MAINNET_GETH_VERSION:-v0.15.6}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13596:13596
- 13596:13596/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OP_NETWORK=base-mainnet
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://mainnet-sequencer.base.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=13596
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_MAINNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-base-mainnet-op-geth-archive-leveldb-hash}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/base-mainnet-archive
- traefik.http.services.base-mainnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/base-mainnet-archive`) || Path(`/base-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash.rule=Path(`/base-mainnet-archive`) || Path(`/base-mainnet-archive/`)}
- traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash.middlewares=base-mainnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
base-mainnet-archive-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 18596:18596
- 18596:18596/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=8453
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18596
- KONA_NODE_P2P_LISTEN_UDP_PORT=18596
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/base-mainnet-archive/node
- traefik.http.services.base-mainnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/base-mainnet-archive/node`)}
- traefik.http.routers.base-mainnet-op-geth-archive-leveldb-hash-node.middlewares=base-mainnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
base-mainnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,263 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/base-mainnet-op-geth-pruned-pebble-path--kona--fireeth.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-mainnet:
image: ${BASE_FIREETH_IMAGE:-ghcr.io/streamingfast/go-ethereum}:${BASE_MAINNET_FIREETH_VERSION:-v2.12.4-optimism-v1.101511.0-op-node.v1.13.3-1}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 11422:11422
- 11422:11422/udp
expose:
- 8545
- 6060
- 8551
- 10010
environment:
- GETH_OP_NETWORK=base-mainnet
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://mainnet-sequencer.base.org
entrypoint: [sh, -c, exec fireeth start reader-node --reader-node-arguments "$*", _]
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=11422
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=full
- --vmtrace=firehose
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_MAINNET_FIREETH_DATA:-base-mainnet-fireeth}:/app/firehose-data
- ${BASE_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-base-mainnet-op-geth-pruned-pebble-path}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/base-mainnet
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/base-mainnet`) || Path(`/base-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.rule=Path(`/base-mainnet`) || Path(`/base-mainnet/`)}
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.middlewares=base-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
base-mainnet-firehose:
image: ${BASE_FIREETH_IMAGE:-ghcr.io/streamingfast/go-ethereum}:${BASE_MAINNET_FIREETH_VERSION:-v2.12.4-optimism-v1.101511.0-op-node.v1.13.3-1}
expose:
- 10015
- 10014
environment:
- ${BASE_MAINNET_FIREETH_BLOCKS_STORE:-/app/firehose-data/storage/merged-blocks}
entrypoint: [sh, -c, exec fireeth --config-file="" --log-to-file=false start firehose index-builder relayer merger $@, _]
command:
- --firehose-rate-limit-bucket-fill-rate=${BASE_MAINNET_FIREHOSE_RATE_LIMIT_BUCKET_FILL_RATE:-1s}
- --firehose-rate-limit-bucket-size=${BASE_MAINNET_FIREHOSE_RATE_LIMIT_BUCKET_SIZE:-200}
- --log-to-file=false
- --relayer-source=base-mainnet:10010
restart: unless-stopped
depends_on:
- base-mainnet
networks:
- chains
volumes:
- ${BASE_MAINNET_FIREETH_DATA:-base-mainnet-fireeth}:/app/firehose-data
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=false
- traefik.enable=true
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path-firehose.loadbalancer.server.scheme=h2c
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-firehose.service=base-mainnet-op-geth-pruned-pebble-path-firehose
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path-firehose.loadbalancer.server.port=10015
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-firehose.entrypoints=grpc
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-firehose.tls.certresolver=myresolver}
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-firehose.rule=Host(`base-mainnet-firehose.${DOMAIN}`)
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-firehose.middlewares=ipallowlist
base-mainnet-events:
image: ${BASE_FIREETH_IMAGE:-ghcr.io/streamingfast/go-ethereum}:${BASE_MAINNET_FIREETH_VERSION:-v2.12.4-optimism-v1.101511.0-op-node.v1.13.3-1}
expose:
- 10016
entrypoint: [sh, -c, exec fireeth --config-file="" --log-to-file=false start substreams-tier1 substreams-tier2 $@, _]
command:
- --common-live-blocks-addr=base-mainnet-firehose:10014
- --log-to-file=false
- --substreams-block-execution-timeout=${BASE_MAINNET_SUBSTREAMS_BLOCK_EXECUTION_TIMEOUT:-3m0s}
- --substreams-rpc-endpoints=${BASE_MAINNET_EXECUTION_ARCHIVE_RPC}
- --substreams-tier1-max-subrequests=${BASE_MAINNET_SUBSTREAMS_TIER1_MAX_SUBREQUESTS:-4}
restart: unless-stopped
depends_on:
- base-mainnet
networks:
- chains
volumes:
- ${BASE_MAINNET_FIREETH_DATA:-base-mainnet-fireeth}:/app/firehose-data
logging: *logging-defaults
labels:
- traefik.enable=true
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path-events.loadbalancer.server.scheme=h2c
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-events.service=base-mainnet-op-geth-pruned-pebble-path-events
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path-events.loadbalancer.server.port=10016
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-events.entrypoints=grpc
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-events.tls.certresolver=myresolver}
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-events.rule=Host(`base-mainnet-events.${DOMAIN}`)
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-events.middlewares=ipallowlist
base-mainnet-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 16422:16422
- 16422:16422/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=8453
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16422
- KONA_NODE_P2P_LISTEN_UDP_PORT=16422
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/base-mainnet/node
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/base-mainnet/node`)}
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.middlewares=base-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
base-mainnet-op-geth-pruned-pebble-path:
base-mainnet-op-geth-pruned-pebble-path_fireeth:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,198 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/base-mainnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-mainnet:
image: ${BASE_GETH_IMAGE:-ghcr.io/base/node-geth}:${BASE_MAINNET_GETH_VERSION:-v0.15.6}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 11422:11422
- 11422:11422/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OP_NETWORK=base-mainnet
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://mainnet-sequencer.base.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=11422
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-base-mainnet-op-geth-pruned-pebble-path}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/base-mainnet
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/base-mainnet`) || Path(`/base-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.rule=Path(`/base-mainnet`) || Path(`/base-mainnet/`)}
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path.middlewares=base-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
base-mainnet-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 16422:16422
- 16422:16422/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=8453
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16422
- KONA_NODE_P2P_LISTEN_UDP_PORT=16422
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/base-mainnet/node
- traefik.http.services.base-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/base-mainnet/node`)}
- traefik.http.routers.base-mainnet-op-geth-pruned-pebble-path-node.middlewares=base-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
base-mainnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,197 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/base-sepolia-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-sepolia-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-sepolia-archive:
image: ${BASE_GETH_IMAGE:-ghcr.io/base/node-geth}:${BASE_SEPOLIA_GETH_VERSION:-v0.15.6}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 10910:10910
- 10910:10910/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OP_NETWORK=base-sepolia
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://sepolia-sequencer.base.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=10910
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_SEPOLIA_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-base-sepolia-op-geth-archive-leveldb-hash}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/base-sepolia-archive
- traefik.http.services.base-sepolia-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/base-sepolia-archive`) || Path(`/base-sepolia-archive/`))}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash.rule=Path(`/base-sepolia-archive`) || Path(`/base-sepolia-archive/`)}
- traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash.middlewares=base-sepolia-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
base-sepolia-archive-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 15910:15910
- 15910:15910/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=84532
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-sepolia-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15910
- KONA_NODE_P2P_LISTEN_UDP_PORT=15910
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-sepolia-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/base-sepolia-archive/node
- traefik.http.services.base-sepolia-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-sepolia-archive/node`)}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/base-sepolia-archive/node`)}
- traefik.http.routers.base-sepolia-op-geth-archive-leveldb-hash-node.middlewares=base-sepolia-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
base-sepolia-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base-sepolia
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,199 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/base-sepolia-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-sepolia \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-sepolia:
image: ${BASE_GETH_IMAGE:-ghcr.io/base/node-geth}:${BASE_SEPOLIA_GETH_VERSION:-v0.15.6}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 12022:12022
- 12022:12022/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OP_NETWORK=base-sepolia
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://sepolia-sequencer.base.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=12022
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_SEPOLIA_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-base-sepolia-op-geth-pruned-pebble-path}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/base-sepolia
- traefik.http.services.base-sepolia-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/base-sepolia`) || Path(`/base-sepolia/`))}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path.rule=Path(`/base-sepolia`) || Path(`/base-sepolia/`)}
- traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path.middlewares=base-sepolia-op-geth-pruned-pebble-path-stripprefix, ipallowlist
base-sepolia-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 17022:17022
- 17022:17022/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=84532
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-sepolia:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17022
- KONA_NODE_P2P_LISTEN_UDP_PORT=17022
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-sepolia:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/base-sepolia/node
- traefik.http.services.base-sepolia-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-sepolia/node`)}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/base-sepolia/node`)}
- traefik.http.routers.base-sepolia-op-geth-pruned-pebble-path-node.middlewares=base-sepolia-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
base-sepolia-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base-sepolia
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,198 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/blast-mainnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/blast-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
blast-mainnet-archive:
image: ${BLAST_GETH_IMAGE:-blastio/blast-geth}:${BLAST_MAINNET_GETH_VERSION:-mainnet-v1.8.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE=1716843599
- GETH_OVERRIDE_TAIGA=1746612311
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://sequencer.blast.io
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=leveldb --gcmode=archive --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=81457
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BLAST_MAINNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-blast-mainnet-op-geth-archive-leveldb-hash}:/data
- ./op/blast/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.blast-mainnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/blast-mainnet-archive
- traefik.http.services.blast-mainnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/blast-mainnet-archive`) || Path(`/blast-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash.rule=Path(`/blast-mainnet-archive`) || Path(`/blast-mainnet-archive/`)}
- traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash.middlewares=blast-mainnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
blast-mainnet-archive-node:
image: ${BLAST_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BLAST_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 15683:15683
- 15683:15683/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BLAST_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=81457
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://blast-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J64QGwHl9uYLfC_cnmxSA6wQH811nkOWJDWjzxqkEUlJoZHWvI66u-BXgVcPCeMUmg0dBpFQAPotFchG67FHJMZ9OSGAY3d6wevgmlkgnY0gmlwhANizeSHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaECg4pk0cskPAyJ7pOmo9E6RqGBwV-Lex4VS9a3MQvu7PWDdGNwgnZhg3VkcIJ2YQ,enr:-J64QDge2jYBQtcNEpRqmKfci5E5BHAhNBjgv4WSdwH1_wPqbueq2bDj38-TSW8asjy5lJj1Xftui6Or8lnaYFCqCI-GAY3d6wf3gmlkgnY0gmlwhCO2D9yHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaEDo4aCTq7pCEN8om9U5n_VyWdambGnQhwHNwKc8o-OicaDdGNwgnZhg3VkcIJ2YQ
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15683
- KONA_NODE_P2P_LISTEN_UDP_PORT=15683
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
blast-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/blast/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.blast-mainnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/blast-mainnet-archive/node
- traefik.http.services.blast-mainnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/blast-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/blast-mainnet-archive/node`)}
- traefik.http.routers.blast-mainnet-op-geth-archive-leveldb-hash-node.middlewares=blast-mainnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
blast-mainnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: blast
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,198 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/blast-mainnet-op-geth-archive-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/blast-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
blast-mainnet-archive:
image: ${BLAST_GETH_IMAGE:-blastio/blast-geth}:${BLAST_MAINNET_GETH_VERSION:-mainnet-v1.8.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE=1716843599
- GETH_OVERRIDE_TAIGA=1746612311
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://sequencer.blast.io
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=archive --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=81457
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BLAST_MAINNET_OP_GETH_ARCHIVE_PEBBLE_HASH_DATA:-blast-mainnet-op-geth-archive-pebble-hash}:/data
- ./op/blast/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.blast-mainnet-op-geth-archive-pebble-hash-stripprefix.stripprefix.prefixes=/blast-mainnet-archive
- traefik.http.services.blast-mainnet-op-geth-archive-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/blast-mainnet-archive`) || Path(`/blast-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash.rule=Path(`/blast-mainnet-archive`) || Path(`/blast-mainnet-archive/`)}
- traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash.middlewares=blast-mainnet-op-geth-archive-pebble-hash-stripprefix, ipallowlist
blast-mainnet-archive-node:
image: ${BLAST_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BLAST_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 15287:15287
- 15287:15287/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BLAST_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=81457
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://blast-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J64QGwHl9uYLfC_cnmxSA6wQH811nkOWJDWjzxqkEUlJoZHWvI66u-BXgVcPCeMUmg0dBpFQAPotFchG67FHJMZ9OSGAY3d6wevgmlkgnY0gmlwhANizeSHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaECg4pk0cskPAyJ7pOmo9E6RqGBwV-Lex4VS9a3MQvu7PWDdGNwgnZhg3VkcIJ2YQ,enr:-J64QDge2jYBQtcNEpRqmKfci5E5BHAhNBjgv4WSdwH1_wPqbueq2bDj38-TSW8asjy5lJj1Xftui6Or8lnaYFCqCI-GAY3d6wf3gmlkgnY0gmlwhCO2D9yHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaEDo4aCTq7pCEN8om9U5n_VyWdambGnQhwHNwKc8o-OicaDdGNwgnZhg3VkcIJ2YQ
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15287
- KONA_NODE_P2P_LISTEN_UDP_PORT=15287
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
blast-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/blast/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.blast-mainnet-op-geth-archive-pebble-hash-node-stripprefix.stripprefix.prefixes=/blast-mainnet-archive/node
- traefik.http.services.blast-mainnet-op-geth-archive-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/blast-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash-node.rule=PathPrefix(`/blast-mainnet-archive/node`)}
- traefik.http.routers.blast-mainnet-op-geth-archive-pebble-hash-node.middlewares=blast-mainnet-op-geth-archive-pebble-hash-node-stripprefix, ipallowlist
volumes:
blast-mainnet-op-geth-archive-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: blast
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,200 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/blast-mainnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/blast-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
blast-mainnet:
image: ${BLAST_GETH_IMAGE:-blastio/blast-geth}:${BLAST_MAINNET_GETH_VERSION:-mainnet-v1.8.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE=1716843599
- GETH_OVERRIDE_TAIGA=1746612311
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://sequencer.blast.io
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=full --datadir /data init --state.scheme=path /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=81457
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BLAST_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-blast-mainnet-op-geth-pruned-pebble-path}:/data
- ./op/blast/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.blast-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/blast-mainnet
- traefik.http.services.blast-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/blast-mainnet`) || Path(`/blast-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path.rule=Path(`/blast-mainnet`) || Path(`/blast-mainnet/`)}
- traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path.middlewares=blast-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
blast-mainnet-node:
image: ${BLAST_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BLAST_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 17769:17769
- 17769:17769/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BLAST_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=81457
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://blast-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J64QGwHl9uYLfC_cnmxSA6wQH811nkOWJDWjzxqkEUlJoZHWvI66u-BXgVcPCeMUmg0dBpFQAPotFchG67FHJMZ9OSGAY3d6wevgmlkgnY0gmlwhANizeSHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaECg4pk0cskPAyJ7pOmo9E6RqGBwV-Lex4VS9a3MQvu7PWDdGNwgnZhg3VkcIJ2YQ,enr:-J64QDge2jYBQtcNEpRqmKfci5E5BHAhNBjgv4WSdwH1_wPqbueq2bDj38-TSW8asjy5lJj1Xftui6Or8lnaYFCqCI-GAY3d6wf3gmlkgnY0gmlwhCO2D9yHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaEDo4aCTq7pCEN8om9U5n_VyWdambGnQhwHNwKc8o-OicaDdGNwgnZhg3VkcIJ2YQ
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17769
- KONA_NODE_P2P_LISTEN_UDP_PORT=17769
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
blast-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/blast/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.blast-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/blast-mainnet/node
- traefik.http.services.blast-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/blast-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/blast-mainnet/node`)}
- traefik.http.routers.blast-mainnet-op-geth-pruned-pebble-path-node.middlewares=blast-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
blast-mainnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: blast
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,198 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/blast-sepolia-op-geth-pruned-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/blast-sepolia \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
blast-sepolia:
image: ${BLAST_GETH_IMAGE:-blastio/blast-geth}:${BLAST_SEPOLIA_GETH_VERSION:-sepolia-v1.7.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE_TIME=1713999600
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://sequencer.s2.testblast.io
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=full --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=168587773
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BLAST_SEPOLIA_OP_GETH_PRUNED_PEBBLE_HASH_DATA:-blast-sepolia-op-geth-pruned-pebble-hash}:/data
- ./op/blast/sepolia:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.blast-sepolia-op-geth-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/blast-sepolia
- traefik.http.services.blast-sepolia-op-geth-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/blast-sepolia`) || Path(`/blast-sepolia/`))}
- ${NO_SSL:+traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash.rule=Path(`/blast-sepolia`) || Path(`/blast-sepolia/`)}
- traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash.middlewares=blast-sepolia-op-geth-pruned-pebble-hash-stripprefix, ipallowlist
blast-sepolia-node:
image: ${BLAST_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BLAST_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 16591:16591
- 16591:16591/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BLAST_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=168587773
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://blast-sepolia:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J-4QM3GLUFfKMSJQuP1UvuKQe8DyovE7Eaiit0l6By4zjTodkR4V8NWXJxNmlg8t8rP-Q-wp3jVmeAOml8cjMj__ROGAYznzb_HgmlkgnY0gmlwhA-cZ_eHb3BzdGFja4X947FQAIlzZWNwMjU2azGhAiuDqvB-AsVSRmnnWr6OHfjgY8YfNclFy9p02flKzXnOg3RjcIJ2YYN1ZHCCdmE,enr:-J-4QDCVpByqQ8nFqCS9aHicqwUfXgzFDslvpEyYz19lvkHLIdtcIGp2d4q5dxHdjRNTO6HXCsnIKxUeuZSPcEbyVQCGAYznzz0RgmlkgnY0gmlwhANiQfuHb3BzdGFja4X947FQAIlzZWNwMjU2azGhAy3AtF2Jh_aPdOohg506Hjmtx-fQ1AKmu71C7PfkWAw9g3RjcIJ2YYN1ZHCCdmE
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16591
- KONA_NODE_P2P_LISTEN_UDP_PORT=16591
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
blast-sepolia:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/blast/sepolia:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.blast-sepolia-op-geth-pruned-pebble-hash-node-stripprefix.stripprefix.prefixes=/blast-sepolia/node
- traefik.http.services.blast-sepolia-op-geth-pruned-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/blast-sepolia/node`)}
- ${NO_SSL:+traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash-node.rule=PathPrefix(`/blast-sepolia/node`)}
- traefik.http.routers.blast-sepolia-op-geth-pruned-pebble-hash-node.middlewares=blast-sepolia-op-geth-pruned-pebble-hash-node-stripprefix, ipallowlist
volumes:
blast-sepolia-op-geth-pruned-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: blast-sepolia
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,197 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/bnb-mainnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/bnb-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
bnb-mainnet-archive:
image: ${BNB_GETH_IMAGE:-ghcr.io/bnb-chain/op-geth}:${BNB_MAINNET_GETH_VERSION:-v0.5.9}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 11402:11402
- 11402:11402/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://opbnb-mainnet-rpc.bnbchain.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --bootnodes=enr:-KO4QHs5qh_kPFcjMgqkuN9dbxXT4C5Cjad4SAheaUxveCbJQ3XdeMMDHeHilHyqisyYQAByfdhzyKAdUp2SvyzWeBqGAYvRDf80g2V0aMfGhHFtSjqAgmlkgnY0gmlwhDaykUmJc2VjcDI1NmsxoQJUevTL3hJwj21IT2GC6VaNqVQEsJFPtNtO-ld5QTNCfIRzbmFwwIN0Y3CCdl-DdWRwgnZf,enr:-KO4QKIByq-YMjs6IL2YCNZEmlo3dKWNOy4B6sdqE3gjOrXeKdNbwZZGK_JzT1epqCFs3mujjg2vO1lrZLzLy4Rl7PyGAYvRA8bEg2V0aMfGhHFtSjqAgmlkgnY0gmlwhDbjSM6Jc2VjcDI1NmsxoQNQhJ5pqCPnTbK92gEc2F98y-u1OgZVAI1Msx-UiHezY4RzbmFwwIN0Y3CCdl-DdWRwgnZf
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --opBNBMainnet
- --port=11402
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BNB_MAINNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-bnb-mainnet-op-geth-archive-leveldb-hash}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.bnb-mainnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/bnb-mainnet-archive
- traefik.http.services.bnb-mainnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/bnb-mainnet-archive`) || Path(`/bnb-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash.rule=Path(`/bnb-mainnet-archive`) || Path(`/bnb-mainnet-archive/`)}
- traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash.middlewares=bnb-mainnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
bnb-mainnet-archive-node:
image: ${BNB_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BNB_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 16402:16402
- 16402:16402/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BNB_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=204
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://bnb-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16402
- KONA_NODE_P2P_LISTEN_UDP_PORT=16402
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
bnb-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.bnb-mainnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/bnb-mainnet-archive/node
- traefik.http.services.bnb-mainnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/bnb-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/bnb-mainnet-archive/node`)}
- traefik.http.routers.bnb-mainnet-op-geth-archive-leveldb-hash-node.middlewares=bnb-mainnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
bnb-mainnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: opbnb
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,200 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/bnb-mainnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/bnb-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
bnb-mainnet:
image: ${BNB_GETH_IMAGE:-ghcr.io/bnb-chain/op-geth}:${BNB_MAINNET_GETH_VERSION:-v0.5.9}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 12599:12599
- 12599:12599/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://opbnb-mainnet-rpc.bnbchain.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --allow-insecure-no-tries
- --bootnodes=enr:-KO4QHs5qh_kPFcjMgqkuN9dbxXT4C5Cjad4SAheaUxveCbJQ3XdeMMDHeHilHyqisyYQAByfdhzyKAdUp2SvyzWeBqGAYvRDf80g2V0aMfGhHFtSjqAgmlkgnY0gmlwhDaykUmJc2VjcDI1NmsxoQJUevTL3hJwj21IT2GC6VaNqVQEsJFPtNtO-ld5QTNCfIRzbmFwwIN0Y3CCdl-DdWRwgnZf,enr:-KO4QKIByq-YMjs6IL2YCNZEmlo3dKWNOy4B6sdqE3gjOrXeKdNbwZZGK_JzT1epqCFs3mujjg2vO1lrZLzLy4Rl7PyGAYvRA8bEg2V0aMfGhHFtSjqAgmlkgnY0gmlwhDbjSM6Jc2VjcDI1NmsxoQNQhJ5pqCPnTbK92gEc2F98y-u1OgZVAI1Msx-UiHezY4RzbmFwwIN0Y3CCdl-DdWRwgnZf
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --opBNBMainnet
- --port=12599
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BNB_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-bnb-mainnet-op-geth-pruned-pebble-path}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.bnb-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/bnb-mainnet
- traefik.http.services.bnb-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/bnb-mainnet`) || Path(`/bnb-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path.rule=Path(`/bnb-mainnet`) || Path(`/bnb-mainnet/`)}
- traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path.middlewares=bnb-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
bnb-mainnet-node:
image: ${BNB_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BNB_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 17599:17599
- 17599:17599/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BNB_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=204
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://bnb-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17599
- KONA_NODE_P2P_LISTEN_UDP_PORT=17599
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
bnb-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.bnb-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/bnb-mainnet/node
- traefik.http.services.bnb-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/bnb-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/bnb-mainnet/node`)}
- traefik.http.routers.bnb-mainnet-op-geth-pruned-pebble-path-node.middlewares=bnb-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
bnb-mainnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: opbnb
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,197 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/bnb-testnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/bnb-testnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
bnb-testnet-archive:
image: ${BNB_GETH_IMAGE:-ghcr.io/bnb-chain/op-geth}:${BNB_TESTNET_GETH_VERSION:-v0.5.9}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 10163:10163
- 10163:10163/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://opbnb-testnet-rpc.bnbchain.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --bootnodes=enr:-KO4QKFOBDW--pF4pFwv3Al_jiLOITj_Y5mr1Ajyy2yxHpFtNcBfkZEkvWUxAKXQjWALZEFxYHooU88JClyzA00e8YeGAYtBOOZig2V0aMfGhE0ZYGqAgmlkgnY0gmlwhDREiqaJc2VjcDI1NmsxoQM8pC_6wwTr5N2Q-yXQ1KGKsgz9i9EPLk8Ata65pUyYG4RzbmFwwIN0Y3CCdl-DdWRwgnZf,enr:-KO4QFJc0KR09ye818GT2kyN9y6BAGjhz77sYimxn85jJf2hOrNqg4X0b0EsS-_ssdkzVpavqh6oMX7W5Y81xMRuEayGAYtBSiK9g2V0aMfGhE0ZYGqAgmlkgnY0gmlwhANzx96Jc2VjcDI1NmsxoQPwA1XHfWGd4umIt7j3Fc7hKq_35izIWT_9yiN_tX8lR4RzbmFwwIN0Y3CCdl-DdWRwgnZf
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --opBNBTestnet
- --port=10163
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BNB_TESTNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-bnb-testnet-op-geth-archive-leveldb-hash}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.bnb-testnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/bnb-testnet-archive
- traefik.http.services.bnb-testnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/bnb-testnet-archive`) || Path(`/bnb-testnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash.rule=Path(`/bnb-testnet-archive`) || Path(`/bnb-testnet-archive/`)}
- traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash.middlewares=bnb-testnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
bnb-testnet-archive-node:
image: ${BNB_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BNB_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 15163:15163
- 15163:15163/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_TESTNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BNB_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_TESTNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_TESTNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=5611
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://bnb-testnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15163
- KONA_NODE_P2P_LISTEN_UDP_PORT=15163
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
bnb-testnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.bnb-testnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/bnb-testnet-archive/node
- traefik.http.services.bnb-testnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/bnb-testnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/bnb-testnet-archive/node`)}
- traefik.http.routers.bnb-testnet-op-geth-archive-leveldb-hash-node.middlewares=bnb-testnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
bnb-testnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: opbnb-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,200 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/bnb-testnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/bnb-testnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
bnb-testnet:
image: ${BNB_GETH_IMAGE:-ghcr.io/bnb-chain/op-geth}:${BNB_TESTNET_GETH_VERSION:-v0.5.9}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13187:13187
- 13187:13187/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://opbnb-testnet-rpc.bnbchain.org
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --allow-insecure-no-tries
- --bootnodes=enr:-KO4QKFOBDW--pF4pFwv3Al_jiLOITj_Y5mr1Ajyy2yxHpFtNcBfkZEkvWUxAKXQjWALZEFxYHooU88JClyzA00e8YeGAYtBOOZig2V0aMfGhE0ZYGqAgmlkgnY0gmlwhDREiqaJc2VjcDI1NmsxoQM8pC_6wwTr5N2Q-yXQ1KGKsgz9i9EPLk8Ata65pUyYG4RzbmFwwIN0Y3CCdl-DdWRwgnZf,enr:-KO4QFJc0KR09ye818GT2kyN9y6BAGjhz77sYimxn85jJf2hOrNqg4X0b0EsS-_ssdkzVpavqh6oMX7W5Y81xMRuEayGAYtBSiK9g2V0aMfGhE0ZYGqAgmlkgnY0gmlwhANzx96Jc2VjcDI1NmsxoQPwA1XHfWGd4umIt7j3Fc7hKq_35izIWT_9yiN_tX8lR4RzbmFwwIN0Y3CCdl-DdWRwgnZf
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --opBNBTestnet
- --port=13187
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BNB_TESTNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-bnb-testnet-op-geth-pruned-pebble-path}:/data
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.bnb-testnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/bnb-testnet
- traefik.http.services.bnb-testnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/bnb-testnet`) || Path(`/bnb-testnet/`))}
- ${NO_SSL:+traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path.rule=Path(`/bnb-testnet`) || Path(`/bnb-testnet/`)}
- traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path.middlewares=bnb-testnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
bnb-testnet-node:
image: ${BNB_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BNB_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 18187:18187
- 18187:18187/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_TESTNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BNB_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_TESTNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_TESTNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=5611
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://bnb-testnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18187
- KONA_NODE_P2P_LISTEN_UDP_PORT=18187
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
bnb-testnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.bnb-testnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/bnb-testnet/node
- traefik.http.services.bnb-testnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/bnb-testnet/node`)}
- ${NO_SSL:+traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/bnb-testnet/node`)}
- traefik.http.routers.bnb-testnet-op-geth-pruned-pebble-path-node.middlewares=bnb-testnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
bnb-testnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: opbnb-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,207 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/fraxtal-mainnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/fraxtal-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
fraxtal-mainnet-archive:
image: ${FRAXTAL_GETH_IMAGE:-ghcr.io/fraxfinance/fraxtal-op-geth}:${FRAXTAL_MAINNET_GETH_VERSION:-v1.101702.1-frax-1.3.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13290:13290
- 13290:13290/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_BOOTNODES=enr:-J24QI8QR7VIgvQFuvLl09b9ocugoQ1WkS_AOMWKFgNX48-4P1hjgDKGeMFXZmKtfjYA2aEehxKT066riaktnxhh92OGAY5Sw_QsgmlkgnY0gmlwhCztZu2Hb3BzdGFja4P8AQCJc2VjcDI1NmsxoQM2KM0mkdH97Ze8AqwxLeqc934PKj8-xoKsyP6mAptWwIN0Y3CCdl2DdWRwgnZd,enr:-J24QGD1J-g2EPY9b7XiuwLhIoGocVp2qx2gWSfDI_CdftiPSHlgi7G6LtzkQlDskuSvRj4OXTg3vXLISubphXNNhqyGAY5Sw8GxgmlkgnY0gmlwhCzW_iGHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQPvMYlJHJUsEyciuJCTkKHLE2ogZ6cs2xuPI28CGq0CTIN0Y3CCdl2DdWRwgnZd,enr:-J24QCA5I3xroUXt7Ge_Kf04VCRBnI-GbZeyBxOkkpIDGGLrVsonrbngQG1hAEnufRb1TgS6sNFCGtaZ2ZpRx7AgciGGAY5SxEy0gmlkgnY0gmlwhCLzRQyHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQOaHzrtPQWYcwAcFJWFrbGlbNUsBC0VEhCcH02RbgEIwIN0Y3CCdl2DdWRwgnZd
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE=1717009201
- GETH_OVERRIDE_FJORD=1733947201
- GETH_OVERRIDE_GRANITE=1738958401
- GETH_OVERRIDE_HOLOCENE=1744052401
- GETH_OVERRIDE_ISTHMUS=1755716401
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.mainnet.frax.com
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=leveldb --gcmode=archive --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --bootnodes=enr:-J24QI8QR7VIgvQFuvLl09b9ocugoQ1WkS_AOMWKFgNX48-4P1hjgDKGeMFXZmKtfjYA2aEehxKT066riaktnxhh92OGAY5Sw_QsgmlkgnY0gmlwhCztZu2Hb3BzdGFja4P8AQCJc2VjcDI1NmsxoQM2KM0mkdH97Ze8AqwxLeqc934PKj8-xoKsyP6mAptWwIN0Y3CCdl2DdWRwgnZd,enr:-J24QGD1J-g2EPY9b7XiuwLhIoGocVp2qx2gWSfDI_CdftiPSHlgi7G6LtzkQlDskuSvRj4OXTg3vXLISubphXNNhqyGAY5Sw8GxgmlkgnY0gmlwhCzW_iGHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQPvMYlJHJUsEyciuJCTkKHLE2ogZ6cs2xuPI28CGq0CTIN0Y3CCdl2DdWRwgnZd,enr:-J24QCA5I3xroUXt7Ge_Kf04VCRBnI-GbZeyBxOkkpIDGGLrVsonrbngQG1hAEnufRb1TgS6sNFCGtaZ2ZpRx7AgciGGAY5SxEy0gmlkgnY0gmlwhCLzRQyHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQOaHzrtPQWYcwAcFJWFrbGlbNUsBC0VEhCcH02RbgEIwIN0Y3CCdl2DdWRwgnZd
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=252
- --port=13290
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${FRAXTAL_MAINNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-fraxtal-mainnet-op-geth-archive-leveldb-hash}:/data
- ./op/fraxtal/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.fraxtal-mainnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/fraxtal-mainnet-archive
- traefik.http.services.fraxtal-mainnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/fraxtal-mainnet-archive`) || Path(`/fraxtal-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash.rule=Path(`/fraxtal-mainnet-archive`) || Path(`/fraxtal-mainnet-archive/`)}
- traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash.middlewares=fraxtal-mainnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
fraxtal-mainnet-archive-node:
image: ${FRAXTAL_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${FRAXTAL_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 18290:18290
- 18290:18290/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${FRAXTAL_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=252
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://fraxtal-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J24QPGxmNmQ6Gsofjwnaaqt-RvC-2te44hHSU_wFGvCBpdnGnAuW0hKBCwzarXEmLN0TfwilwX3xS8xjEd9sQRqKXqGAY1ok0P3gmlkgnY0gmlwhDa-pcmHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQJA0echCE64KVt7m1lHfRF9_QgYxqIOSoPZ1UHcEArDu4N0Y3CCJAaDdWRwgiQG,enr:-J24QHPYu7uUXH4LCJ_pjHMD3fYhluZEgFRlewqOFFcja7ACaTDp4zG4GZBJdTPmLjsqskhTQa5ldKiVu4ypZYMzR_uGAY1ok_ABgmlkgnY0gmlwhCLvv1KHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQOEemNzZL5buGmwlN2naXLtz4nauCqBFeFxdmi4RL4rDIN0Y3CCJAaDdWRwgiQG,enr:-J24QBujtfGNIiE6GJrCgXEKJMs1F11wd4Y8Uvx7ZFn3Z1tyR0erNcpiW5EYIQEKQX0kL9PLJUDHWZFiaHWOTBvFg5aGAY1ok5p8gmlkgnY0gmlwhDbD-tqHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQLunzKLYJLvy6cWWkLgSSdLlILgSohrV8RT3tlKGwHBi4N0Y3CCJAaDdWRwgiQG
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18290
- KONA_NODE_P2P_LISTEN_UDP_PORT=18290
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
fraxtal-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/fraxtal/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.fraxtal-mainnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/fraxtal-mainnet-archive/node
- traefik.http.services.fraxtal-mainnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/fraxtal-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/fraxtal-mainnet-archive/node`)}
- traefik.http.routers.fraxtal-mainnet-op-geth-archive-leveldb-hash-node.middlewares=fraxtal-mainnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
fraxtal-mainnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: fraxtal
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,209 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/fraxtal-mainnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/fraxtal-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
fraxtal-mainnet:
image: ${FRAXTAL_GETH_IMAGE:-ghcr.io/fraxfinance/fraxtal-op-geth}:${FRAXTAL_MAINNET_GETH_VERSION:-v1.101702.1-frax-1.3.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 10282:10282
- 10282:10282/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_BOOTNODES=enr:-J24QI8QR7VIgvQFuvLl09b9ocugoQ1WkS_AOMWKFgNX48-4P1hjgDKGeMFXZmKtfjYA2aEehxKT066riaktnxhh92OGAY5Sw_QsgmlkgnY0gmlwhCztZu2Hb3BzdGFja4P8AQCJc2VjcDI1NmsxoQM2KM0mkdH97Ze8AqwxLeqc934PKj8-xoKsyP6mAptWwIN0Y3CCdl2DdWRwgnZd,enr:-J24QGD1J-g2EPY9b7XiuwLhIoGocVp2qx2gWSfDI_CdftiPSHlgi7G6LtzkQlDskuSvRj4OXTg3vXLISubphXNNhqyGAY5Sw8GxgmlkgnY0gmlwhCzW_iGHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQPvMYlJHJUsEyciuJCTkKHLE2ogZ6cs2xuPI28CGq0CTIN0Y3CCdl2DdWRwgnZd,enr:-J24QCA5I3xroUXt7Ge_Kf04VCRBnI-GbZeyBxOkkpIDGGLrVsonrbngQG1hAEnufRb1TgS6sNFCGtaZ2ZpRx7AgciGGAY5SxEy0gmlkgnY0gmlwhCLzRQyHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQOaHzrtPQWYcwAcFJWFrbGlbNUsBC0VEhCcH02RbgEIwIN0Y3CCdl2DdWRwgnZd
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE=1717009201
- GETH_OVERRIDE_FJORD=1733947201
- GETH_OVERRIDE_GRANITE=1738958401
- GETH_OVERRIDE_HOLOCENE=1744052401
- GETH_OVERRIDE_ISTHMUS=1755716401
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.mainnet.frax.com
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=full --datadir /data init --state.scheme=path /config/genesis.json; exec geth "$@"' --
command:
- --bootnodes=enr:-J24QI8QR7VIgvQFuvLl09b9ocugoQ1WkS_AOMWKFgNX48-4P1hjgDKGeMFXZmKtfjYA2aEehxKT066riaktnxhh92OGAY5Sw_QsgmlkgnY0gmlwhCztZu2Hb3BzdGFja4P8AQCJc2VjcDI1NmsxoQM2KM0mkdH97Ze8AqwxLeqc934PKj8-xoKsyP6mAptWwIN0Y3CCdl2DdWRwgnZd,enr:-J24QGD1J-g2EPY9b7XiuwLhIoGocVp2qx2gWSfDI_CdftiPSHlgi7G6LtzkQlDskuSvRj4OXTg3vXLISubphXNNhqyGAY5Sw8GxgmlkgnY0gmlwhCzW_iGHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQPvMYlJHJUsEyciuJCTkKHLE2ogZ6cs2xuPI28CGq0CTIN0Y3CCdl2DdWRwgnZd,enr:-J24QCA5I3xroUXt7Ge_Kf04VCRBnI-GbZeyBxOkkpIDGGLrVsonrbngQG1hAEnufRb1TgS6sNFCGtaZ2ZpRx7AgciGGAY5SxEy0gmlkgnY0gmlwhCLzRQyHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQOaHzrtPQWYcwAcFJWFrbGlbNUsBC0VEhCcH02RbgEIwIN0Y3CCdl2DdWRwgnZd
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=252
- --port=10282
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${FRAXTAL_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-fraxtal-mainnet-op-geth-pruned-pebble-path}:/data
- ./op/fraxtal/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.fraxtal-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/fraxtal-mainnet
- traefik.http.services.fraxtal-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/fraxtal-mainnet`) || Path(`/fraxtal-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path.rule=Path(`/fraxtal-mainnet`) || Path(`/fraxtal-mainnet/`)}
- traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path.middlewares=fraxtal-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
fraxtal-mainnet-node:
image: ${FRAXTAL_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${FRAXTAL_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 15282:15282
- 15282:15282/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${FRAXTAL_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=252
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://fraxtal-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J24QPGxmNmQ6Gsofjwnaaqt-RvC-2te44hHSU_wFGvCBpdnGnAuW0hKBCwzarXEmLN0TfwilwX3xS8xjEd9sQRqKXqGAY1ok0P3gmlkgnY0gmlwhDa-pcmHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQJA0echCE64KVt7m1lHfRF9_QgYxqIOSoPZ1UHcEArDu4N0Y3CCJAaDdWRwgiQG,enr:-J24QHPYu7uUXH4LCJ_pjHMD3fYhluZEgFRlewqOFFcja7ACaTDp4zG4GZBJdTPmLjsqskhTQa5ldKiVu4ypZYMzR_uGAY1ok_ABgmlkgnY0gmlwhCLvv1KHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQOEemNzZL5buGmwlN2naXLtz4nauCqBFeFxdmi4RL4rDIN0Y3CCJAaDdWRwgiQG,enr:-J24QBujtfGNIiE6GJrCgXEKJMs1F11wd4Y8Uvx7ZFn3Z1tyR0erNcpiW5EYIQEKQX0kL9PLJUDHWZFiaHWOTBvFg5aGAY1ok5p8gmlkgnY0gmlwhDbD-tqHb3BzdGFja4P8AQCJc2VjcDI1NmsxoQLunzKLYJLvy6cWWkLgSSdLlILgSohrV8RT3tlKGwHBi4N0Y3CCJAaDdWRwgiQG
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15282
- KONA_NODE_P2P_LISTEN_UDP_PORT=15282
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
fraxtal-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/fraxtal/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.fraxtal-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/fraxtal-mainnet/node
- traefik.http.services.fraxtal-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/fraxtal-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/fraxtal-mainnet/node`)}
- traefik.http.routers.fraxtal-mainnet-op-geth-pruned-pebble-path-node.middlewares=fraxtal-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
fraxtal-mainnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: fraxtal
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,202 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/fraxtal-testnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/fraxtal-testnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
fraxtal-testnet-archive:
image: ${FRAXTAL_GETH_IMAGE:-ghcr.io/fraxfinance/fraxtal-op-geth}:${FRAXTAL_TESTNET_GETH_VERSION:-v1.101702.1-frax-1.3.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_BOOTNODES=enr:-KO4QFOGWnVckCqXKTpKAPU_AZJmIbRjz8PTwPjkLgKJ9H_1bQT3fx57hU5OWeBqoLJ4Wa_VfA4paKQ_O-l7CJxj8ECGAZoNhOM7g2V0aMfGhGTaoWCAgmlkgnY0gmlwhCigGzaJc2VjcDI1NmsxoQJHFjvlp9CAbQ-YbO-QglEnykeVDLW8chF72qYUhax0T4RzbmFwwIN0Y3CCdmKDdWRwgnZi,enr:-KO4QCRQ8XyyqzjjYV2NcGWNc6R-kaMhp8KyYw-8mxoGbHsvUbBCO2H8f7PjtDE_ce85nSfcnVgHzfiqhpLvl5aSONWGAZoNdAX-g2V0aMfGhGTaoWCAgmlkgnY0gmlwhA_MbmOJc2VjcDI1NmsxoQO0Z6xvk6FhoaOAiEfRYHfjD5iBD-l0DFSn61-Y2Rf6VYRzbmFwwIN0Y3CCdmKDdWRwgnZi
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE=0
- GETH_OVERRIDE_FJORD=0
- GETH_OVERRIDE_GRANITE=0
- GETH_OVERRIDE_HOLOCENE=0
- GETH_OVERRIDE_ISTHMUS=0
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.testnet.frax.com
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=leveldb --gcmode=archive --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=2523
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${FRAXTAL_TESTNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-fraxtal-testnet-op-geth-archive-leveldb-hash}:/data
- ./op/fraxtal/testnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.fraxtal-testnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/fraxtal-testnet-archive
- traefik.http.services.fraxtal-testnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/fraxtal-testnet-archive`) || Path(`/fraxtal-testnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash.rule=Path(`/fraxtal-testnet-archive`) || Path(`/fraxtal-testnet-archive/`)}
- traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash.middlewares=fraxtal-testnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
fraxtal-testnet-archive-node:
image: ${FRAXTAL_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${FRAXTAL_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 15294:15294
- 15294:15294/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_HOODI_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${FRAXTAL_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_HOODI_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_HOODI_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=2523
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://fraxtal-testnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J24QMswfOBuPJnTjWPN7p-jZDXlB0VIYznPmpbmdkYM6rWKXc9nP34X5iMECUJmO-r-ebFdB0lKKyCtwMx1K2iOWb6GAYv0JJTPgmlkgnY0gmlwhDaUK8yHb3BzdGFja4PaEwCJc2VjcDI1NmsxoQJ-3NmhyfH63mVHv81ZlfG95tW6RwHPh_4S5To1eqbJhYN0Y3CCJAaDdWRwgiQG,enr:-J24QAsDW6Q83Cxb_qZaKtjm4jkhYWX7S3zDOoore9_1gjgge-POCzksofNo-27mbnthX7T9m4y7tr6t5Limw52TVVqGAYv0JGdPgmlkgnY0gmlwhDavnMmHb3BzdGFja4PaEwCJc2VjcDI1NmsxoQM1128eBAblNUFycltYl2B6mvhDWuFs1ZInCkByriIWY4N0Y3CCJAaDdWRwgiQG,enr:-J24QNkAGsc3ptRO1I23guIZh6kPZfLRlkWRX5U--Fk3X27fdSnq3giOAOTsRFNDgUeuNy5wrpKBWR_5TueJTMRmg4eGAYv0JIFbgmlkgnY0gmlwhDbZXGmHb3BzdGFja4PaEwCJc2VjcDI1NmsxoQO8_h2GFnyeoW1GoxgGYtg_0qIXgO5IFdEsvXaCBh6RcIN0Y3CCJAaDdWRwgiQGenr:-J24QLWXBXHni0E8pqwsAxCpqq-W1-J9MIABLFpG3WQmNF_SGsHBLbxQXojGIFFMq904Hy9Q9uU9BDRwgm-6hmx50FOGAZoNhRvjgmlkgnY0gmlwhCigGzaHb3BzdGFja4PbEwCJc2VjcDI1NmsxoQJlIOBp-Tsu0KwuFBG8Nd_YyjvqgHJbrxqGHKfdLvQG4IN0Y3CCeMuDdWRwgnjL,enr:-J24QKkRJDmCMshdvGbg37TBi5kgVV5iHI-_o-M9aGfaSrMJHUUop6XXhSGZz-E_bBb_cUMsMClt2VWesE_I0u6zI2mGAZoNdD-IgmlkgnY0gmlwhA_MbmOHb3BzdGFja4PbEwCJc2VjcDI1NmsxoQJR7V9CwGDb4Xd7r9qu_nOluNy9HGI7E2WMQ6e60G6P8oN0Y3CCeMuDdWRwgnjL
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15294
- KONA_NODE_P2P_LISTEN_UDP_PORT=15294
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
fraxtal-testnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/fraxtal/testnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.fraxtal-testnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/fraxtal-testnet-archive/node
- traefik.http.services.fraxtal-testnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/fraxtal-testnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/fraxtal-testnet-archive/node`)}
- traefik.http.routers.fraxtal-testnet-op-geth-archive-leveldb-hash-node.middlewares=fraxtal-testnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
fraxtal-testnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: fraxtal-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,204 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/fraxtal-testnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/fraxtal-testnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
fraxtal-testnet:
image: ${FRAXTAL_GETH_IMAGE:-ghcr.io/fraxfinance/fraxtal-op-geth}:${FRAXTAL_TESTNET_GETH_VERSION:-v1.101702.1-frax-1.3.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_BOOTNODES=enr:-KO4QFOGWnVckCqXKTpKAPU_AZJmIbRjz8PTwPjkLgKJ9H_1bQT3fx57hU5OWeBqoLJ4Wa_VfA4paKQ_O-l7CJxj8ECGAZoNhOM7g2V0aMfGhGTaoWCAgmlkgnY0gmlwhCigGzaJc2VjcDI1NmsxoQJHFjvlp9CAbQ-YbO-QglEnykeVDLW8chF72qYUhax0T4RzbmFwwIN0Y3CCdmKDdWRwgnZi,enr:-KO4QCRQ8XyyqzjjYV2NcGWNc6R-kaMhp8KyYw-8mxoGbHsvUbBCO2H8f7PjtDE_ce85nSfcnVgHzfiqhpLvl5aSONWGAZoNdAX-g2V0aMfGhGTaoWCAgmlkgnY0gmlwhA_MbmOJc2VjcDI1NmsxoQO0Z6xvk6FhoaOAiEfRYHfjD5iBD-l0DFSn61-Y2Rf6VYRzbmFwwIN0Y3CCdmKDdWRwgnZi
- GETH_OVERRIDE_CANYON=0
- GETH_OVERRIDE_ECOTONE=0
- GETH_OVERRIDE_FJORD=0
- GETH_OVERRIDE_GRANITE=0
- GETH_OVERRIDE_HOLOCENE=0
- GETH_OVERRIDE_ISTHMUS=0
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.testnet.frax.com
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=full --datadir /data init --state.scheme=path /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=2523
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${FRAXTAL_TESTNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-fraxtal-testnet-op-geth-pruned-pebble-path}:/data
- ./op/fraxtal/testnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.fraxtal-testnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/fraxtal-testnet
- traefik.http.services.fraxtal-testnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/fraxtal-testnet`) || Path(`/fraxtal-testnet/`))}
- ${NO_SSL:+traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path.rule=Path(`/fraxtal-testnet`) || Path(`/fraxtal-testnet/`)}
- traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path.middlewares=fraxtal-testnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
fraxtal-testnet-node:
image: ${FRAXTAL_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${FRAXTAL_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 16370:16370
- 16370:16370/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_HOODI_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${FRAXTAL_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_HOODI_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_HOODI_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=2523
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://fraxtal-testnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enr:-J24QMswfOBuPJnTjWPN7p-jZDXlB0VIYznPmpbmdkYM6rWKXc9nP34X5iMECUJmO-r-ebFdB0lKKyCtwMx1K2iOWb6GAYv0JJTPgmlkgnY0gmlwhDaUK8yHb3BzdGFja4PaEwCJc2VjcDI1NmsxoQJ-3NmhyfH63mVHv81ZlfG95tW6RwHPh_4S5To1eqbJhYN0Y3CCJAaDdWRwgiQG,enr:-J24QAsDW6Q83Cxb_qZaKtjm4jkhYWX7S3zDOoore9_1gjgge-POCzksofNo-27mbnthX7T9m4y7tr6t5Limw52TVVqGAYv0JGdPgmlkgnY0gmlwhDavnMmHb3BzdGFja4PaEwCJc2VjcDI1NmsxoQM1128eBAblNUFycltYl2B6mvhDWuFs1ZInCkByriIWY4N0Y3CCJAaDdWRwgiQG,enr:-J24QNkAGsc3ptRO1I23guIZh6kPZfLRlkWRX5U--Fk3X27fdSnq3giOAOTsRFNDgUeuNy5wrpKBWR_5TueJTMRmg4eGAYv0JIFbgmlkgnY0gmlwhDbZXGmHb3BzdGFja4PaEwCJc2VjcDI1NmsxoQO8_h2GFnyeoW1GoxgGYtg_0qIXgO5IFdEsvXaCBh6RcIN0Y3CCJAaDdWRwgiQGenr:-J24QLWXBXHni0E8pqwsAxCpqq-W1-J9MIABLFpG3WQmNF_SGsHBLbxQXojGIFFMq904Hy9Q9uU9BDRwgm-6hmx50FOGAZoNhRvjgmlkgnY0gmlwhCigGzaHb3BzdGFja4PbEwCJc2VjcDI1NmsxoQJlIOBp-Tsu0KwuFBG8Nd_YyjvqgHJbrxqGHKfdLvQG4IN0Y3CCeMuDdWRwgnjL,enr:-J24QKkRJDmCMshdvGbg37TBi5kgVV5iHI-_o-M9aGfaSrMJHUUop6XXhSGZz-E_bBb_cUMsMClt2VWesE_I0u6zI2mGAZoNdD-IgmlkgnY0gmlwhA_MbmOHb3BzdGFja4PbEwCJc2VjcDI1NmsxoQJR7V9CwGDb4Xd7r9qu_nOluNy9HGI7E2WMQ6e60G6P8oN0Y3CCeMuDdWRwgnjL
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16370
- KONA_NODE_P2P_LISTEN_UDP_PORT=16370
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
fraxtal-testnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/fraxtal/testnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.fraxtal-testnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/fraxtal-testnet/node
- traefik.http.services.fraxtal-testnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/fraxtal-testnet/node`)}
- ${NO_SSL:+traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/fraxtal-testnet/node`)}
- traefik.http.routers.fraxtal-testnet-op-geth-pruned-pebble-path-node.middlewares=fraxtal-testnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
fraxtal-testnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: fraxtal-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,198 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/manta-pacific-mainnet-op-geth-archive-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/manta-pacific-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
manta-pacific-mainnet-archive:
image: ${MANTA_PACIFIC_GETH_IMAGE:-public.ecr.aws/i6b2w2n6/op-geth}:${MANTA_PACIFIC_MAINNET_GETH_VERSION:-5.2.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 11437:11437
- 11437:11437/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://manta-pacific.calderachain.xyz/http
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=archive --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=169
- --port=11437
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=web3,net,eth,debug,admin
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=web3,net,eth,debug,admin
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${MANTA_PACIFIC_MAINNET_OP_GETH_ARCHIVE_PEBBLE_HASH_DATA:-manta-pacific-mainnet-op-geth-archive-pebble-hash}:/data
- ./op/manta-pacific/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.manta-pacific-mainnet-op-geth-archive-pebble-hash-stripprefix.stripprefix.prefixes=/manta-pacific-mainnet-archive
- traefik.http.services.manta-pacific-mainnet-op-geth-archive-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/manta-pacific-mainnet-archive`) || Path(`/manta-pacific-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash.rule=Path(`/manta-pacific-mainnet-archive`) || Path(`/manta-pacific-mainnet-archive/`)}
- traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash.middlewares=manta-pacific-mainnet-op-geth-archive-pebble-hash-stripprefix, ipallowlist
manta-pacific-mainnet-archive-node:
image: ${MANTA_PACIFIC_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${MANTA_PACIFIC_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 16437:16437
- 16437:16437/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${MANTA_PACIFIC_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=169
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://manta-pacific-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16437
- KONA_NODE_P2P_LISTEN_UDP_PORT=16437
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
manta-pacific-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/manta-pacific/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.manta-pacific-mainnet-op-geth-archive-pebble-hash-node-stripprefix.stripprefix.prefixes=/manta-pacific-mainnet-archive/node
- traefik.http.services.manta-pacific-mainnet-op-geth-archive-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/manta-pacific-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash-node.rule=PathPrefix(`/manta-pacific-mainnet-archive/node`)}
- traefik.http.routers.manta-pacific-mainnet-op-geth-archive-pebble-hash-node.middlewares=manta-pacific-mainnet-op-geth-archive-pebble-hash-node-stripprefix, ipallowlist
volumes:
manta-pacific-mainnet-op-geth-archive-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: manta-pacific
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -45,9 +45,6 @@ services:
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 12835:12835
- 12835:12835/udp
expose:
- 8545
- 6060
@@ -65,8 +62,7 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=12835
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash

View File

@@ -45,9 +45,6 @@ services:
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 12835:12835
- 12835:12835/udp
expose:
- 8545
- 6060
@@ -65,8 +62,7 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=12835
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
@@ -117,6 +113,7 @@ services:
- OP_NODE_L1_ETH_RPC=${MODE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L1_TRUST_RPC=false
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://mode-sepolia-archive:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
@@ -135,7 +132,7 @@ services:
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=execution-layer
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -45,9 +45,6 @@ services:
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13454:13454
- 13454:13454/udp
expose:
- 8545
- 6060
@@ -65,8 +62,7 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=13454
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash

View File

@@ -45,9 +45,6 @@ services:
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13454:13454
- 13454:13454/udp
expose:
- 8545
- 6060
@@ -65,8 +62,7 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=13454
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
@@ -117,6 +113,7 @@ services:
- OP_NODE_L1_ETH_RPC=${MODE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L1_TRUST_RPC=false
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://mode-sepolia:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
@@ -135,7 +132,7 @@ services:
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=execution-layer
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -45,9 +45,6 @@ services:
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13308:13308
- 13308:13308/udp
expose:
- 8545
- 6060
@@ -65,12 +62,11 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=13308
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine

View File

@@ -45,9 +45,6 @@ services:
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13308:13308
- 13308:13308/udp
expose:
- 8545
- 6060
@@ -65,12 +62,11 @@ services:
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --port=13308
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
@@ -117,6 +113,7 @@ services:
- OP_NODE_L1_ETH_RPC=${MODE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L1_TRUST_RPC=false
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://mode-sepolia:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
@@ -135,7 +132,7 @@ services:
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=execution-layer
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -1,203 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/superseed-mainnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/superseed-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
superseed-mainnet:
image: ${SUPERSEED_GETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth}:${SUPERSEED_MAINNET_GETH_VERSION:-v1.101702.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 11876:11876
- 11876:11876/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OVERRIDE_GRANITE=1726185601
- GETH_OVERRIDE_HOLOCENE=1736445601
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://mainnet.superseed.xyz
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=full --datadir /data init --state.scheme=path /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=5330
- --port=11876
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${SUPERSEED_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-superseed-mainnet-op-geth-pruned-pebble-path}:/data
- ./op/superseed/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.superseed-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/superseed-mainnet
- traefik.http.services.superseed-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/superseed-mainnet`) || Path(`/superseed-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path.rule=Path(`/superseed-mainnet`) || Path(`/superseed-mainnet/`)}
- traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path.middlewares=superseed-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
superseed-mainnet-node:
image: ${SUPERSEED_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${SUPERSEED_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 16876:16876
- 16876:16876/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${SUPERSEED_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=5330
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://superseed-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enode://3e905f39a5c084367bbe172453cf6d81b28a49f57064b56b0eb76af75d6eafe3d578605f56c4353328194245453083e1c26e339497f732461d2187d0c4a4474e@35.203.166.40:9222?discport=30301,enode://d25ce99435982b04d60c4b41ba256b84b888626db7bee45a9419382300fbe907359ae5ef250346785bff8d3b9d07cd3e017a27e2ee3cfda3bcbb0ba762ac9674@bootnode.conduit.xyz:0?discport=30301,enode://2d4e7e9d48f4dd4efe9342706dd1b0024681bd4c3300d021f86fc75eab7865d4e0cbec6fbc883f011cfd6a57423e7e2f6e104baad2b744c3cafaec6bc7dc92c1@34.65.43.171:0?discport=30305,enode://9d7a3efefe442351217e73b3a593bcb8efffb55b4807699972145324eab5e6b382152f8d24f6301baebbfb5ecd4127bd3faab2842c04cd432bdf50ba092f6645@34.65.109.126:0?discport=30305
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16876
- KONA_NODE_P2P_LISTEN_UDP_PORT=16876
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
superseed-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/superseed/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.superseed-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/superseed-mainnet/node
- traefik.http.services.superseed-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/superseed-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/superseed-mainnet/node`)}
- traefik.http.routers.superseed-mainnet-op-geth-pruned-pebble-path-node.middlewares=superseed-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
superseed-mainnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: superseed
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,201 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/superseed-sepolia-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/superseed-sepolia \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
superseed-sepolia:
image: ${SUPERSEED_GETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth}:${SUPERSEED_SEPOLIA_GETH_VERSION:-v1.101702.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_OVERRIDE_GRANITE=1732546800
- GETH_OVERRIDE_HOLOCENE=1732633200
- GETH_OVERRIDE_ISTHMUS=1744905600
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://sepolia.superseed.xyz
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=full --datadir /data init --state.scheme=path /config/genesis.json; exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=53302
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${SUPERSEED_SEPOLIA_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-superseed-sepolia-op-geth-pruned-pebble-path}:/data
- ./op/superseed/sepolia:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.superseed-sepolia-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/superseed-sepolia
- traefik.http.services.superseed-sepolia-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/superseed-sepolia`) || Path(`/superseed-sepolia/`))}
- ${NO_SSL:+traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path.rule=Path(`/superseed-sepolia`) || Path(`/superseed-sepolia/`)}
- traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path.middlewares=superseed-sepolia-op-geth-pruned-pebble-path-stripprefix, ipallowlist
superseed-sepolia-node:
image: ${SUPERSEED_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${SUPERSEED_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 17522:17522
- 17522:17522/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${SUPERSEED_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=53302
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://superseed-sepolia:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enode://c9fb471294f243ce4aa32f8987d743fed73fa109013996f169f81914efd2a76762f2f142bd6dcc147afe342c752a587e06ef2ea1418c99ff757986242e372f3d@34.105.58.183:9222?discport=30301,enode://d25ce99435982b04d60c4b41ba256b84b888626db7bee45a9419382300fbe907359ae5ef250346785bff8d3b9d07cd3e017a27e2ee3cfda3bcbb0ba762ac9674@bootnode.conduit.xyz:0?discport=30301,enode://2d4e7e9d48f4dd4efe9342706dd1b0024681bd4c3300d021f86fc75eab7865d4e0cbec6fbc883f011cfd6a57423e7e2f6e104baad2b744c3cafaec6bc7dc92c1@34.65.43.171:0?discport=30305,enode://9d7a3efefe442351217e73b3a593bcb8efffb55b4807699972145324eab5e6b382152f8d24f6301baebbfb5ecd4127bd3faab2842c04cd432bdf50ba092f6645@34.65.109.126:0?discport=30305
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17522
- KONA_NODE_P2P_LISTEN_UDP_PORT=17522
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
superseed-sepolia:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/superseed/sepolia:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.superseed-sepolia-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/superseed-sepolia/node
- traefik.http.services.superseed-sepolia-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/superseed-sepolia/node`)}
- ${NO_SSL:+traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/superseed-sepolia/node`)}
- traefik.http.routers.superseed-sepolia-op-geth-pruned-pebble-path-node.middlewares=superseed-sepolia-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
superseed-sepolia-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: superseed-sepolia
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,219 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# You should use a snapshot for Xlayer
# if import of genesis fails the chainid will be 1 for ethereum mainnet
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/xlayer-mainnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/xlayer-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
xlayer-mainnet-archive-init:
image: alpine:3.21
user: root
entrypoint: [/bin/sh, -c]
command:
- |
apk add --no-cache curl wget
mkdir -p /config
[ -f /config/genesis.json ] || wget -qO- "https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz" | tar -xzf - -O --wildcards "*.json" > /config/genesis.json
restart: no
networks:
- chains
volumes:
- ./op/xlayer/mainnet:/config
logging: *logging-defaults
xlayer-mainnet-archive:
image: ${XLAYER_GETH_IMAGE:-xlayer/op-geth}:${XLAYER_MAINNET_GETH_VERSION:-v0.1.5.3}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GENESIS_URL=https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.xlayer.tech
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=leveldb --gcmode=archive --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --config=/config/geth.toml
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nodiscover
- --rollup.enabletxpooladmission
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
depends_on:
xlayer-mainnet-archive-init:
condition: service_completed_successfully
networks:
- chains
volumes:
- ${XLAYER_MAINNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-xlayer-mainnet-op-geth-archive-leveldb-hash}:/data
- ./op/xlayer/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.xlayer-mainnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/xlayer-mainnet-archive
- traefik.http.services.xlayer-mainnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/xlayer-mainnet-archive`) || Path(`/xlayer-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash.rule=Path(`/xlayer-mainnet-archive`) || Path(`/xlayer-mainnet-archive/`)}
- traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash.middlewares=xlayer-mainnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
xlayer-mainnet-archive-node:
image: ${XLAYER_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${XLAYER_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 16947:16947
- 16947:16947/udp
environment:
- GENESIS_URL=https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${XLAYER_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=196
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://xlayer-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enode://c67d7f63c5483ab8311123d2997bfe6a8aac2b117a40167cf71682f8a3e37d3b86547c786559355c4c05ae0b1a7e7a1b8fde55050b183f96728d62e276467ce1@8.210.177.150:9223,enode://28e3e305b266e01226a7cc979ab692b22507784095157453ee0e34607bb3beac9a5b00f3e3d7d3ac36164612ca25108e6b79f75e3a9ecb54a0b3e7eb3e097d37@8.210.15.172:9223,enode://b5aa43622aad25c619650a0b7f8bb030161dfbfd5664233f92d841a33b404cea3ffffdc5bc8d6667c7dc212242a52f0702825c1e51612047f75c847ab96ef7a6@8.210.69.97:9223
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16947
- KONA_NODE_P2P_LISTEN_UDP_PORT=16947
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
xlayer-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/xlayer/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.xlayer-mainnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/xlayer-mainnet-archive/node
- traefik.http.services.xlayer-mainnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/xlayer-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/xlayer-mainnet-archive/node`)}
- traefik.http.routers.xlayer-mainnet-op-geth-archive-leveldb-hash-node.middlewares=xlayer-mainnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
xlayer-mainnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: xlayer
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,219 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# You should use a snapshot for Xlayer
# if import of genesis fails the chainid will be 1 for ethereum mainnet
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/xlayer-mainnet-op-geth-archive-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/xlayer-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
xlayer-mainnet-archive-init:
image: alpine:3.21
user: root
entrypoint: [/bin/sh, -c]
command:
- |
apk add --no-cache curl wget
mkdir -p /config
[ -f /config/genesis.json ] || wget -qO- "https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz" | tar -xzf - -O --wildcards "*.json" > /config/genesis.json
restart: no
networks:
- chains
volumes:
- ./op/xlayer/mainnet:/config
logging: *logging-defaults
xlayer-mainnet-archive:
image: ${XLAYER_GETH_IMAGE:-xlayer/op-geth}:${XLAYER_MAINNET_GETH_VERSION:-v0.1.5.3}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GENESIS_URL=https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.xlayer.tech
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=archive --datadir /data init --state.scheme=hash /config/genesis.json; exec geth "$@"' --
command:
- --config=/config/geth.toml
- --datadir=/data
- --db.engine=pebble
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nodiscover
- --rollup.enabletxpooladmission
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
depends_on:
xlayer-mainnet-archive-init:
condition: service_completed_successfully
networks:
- chains
volumes:
- ${XLAYER_MAINNET_OP_GETH_ARCHIVE_PEBBLE_HASH_DATA:-xlayer-mainnet-op-geth-archive-pebble-hash}:/data
- ./op/xlayer/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.xlayer-mainnet-op-geth-archive-pebble-hash-stripprefix.stripprefix.prefixes=/xlayer-mainnet-archive
- traefik.http.services.xlayer-mainnet-op-geth-archive-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/xlayer-mainnet-archive`) || Path(`/xlayer-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash.rule=Path(`/xlayer-mainnet-archive`) || Path(`/xlayer-mainnet-archive/`)}
- traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash.middlewares=xlayer-mainnet-op-geth-archive-pebble-hash-stripprefix, ipallowlist
xlayer-mainnet-archive-node:
image: ${XLAYER_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${XLAYER_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 17934:17934
- 17934:17934/udp
environment:
- GENESIS_URL=https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${XLAYER_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=196
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://xlayer-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enode://c67d7f63c5483ab8311123d2997bfe6a8aac2b117a40167cf71682f8a3e37d3b86547c786559355c4c05ae0b1a7e7a1b8fde55050b183f96728d62e276467ce1@8.210.177.150:9223,enode://28e3e305b266e01226a7cc979ab692b22507784095157453ee0e34607bb3beac9a5b00f3e3d7d3ac36164612ca25108e6b79f75e3a9ecb54a0b3e7eb3e097d37@8.210.15.172:9223,enode://b5aa43622aad25c619650a0b7f8bb030161dfbfd5664233f92d841a33b404cea3ffffdc5bc8d6667c7dc212242a52f0702825c1e51612047f75c847ab96ef7a6@8.210.69.97:9223
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17934
- KONA_NODE_P2P_LISTEN_UDP_PORT=17934
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
xlayer-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/xlayer/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.xlayer-mainnet-op-geth-archive-pebble-hash-node-stripprefix.stripprefix.prefixes=/xlayer-mainnet-archive/node
- traefik.http.services.xlayer-mainnet-op-geth-archive-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/xlayer-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash-node.rule=PathPrefix(`/xlayer-mainnet-archive/node`)}
- traefik.http.routers.xlayer-mainnet-op-geth-archive-pebble-hash-node.middlewares=xlayer-mainnet-op-geth-archive-pebble-hash-node-stripprefix, ipallowlist
volumes:
xlayer-mainnet-op-geth-archive-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: xlayer
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,221 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# You should use a snapshot for Xlayer
# if import of genesis fails the chainid will be 1 for ethereum mainnet
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/xlayer-mainnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/xlayer-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
xlayer-mainnet-init:
image: alpine:3.21
user: root
entrypoint: [/bin/sh, -c]
command:
- |
apk add --no-cache curl wget
mkdir -p /config
[ -f /config/genesis.json ] || wget -qO- "https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz" | tar -xzf - -O --wildcards "*.json" > /config/genesis.json
restart: no
networks:
- chains
volumes:
- ./op/xlayer/mainnet:/config
logging: *logging-defaults
xlayer-mainnet:
image: ${XLAYER_GETH_IMAGE:-xlayer/op-geth}:${XLAYER_MAINNET_GETH_VERSION:-v0.1.5.3}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GENESIS_URL=https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.xlayer.tech
entrypoint: /bin/sh -c '[ -f /config/genesis.json ] && geth --db.engine=pebble --gcmode=full --datadir /data init --state.scheme=path /config/genesis.json; exec geth "$@"' --
command:
- --config=/config/geth.toml
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nodiscover
- --rollup.enabletxpooladmission
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
depends_on:
xlayer-mainnet-init:
condition: service_completed_successfully
networks:
- chains
volumes:
- ${XLAYER_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-xlayer-mainnet-op-geth-pruned-pebble-path}:/data
- ./op/xlayer/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.xlayer-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/xlayer-mainnet
- traefik.http.services.xlayer-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/xlayer-mainnet`) || Path(`/xlayer-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path.rule=Path(`/xlayer-mainnet`) || Path(`/xlayer-mainnet/`)}
- traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path.middlewares=xlayer-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
xlayer-mainnet-node:
image: ${XLAYER_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${XLAYER_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 19389:19389
- 19389:19389/udp
environment:
- GENESIS_URL=https://okg-pub-hk.oss-cn-hongkong.aliyuncs.com/cdn/chain/xlayer/snapshot/merged.genesis.json.mainnet.tar.gz
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${XLAYER_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=196
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://xlayer-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_BOOTNODES=enode://c67d7f63c5483ab8311123d2997bfe6a8aac2b117a40167cf71682f8a3e37d3b86547c786559355c4c05ae0b1a7e7a1b8fde55050b183f96728d62e276467ce1@8.210.177.150:9223,enode://28e3e305b266e01226a7cc979ab692b22507784095157453ee0e34607bb3beac9a5b00f3e3d7d3ac36164612ca25108e6b79f75e3a9ecb54a0b3e7eb3e097d37@8.210.15.172:9223,enode://b5aa43622aad25c619650a0b7f8bb030161dfbfd5664233f92d841a33b404cea3ffffdc5bc8d6667c7dc212242a52f0702825c1e51612047f75c847ab96ef7a6@8.210.69.97:9223
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=19389
- KONA_NODE_P2P_LISTEN_UDP_PORT=19389
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
xlayer-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/xlayer/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.xlayer-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/xlayer-mainnet/node
- traefik.http.services.xlayer-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/xlayer-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/xlayer-mainnet/node`)}
- traefik.http.routers.xlayer-mainnet-op-geth-pruned-pebble-path-node.middlewares=xlayer-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
xlayer-mainnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: xlayer
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -1,200 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-garfield-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-garfield-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-garfield-archive:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_GARFIELD_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_GARFIELD_WS_SECRET}@${ZIRCUIT_GARFIELD_ETH_STATS_SERVER}:${ZIRCUIT_GARFIELD_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-us.garfield-testnet.zircuit.com?token=drpcV4hDaEwatB9G3zgk8gBkaH5s4TVMGeuUvlBIiVTD
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=48899
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_GARFIELD_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-zircuit-garfield-op-geth-archive-leveldb-hash}:/data
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/zircuit-garfield-archive
- traefik.http.services.zircuit-garfield-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-garfield-archive`) || Path(`/zircuit-garfield-archive/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash.rule=Path(`/zircuit-garfield-archive`) || Path(`/zircuit-garfield-archive/`)}
- traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash.middlewares=zircuit-garfield-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
zircuit-garfield-archive-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_GARFIELD_KONA_VERSION:-v1.6.1}
ports:
- 17296:17296
- 17296:17296/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_HOLESKY_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_GARFIELD_L1_EXECUTION_RPC:-${ETHEREUM_HOLESKY_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_HOLESKY_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-garfield-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17296
- KONA_NODE_P2P_LISTEN_UDP_PORT=17296
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-garfield-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/zircuit-garfield-archive/node
- traefik.http.services.zircuit-garfield-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-garfield-archive/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/zircuit-garfield-archive/node`)}
- traefik.http.routers.zircuit-garfield-op-geth-archive-leveldb-hash-node.middlewares=zircuit-garfield-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
zircuit-garfield-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,200 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-garfield-op-geth-archive-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-garfield-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-garfield-archive:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_GARFIELD_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_GARFIELD_WS_SECRET}@${ZIRCUIT_GARFIELD_ETH_STATS_SERVER}:${ZIRCUIT_GARFIELD_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-us.garfield-testnet.zircuit.com?token=drpcV4hDaEwatB9G3zgk8gBkaH5s4TVMGeuUvlBIiVTD
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=48899
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_GARFIELD_OP_GETH_ARCHIVE_PEBBLE_HASH_DATA:-zircuit-garfield-op-geth-archive-pebble-hash}:/data
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-archive-pebble-hash-stripprefix.stripprefix.prefixes=/zircuit-garfield-archive
- traefik.http.services.zircuit-garfield-op-geth-archive-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-garfield-archive`) || Path(`/zircuit-garfield-archive/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash.rule=Path(`/zircuit-garfield-archive`) || Path(`/zircuit-garfield-archive/`)}
- traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash.middlewares=zircuit-garfield-op-geth-archive-pebble-hash-stripprefix, ipallowlist
zircuit-garfield-archive-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_GARFIELD_KONA_VERSION:-v1.6.1}
ports:
- 16723:16723
- 16723:16723/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_HOLESKY_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_GARFIELD_L1_EXECUTION_RPC:-${ETHEREUM_HOLESKY_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_HOLESKY_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-garfield-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16723
- KONA_NODE_P2P_LISTEN_UDP_PORT=16723
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-garfield-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-archive-pebble-hash-node-stripprefix.stripprefix.prefixes=/zircuit-garfield-archive/node
- traefik.http.services.zircuit-garfield-op-geth-archive-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-garfield-archive/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash-node.rule=PathPrefix(`/zircuit-garfield-archive/node`)}
- traefik.http.routers.zircuit-garfield-op-geth-archive-pebble-hash-node.middlewares=zircuit-garfield-op-geth-archive-pebble-hash-node-stripprefix, ipallowlist
volumes:
zircuit-garfield-op-geth-archive-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,200 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-garfield-op-geth-pruned-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-garfield \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-garfield:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_GARFIELD_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_GARFIELD_WS_SECRET}@${ZIRCUIT_GARFIELD_ETH_STATS_SERVER}:${ZIRCUIT_GARFIELD_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-us.garfield-testnet.zircuit.com?token=drpcV4hDaEwatB9G3zgk8gBkaH5s4TVMGeuUvlBIiVTD
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=48899
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_GARFIELD_OP_GETH_PRUNED_PEBBLE_HASH_DATA:-zircuit-garfield-op-geth-pruned-pebble-hash}:/data
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/zircuit-garfield
- traefik.http.services.zircuit-garfield-op-geth-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-garfield`) || Path(`/zircuit-garfield/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash.rule=Path(`/zircuit-garfield`) || Path(`/zircuit-garfield/`)}
- traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash.middlewares=zircuit-garfield-op-geth-pruned-pebble-hash-stripprefix, ipallowlist
zircuit-garfield-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_GARFIELD_KONA_VERSION:-v1.6.1}
ports:
- 17397:17397
- 17397:17397/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_HOLESKY_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_GARFIELD_L1_EXECUTION_RPC:-${ETHEREUM_HOLESKY_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_HOLESKY_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-garfield:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17397
- KONA_NODE_P2P_LISTEN_UDP_PORT=17397
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-garfield:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-pruned-pebble-hash-node-stripprefix.stripprefix.prefixes=/zircuit-garfield/node
- traefik.http.services.zircuit-garfield-op-geth-pruned-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-garfield/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash-node.rule=PathPrefix(`/zircuit-garfield/node`)}
- traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-hash-node.middlewares=zircuit-garfield-op-geth-pruned-pebble-hash-node-stripprefix, ipallowlist
volumes:
zircuit-garfield-op-geth-pruned-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,202 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-garfield-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-garfield \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-garfield:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_GARFIELD_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_GARFIELD_WS_SECRET}@${ZIRCUIT_GARFIELD_ETH_STATS_SERVER}:${ZIRCUIT_GARFIELD_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-us.garfield-testnet.zircuit.com?token=drpcV4hDaEwatB9G3zgk8gBkaH5s4TVMGeuUvlBIiVTD
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --networkid=48899
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_GARFIELD_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-zircuit-garfield-op-geth-pruned-pebble-path}:/data
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/zircuit-garfield
- traefik.http.services.zircuit-garfield-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/zircuit-garfield`) || Path(`/zircuit-garfield/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path.rule=Path(`/zircuit-garfield`) || Path(`/zircuit-garfield/`)}
- traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path.middlewares=zircuit-garfield-op-geth-pruned-pebble-path-stripprefix, ipallowlist
zircuit-garfield-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_GARFIELD_KONA_VERSION:-v1.6.1}
ports:
- 15072:15072
- 15072:15072/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_HOLESKY_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_GARFIELD_L1_EXECUTION_RPC:-${ETHEREUM_HOLESKY_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_HOLESKY_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-garfield:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15072
- KONA_NODE_P2P_LISTEN_UDP_PORT=15072
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-garfield:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/garfield:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-garfield-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/zircuit-garfield/node
- traefik.http.services.zircuit-garfield-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-garfield/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/zircuit-garfield/node`)}
- traefik.http.routers.zircuit-garfield-op-geth-pruned-pebble-path-node.middlewares=zircuit-garfield-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
zircuit-garfield-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,201 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-mainnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-mainnet-archive:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_MAINNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_MAINNET_WS_SECRET}@${ZIRCUIT_MAINNET_ETH_STATS_SERVER}:${ZIRCUIT_MAINNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-eu.mainnet.zircuit.com/?token=drpcvATEn3gsYCLyLw7ztFLCBwQNoDJr2QjpcsNNkksu
- GETH_TXPOOL_GLOBALQUEUE=1024
- ZIRCUIT_NETWORK=mainnet
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --network=mainnet
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_MAINNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-zircuit-mainnet-op-geth-archive-leveldb-hash}:/data
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/zircuit-mainnet-archive
- traefik.http.services.zircuit-mainnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-mainnet-archive`) || Path(`/zircuit-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash.rule=Path(`/zircuit-mainnet-archive`) || Path(`/zircuit-mainnet-archive/`)}
- traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash.middlewares=zircuit-mainnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
zircuit-mainnet-archive-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 19463:19463
- 19463:19463/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48900
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=19463
- KONA_NODE_P2P_LISTEN_UDP_PORT=19463
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/zircuit-mainnet-archive/node
- traefik.http.services.zircuit-mainnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/zircuit-mainnet-archive/node`)}
- traefik.http.routers.zircuit-mainnet-op-geth-archive-leveldb-hash-node.middlewares=zircuit-mainnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
zircuit-mainnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-mainnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,201 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-mainnet-op-geth-archive-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-mainnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-mainnet-archive:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_MAINNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_MAINNET_WS_SECRET}@${ZIRCUIT_MAINNET_ETH_STATS_SERVER}:${ZIRCUIT_MAINNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-eu.mainnet.zircuit.com/?token=drpcvATEn3gsYCLyLw7ztFLCBwQNoDJr2QjpcsNNkksu
- GETH_TXPOOL_GLOBALQUEUE=1024
- ZIRCUIT_NETWORK=mainnet
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --network=mainnet
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_MAINNET_OP_GETH_ARCHIVE_PEBBLE_HASH_DATA:-zircuit-mainnet-op-geth-archive-pebble-hash}:/data
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-archive-pebble-hash-stripprefix.stripprefix.prefixes=/zircuit-mainnet-archive
- traefik.http.services.zircuit-mainnet-op-geth-archive-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-mainnet-archive`) || Path(`/zircuit-mainnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash.rule=Path(`/zircuit-mainnet-archive`) || Path(`/zircuit-mainnet-archive/`)}
- traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash.middlewares=zircuit-mainnet-op-geth-archive-pebble-hash-stripprefix, ipallowlist
zircuit-mainnet-archive-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 15588:15588
- 15588:15588/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48900
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-mainnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=15588
- KONA_NODE_P2P_LISTEN_UDP_PORT=15588
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-mainnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-archive-pebble-hash-node-stripprefix.stripprefix.prefixes=/zircuit-mainnet-archive/node
- traefik.http.services.zircuit-mainnet-op-geth-archive-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-mainnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash-node.rule=PathPrefix(`/zircuit-mainnet-archive/node`)}
- traefik.http.routers.zircuit-mainnet-op-geth-archive-pebble-hash-node.middlewares=zircuit-mainnet-op-geth-archive-pebble-hash-node-stripprefix, ipallowlist
volumes:
zircuit-mainnet-op-geth-archive-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-mainnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,201 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-mainnet-op-geth-pruned-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-mainnet:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_MAINNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_MAINNET_WS_SECRET}@${ZIRCUIT_MAINNET_ETH_STATS_SERVER}:${ZIRCUIT_MAINNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-eu.mainnet.zircuit.com/?token=drpcvATEn3gsYCLyLw7ztFLCBwQNoDJr2QjpcsNNkksu
- GETH_TXPOOL_GLOBALQUEUE=1024
- ZIRCUIT_NETWORK=mainnet
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --network=mainnet
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_MAINNET_OP_GETH_PRUNED_PEBBLE_HASH_DATA:-zircuit-mainnet-op-geth-pruned-pebble-hash}:/data
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/zircuit-mainnet
- traefik.http.services.zircuit-mainnet-op-geth-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-mainnet`) || Path(`/zircuit-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash.rule=Path(`/zircuit-mainnet`) || Path(`/zircuit-mainnet/`)}
- traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash.middlewares=zircuit-mainnet-op-geth-pruned-pebble-hash-stripprefix, ipallowlist
zircuit-mainnet-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 18688:18688
- 18688:18688/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48900
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18688
- KONA_NODE_P2P_LISTEN_UDP_PORT=18688
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-pruned-pebble-hash-node-stripprefix.stripprefix.prefixes=/zircuit-mainnet/node
- traefik.http.services.zircuit-mainnet-op-geth-pruned-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash-node.rule=PathPrefix(`/zircuit-mainnet/node`)}
- traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-hash-node.middlewares=zircuit-mainnet-op-geth-pruned-pebble-hash-node-stripprefix, ipallowlist
volumes:
zircuit-mainnet-op-geth-pruned-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-mainnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,203 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-mainnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-mainnet:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_MAINNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_MAINNET_WS_SECRET}@${ZIRCUIT_MAINNET_ETH_STATS_SERVER}:${ZIRCUIT_MAINNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://proxyd-ingress-eu.mainnet.zircuit.com/?token=drpcvATEn3gsYCLyLw7ztFLCBwQNoDJr2QjpcsNNkksu
- GETH_TXPOOL_GLOBALQUEUE=1024
- ZIRCUIT_NETWORK=mainnet
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --network=mainnet
- --nodiscover
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_MAINNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-zircuit-mainnet-op-geth-pruned-pebble-path}:/data
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/zircuit-mainnet
- traefik.http.services.zircuit-mainnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/zircuit-mainnet`) || Path(`/zircuit-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path.rule=Path(`/zircuit-mainnet`) || Path(`/zircuit-mainnet/`)}
- traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path.middlewares=zircuit-mainnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
zircuit-mainnet-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 18359:18359
- 18359:18359/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48900
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-mainnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18359
- KONA_NODE_P2P_LISTEN_UDP_PORT=18359
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-mainnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-mainnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/zircuit-mainnet/node
- traefik.http.services.zircuit-mainnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-mainnet/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/zircuit-mainnet/node`)}
- traefik.http.routers.zircuit-mainnet-op-geth-pruned-pebble-path-node.middlewares=zircuit-mainnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
zircuit-mainnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-mainnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,204 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-testnet-op-geth-archive-leveldb-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-testnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-testnet-archive:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_TESTNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13095:13095
- 13095:13095/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_TESTNET_WS_SECRET}@${ZIRCUIT_TESTNET_ETH_STATS_SERVER}:${ZIRCUIT_TESTNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://zircuit-testnet.drpc.org
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=leveldb
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=48899
- --port=13095
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_TESTNET_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-zircuit-testnet-op-geth-archive-leveldb-hash}:/data
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/zircuit-testnet-archive
- traefik.http.services.zircuit-testnet-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-testnet-archive`) || Path(`/zircuit-testnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash.rule=Path(`/zircuit-testnet-archive`) || Path(`/zircuit-testnet-archive/`)}
- traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash.middlewares=zircuit-testnet-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
zircuit-testnet-archive-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 18095:18095
- 18095:18095/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_TESTNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_TESTNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_TESTNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-testnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=18095
- KONA_NODE_P2P_LISTEN_UDP_PORT=18095
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-testnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/zircuit-testnet-archive/node
- traefik.http.services.zircuit-testnet-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-testnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/zircuit-testnet-archive/node`)}
- traefik.http.routers.zircuit-testnet-op-geth-archive-leveldb-hash-node.middlewares=zircuit-testnet-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes:
zircuit-testnet-op-geth-archive-leveldb-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,204 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-testnet-op-geth-archive-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-testnet-archive \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-testnet-archive:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_TESTNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 11499:11499
- 11499:11499/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_TESTNET_WS_SECRET}@${ZIRCUIT_TESTNET_ETH_STATS_SERVER}:${ZIRCUIT_TESTNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://zircuit-testnet.drpc.org
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=archive
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=48899
- --port=11499
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_TESTNET_OP_GETH_ARCHIVE_PEBBLE_HASH_DATA:-zircuit-testnet-op-geth-archive-pebble-hash}:/data
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-archive-pebble-hash-stripprefix.stripprefix.prefixes=/zircuit-testnet-archive
- traefik.http.services.zircuit-testnet-op-geth-archive-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-testnet-archive`) || Path(`/zircuit-testnet-archive/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash.rule=Path(`/zircuit-testnet-archive`) || Path(`/zircuit-testnet-archive/`)}
- traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash.middlewares=zircuit-testnet-op-geth-archive-pebble-hash-stripprefix, ipallowlist
zircuit-testnet-archive-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 16499:16499
- 16499:16499/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_TESTNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_TESTNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_TESTNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-testnet-archive:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16499
- KONA_NODE_P2P_LISTEN_UDP_PORT=16499
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-testnet-archive:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-archive-pebble-hash-node-stripprefix.stripprefix.prefixes=/zircuit-testnet-archive/node
- traefik.http.services.zircuit-testnet-op-geth-archive-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-testnet-archive/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash-node.rule=PathPrefix(`/zircuit-testnet-archive/node`)}
- traefik.http.routers.zircuit-testnet-op-geth-archive-pebble-hash-node.middlewares=zircuit-testnet-op-geth-archive-pebble-hash-node-stripprefix, ipallowlist
volumes:
zircuit-testnet-op-geth-archive-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,204 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-testnet-op-geth-pruned-pebble-hash--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-testnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-testnet:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_TESTNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 11357:11357
- 11357:11357/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_TESTNET_WS_SECRET}@${ZIRCUIT_TESTNET_ETH_STATS_SERVER}:${ZIRCUIT_TESTNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://zircuit-testnet.drpc.org
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=48899
- --port=11357
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=hash
- --syncmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_TESTNET_OP_GETH_PRUNED_PEBBLE_HASH_DATA:-zircuit-testnet-op-geth-pruned-pebble-hash}:/data
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/zircuit-testnet
- traefik.http.services.zircuit-testnet-op-geth-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/zircuit-testnet`) || Path(`/zircuit-testnet/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash.rule=Path(`/zircuit-testnet`) || Path(`/zircuit-testnet/`)}
- traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash.middlewares=zircuit-testnet-op-geth-pruned-pebble-hash-stripprefix, ipallowlist
zircuit-testnet-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 16357:16357
- 16357:16357/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_TESTNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_TESTNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_TESTNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-testnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16357
- KONA_NODE_P2P_LISTEN_UDP_PORT=16357
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-testnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-pruned-pebble-hash-node-stripprefix.stripprefix.prefixes=/zircuit-testnet/node
- traefik.http.services.zircuit-testnet-op-geth-pruned-pebble-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-testnet/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash-node.rule=PathPrefix(`/zircuit-testnet/node`)}
- traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-hash-node.middlewares=zircuit-testnet-op-geth-pruned-pebble-hash-node-stripprefix, ipallowlist
volumes:
zircuit-testnet-op-geth-pruned-pebble-hash:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -1,206 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/zircuit-testnet-op-geth-pruned-pebble-path--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-testnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-testnet:
image: ${ZIRCUIT_GETH_IMAGE:-zircuit1/l2-geth}:${ZIRCUIT_TESTNET_GETH_VERSION:-v1.138.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 12804:12804
- 12804:12804/udp
expose:
- 8545
- 6060
- 8551
environment:
- GETH_CONFIG=/config/gethconfig.toml
- GETH_ETHSTATS=d${DOMAIN}:${ZIRCUIT_TESTNET_WS_SECRET}@${ZIRCUIT_TESTNET_ETH_STATS_SERVER}:${ZIRCUIT_TESTNET_ETH_STATS_SERVER_PORT}
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://zircuit-testnet.drpc.org
- GETH_TXPOOL_GLOBALQUEUE=1024
entrypoint: /bin/sh -c 'exec geth "$@"' --
command:
- --datadir=/data
- --db.engine=pebble
- --gcmode=full
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=48899
- --port=12804
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --state.scheme=path
- --syncmode=snap
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
- --authrpc.vhosts=*
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ZIRCUIT_TESTNET_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-zircuit-testnet-op-geth-pruned-pebble-path}:/data
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/zircuit-testnet
- traefik.http.services.zircuit-testnet-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/zircuit-testnet`) || Path(`/zircuit-testnet/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path.rule=Path(`/zircuit-testnet`) || Path(`/zircuit-testnet/`)}
- traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path.middlewares=zircuit-testnet-op-geth-pruned-pebble-path-stripprefix, ipallowlist
zircuit-testnet-node:
image: ${ZIRCUIT_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${ZIRCUIT_TESTNET_KONA_VERSION:-v1.6.1}
ports:
- 17804:17804
- 17804:17804/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_TESTNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${ZIRCUIT_TESTNET_L1_EXECUTION_RPC:-${ETHEREUM_TESTNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_TESTNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=48899
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://zircuit-testnet:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17804
- KONA_NODE_P2P_LISTEN_UDP_PORT=17804
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
zircuit-testnet:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/zircuit/testnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.zircuit-testnet-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/zircuit-testnet/node
- traefik.http.services.zircuit-testnet-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-testnet/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/zircuit-testnet/node`)}
- traefik.http.routers.zircuit-testnet-op-geth-pruned-pebble-path-node.middlewares=zircuit-testnet-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes:
zircuit-testnet-op-geth-pruned-pebble-path:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: zircuit-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
# not compatible with path state scheme
- name: debug_traceBlockByHash
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

View File

@@ -17,11 +17,22 @@
"mergeNetsplitBlock": 0,
"bedrockBlock": 0,
"regolithTime": 0,
"canyonTime": 1704992401,
"shanghaiTime": 1704992401,
"deltaTime": 1708560000,
"ecotoneTime": 1710374401,
"fjordTime": 1720627201,
"graniteTime": 1726070401,
"holoceneTime": 1736445601,
"isthmusTime": 1746806401,
"jovianTime": 1764691201,
"karstTime": 1783526401,
"terminalTotalDifficulty": 0,
"terminalTotalDifficultyPassed": true,
"optimism": {
"eip1559Elasticity": 6,
"eip1559Denominator": 50
"eip1559Denominator": 50,
"eip1559DenominatorCanyon": 250
}
},
"nonce": "0x0",

View File

@@ -1,182 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/base-mainnet-op-reth-archive-trace--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-mainnet-op-reth \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-mainnet-op-reth:
image: ${BASE_RETH_IMAGE:-ghcr.io/base/node-reth}:${BASE_MAINNET_RETH_VERSION:-v1.1.1}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 14221:14221
- 14221:14221/udp
expose:
- 8545
- 9001
- 8551
entrypoint: [/app/base-reth-node, node]
command:
- --chain=base
- --datadir=/root/.local/share/reth
- --engine.cross-block-cache-size=${BASE_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=14221
- --rollup.sequencer-http=https://mainnet-sequencer.base.org
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048
- --rpc.gascap=600000000
- --rpc.max-blocks-per-filter=0
- --rpc.max-connections=50000
- --rpc.max-logs-per-response=0
- --rpc.max-trace-filter-blocks=10000
- --http
- --http.addr=0.0.0.0
- --http.api=admin,debug,eth,net,trace,txpool,web3,rpc,reth,ots,flashbots,mev
- --http.corsdomain=*
- --http.port=8545
- --ws
- --ws.addr=0.0.0.0
- --ws.api=admin,debug,eth,net,trace,txpool,web3,rpc,reth,ots,flashbots,mev
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_MAINNET_OP_RETH_ARCHIVE_TRACE_DATA:-base-mainnet-op-reth-archive-trace}:/root/.local/share/reth
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-reth-archive-trace-stripprefix.stripprefix.prefixes=/base-mainnet-op-reth
- traefik.http.services.base-mainnet-op-reth-archive-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-archive-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-archive-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/base-mainnet-op-reth`) || Path(`/base-mainnet-op-reth/`))}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-reth-archive-trace.rule=Path(`/base-mainnet-op-reth`) || Path(`/base-mainnet-op-reth/`)}
- traefik.http.routers.base-mainnet-op-reth-archive-trace.middlewares=base-mainnet-op-reth-archive-trace-stripprefix, ipallowlist
shm_size: 2gb
base-mainnet-op-reth-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 19221:19221
- 19221:19221/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=8453
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-mainnet-op-reth:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=19221
- KONA_NODE_P2P_LISTEN_UDP_PORT=19221
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-mainnet-op-reth:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-reth-archive-trace-node-stripprefix.stripprefix.prefixes=/base-mainnet-op-reth/node
- traefik.http.services.base-mainnet-op-reth-archive-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-archive-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-archive-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-mainnet-op-reth/node`)}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-reth-archive-trace-node.rule=PathPrefix(`/base-mainnet-op-reth/node`)}
- traefik.http.routers.base-mainnet-op-reth-archive-trace-node.middlewares=base-mainnet-op-reth-archive-trace-node-stripprefix, ipallowlist
volumes:
base-mainnet-op-reth-archive-trace:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
- name: eth_maxPriorityFeePerGas
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=base
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14221
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14221
- --engine.cross-block-cache-size=${BASE_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=base
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11240
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11240
- --engine.cross-block-cache-size=${BASE_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=base
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14759
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14759
- --engine.cross-block-cache-size=${BASE_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -1,183 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/base-sepolia-op-reth-archive-trace--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-sepolia-op-reth \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-sepolia-op-reth:
image: ${BASE_RETH_IMAGE:-ghcr.io/base/node-reth}:${BASE_SEPOLIA_RETH_VERSION:-v1.1.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 11390:11390
- 11390:11390/udp
expose:
- 8545
- 9001
- 8551
entrypoint: [/app/base-reth-node, node]
command:
- --chain=base-sepolia
- --datadir=/root/.local/share/reth
- --engine.cross-block-cache-size=${BASE_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=11390
- --rollup.sequencer-http=https://sepolia-sequencer.base.org
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048
- --rpc.gascap=600000000
- --rpc.max-blocks-per-filter=0
- --rpc.max-connections=50000
- --rpc.max-logs-per-response=0
- --rpc.max-trace-filter-blocks=10000
- --http
- --http.addr=0.0.0.0
- --http.api=admin,debug,eth,net,trace,txpool,web3,rpc,reth,ots,flashbots,mev
- --http.corsdomain=*
- --http.port=8545
- --ws
- --ws.addr=0.0.0.0
- --ws.api=admin,debug,eth,net,trace,txpool,web3,rpc,reth,ots,flashbots,mev
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_SEPOLIA_OP_RETH_ARCHIVE_TRACE_DATA:-base-sepolia-op-reth-archive-trace}:/root/.local/share/reth
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-reth-archive-trace-stripprefix.stripprefix.prefixes=/base-sepolia-op-reth
- traefik.http.services.base-sepolia-op-reth-archive-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-archive-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-archive-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/base-sepolia-op-reth`) || Path(`/base-sepolia-op-reth/`))}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-reth-archive-trace.rule=Path(`/base-sepolia-op-reth`) || Path(`/base-sepolia-op-reth/`)}
- traefik.http.routers.base-sepolia-op-reth-archive-trace.middlewares=base-sepolia-op-reth-archive-trace-stripprefix, ipallowlist
shm_size: 2gb
base-sepolia-op-reth-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 16390:16390
- 16390:16390/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=84532
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-sepolia-op-reth:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16390
- KONA_NODE_P2P_LISTEN_UDP_PORT=16390
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-sepolia-op-reth:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-reth-archive-trace-node-stripprefix.stripprefix.prefixes=/base-sepolia-op-reth/node
- traefik.http.services.base-sepolia-op-reth-archive-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-archive-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-archive-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-sepolia-op-reth/node`)}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-reth-archive-trace-node.rule=PathPrefix(`/base-sepolia-op-reth/node`)}
- traefik.http.routers.base-sepolia-op-reth-archive-trace-node.middlewares=base-sepolia-op-reth-archive-trace-node-stripprefix, ipallowlist
volumes:
base-sepolia-op-reth-archive-trace:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base-sepolia
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
- name: eth_maxPriorityFeePerGas
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=base-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11390
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11390
- --engine.cross-block-cache-size=${BASE_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -1,183 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Usage:
#
# mkdir rpc && cd rpc
#
# git init
# git remote add origin https://github.com/StakeSquid/ethereum-rpc-docker.git
# git fetch origin vibe
# git checkout origin/vibe
#
# docker run --rm alpine sh -c "printf '0x'; head -c32 /dev/urandom | xxd -p -c 64" > .jwtsecret
#
# env
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/base-sepolia-op-reth-minimal-trace--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-sepolia-op-reth-minimal \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-sepolia-op-reth-minimal:
image: ${BASE_RETH_IMAGE:-ghcr.io/base/node-reth}:${BASE_SEPOLIA_RETH_VERSION:-v1.1.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 12165:12165
- 12165:12165/udp
expose:
- 8545
- 9001
- 8551
entrypoint: [/app/base-reth-node, node]
command:
- --chain=base-sepolia
- --datadir=/root/.local/share/reth
- --engine.cross-block-cache-size=${BASE_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=12165
- --rollup.sequencer-http=https://sepolia-sequencer.base.org
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048
- --rpc.gascap=600000000
- --rpc.max-blocks-per-filter=0
- --rpc.max-connections=50000
- --rpc.max-logs-per-response=0
- --rpc.max-trace-filter-blocks=10000
- --http
- --http.addr=0.0.0.0
- --http.api=admin,debug,eth,net,trace,txpool,web3,rpc,reth,ots,flashbots,mev
- --http.corsdomain=*
- --http.port=8545
- --ws
- --ws.addr=0.0.0.0
- --ws.api=admin,debug,eth,net,trace,txpool,web3,rpc,reth,ots,flashbots,mev
- --ws.origins=*
- --ws.port=8545
- --authrpc.addr=0.0.0.0
- --authrpc.jwtsecret=/jwtsecret
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${BASE_SEPOLIA_OP_RETH_MINIMAL_TRACE_DATA:-base-sepolia-op-reth-minimal-trace}:/root/.local/share/reth
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-reth-minimal-trace-stripprefix.stripprefix.prefixes=/base-sepolia-op-reth-minimal
- traefik.http.services.base-sepolia-op-reth-minimal-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-minimal-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-minimal-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-minimal-trace.rule=Host(`$DOMAIN`) && (Path(`/base-sepolia-op-reth-minimal`) || Path(`/base-sepolia-op-reth-minimal/`))}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-reth-minimal-trace.rule=Path(`/base-sepolia-op-reth-minimal`) || Path(`/base-sepolia-op-reth-minimal/`)}
- traefik.http.routers.base-sepolia-op-reth-minimal-trace.middlewares=base-sepolia-op-reth-minimal-trace-stripprefix, ipallowlist
shm_size: 2gb
base-sepolia-op-reth-minimal-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 17165:17165
- 17165:17165/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=84532
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-sepolia-op-reth-minimal:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=17165
- KONA_NODE_P2P_LISTEN_UDP_PORT=17165
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-sepolia-op-reth-minimal:
condition: service_started
restart: true
networks:
- chains
volumes:
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-reth-minimal-trace-node-stripprefix.stripprefix.prefixes=/base-sepolia-op-reth-minimal/node
- traefik.http.services.base-sepolia-op-reth-minimal-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-minimal-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-minimal-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-minimal-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-sepolia-op-reth-minimal/node`)}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-reth-minimal-trace-node.rule=PathPrefix(`/base-sepolia-op-reth-minimal/node`)}
- traefik.http.routers.base-sepolia-op-reth-minimal-trace-node.middlewares=base-sepolia-op-reth-minimal-trace-node-stripprefix, ipallowlist
volumes:
base-sepolia-op-reth-minimal-trace:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base-sepolia
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
- name: eth_maxPriorityFeePerGas
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=base-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=12165
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=12165
- --engine.cross-block-cache-size=${BASE_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=base-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11147
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11147
- --engine.cross-block-cache-size=${BASE_SEPOLIA_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -74,6 +74,10 @@ services:
- --bootnodes=enode://5ecd6d2054a58fa00729b73396044a35e6aceeafe58373d2f26b3f50a3934175fb56f8efa538381430889771613beaabf1177805910bbd34e4b4840320914690@mainnet-bootnodes.hsk.xyz:30615,enode://bd244da2a066e15f82d4bfb7f2732c5b5bac44cefb36cefef01a4c0e87e72b42004d012c9a294b8402ebf67491777f280ffbcc93a71157921d6d358b19ddac67@mainnet-bootnodes.hsk.xyz:30616,enode://a5bba6459ac3a075a4a8941478a4ef8d167460191c89632004b17e4b2d7beea52cdc1a2d376f35e996ad44ccac8db25f900700aad6991d015bdc4db072832063@mainnet-bootnodes.hsk.xyz:30617
- --chain=/config/genesis.json
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=12151
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=12151
- --engine.cross-block-cache-size=${HASHKEYCHAIN_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -74,6 +74,10 @@ services:
- --bootnodes=enode://5ecd6d2054a58fa00729b73396044a35e6aceeafe58373d2f26b3f50a3934175fb56f8efa538381430889771613beaabf1177805910bbd34e4b4840320914690@mainnet-bootnodes.hsk.xyz:30615,enode://bd244da2a066e15f82d4bfb7f2732c5b5bac44cefb36cefef01a4c0e87e72b42004d012c9a294b8402ebf67491777f280ffbcc93a71157921d6d358b19ddac67@mainnet-bootnodes.hsk.xyz:30616,enode://a5bba6459ac3a075a4a8941478a4ef8d167460191c89632004b17e4b2d7beea52cdc1a2d376f35e996ad44ccac8db25f900700aad6991d015bdc4db072832063@mainnet-bootnodes.hsk.xyz:30617
- --chain=/config/genesis.json
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=12151
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=12151
- --engine.cross-block-cache-size=${HASHKEYCHAIN_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=ink-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14373
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14373
- --engine.cross-block-cache-size=${INK_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=ink-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14373
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14373
- --engine.cross-block-cache-size=${INK_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=ink-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11068
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11068
- --engine.cross-block-cache-size=${INK_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=ink-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11068
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11068
- --engine.cross-block-cache-size=${INK_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=ink-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14236
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14236
- --engine.cross-block-cache-size=${INK_SEPOLIA_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=ink-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14236
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14236
- --engine.cross-block-cache-size=${INK_SEPOLIA_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -46,9 +46,6 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 14265:14265
- 14265:14265/udp
expose:
- 8545
- 9001
@@ -61,12 +58,11 @@ services:
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --disable-discovery
- --engine.cross-block-cache-size=${KATANA_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=14265
- --rollup.sequencer-http=https://rpc.katana.network
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048
@@ -126,7 +122,7 @@ services:
- OP_NODE_L2_ENGINE_KIND=reth
- OP_NODE_L2_ENGINE_RPC=http://katana-mainnet-archive:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_L2_SKIP_SYNC_START_CHECK=false
- OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true
@@ -134,6 +130,7 @@ services:
- OP_NODE_OVERRIDE_ISTHMUS=1746806401
- OP_NODE_OVERRIDE_JOVIAN=1773066601
- OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_BOOTNODES=enode://7ecd63a274fff82da91b6e192cff66cee8d703e33a818c36257d8c9bd050cc81f334157cb03d4145a345d284afd66c91936cf8b8691e6947e3b0ad5d2ed82aca@34.19.21.27:9222?discport=30301,enode://d25ce99435982b04d60c4b41ba256b84b888626db7bee45a9419382300fbe907359ae5ef250346785bff8d3b9d07cd3e017a27e2ee3cfda3bcbb0ba762ac9674@bootnode.conduit.xyz:0?discport=30301,enode://2d4e7e9d48f4dd4efe9342706dd1b0024681bd4c3300d021f86fc75eab7865d4e0cbec6fbc883f011cfd6a57423e7e2f6e104baad2b744c3cafaec6bc7dc92c1@34.65.43.171:0?discport=30305,enode://9d7a3efefe442351217e73b3a593bcb8efffb55b4807699972145324eab5e6b382152f8d24f6301baebbfb5ecd4127bd3faab2842c04cd432bdf50ba092f6645@34.65.109.126:0?discport=30305
- OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=19265
- OP_NODE_P2P_LISTEN_UDP_PORT=19265
@@ -143,6 +140,7 @@ services:
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_SYNCMODE_OFFSET_EL_SAFE=12h
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -46,9 +46,6 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 13767:13767
- 13767:13767/udp
expose:
- 8545
- 9001
@@ -61,13 +58,12 @@ services:
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --disable-discovery
- --engine.cross-block-cache-size=${KATANA_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=13767
- --rollup.sequencer-http=https://rpc.katana.network
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048
@@ -127,7 +123,7 @@ services:
- OP_NODE_L2_ENGINE_KIND=reth
- OP_NODE_L2_ENGINE_RPC=http://katana-mainnet:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_L2_SKIP_SYNC_START_CHECK=false
- OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true
@@ -135,6 +131,7 @@ services:
- OP_NODE_OVERRIDE_ISTHMUS=1746806401
- OP_NODE_OVERRIDE_JOVIAN=1773066601
- OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_BOOTNODES=enode://7ecd63a274fff82da91b6e192cff66cee8d703e33a818c36257d8c9bd050cc81f334157cb03d4145a345d284afd66c91936cf8b8691e6947e3b0ad5d2ed82aca@34.19.21.27:9222?discport=30301,enode://d25ce99435982b04d60c4b41ba256b84b888626db7bee45a9419382300fbe907359ae5ef250346785bff8d3b9d07cd3e017a27e2ee3cfda3bcbb0ba762ac9674@bootnode.conduit.xyz:0?discport=30301,enode://2d4e7e9d48f4dd4efe9342706dd1b0024681bd4c3300d021f86fc75eab7865d4e0cbec6fbc883f011cfd6a57423e7e2f6e104baad2b744c3cafaec6bc7dc92c1@34.65.43.171:0?discport=30305,enode://9d7a3efefe442351217e73b3a593bcb8efffb55b4807699972145324eab5e6b382152f8d24f6301baebbfb5ecd4127bd3faab2842c04cd432bdf50ba092f6645@34.65.109.126:0?discport=30305
- OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=18767
- OP_NODE_P2P_LISTEN_UDP_PORT=18767
@@ -144,6 +141,7 @@ services:
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_SYNCMODE_OFFSET_EL_SAFE=12h
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -46,20 +46,29 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 10598:10598
- 10598:10598/udp
expose:
- 8545
- 9001
- 8551
entrypoint: [op-reth, node]
command:
- --bootnodes=enode://87a32fd13bd596b2ffca97020e31aef4ddcc1bbd4b95bb633d16c1329f654f34049ed240a36b449fda5e5225d70fe40bc667f53c304b71f8e68fc9d448690b51@3.231.138.188:30301,enode://ca21ea8f176adb2e229ce2d700830c844af0ea941a1d8152a9513b966fe525e809c3a6c73a2c18a12b74ed6ec4380edf91662778fe0b79f6a591236e49e176f9@184.72.129.189:30301,enode://acf4507a211ba7c1e52cdf4eef62cdc3c32e7c9c47998954f7ba024026f9a6b2150cd3f0b734d9c78e507ab70d59ba61dfe5c45e1078c7ad0775fb251d7735a2@3.220.145.177:30301,enode://8a5a5006159bf079d06a04e5eceab2a1ce6e0f721875b2a9c96905336219dbe14203d38f70f3754686a6324f786c2f9852d8c0dd3adac2d080f4db35efc678c5@3.231.11.52:30301,enode://cdadbe835308ad3557f9a1de8db411da1a260a98f8421d62da90e71da66e55e98aaa8e90aa7ce01b408a54e4bd2253d701218081ded3dbe5efbbc7b41d7cef79@54.198.153.150:30301
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --disable-discovery
- --discovery.addr=0.0.0.0
- --discovery.port=10598
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=10598
- --engine.cross-block-cache-size=${LISK_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=10598
- --rollup.sequencer-http=https://rpc.api.lisk.com
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048

View File

@@ -46,21 +46,30 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 12812:12812
- 12812:12812/udp
expose:
- 8545
- 9001
- 8551
entrypoint: [op-reth, node]
command:
- --bootnodes=enode://87a32fd13bd596b2ffca97020e31aef4ddcc1bbd4b95bb633d16c1329f654f34049ed240a36b449fda5e5225d70fe40bc667f53c304b71f8e68fc9d448690b51@3.231.138.188:30301,enode://ca21ea8f176adb2e229ce2d700830c844af0ea941a1d8152a9513b966fe525e809c3a6c73a2c18a12b74ed6ec4380edf91662778fe0b79f6a591236e49e176f9@184.72.129.189:30301,enode://acf4507a211ba7c1e52cdf4eef62cdc3c32e7c9c47998954f7ba024026f9a6b2150cd3f0b734d9c78e507ab70d59ba61dfe5c45e1078c7ad0775fb251d7735a2@3.220.145.177:30301,enode://8a5a5006159bf079d06a04e5eceab2a1ce6e0f721875b2a9c96905336219dbe14203d38f70f3754686a6324f786c2f9852d8c0dd3adac2d080f4db35efc678c5@3.231.11.52:30301,enode://cdadbe835308ad3557f9a1de8db411da1a260a98f8421d62da90e71da66e55e98aaa8e90aa7ce01b408a54e4bd2253d701218081ded3dbe5efbbc7b41d7cef79@54.198.153.150:30301
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --disable-discovery
- --discovery.addr=0.0.0.0
- --discovery.port=12812
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=12812
- --engine.cross-block-cache-size=${LISK_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=12812
- --rollup.sequencer-http=https://rpc.api.lisk.com
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=metal
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11194
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11194
- --engine.cross-block-cache-size=${METAL_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=metal
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11194
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11194
- --engine.cross-block-cache-size=${METAL_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -20,17 +20,17 @@ x-logging-defaults: &logging-defaults
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/base-mainnet-op-reth-pruned-trace--kona.yml
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/mode-mainnet-op-reth-pruned-trace--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-mainnet-op-reth-pruned \
# curl -X POST https://${IP}.traefik.me/mode-mainnet-op-reth-pruned \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-mainnet-op-reth-pruned:
image: ${BASE_RETH_IMAGE:-ghcr.io/base/node-reth}:${BASE_MAINNET_RETH_VERSION:-v1.1.1}
mode-mainnet-op-reth-pruned:
image: ${MODE_RETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-reth}:${MODE_MAINNET_RETH_VERSION:-v2.3.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -47,24 +47,30 @@ services:
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 14759:14759
- 14759:14759/udp
- 14035:14035
- 14035:14035/udp
expose:
- 8545
- 9001
- 8551
entrypoint: [/app/base-reth-node, node]
entrypoint: [op-reth, node]
command:
- --chain=base
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --engine.cross-block-cache-size=${BASE_MAINNET_RETH_STATE_CACHE:-4096}
- --discovery.addr=0.0.0.0
- --discovery.port=14035
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14035
- --engine.cross-block-cache-size=${MODE_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=14759
- --rollup.sequencer-http=https://mainnet-sequencer.base.org
- --port=14035
- --rollup.historicalrpc=${MODE_MAINNET_CLASSIC_ARCHIVE_RPC:-https://mainnet.mode.network}
- --rollup.sequencer-http=https://mainnet.mode.network
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048
- --rpc.gascap=600000000
@@ -89,7 +95,8 @@ services:
networks:
- chains
volumes:
- ${BASE_MAINNET_OP_RETH_PRUNED_TRACE_DATA:-base-mainnet-op-reth-pruned-trace}:/root/.local/share/reth
- ${MODE_MAINNET_OP_RETH_PRUNED_TRACE_DATA:-mode-mainnet-op-reth-pruned-trace}:/root/.local/share/reth
- ./op/mode/mainnet:/config
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
@@ -98,47 +105,48 @@ services:
- prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-reth-pruned-trace-stripprefix.stripprefix.prefixes=/base-mainnet-op-reth-pruned
- traefik.http.services.base-mainnet-op-reth-pruned-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-pruned-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-pruned-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-pruned-trace.rule=Host(`$DOMAIN`) && (Path(`/base-mainnet-op-reth-pruned`) || Path(`/base-mainnet-op-reth-pruned/`))}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-reth-pruned-trace.rule=Path(`/base-mainnet-op-reth-pruned`) || Path(`/base-mainnet-op-reth-pruned/`)}
- traefik.http.routers.base-mainnet-op-reth-pruned-trace.middlewares=base-mainnet-op-reth-pruned-trace-stripprefix, ipallowlist
- traefik.http.middlewares.mode-mainnet-op-reth-pruned-trace-stripprefix.stripprefix.prefixes=/mode-mainnet-op-reth-pruned
- traefik.http.services.mode-mainnet-op-reth-pruned-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.mode-mainnet-op-reth-pruned-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.mode-mainnet-op-reth-pruned-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.mode-mainnet-op-reth-pruned-trace.rule=Host(`$DOMAIN`) && (Path(`/mode-mainnet-op-reth-pruned`) || Path(`/mode-mainnet-op-reth-pruned/`))}
- ${NO_SSL:+traefik.http.routers.mode-mainnet-op-reth-pruned-trace.rule=Path(`/mode-mainnet-op-reth-pruned`) || Path(`/mode-mainnet-op-reth-pruned/`)}
- traefik.http.routers.mode-mainnet-op-reth-pruned-trace.middlewares=mode-mainnet-op-reth-pruned-trace-stripprefix, ipallowlist
shm_size: 2gb
base-mainnet-op-reth-pruned-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_MAINNET_KONA_VERSION:-v1.6.1}
mode-mainnet-op-reth-pruned-node:
image: ${MODE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${MODE_MAINNET_KONA_VERSION:-v1.6.1}
ports:
- 19759:19759
- 19759:19759/udp
- 19035:19035
- 19035:19035/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_ETH_RPC=${MODE_MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=8453
- KONA_NODE_L2_CHAIN_ID=34443
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-mainnet-op-reth-pruned:8551
- KONA_NODE_L2_ENGINE_RPC=http://mode-mainnet-op-reth-pruned:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
- KONA_NODE_MODE=Validator
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=19759
- KONA_NODE_P2P_LISTEN_UDP_PORT=19759
- KONA_NODE_P2P_LISTEN_TCP_PORT=19035
- KONA_NODE_P2P_LISTEN_UDP_PORT=19035
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-mainnet-op-reth-pruned:
mode-mainnet-op-reth-pruned:
condition: service_started
restart: true
networks:
- chains
volumes:
- ./op/mode/mainnet:/config
- .jwtsecret:/jwtsecret:ro
logging: *logging-defaults
labels:
@@ -146,16 +154,16 @@ services:
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-mainnet-op-reth-pruned-trace-node-stripprefix.stripprefix.prefixes=/base-mainnet-op-reth-pruned/node
- traefik.http.services.base-mainnet-op-reth-pruned-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-pruned-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-pruned-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-mainnet-op-reth-pruned-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-mainnet-op-reth-pruned/node`)}
- ${NO_SSL:+traefik.http.routers.base-mainnet-op-reth-pruned-trace-node.rule=PathPrefix(`/base-mainnet-op-reth-pruned/node`)}
- traefik.http.routers.base-mainnet-op-reth-pruned-trace-node.middlewares=base-mainnet-op-reth-pruned-trace-node-stripprefix, ipallowlist
- traefik.http.middlewares.mode-mainnet-op-reth-pruned-trace-node-stripprefix.stripprefix.prefixes=/mode-mainnet-op-reth-pruned/node
- traefik.http.services.mode-mainnet-op-reth-pruned-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.mode-mainnet-op-reth-pruned-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.mode-mainnet-op-reth-pruned-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.mode-mainnet-op-reth-pruned-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/mode-mainnet-op-reth-pruned/node`)}
- ${NO_SSL:+traefik.http.routers.mode-mainnet-op-reth-pruned-trace-node.rule=PathPrefix(`/mode-mainnet-op-reth-pruned/node`)}
- traefik.http.routers.mode-mainnet-op-reth-pruned-trace-node.middlewares=mode-mainnet-op-reth-pruned-trace-node-stripprefix, ipallowlist
volumes:
base-mainnet-op-reth-pruned-trace:
mode-mainnet-op-reth-pruned-trace:
x-upstreams:
- id: $${ID}
@@ -169,7 +177,7 @@ x-upstreams:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base
chain: mode
method-groups:
enabled:
- debug

View File

@@ -20,17 +20,17 @@ x-logging-defaults: &logging-defaults
# ...
# IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/base-sepolia-op-reth-pruned-trace--kona.yml
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/mode-sepolia-op-reth-pruned-trace--kona.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/base-sepolia-op-reth-pruned \
# curl -X POST https://${IP}.traefik.me/mode-sepolia-op-reth-pruned \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
base-sepolia-op-reth-pruned:
image: ${BASE_RETH_IMAGE:-ghcr.io/base/node-reth}:${BASE_SEPOLIA_RETH_VERSION:-v1.1.0}
mode-sepolia-op-reth-pruned:
image: ${MODE_RETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-reth}:${MODE_SEPOLIA_RETH_VERSION:-v2.3.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -46,25 +46,22 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 11147:11147
- 11147:11147/udp
expose:
- 8545
- 9001
- 8551
entrypoint: [/app/base-reth-node, node]
entrypoint: [op-reth, node]
command:
- --chain=base-sepolia
- --chain=mode-sepolia
- --datadir=/root/.local/share/reth
- --engine.cross-block-cache-size=${BASE_SEPOLIA_RETH_STATE_CACHE:-4096}
- --disable-discovery
- --engine.cross-block-cache-size=${MODE_SEPOLIA_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=11147
- --rollup.sequencer-http=https://sepolia-sequencer.base.org
- --rollup.historicalrpc=${MODE_SEPOLIA_CLASSIC_ARCHIVE_RPC:-https://sepolia.mode.network}
- --rollup.sequencer-http=https://sepolia.mode.network
- --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048
- --rpc.gascap=600000000
@@ -89,7 +86,7 @@ services:
networks:
- chains
volumes:
- ${BASE_SEPOLIA_OP_RETH_PRUNED_TRACE_DATA:-base-sepolia-op-reth-pruned-trace}:/root/.local/share/reth
- ${MODE_SEPOLIA_OP_RETH_PRUNED_TRACE_DATA:-mode-sepolia-op-reth-pruned-trace}:/root/.local/share/reth
- .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk
logging: *logging-defaults
@@ -98,28 +95,28 @@ services:
- prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-reth-pruned-trace-stripprefix.stripprefix.prefixes=/base-sepolia-op-reth-pruned
- traefik.http.services.base-sepolia-op-reth-pruned-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-pruned-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-pruned-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-pruned-trace.rule=Host(`$DOMAIN`) && (Path(`/base-sepolia-op-reth-pruned`) || Path(`/base-sepolia-op-reth-pruned/`))}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-reth-pruned-trace.rule=Path(`/base-sepolia-op-reth-pruned`) || Path(`/base-sepolia-op-reth-pruned/`)}
- traefik.http.routers.base-sepolia-op-reth-pruned-trace.middlewares=base-sepolia-op-reth-pruned-trace-stripprefix, ipallowlist
- traefik.http.middlewares.mode-sepolia-op-reth-pruned-trace-stripprefix.stripprefix.prefixes=/mode-sepolia-op-reth-pruned
- traefik.http.services.mode-sepolia-op-reth-pruned-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.mode-sepolia-op-reth-pruned-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.mode-sepolia-op-reth-pruned-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.mode-sepolia-op-reth-pruned-trace.rule=Host(`$DOMAIN`) && (Path(`/mode-sepolia-op-reth-pruned`) || Path(`/mode-sepolia-op-reth-pruned/`))}
- ${NO_SSL:+traefik.http.routers.mode-sepolia-op-reth-pruned-trace.rule=Path(`/mode-sepolia-op-reth-pruned`) || Path(`/mode-sepolia-op-reth-pruned/`)}
- traefik.http.routers.mode-sepolia-op-reth-pruned-trace.middlewares=mode-sepolia-op-reth-pruned-trace-stripprefix, ipallowlist
shm_size: 2gb
base-sepolia-op-reth-pruned-node:
image: ${BASE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${BASE_SEPOLIA_KONA_VERSION:-v1.6.1}
mode-sepolia-op-reth-pruned-node:
image: ${MODE_KONA_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/kona-node}:${MODE_SEPOLIA_KONA_VERSION:-v1.6.1}
ports:
- 16147:16147
- 16147:16147/udp
- 15994:15994
- 15994:15994/udp
environment:
- KONA_METRICS_ADDR=0.0.0.0
- KONA_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- KONA_NODE_L1_ETH_RPC=${BASE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_ETH_RPC=${MODE_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- KONA_NODE_L1_TRUST_RPC=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- KONA_NODE_L2_CHAIN_ID=84532
- KONA_NODE_L2_CHAIN_ID=919
- KONA_NODE_L2_ENGINE_AUTH=/jwtsecret
- KONA_NODE_L2_ENGINE_RPC=http://base-sepolia-op-reth-pruned:8551
- KONA_NODE_L2_ENGINE_RPC=http://mode-sepolia-op-reth-pruned:8551
- KONA_NODE_L2_ENGINE_TIMEOUT=120000
- KONA_NODE_L2_TRUST_RPC=true
- KONA_NODE_METRICS_PORT=7300
@@ -127,14 +124,14 @@ services:
- KONA_NODE_OVERRIDE_PECTRA_BLOB_SCHEDULE=1742486400
- KONA_NODE_P2P_ADVERTISE_IP=${IP}
- KONA_NODE_P2P_LISTEN_IP=0.0.0.0
- KONA_NODE_P2P_LISTEN_TCP_PORT=16147
- KONA_NODE_P2P_LISTEN_UDP_PORT=16147
- KONA_NODE_P2P_LISTEN_TCP_PORT=15994
- KONA_NODE_P2P_LISTEN_UDP_PORT=15994
- KONA_NODE_RPC_ADDR=0.0.0.0
- KONA_NODE_RPC_PORT=9545
entrypoint: [kona-node, node]
restart: unless-stopped
depends_on:
base-sepolia-op-reth-pruned:
mode-sepolia-op-reth-pruned:
condition: service_started
restart: true
networks:
@@ -147,16 +144,16 @@ services:
- prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics
- traefik.enable=true
- traefik.http.middlewares.base-sepolia-op-reth-pruned-trace-node-stripprefix.stripprefix.prefixes=/base-sepolia-op-reth-pruned/node
- traefik.http.services.base-sepolia-op-reth-pruned-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-pruned-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-pruned-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.base-sepolia-op-reth-pruned-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/base-sepolia-op-reth-pruned/node`)}
- ${NO_SSL:+traefik.http.routers.base-sepolia-op-reth-pruned-trace-node.rule=PathPrefix(`/base-sepolia-op-reth-pruned/node`)}
- traefik.http.routers.base-sepolia-op-reth-pruned-trace-node.middlewares=base-sepolia-op-reth-pruned-trace-node-stripprefix, ipallowlist
- traefik.http.middlewares.mode-sepolia-op-reth-pruned-trace-node-stripprefix.stripprefix.prefixes=/mode-sepolia-op-reth-pruned/node
- traefik.http.services.mode-sepolia-op-reth-pruned-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.mode-sepolia-op-reth-pruned-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.mode-sepolia-op-reth-pruned-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.mode-sepolia-op-reth-pruned-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/mode-sepolia-op-reth-pruned/node`)}
- ${NO_SSL:+traefik.http.routers.mode-sepolia-op-reth-pruned-trace-node.rule=PathPrefix(`/mode-sepolia-op-reth-pruned/node`)}
- traefik.http.routers.mode-sepolia-op-reth-pruned-trace-node.middlewares=mode-sepolia-op-reth-pruned-trace-node-stripprefix, ipallowlist
volumes:
base-sepolia-op-reth-pruned-trace:
mode-sepolia-op-reth-pruned-trace:
x-upstreams:
- id: $${ID}
@@ -170,7 +167,7 @@ x-upstreams:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: base-sepolia
chain: mode-testnet
method-groups:
enabled:
- debug

View File

@@ -58,6 +58,10 @@ services:
- --chain=optimism
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11114
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11114
- --engine.cross-block-cache-size=${OP_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -58,6 +58,10 @@ services:
- --chain=optimism
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11114
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11114
- --engine.cross-block-cache-size=${OP_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -58,6 +58,10 @@ services:
- --chain=optimism
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11845
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11845
- --engine.cross-block-cache-size=${OP_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -58,6 +58,10 @@ services:
- --chain=optimism
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11845
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11845
- --engine.cross-block-cache-size=${OP_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -58,6 +58,10 @@ services:
- --chain=optimism
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=13985
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=13985
- --engine.cross-block-cache-size=${OP_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -58,6 +58,10 @@ services:
- --chain=optimism
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=13985
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=13985
- --engine.cross-block-cache-size=${OP_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=optimism-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=12326
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=12326
- --engine.cross-block-cache-size=${OP_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=optimism-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14859
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14859
- --engine.cross-block-cache-size=${OP_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=optimism-sepolia
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14442
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14442
- --engine.cross-block-cache-size=${OP_SEPOLIA_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

View File

@@ -46,9 +46,6 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 11763:11763
- 11763:11763/udp
expose:
- 8545
- 9001
@@ -62,12 +59,11 @@ services:
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --disable-discovery
- --engine.cross-block-cache-size=${RONIN_SAIGON_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=11763
- --rollup.historicalrpc=${RONIN_SAIGON_CLASSIC_ARCHIVE_RPC:-https://rpc-ronin-saigon-bfz9fadqzl.t.conduit.xyz}
- --rollup.sequencer-http=https://rpc-saigon-testnet-cc58e966ql.t.conduit.xyz
- --rpc-cache.max-blocks=10000
@@ -150,7 +146,7 @@ services:
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=execution-layer
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -46,9 +46,6 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root
ports:
- 13446:13446
- 13446:13446/udp
expose:
- 8545
- 9001
@@ -62,13 +59,12 @@ services:
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --disable-discovery
- --engine.cross-block-cache-size=${RONIN_SAIGON_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --nat=extip:${IP}
- --port=13446
- --rollup.historicalrpc=${RONIN_SAIGON_CLASSIC_ARCHIVE_RPC:-https://rpc-ronin-saigon-bfz9fadqzl.t.conduit.xyz}
- --rollup.sequencer-http=https://rpc-saigon-testnet-cc58e966ql.t.conduit.xyz
- --rpc-cache.max-blocks=10000
@@ -151,7 +147,7 @@ services:
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=execution-layer
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=soneium
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14133
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14133
- --engine.cross-block-cache-size=${SONEIUM_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=soneium
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=14133
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14133
- --engine.cross-block-cache-size=${SONEIUM_MAINNET_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50
- --max-outbound-peers=50

View File

@@ -57,6 +57,10 @@ services:
command:
- --chain=soneium
- --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0
- --discovery.port=11080
- --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=11080
- --engine.cross-block-cache-size=${SONEIUM_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50

Some files were not shown because too many files have changed in this diff Show More