Compare commits

..

2 Commits

43 changed files with 1559 additions and 15944 deletions

View File

@@ -116,7 +116,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: chain: everclear-sepolia
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -117,7 +117,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: chain: everclear-sepolia
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -107,7 +107,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: avalanche-fuji chain: avalanche
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -107,7 +107,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: avalanche-fuji chain: avalanche
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -107,7 +107,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: avalanche-fuji chain: avalanche
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -107,7 +107,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: avalanche-fuji chain: avalanche
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -107,7 +107,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: avalanche-fuji chain: avalanche
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -61,7 +61,7 @@ x-logging-defaults: &logging-defaults
services: services:
berachain-bartio-reth: berachain-bartio-reth:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BARTIO_RETH_VERSION:-v1.4.4} image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BARTIO_RETH_VERSION:-v1.4.0}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle 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: services:
berachain-bartio-reth-pruned: berachain-bartio-reth-pruned:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BARTIO_RETH_VERSION:-v1.4.4} image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BARTIO_RETH_VERSION:-v1.4.0}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle 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: services:
berachain-bepolia-reth: berachain-bepolia-reth:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.4} image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.3-rc.0}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle 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: services:
berachain-bepolia-reth-pruned: berachain-bepolia-reth-pruned:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.4} image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_BEPOLIA_RETH_VERSION:-v1.4.3-rc.0}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle 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: services:
berachain-mainnet-reth: berachain-mainnet-reth:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_MAINNET_RETH_VERSION:-v1.4.4} image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_MAINNET_RETH_VERSION:-v1.4.2}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle 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: services:
berachain-mainnet-reth-pruned: berachain-mainnet-reth-pruned:
image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_MAINNET_RETH_VERSION:-v1.4.4} image: ${BERACHAIN_RETH_IMAGE:-ghcr.io/berachain/bera-reth}:${BERACHAIN_MAINNET_RETH_VERSION:-v1.4.2}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -521,7 +521,7 @@
"chain": "sepolia", "chain": "sepolia",
"client": "nitro", "client": "nitro",
"compose_file": "arb/nitro/connext-sepolia-nitro-archive-leveldb-hash", "compose_file": "arb/nitro/connext-sepolia-nitro-archive-leveldb-hash",
"drpc_chain": null, "drpc_chain": "everclear-sepolia",
"features": [ "features": [
"hash", "hash",
"leveldb" "leveldb"
@@ -539,7 +539,7 @@
"chain": "sepolia", "chain": "sepolia",
"client": "nitro", "client": "nitro",
"compose_file": "arb/nitro/connext-sepolia-nitro-pruned-pebble-path", "compose_file": "arb/nitro/connext-sepolia-nitro-pruned-pebble-path",
"drpc_chain": null, "drpc_chain": "everclear-sepolia",
"features": [ "features": [
"path", "path",
"pebble" "pebble"
@@ -1092,7 +1092,7 @@
"chain": "fuji", "chain": "fuji",
"client": "go", "client": "go",
"compose_file": "avalanche/go/avalanche-fuji-go-archive-leveldb", "compose_file": "avalanche/go/avalanche-fuji-go-archive-leveldb",
"drpc_chain": "avalanche-fuji", "drpc_chain": "avalanche",
"features": [ "features": [
"leveldb" "leveldb"
], ],
@@ -1109,7 +1109,7 @@
"chain": "fuji", "chain": "fuji",
"client": "go", "client": "go",
"compose_file": "avalanche/go/avalanche-fuji-go-pruned-leveldb", "compose_file": "avalanche/go/avalanche-fuji-go-pruned-leveldb",
"drpc_chain": "avalanche-fuji", "drpc_chain": "avalanche",
"features": [ "features": [
"leveldb" "leveldb"
], ],
@@ -1126,7 +1126,7 @@
"chain": "fuji", "chain": "fuji",
"client": "go", "client": "go",
"compose_file": "avalanche/go/avalanche-fuji-go-pruned-pebbledb", "compose_file": "avalanche/go/avalanche-fuji-go-pruned-pebbledb",
"drpc_chain": "avalanche-fuji", "drpc_chain": "avalanche",
"features": [ "features": [
"leveldb" "leveldb"
], ],
@@ -1912,7 +1912,7 @@
"chain": "buffalo", "chain": "buffalo",
"client": "core", "client": "core",
"compose_file": "core/core/core-buffalo-core-pruned-pebble-path", "compose_file": "core/core/core-buffalo-core-pruned-pebble-path",
"drpc_chain": null, "drpc_chain": "core-testnet",
"features": [ "features": [
"path", "path",
"pebble" "pebble"
@@ -2002,7 +2002,7 @@
"chain": "pigeon", "chain": "pigeon",
"client": "core", "client": "core",
"compose_file": "core/core/core-pigeon-core-pruned-pebble-path", "compose_file": "core/core/core-pigeon-core-pruned-pebble-path",
"drpc_chain": "core-testnet", "drpc_chain": "core-pigeon",
"features": [ "features": [
"path", "path",
"pebble" "pebble"
@@ -2196,7 +2196,7 @@
"bonsai" "bonsai"
], ],
"network": "ethereum", "network": "ethereum",
"node": "nimbus", "node": null,
"relay": null, "relay": null,
"stack": null, "stack": null,
"type": "pruned", "type": "pruned",
@@ -3199,7 +3199,7 @@
"chain": "spark", "chain": "spark",
"client": "nethermind", "client": "nethermind",
"compose_file": "fuse/nethermind/fuse-spark-nethermind-archive-rocksdb-trace", "compose_file": "fuse/nethermind/fuse-spark-nethermind-archive-rocksdb-trace",
"drpc_chain": null, "drpc_chain": "fuse",
"features": [ "features": [
"rocksdb", "rocksdb",
"trace" "trace"
@@ -3217,7 +3217,7 @@
"chain": "spark", "chain": "spark",
"client": "nethermind", "client": "nethermind",
"compose_file": "fuse/nethermind/fuse-spark-nethermind-minimal-rocksdb-trace", "compose_file": "fuse/nethermind/fuse-spark-nethermind-minimal-rocksdb-trace",
"drpc_chain": null, "drpc_chain": "fuse",
"features": [ "features": [
"rocksdb", "rocksdb",
"trace" "trace"
@@ -3235,7 +3235,7 @@
"chain": "spark", "chain": "spark",
"client": "nethermind", "client": "nethermind",
"compose_file": "fuse/nethermind/fuse-spark-nethermind-pruned-rocksdb-trace", "compose_file": "fuse/nethermind/fuse-spark-nethermind-pruned-rocksdb-trace",
"drpc_chain": null, "drpc_chain": "fuse",
"features": [ "features": [
"rocksdb", "rocksdb",
"trace" "trace"
@@ -4429,7 +4429,7 @@
"trace" "trace"
], ],
"network": "metal", "network": "metal",
"node": null, "node": "kona",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -4446,7 +4446,7 @@
"trace" "trace"
], ],
"network": "metal", "network": "metal",
"node": null, "node": "kona",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -4625,20 +4625,20 @@
] ]
}, },
{ {
"chain": "minato-sepolia", "chain": "sepolia",
"client": "erigon", "client": "erigon",
"compose_file": "op/erigon/soneium-minato-sepolia-op-erigon-archive-trace", "compose_file": "op/erigon/soneium-miniato-sepolia-op-erigon-archive-trace",
"drpc_chain": "soneium-minato", "drpc_chain": "soneium",
"features": [ "features": [
"trace" "trace"
], ],
"network": "soneium", "network": "soneium-miniato",
"node": "node", "node": null,
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
"volumes": [ "volumes": [
"soneium-minato-sepolia-op-erigon-archive-trace" "soneium-miniato-sepolia-op-erigon-archive-trace"
] ]
}, },
{ {
@@ -5018,7 +5018,7 @@
"leveldb" "leveldb"
], ],
"network": "bnb", "network": "bnb",
"node": null, "node": "node",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -5036,7 +5036,7 @@
"pebble" "pebble"
], ],
"network": "bnb", "network": "bnb",
"node": null, "node": "node",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "pruned", "type": "pruned",
@@ -5054,7 +5054,7 @@
"leveldb" "leveldb"
], ],
"network": "bnb", "network": "bnb",
"node": null, "node": "node",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -5072,7 +5072,7 @@
"pebble" "pebble"
], ],
"network": "bnb", "network": "bnb",
"node": null, "node": "node",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "pruned", "type": "pruned",
@@ -6199,7 +6199,7 @@
"leveldb" "leveldb"
], ],
"network": "metal", "network": "metal",
"node": null, "node": "kona",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -6235,7 +6235,7 @@
"pebble" "pebble"
], ],
"network": "metal", "network": "metal",
"node": null, "node": "kona",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "pruned", "type": "pruned",
@@ -6271,7 +6271,7 @@
"leveldb" "leveldb"
], ],
"network": "metal", "network": "metal",
"node": null, "node": "kona",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -6307,7 +6307,7 @@
"pebble" "pebble"
], ],
"network": "metal", "network": "metal",
"node": null, "node": "kona",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "pruned", "type": "pruned",
@@ -6788,39 +6788,39 @@
] ]
}, },
{ {
"chain": "minato-sepolia", "chain": "sepolia",
"client": "geth", "client": "geth",
"compose_file": "op/geth/soneium-minato-sepolia-op-geth-archive-leveldb-hash", "compose_file": "op/geth/soneium-miniato-sepolia-op-geth-archive-leveldb-hash",
"drpc_chain": "soneium-minato", "drpc_chain": "soneium",
"features": [ "features": [
"hash", "hash",
"leveldb" "leveldb"
], ],
"network": "soneium", "network": "soneium-miniato",
"node": "node", "node": null,
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
"volumes": [ "volumes": [
"soneium-minato-sepolia-op-geth-archive-leveldb-hash" "soneium-miniato-sepolia-op-geth-archive-leveldb-hash"
] ]
}, },
{ {
"chain": "minato-sepolia", "chain": "sepolia",
"client": "geth", "client": "geth",
"compose_file": "op/geth/soneium-minato-sepolia-op-geth-pruned-pebble-path", "compose_file": "op/geth/soneium-miniato-sepolia-op-geth-pruned-pebble-path",
"drpc_chain": "soneium-minato", "drpc_chain": "soneium",
"features": [ "features": [
"path", "path",
"pebble" "pebble"
], ],
"network": "soneium", "network": "soneium-miniato",
"node": "node", "node": null,
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "pruned", "type": "pruned",
"volumes": [ "volumes": [
"soneium-minato-sepolia-op-geth-pruned-pebble-path" "soneium-miniato-sepolia-op-geth-pruned-pebble-path"
] ]
}, },
{ {
@@ -7293,6 +7293,78 @@
"xlayer-testnet-op-geth-pruned-pebble-path" "xlayer-testnet-op-geth-pruned-pebble-path"
] ]
}, },
{
"chain": "mainnet",
"client": "geth",
"compose_file": "op/geth/zircuit-mainnet-op-geth-archive-leveldb-hash",
"drpc_chain": "zircuit-mainnet",
"features": [
"hash",
"pebble"
],
"network": "zircuit",
"node": "node",
"relay": null,
"stack": "op",
"type": "archive",
"volumes": [
"zircuit-mainnet-op-geth-archive-leveldb-hash"
]
},
{
"chain": "mainnet",
"client": "geth",
"compose_file": "op/geth/zircuit-mainnet-op-geth-archive-pebble-hash",
"drpc_chain": "zircuit-mainnet",
"features": [
"hash",
"pebble"
],
"network": "zircuit",
"node": "node",
"relay": null,
"stack": "op",
"type": "archive",
"volumes": [
"zircuit-mainnet-op-geth-archive-pebble-hash"
]
},
{
"chain": "mainnet",
"client": "geth",
"compose_file": "op/geth/zircuit-mainnet-op-geth-pruned-pebble-hash",
"drpc_chain": "zircuit-mainnet",
"features": [
"hash",
"pebble"
],
"network": "zircuit",
"node": "node",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"zircuit-mainnet-op-geth-pruned-pebble-hash"
]
},
{
"chain": "mainnet",
"client": "geth",
"compose_file": "op/geth/zircuit-mainnet-op-geth-pruned-pebble-path",
"drpc_chain": "zircuit-mainnet",
"features": [
"hash",
"pebble"
],
"network": "zircuit",
"node": "node",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"zircuit-mainnet-op-geth-pruned-pebble-path"
]
},
{ {
"chain": "testnet", "chain": "testnet",
"client": "geth", "client": "geth",
@@ -7300,10 +7372,10 @@
"drpc_chain": "zircuit-testnet", "drpc_chain": "zircuit-testnet",
"features": [ "features": [
"hash", "hash",
"leveldb" "pebble"
], ],
"network": "zircuit", "network": "zircuit",
"node": null, "node": "node",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -7321,7 +7393,7 @@
"pebble" "pebble"
], ],
"network": "zircuit", "network": "zircuit",
"node": null, "node": "node",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
@@ -8101,7 +8173,7 @@
"trace" "trace"
], ],
"network": "metal", "network": "metal",
"node": null, "node": "kona",
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "pruned", "type": "pruned",
@@ -8419,37 +8491,37 @@
] ]
}, },
{ {
"chain": "minato-sepolia", "chain": "sepolia",
"client": "reth", "client": "reth",
"compose_file": "op/reth/soneium-minato-sepolia-op-reth-archive-trace", "compose_file": "op/reth/soneium-miniato-sepolia-op-reth-archive-trace",
"drpc_chain": "soneium-minato", "drpc_chain": "soneium",
"features": [ "features": [
"trace" "trace"
], ],
"network": "soneium", "network": "soneium-miniato",
"node": "node", "node": null,
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "archive", "type": "archive",
"volumes": [ "volumes": [
"soneium-minato-sepolia-op-reth-archive-trace" "soneium-miniato-sepolia-op-reth-archive-trace"
] ]
}, },
{ {
"chain": "minato-sepolia", "chain": "sepolia",
"client": "reth", "client": "reth",
"compose_file": "op/reth/soneium-minato-sepolia-op-reth-pruned-trace", "compose_file": "op/reth/soneium-miniato-sepolia-op-reth-pruned-trace",
"drpc_chain": "soneium-minato", "drpc_chain": "soneium",
"features": [ "features": [
"trace" "trace"
], ],
"network": "soneium", "network": "soneium-miniato",
"node": "node", "node": null,
"relay": null, "relay": null,
"stack": "op", "stack": "op",
"type": "pruned", "type": "pruned",
"volumes": [ "volumes": [
"soneium-minato-sepolia-op-reth-pruned-trace" "soneium-miniato-sepolia-op-reth-pruned-trace"
] ]
}, },
{ {
@@ -8677,7 +8749,7 @@
"chain": "garfield", "chain": "garfield",
"client": "reth", "client": "reth",
"compose_file": "op/reth/zircuit-garfield-op-reth-pruned-trace", "compose_file": "op/reth/zircuit-garfield-op-reth-pruned-trace",
"drpc_chain": "zircuit-garfield-testnet", "drpc_chain": "zircuit-testnet",
"features": [ "features": [
"trace" "trace"
], ],
@@ -8690,23 +8762,6 @@
"zircuit-garfield-op-reth-pruned-trace" "zircuit-garfield-op-reth-pruned-trace"
] ]
}, },
{
"chain": "mainnet",
"client": "reth",
"compose_file": "op/reth/zircuit-mainnet-op-reth-pruned-trace",
"drpc_chain": "zircuit-mainnet",
"features": [
"trace"
],
"network": "zircuit",
"node": "node",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"zircuit-mainnet-op-reth-pruned-trace"
]
},
{ {
"chain": "mainnet", "chain": "mainnet",
"client": "reth", "client": "reth",
@@ -9132,7 +9187,7 @@
"chain": "saigon", "chain": "saigon",
"client": "ronin", "client": "ronin",
"compose_file": "ronin/ronin/ronin-saigon-ronin-archive-leveldb-hash", "compose_file": "ronin/ronin/ronin-saigon-ronin-archive-leveldb-hash",
"drpc_chain": "ronin-saigon", "drpc_chain": null,
"features": [ "features": [
"hash", "hash",
"leveldb" "leveldb"
@@ -9150,7 +9205,7 @@
"chain": "saigon", "chain": "saigon",
"client": "ronin", "client": "ronin",
"compose_file": "ronin/ronin/ronin-saigon-ronin-pruned-pebble-hash", "compose_file": "ronin/ronin/ronin-saigon-ronin-pruned-pebble-hash",
"drpc_chain": "ronin-saigon", "drpc_chain": null,
"features": [ "features": [
"hash", "hash",
"pebble" "pebble"
@@ -9168,7 +9223,7 @@
"chain": "saigon", "chain": "saigon",
"client": "ronin", "client": "ronin",
"compose_file": "ronin/ronin/ronin-saigon-ronin-pruned-pebble-path", "compose_file": "ronin/ronin/ronin-saigon-ronin-pruned-pebble-path",
"drpc_chain": "ronin-saigon", "drpc_chain": null,
"features": [ "features": [
"hash", "hash",
"pebble" "pebble"
@@ -9328,7 +9383,7 @@
"pebble" "pebble"
], ],
"network": "shibarium", "network": "shibarium",
"node": null, "node": "heimdall",
"relay": null, "relay": null,
"stack": null, "stack": null,
"type": "archive", "type": "archive",
@@ -9347,7 +9402,7 @@
"pebble" "pebble"
], ],
"network": "shibarium", "network": "shibarium",
"node": null, "node": "heimdall",
"relay": null, "relay": null,
"stack": null, "stack": null,
"type": "pruned", "type": "pruned",
@@ -9426,7 +9481,7 @@
"chain": "testnet", "chain": "testnet",
"client": "sonic", "client": "sonic",
"compose_file": "sonic/sonic/sonic-testnet-sonic-archive", "compose_file": "sonic/sonic/sonic-testnet-sonic-archive",
"drpc_chain": "sonic-testnet-v2", "drpc_chain": "sonic-testnet",
"features": [], "features": [],
"network": "sonic", "network": "sonic",
"node": null, "node": null,
@@ -9441,7 +9496,7 @@
"chain": "testnet", "chain": "testnet",
"client": "sonic", "client": "sonic",
"compose_file": "sonic/sonic/sonic-testnet-sonic-pruned", "compose_file": "sonic/sonic/sonic-testnet-sonic-pruned",
"drpc_chain": "sonic-testnet-v2", "drpc_chain": "sonic-testnet",
"features": [], "features": [],
"network": "sonic", "network": "sonic",
"node": null, "node": null,
@@ -9983,7 +10038,7 @@
"trace" "trace"
], ],
"network": "taiko", "network": "taiko",
"node": null, "node": "driver",
"relay": null, "relay": null,
"stack": null, "stack": null,
"type": "archive", "type": "archive",
@@ -10000,7 +10055,7 @@
"trace" "trace"
], ],
"network": "taiko", "network": "taiko",
"node": null, "node": "driver",
"relay": null, "relay": null,
"stack": null, "stack": null,
"type": "pruned", "type": "pruned",

View File

@@ -115,7 +115,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: chain: core-testnet
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -115,7 +115,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: core-testnet chain: core-pigeon
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -96,8 +96,26 @@ services:
volumes: volumes:
fuse-spark-nethermind-archive-rocksdb-trace: fuse-spark-nethermind-archive-rocksdb-trace:
# fuse-spark (Sparknet, chainid 123) is ABSENT from dRPC chains.yaml - not a x-upstreams:
# servable dRPC chain. x-upstreams removed 2026-08-05 (it declared the MAINNET - id: $${ID}
# slug "fuse", which would have advertised testnet data as mainnet). This file is labels:
# hand-written (fuse has chains: null in context.yml); onboarding it to generation provider: $${PROVIDER}
# is the clean long-term fix. See chain-aliases.yaml fuse/spark: null. connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: fuse
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -99,8 +99,26 @@ services:
volumes: volumes:
fuse-spark-nethermind-minimal-rocksdb-trace: fuse-spark-nethermind-minimal-rocksdb-trace:
# fuse-spark (Sparknet, chainid 123) is ABSENT from dRPC chains.yaml - not a x-upstreams:
# servable dRPC chain. x-upstreams removed 2026-08-05 (it declared the MAINNET - id: $${ID}
# slug "fuse", which would have advertised testnet data as mainnet). This file is labels:
# hand-written (fuse has chains: null in context.yml); onboarding it to generation provider: $${PROVIDER}
# is the clean long-term fix. See chain-aliases.yaml fuse/spark: null. connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: fuse
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -94,8 +94,26 @@ services:
volumes: volumes:
fuse-spark-nethermind-pruned-rocksdb-trace: fuse-spark-nethermind-pruned-rocksdb-trace:
# fuse-spark (Sparknet, chainid 123) is ABSENT from dRPC chains.yaml - not a x-upstreams:
# servable dRPC chain. x-upstreams removed 2026-08-05 (it declared the MAINNET - id: $${ID}
# slug "fuse", which would have advertised testnet data as mainnet). This file is labels:
# hand-written (fuse has chains: null in context.yml); onboarding it to generation provider: $${PROVIDER}
# is the clean long-term fix. See chain-aliases.yaml fuse/spark: null. connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: fuse
method-groups:
enabled:
- debug
- filter
- trace
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -0,0 +1,223 @@
#!/bin/sh
# cometbft-common.sh — reusable CometBFT-node bootstrap helpers (family C).
#
# Source this from a chain-specific init.sh. It encapsulates the operations every
# CometBFT-consensus node needs (init, fetch config artifacts, patch config.toml /
# app.toml, seed priv_validator_state), extracted verbatim from the proven berachain
# beacon-kit entrypoint so callers inherit known-good behavior.
#
# Each function takes explicit arguments (paths/values) — it is binary-agnostic. The
# caller owns the binary name, the `<binary> init` invocation, the artifact URLs, and
# the final `exec <binary> start ...`. EL-driven chains (beacon-kit, morph) also call
# the JWT / engine-dial helpers; pure-consensus chains (gaiad) skip them.
#
# Conventions: POSIX sh (alpine). Config dir is conventionally $HOME_DIR/config.
# Used by: morph-node, gaiad (cosmos batch), and any future family-C chain.
# beacon-kit (berachain) keeps its own bespoke init.sh on purpose — do not retrofit it.
set -e
ct_log() { echo "[cometbft-init] $*"; }
# Ensure curl exists (alpine base images often omit it). Idempotent.
ct_require_curl() {
if ! command -v curl >/dev/null 2>&1; then
ct_log "installing curl"
apk add --no-cache curl
fi
}
# ct_fetch URL DEST [required]
# Download URL -> DEST. If the 3rd arg is "required", a failure is fatal;
# otherwise a missing/failed fetch is logged and skipped (returns 0).
ct_fetch() {
_url="$1"; _dest="$2"; _req="${3:-optional}"
[ -n "$_url" ] || { [ "$_req" = required ] && { ct_log "FATAL: empty URL for $_dest"; exit 1; }; return 0; }
if curl -fsSL "$_url" -o "$_dest"; then
ct_log "fetched $_url -> $_dest"
else
if [ "$_req" = required ]; then
ct_log "FATAL: failed to fetch required $_url"; exit 1
fi
ct_log "skip: could not fetch optional $_url"
fi
}
# ct_patch_p2p CONFIG_TOML IP P2P_PORT
# Bind p2p to 0.0.0.0:PORT and advertise IP:PORT (only within the [p2p] section).
ct_patch_p2p() {
_cfg="$1"; _ip="$2"; _port="$3"
[ -f "$_cfg" ] || { ct_log "patch_p2p: $_cfg missing, skipping"; return 0; }
_laddr="tcp:\\/\\/0\\.0\\.0\\.0\\:${_port}"
sed -i "/^\[p2p\]/,/^\[/{s|^laddr = .*|laddr = \"$_laddr\"|}" "$_cfg"
sed -i "/^\[p2p\]/,/^\[/{s|^external_address = .*|external_address = \"${_ip}:${_port}\"|}" "$_cfg"
}
# ct_merge_seeds CONFIG_TOML CONFIGURED_SEEDS [SEEDS_URL]
# Merge operator-configured seeds with an optional official seed list (1 entry per
# line, first line skipped like the berachain cl-seeds.txt header), dedupe, write.
ct_merge_seeds() {
_cfg="$1"; _seeds="$2"; _url="$3"
[ -f "$_cfg" ] || return 0
if [ -n "$_url" ]; then
_official=$(curl -f -s "$_url" | tail -n +2 | tr '\n' ',' | sed 's/,$//' || true)
if [ -n "$_official" ]; then
ct_log "merging official seeds from $_url"
_seeds=$(echo "${_seeds},${_official}" | tr ',' '\n' | sed '/^$/d' | sort -u | paste -sd,)
else
ct_log "no official seeds fetched from $_url (continuing with configured)"
fi
fi
if [ -n "$_seeds" ]; then
sed -i "s/^seeds = \".*\"/seeds = \"${_seeds}\"/" "$_cfg"
fi
}
# ct_set_persistent_peers CONFIG_TOML PEERS
# Handles both cometbft-classic `persistent_peers` (underscore) and forks that use
# `persistent-peers` (hyphen, e.g. sei) — patches whichever key is present.
ct_set_persistent_peers() {
_cfg="$1"; _peers="$2"
[ -f "$_cfg" ] || return 0
[ -n "$_peers" ] || return 0
sed -i "s/^persistent_peers = \".*\"/persistent_peers = \"${_peers}\"/" "$_cfg"
sed -i "s/^persistent-peers = \".*\"/persistent-peers = \"${_peers}\"/" "$_cfg"
return 0
}
# ct_set_moniker CONFIG_TOML MONIKER
ct_set_moniker() {
_cfg="$1"; _mon="$2"
[ -f "$_cfg" ] || return 0
[ -n "$_mon" ] && sed -i "s/^moniker = \".*\"/moniker = \"$_mon\"/" "$_cfg"
return 0
}
# ct_set_addrbook CONFIG_DIR ADDRBOOK_URL
# Optional: cosmos chains often seed an addrbook.json for faster peer discovery.
ct_set_addrbook() {
_dir="$1"; _url="$2"
[ -n "$_url" ] || return 0
ct_fetch "$_url" "$_dir/addrbook.json" optional
}
# ct_write_jwt CONFIG_DIR [JWT_SRC]
# EL-driven chains: copy the shared engine JWT (default /jwtsecret) into the config
# dir as jwt.hex so the CL can authenticate to the EL engine API.
ct_write_jwt() {
_dir="$1"; _src="${2:-/jwtsecret}"
[ -f "$_src" ] || { ct_log "write_jwt: $_src missing, skipping"; return 0; }
cat "$_src" > "$_dir/jwt.hex"
}
# ct_set_rpc_dial_url APP_TOML AUTH_RPC
# beacon-kit / app.toml-style EL engine endpoint (e.g. http://<el>:8551).
ct_set_rpc_dial_url() {
_app="$1"; _rpc="$2"
[ -f "$_app" ] || return 0
[ -n "$_rpc" ] && sed -i "s|^rpc-dial-url = \".*\"|rpc-dial-url = \"$_rpc\"|" "$_app"
return 0
}
# ct_seed_priv_validator_state HOME_DIR
# Ensure data/priv_validator_state.json exists (cometbft refuses to start without it
# when one is present in config/). Mirrors the berachain init.sh behavior.
ct_seed_priv_validator_state() {
_home="$1"
if [ -e "$_home/config/priv_validator_state.json" ] && [ ! -e "$_home/data/priv_validator_state.json" ]; then
mkdir -p "$_home/data"
cp "$_home/config/priv_validator_state.json" "$_home/data/priv_validator_state.json"
fi
return 0
}
# ct_apk PKG...
# Install alpine packages idempotently (most cosmos init scripts need curl, some jq).
ct_apk() {
apk add --no-cache "$@"
}
# ct_localize_home CONFIG_DIR
# Rewrite `~/` to `/root/` in config.toml + app.toml. Cosmos `init` writes home-relative
# paths; the container runs as root with a static home, so make paths absolute.
ct_localize_home() {
_dir="$1"
[ -f "$_dir/config.toml" ] && sed -i 's|~/|/root/|g' "$_dir/config.toml"
[ -f "$_dir/app.toml" ] && sed -i 's|~/|/root/|g' "$_dir/app.toml"
return 0
}
# ct_set_min_gas_prices APP_TOML PRICE
# Cosmos chains reject txs (and sometimes refuse to start) with an empty
# minimum-gas-prices. PRICE e.g. "0.01usei", "0.0025uatom", "0.01hqq".
ct_set_min_gas_prices() {
_app="$1"; _price="$2"
[ -f "$_app" ] || return 0
[ -n "$_price" ] || return 0
sed -i "s/minimum-gas-prices = \"\"/minimum-gas-prices = \"${_price}\"/g" "$_app"
return 0
}
# ct_configure_statesync CONFIG_TOML RPC_SERVERS [TRUST_OFFSET]
# Enable cometbft state-sync so a fresh node bootstraps near chainhead instead of
# replaying from genesis — the single biggest lever for "can't keep it at chainhead"
# chains. RPC_SERVERS = comma list of trusted RPC endpoints (>=2 recommended; a single
# endpoint is duplicated). TRUST_OFFSET = blocks below head to trust (default 2000).
# Requires jq + curl. No-op (logged) if head height can't be fetched.
ct_configure_statesync() {
_cfg="$1"; _rpc="$2"; _offset="${3:-2000}"
[ -f "$_cfg" ] || return 0
# NEVER re-arm statesync on a node that already has application state (a restored
# snapshot or a prior sync). Re-statesyncing over it leaves a broken/partial datadir and,
# for wasm chains, drops the wasm files -> startup panic. _cfg is $HOME/config/config.toml,
# so application state lives at $HOME/data/application.db.
_home=$(dirname "$(dirname "$_cfg")")
if [ -e "$_home/data/application.db" ]; then
ct_log "statesync: existing data dir, skipping"
return 0
fi
[ -n "$_rpc" ] || { ct_log "statesync: no RPC servers given, skipping"; return 0; }
_primary=$(echo "$_rpc" | cut -d, -f1)
_latest=$(curl -s "$_primary/block" | jq -r '.result.block.header.height // .block.header.height' 2>/dev/null || true)
if [ -z "$_latest" ] || [ "$_latest" = null ]; then
ct_log "statesync: could not read head height from $_primary, skipping"; return 0
fi
_trust_h=$((_latest - _offset))
_trust_hash=$(curl -s "$_primary/block?height=$_trust_h" | jq -r '.result.block_id.hash // .block_id.hash' 2>/dev/null || true)
[ -n "$_trust_hash" ] && [ "$_trust_hash" != null ] || { ct_log "statesync: no trust hash, skipping"; return 0; }
# second server defaults to the first (cometbft wants >=2 for light-client cross-check)
echo "$_rpc" | grep -q ',' || _rpc="$_rpc,$_rpc"
ct_log "statesync: enable trust_height=$_trust_h trust_hash=$_trust_hash"
# Patch ONLY the [statesync] section. CometBFT config.toml uses underscore keys
# (rpc_servers/trust_height/trust_hash); tolerate hyphen variants with [_-].
sed -i.bak -E "/^\[statesync\]/,/^\[/{
s|^([[:space:]]*enable[[:space:]]*=[[:space:]]*).*|\1true|
s|^([[:space:]]*rpc[_-]servers[[:space:]]*=[[:space:]]*).*|\1\"$_rpc\"|
s|^([[:space:]]*trust[_-]height[[:space:]]*=[[:space:]]*).*|\1$_trust_h|
s|^([[:space:]]*trust[_-]hash[[:space:]]*=[[:space:]]*).*|\1\"$_trust_hash\"|
}" "$_cfg"
return 0
}
# ct_ensure_wasm HOME_DIR WASM_SNAPSHOT_URL
# CosmWasm + IBC 08-wasm bytecode are FILES on disk that state-sync does NOT restore, so
# a state-synced wasm chain panics at startup ("wasmlckeeper failed initialize pinned codes
# / Error opening Wasm file"). Seed them from a wasm-only snapshot (e.g. polkachu
# cosmos_wasmonly.tar.lz4) when the wasm dir is missing/empty. No-op if URL unset or wasm
# already present. Best-effort (logs on failure); the fully robust path for wasm chains is a
# FULL snapshot restore. Requires lz4 + tar (installed here).
ct_ensure_wasm() {
_home="$1"; _url="$2"
[ -n "$_url" ] || return 0
if [ -d "$_home/wasm" ] && [ -n "$(ls -A "$_home/wasm" 2>/dev/null)" ]; then
return 0 # wasm already present
fi
ct_log "wasm: empty, fetching snapshot $_url"
ct_apk lz4 tar
if curl -sL "$_url" | lz4 -dc | tar -xf - -C "$_home"; then
ct_log "wasm: extracted into $_home"
else
ct_log "WARN wasm: fetch/extract failed ($_url)"
fi
return 0
}

95
haqq/scripts/init.sh Normal file → Executable file
View File

@@ -1,64 +1,65 @@
#!/bin/sh #!/bin/sh
# haqq (haqqd) entrypoint — family C, pure CometBFT (no EL). Thin: sources the
# shared cometbft-common.sh and orchestrates init + statesync bootstrap + start.
# Serves CometBFT RPC :26657 (the dshackle/traefik upstream).
# Genesis replay across ~25 Haqq network upgrades is impractical, so we statesync
# near head with the current binary.
set -e
. /usr/local/bin/cometbft-common.sh
set -e # Exit on failure HOME_DIR="/root/.haqqd"
CONFIG_DIR="$HOME_DIR/config"
CHAIN_ID="${CHAINID:-haqq_11235-1}"
CHAINNAME="${CHAINNAME:-mainnet}"
GENESIS_URL="${GENESIS_URL:-https://raw.githubusercontent.com/haqq-network/${CHAINNAME}/master/genesis.json}"
ADDRBOOK_URL="${ADDRBOOK_URL:-https://snapshots.polkachu.com/addrbook/haqq/addrbook.json}"
STATESYNC_RPC="${STATESYNC_RPC:-https://haqq-rpc.polkachu.com:443}"
MIN_GAS="${MIN_GAS:-0.01hqq}"
MONIKER="${MONIKER:-rpc-node}"
echo "MONIKER: $MONIKER" # Polkachu seeds + official Haqq network seeds for reliable peer discovery
SEEDS="${SEEDS:-936e27a05f3cfb090507dd810395cbbd8efbffb0@65.109.115.172:24056,f4675b63b8872fb9216efa99428eb5b1fb297393@65.109.104.118:61256,6c9a6fc0e0d94bf303075e46560832e652cffc14@65.108.71.137:24056,7c153a83@peer.haqq.mainnet.dteam.tech:28656}"
CHAINID=${CHAINID:-haqq_11235-1} # Optional persistent peers for additional bootstrap reliability
CHAINNAME=${CHAINNAME:-mainnet} PERSISTENT_PEERS="${PERSISTENT_PEERS:-17e0fd08f04e062d18412808b8bf134e9ad34508@65.109.109.189:10656,e000b992a0066eae9e87c66e0d65229a76647509@198.96.92.242:32656,7c153a83@peer.haqq.mainnet.dteam.tech:28656,235ac65359582357b04754e838496545b3ba6429@haqq-seed-1.allnodes.me:26656,9573a569016378765444095484840d7f543d2800@haqq-seed-2.allnodes.me:26656}"
API=${API:-eth,net,web3}
CONFIG_DIR="/root/.haqqd/config" ct_apk curl jq
# Create config directory if haqqd init "$MONIKER" --chain-id "$CHAIN_ID" --home "$HOME_DIR" >/dev/null 2>&1; then
mkdir -p "$CONFIG_DIR" ct_log "fresh init; fetching genesis and addrbook"
ct_fetch "$GENESIS_URL" "$CONFIG_DIR/genesis.json" required
P2P_STRING="tcp:\\/\\/0\\.0\\.0\\.0\\:${P2P_PORT:-10465}" ct_set_addrbook "$CONFIG_DIR" "$ADDRBOOK_URL"
NAT_STRING="${IP}:${P2P_PORT:-10465}" ct_localize_home "$CONFIG_DIR"
ct_set_min_gas_prices "$CONFIG_DIR/app.toml" "$MIN_GAS"
env
# this goes first because it won't overwrite shit
apk add curl
if [ $? -ne 0 ]; then exit 1; fi
if haqqd init ${MONIKER} --chain-id ${CHAINID} --home /root/.haqqd/; then
# Define variables
GENESIS_URL="https://raw.githubusercontent.com/haqq-network/${CHAINNAME}/master/genesis.json"
ADDRESSBOOK_URL="https://raw.githubusercontent.com/haqq-network/${CHAINNAME}/master/addrbook.json"
# Download config files
curl -sL "$GENESIS_URL" -o "$CONFIG_DIR/genesis.json"
curl -sL "$ADDRESSBOOK_URL" -o "$CONFIG_DIR/addressbook.json"
# somehow it's better to make home static to /root
sed -i 's|~/|/root/|g' "$CONFIG_DIR/config.toml"
sed -i 's|~/|/root/|g' "$CONFIG_DIR/app.toml"
else else
echo "Already initialized, continuing!" >&2 ct_log "already initialized, continuing"
# Auto-refresh addrbook from Polkachu when empty on startup
if [ ! -s "$CONFIG_DIR/addrbook.json" ]; then
ct_log "addrbook.json is empty, refreshing from Polkachu"
ct_set_addrbook "$CONFIG_DIR" "$ADDRBOOK_URL"
fi
fi fi
# Serve RPC on all interfaces (dshackle/traefik upstream); default is 127.0.0.1.
sed -i '/^\[rpc\]/,/^\[/{s|^laddr = .*|laddr = "tcp://0.0.0.0:8545"|}' "$CONFIG_DIR/config.toml"
# apply a port change to the config ct_patch_p2p "$CONFIG_DIR/config.toml" "$IP" "${P2P_PORT:-10465}"
sed -i "/^\[p2p\]/,/^\[/{s|^laddr = .*|laddr = \"$P2P_STRING\"|}" "$CONFIG_DIR/config.toml" ct_merge_seeds "$CONFIG_DIR/config.toml" "$SEEDS" "$ADDRBOOK_URL"
#sed -i "s/^laddr = \".*\"/laddr = \"$P2P_STRING\"/" "$CONFIG_DIR/config.toml" ct_set_persistent_peers "$CONFIG_DIR/config.toml" "$PERSISTENT_PEERS"
sed -i "/^\[p2p\]/,/^\[/{s|^external_address = .*|external_address = \"$NAT_STRING\"|}" "$CONFIG_DIR/config.toml" ct_set_moniker "$CONFIG_DIR/config.toml" "$MONIKER"
ct_configure_statesync "$CONFIG_DIR/config.toml" "$STATESYNC_RPC"
#sed -i 's/minimum-gas-prices = ""/minimum-gas-prices = "0.01hqq"/g' $CONFIG_DIR/app.toml ct_seed_priv_validator_state "$HOME_DIR"
sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $CONFIG_DIR/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $CONFIG_DIR/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"19\"/" $CONFIG_DIR/app.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $CONFIG_DIR/config.toml
# Haqq-specific config: enable API endpoints
sed -i "/^\[json-rpc\]/,/^\[/{s|^address = .*|address = \"0.0.0.0:8545\"|}" "$CONFIG_DIR/app.toml" sed -i "/^\[json-rpc\]/,/^\[/{s|^address = .*|address = \"0.0.0.0:8545\"|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^ws-address = .*|ws-address = \"0.0.0.0:8546\"|}" "$CONFIG_DIR/app.toml" sed -i "/^\[json-rpc\]/,/^\[/{s|^ws-address = .*|ws-address = \"0.0.0.0:8546\"|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^metrics-address = .*|metrics-address = \"0.0.0.0:6065\"|}" "$CONFIG_DIR/app.toml" sed -i "/^\[json-rpc\]/,/^\[/{s|^metrics-address = .*|metrics-address = \"0.0.0.0:6065\"|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^api = .*|api = \"$API\"|}" "$CONFIG_DIR/app.toml" sed -i "/^\[json-rpc\]/,/^\[/{s|^api = .*|api = \"$API\"|}" "$CONFIG_DIR/app.toml"
# Update moniker if set # Custom pruning settings for RPC node
if [ -n "$MONIKER" ] && [ -f "$CONFIG_DIR/config.toml" ]; then sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" "$CONFIG_DIR/app.toml"
sed -i "s/^moniker = \".*\"/moniker = \"$MONIKER\"/" "$CONFIG_DIR/config.toml" sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" "$CONFIG_DIR/app.toml"
fi sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"19\"/" "$CONFIG_DIR/app.toml"
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" "$CONFIG_DIR/config.toml"
exec haqqd start --chain-id ${CHAINID} $@ exec haqqd start --chain-id "$CHAIN_ID" --home "$HOME_DIR" $@

View File

@@ -32,7 +32,7 @@ x-logging-defaults: &logging-defaults
services: services:
immutable-zkevm-mainnet-geth: immutable-zkevm-mainnet-geth:
image: ${IMMUTABLE_ZKEVM_GETH_IMAGE:-ethereum/client-go}:${IMMUTABLE_ZKEVM_MAINNET_GETH_VERSION:-v1.17.5} image: ${IMMUTABLE_ZKEVM_GETH_IMAGE:-ethereum/client-go}:${IMMUTABLE_ZKEVM_MAINNET_GETH_VERSION:-v1.17.4}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -121,6 +121,7 @@ while IFS= read -r entry; do
fi fi
compose_file=$(echo "$entry" | jq -r '.compose_file') compose_file=$(echo "$entry" | jq -r '.compose_file')
volumes=$(echo "$entry" | jq -r '.volumes[]')
# Check if compose file exists # Check if compose file exists
compose_path="${dir}/${compose_file}.yml" compose_path="${dir}/${compose_file}.yml"
@@ -133,12 +134,9 @@ while IFS= read -r entry; do
missing_volumes=() missing_volumes=()
backup_info=() backup_info=()
# Required persistent volumes only (exclude ephemeral + optional). # Get required persistent volumes (excluding ephemeral and optional)
# Must feed the loop via done<<< / done< <(...) — putting < <(...) on # Use process substitution to avoid subshell issues
# `read` re-runs the producer every iteration and infinite-loops on the while IFS= read -r volume < <(get_required_volume_keys "$compose_path"); do
# first key (vibe regression 2026-08-04 d896378e).
volumes=$(get_required_volume_keys "$compose_path")
while IFS= read -r volume; do
volume_name="rpc_${volume}" volume_name="rpc_${volume}"
# jwt/secrets volumes are regenerated at create-node — never backed up by # jwt/secrets volumes are regenerated at create-node — never backed up by
# design, so they must not gate restorability (kept plasma marked # design, so they must not gate restorability (kept plasma marked

View File

@@ -20,17 +20,17 @@ x-logging-defaults: &logging-defaults
# ... # ...
# IP=$(curl ipinfo.io/ip) # IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me # DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/erigon/soneium-minato-sepolia-op-erigon-archive-trace.yml # COMPOSE_FILE=base.yml:rpc.yml:op/erigon/soneium-miniato-sepolia-op-erigon-archive-trace.yml
# #
# docker compose up -d # docker compose up -d
# #
# curl -X POST https://${IP}.traefik.me/soneium-minato-sepolia-op-erigon \ # curl -X POST https://${IP}.traefik.me/soneium-miniato-sepolia-op-erigon \
# -H "Content-Type: application/json" \ # -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' # --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services: services:
soneium-minato-sepolia-op-erigon: soneium-miniato-sepolia-op-erigon:
image: ${SONEIUM_ERIGON_IMAGE:-testinprod/op-erigon}:${SONEIUM_MINATO_SEPOLIA_ERIGON_VERSION:-v2.61.3-0.10.1} image: ${SONEIUM_ERIGON_IMAGE:-testinprod/op-erigon}:${SONEIUM_MINIATO_SEPOLIA_ERIGON_VERSION:-v2.61.3-0.10.1}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -47,29 +47,29 @@ services:
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX) memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root user: root
ports: ports:
- 12283:12283 - 14735:14735
- 12283:12283/udp - 14735:14735/udp
- 32283:32283 - 34735:34735
- 32283:32283/udp - 34735:34735/udp
- 37283:37283 - 39735:39735
- 37283:37283/udp - 39735:39735/udp
expose: expose:
- 8545 - 8545
- 6060 - 6060
- 8551 - 8551
entrypoint: [erigon] entrypoint: [erigon]
command: command:
- --chain=soneium-minato-sepolia - --chain=soneium-miniato-sepolia
- --datadir=/root/.local/share/erigon - --datadir=/root/.local/share/erigon
- --maxpeers=50 - --maxpeers=50
- --metrics - --metrics
- --metrics.addr=0.0.0.0 - --metrics.addr=0.0.0.0
- --metrics.port=6060 - --metrics.port=6060
- --nat=extip:${IP} - --nat=extip:${IP}
- --p2p.allowed-ports=32283 - --p2p.allowed-ports=34735
- --p2p.allowed-ports=37283 - --p2p.allowed-ports=39735
- --port=12283 - --port=14735
- --rollup.sequencerhttp=https://rpc.minato.soneium.org - --rollup.sequencerhttp=https://rpc.soneium.org
- --rpc.gascap=6000000000 - --rpc.gascap=6000000000
- --rpc.returndata.limit=1500000 - --rpc.returndata.limit=1500000
- --http - --http
@@ -87,7 +87,7 @@ services:
networks: networks:
- chains - chains
volumes: volumes:
- ${SONEIUM_MINATO_SEPOLIA_OP_ERIGON_ARCHIVE_TRACE_DATA:-soneium-minato-sepolia-op-erigon-archive-trace}:/root/.local/share/erigon - ${SONEIUM_MINIATO_SEPOLIA_OP_ERIGON_ARCHIVE_TRACE_DATA:-soneium-miniato-sepolia-op-erigon-archive-trace}:/root/.local/share/erigon
- .jwtsecret:/jwtsecret:ro - .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk - /slowdisk:/slowdisk
logging: *logging-defaults logging: *logging-defaults
@@ -96,41 +96,41 @@ services:
- prometheus-scrape.port=6060 - prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus - prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-erigon-archive-trace-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-op-erigon - traefik.http.middlewares.soneium-miniato-sepolia-op-erigon-archive-trace-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-op-erigon
- traefik.http.services.soneium-minato-sepolia-op-erigon-archive-trace.loadbalancer.server.port=8545 - traefik.http.services.soneium-miniato-sepolia-op-erigon-archive-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/soneium-minato-sepolia-op-erigon`) || Path(`/soneium-minato-sepolia-op-erigon/`))} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/soneium-miniato-sepolia-op-erigon`) || Path(`/soneium-miniato-sepolia-op-erigon/`))}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace.rule=Path(`/soneium-minato-sepolia-op-erigon`) || Path(`/soneium-minato-sepolia-op-erigon/`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace.rule=Path(`/soneium-miniato-sepolia-op-erigon`) || Path(`/soneium-miniato-sepolia-op-erigon/`)}
- traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace.middlewares=soneium-minato-sepolia-op-erigon-archive-trace-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace.middlewares=soneium-miniato-sepolia-op-erigon-archive-trace-stripprefix, ipallowlist
shm_size: 2gb shm_size: 2gb
soneium-minato-sepolia-op-erigon-node: soneium-miniato-sepolia-op-erigon-node:
image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINATO_SEPOLIA_NODE_VERSION:-v1.19.2} image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINIATO_SEPOLIA_NODE_VERSION:-v1.19.2}
ports: ports:
- 17283:17283 - 19735:19735
- 17283:17283/udp - 19735:19735/udp
environment: environment:
- OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST} - OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER} - OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${SONEIUM_MINATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}} - OP_NODE_L1_ETH_RPC=${SONEIUM_MINIATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard} - 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=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret - OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_KIND=erigon - OP_NODE_L2_ENGINE_KIND=erigon
- OP_NODE_L2_ENGINE_RPC=http://soneium-minato-sepolia-op-erigon:8551 - OP_NODE_L2_ENGINE_RPC=http://soneium-miniato-sepolia-op-erigon:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s - OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true - OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info - OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0 - OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true - OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300 - OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=soneium-minato-sepolia - OP_NODE_NETWORK=soneium-miniato-sepolia
- OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400 - OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400
- OP_NODE_P2P_ADVERTISE_IP=${IP} - OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0 - OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=17283 - OP_NODE_P2P_LISTEN_TCP_PORT=19735
- OP_NODE_P2P_LISTEN_UDP_PORT=17283 - OP_NODE_P2P_LISTEN_UDP_PORT=19735
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true - OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0 - OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545 - OP_NODE_RPC_PORT=9545
@@ -140,7 +140,7 @@ services:
entrypoint: [op-node] entrypoint: [op-node]
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
soneium-minato-sepolia-op-erigon: soneium-miniato-sepolia-op-erigon:
condition: service_started condition: service_started
restart: true restart: true
networks: networks:
@@ -153,16 +153,16 @@ services:
- prometheus-scrape.port=7300 - prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics - prometheus-scrape.path=/metrics
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-erigon-archive-trace-node-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-op-erigon/node - traefik.http.middlewares.soneium-miniato-sepolia-op-erigon-archive-trace-node-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-op-erigon/node
- traefik.http.services.soneium-minato-sepolia-op-erigon-archive-trace-node.loadbalancer.server.port=9545 - traefik.http.services.soneium-miniato-sepolia-op-erigon-archive-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace-node.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace-node.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-minato-sepolia-op-erigon/node`)} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-miniato-sepolia-op-erigon/node`)}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace-node.rule=PathPrefix(`/soneium-minato-sepolia-op-erigon/node`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace-node.rule=PathPrefix(`/soneium-miniato-sepolia-op-erigon/node`)}
- traefik.http.routers.soneium-minato-sepolia-op-erigon-archive-trace-node.middlewares=soneium-minato-sepolia-op-erigon-archive-trace-node-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-erigon-archive-trace-node.middlewares=soneium-miniato-sepolia-op-erigon-archive-trace-node-stripprefix, ipallowlist
volumes: volumes:
soneium-minato-sepolia-op-erigon-archive-trace: soneium-miniato-sepolia-op-erigon-archive-trace:
x-upstreams: x-upstreams:
- id: $${ID} - id: $${ID}
@@ -176,7 +176,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: soneium-minato chain: soneium
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -20,17 +20,17 @@ x-logging-defaults: &logging-defaults
# ... # ...
# IP=$(curl ipinfo.io/ip) # IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me # DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/soneium-minato-sepolia-op-geth-archive-leveldb-hash.yml # COMPOSE_FILE=base.yml:rpc.yml:op/geth/soneium-miniato-sepolia-op-geth-archive-leveldb-hash.yml
# #
# docker compose up -d # docker compose up -d
# #
# curl -X POST https://${IP}.traefik.me/soneium-minato-sepolia-archive \ # curl -X POST https://${IP}.traefik.me/soneium-miniato-sepolia-archive \
# -H "Content-Type: application/json" \ # -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' # --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services: services:
soneium-minato-sepolia-archive: soneium-miniato-sepolia-archive:
image: ${SONEIUM_GETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth}:${SONEIUM_MINATO_SEPOLIA_GETH_VERSION:-v1.101702.2} image: ${SONEIUM_GETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth}:${SONEIUM_MINIATO_SEPOLIA_GETH_VERSION:-v1.101702.2}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -46,16 +46,16 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections) nofile: 1048576 # Max open files (for RPC/WS connections)
user: root user: root
ports: ports:
- 11279:11279 - 13664:13664
- 11279:11279/udp - 13664:13664/udp
expose: expose:
- 8545 - 8545
- 6060 - 6060
- 8551 - 8551
environment: environment:
- GETH_OP_NETWORK=soneium-minato-sepolia - GETH_OP_NETWORK=soneium-miniato-sepolia
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true - GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.minato.soneium.org - GETH_ROLLUP_SEQUENCERHTTP=https://rpc.soneium.org
entrypoint: /bin/sh -c 'exec geth "$@"' -- entrypoint: /bin/sh -c 'exec geth "$@"' --
command: command:
- --datadir=/data - --datadir=/data
@@ -66,7 +66,7 @@ services:
- --metrics.addr=0.0.0.0 - --metrics.addr=0.0.0.0
- --metrics.port=6060 - --metrics.port=6060
- --nat=extip:${IP} - --nat=extip:${IP}
- --port=11279 - --port=13664
- --rpc.gascap=600000000 - --rpc.gascap=600000000
- --rpc.txfeecap=0 - --rpc.txfeecap=0
- --state.scheme=hash - --state.scheme=hash
@@ -89,7 +89,7 @@ services:
networks: networks:
- chains - chains
volumes: volumes:
- ${SONEIUM_MINATO_SEPOLIA_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-soneium-minato-sepolia-op-geth-archive-leveldb-hash}:/data - ${SONEIUM_MINIATO_SEPOLIA_OP_GETH_ARCHIVE_LEVELDB_HASH_DATA:-soneium-miniato-sepolia-op-geth-archive-leveldb-hash}:/data
- .jwtsecret:/jwtsecret:ro - .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk - /slowdisk:/slowdisk
logging: *logging-defaults logging: *logging-defaults
@@ -98,39 +98,39 @@ services:
- prometheus-scrape.port=6060 - prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus - prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-archive - traefik.http.middlewares.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-archive
- traefik.http.services.soneium-minato-sepolia-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545 - traefik.http.services.soneium-miniato-sepolia-op-geth-archive-leveldb-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/soneium-minato-sepolia-archive`) || Path(`/soneium-minato-sepolia-archive/`))} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash.rule=Host(`$DOMAIN`) && (Path(`/soneium-miniato-sepolia-archive`) || Path(`/soneium-miniato-sepolia-archive/`))}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash.rule=Path(`/soneium-minato-sepolia-archive`) || Path(`/soneium-minato-sepolia-archive/`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash.rule=Path(`/soneium-miniato-sepolia-archive`) || Path(`/soneium-miniato-sepolia-archive/`)}
- traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash.middlewares=soneium-minato-sepolia-op-geth-archive-leveldb-hash-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash.middlewares=soneium-miniato-sepolia-op-geth-archive-leveldb-hash-stripprefix, ipallowlist
soneium-minato-sepolia-archive-node: soneium-miniato-sepolia-archive-node:
image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINATO_SEPOLIA_NODE_VERSION:-v1.19.2} image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINIATO_SEPOLIA_NODE_VERSION:-v1.19.2}
ports: ports:
- 16279:16279 - 18664:18664
- 16279:16279/udp - 18664:18664/udp
environment: environment:
- OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST} - OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER} - OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${SONEIUM_MINATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}} - OP_NODE_L1_ETH_RPC=${SONEIUM_MINIATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard} - 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=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret - OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://soneium-minato-sepolia-archive:8551 - OP_NODE_L2_ENGINE_RPC=http://soneium-miniato-sepolia-archive:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s - OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true - OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info - OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0 - OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true - OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300 - OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=soneium-minato-sepolia - OP_NODE_NETWORK=soneium-miniato-sepolia
- OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400 - OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400
- OP_NODE_P2P_ADVERTISE_IP=${IP} - OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0 - OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=16279 - OP_NODE_P2P_LISTEN_TCP_PORT=18664
- OP_NODE_P2P_LISTEN_UDP_PORT=16279 - OP_NODE_P2P_LISTEN_UDP_PORT=18664
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true - OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0 - OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545 - OP_NODE_RPC_PORT=9545
@@ -140,7 +140,7 @@ services:
entrypoint: [op-node] entrypoint: [op-node]
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
soneium-minato-sepolia-archive: soneium-miniato-sepolia-archive:
condition: service_started condition: service_started
restart: true restart: true
networks: networks:
@@ -153,16 +153,16 @@ services:
- prometheus-scrape.port=7300 - prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics - prometheus-scrape.path=/metrics
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-archive/node - traefik.http.middlewares.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-archive/node
- traefik.http.services.soneium-minato-sepolia-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545 - traefik.http.services.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash-node.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-minato-sepolia-archive/node`)} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-miniato-sepolia-archive/node`)}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/soneium-minato-sepolia-archive/node`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node.rule=PathPrefix(`/soneium-miniato-sepolia-archive/node`)}
- traefik.http.routers.soneium-minato-sepolia-op-geth-archive-leveldb-hash-node.middlewares=soneium-minato-sepolia-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node.middlewares=soneium-miniato-sepolia-op-geth-archive-leveldb-hash-node-stripprefix, ipallowlist
volumes: volumes:
soneium-minato-sepolia-op-geth-archive-leveldb-hash: soneium-miniato-sepolia-op-geth-archive-leveldb-hash:
x-upstreams: x-upstreams:
- id: $${ID} - id: $${ID}
@@ -176,7 +176,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: soneium-minato chain: soneium
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -20,17 +20,17 @@ x-logging-defaults: &logging-defaults
# ... # ...
# IP=$(curl ipinfo.io/ip) # IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me # DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/geth/soneium-minato-sepolia-op-geth-pruned-pebble-path.yml # COMPOSE_FILE=base.yml:rpc.yml:op/geth/soneium-miniato-sepolia-op-geth-pruned-pebble-path.yml
# #
# docker compose up -d # docker compose up -d
# #
# curl -X POST https://${IP}.traefik.me/soneium-minato-sepolia \ # curl -X POST https://${IP}.traefik.me/soneium-miniato-sepolia \
# -H "Content-Type: application/json" \ # -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' # --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services: services:
soneium-minato-sepolia: soneium-miniato-sepolia:
image: ${SONEIUM_GETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth}:${SONEIUM_MINATO_SEPOLIA_GETH_VERSION:-v1.101702.2} image: ${SONEIUM_GETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth}:${SONEIUM_MINIATO_SEPOLIA_GETH_VERSION:-v1.101702.2}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -46,16 +46,16 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections) nofile: 1048576 # Max open files (for RPC/WS connections)
user: root user: root
ports: ports:
- 12166:12166 - 14827:14827
- 12166:12166/udp - 14827:14827/udp
expose: expose:
- 8545 - 8545
- 6060 - 6060
- 8551 - 8551
environment: environment:
- GETH_OP_NETWORK=soneium-minato-sepolia - GETH_OP_NETWORK=soneium-miniato-sepolia
- GETH_ROLLUP_DISABLETXPOOLGOSSIP=true - GETH_ROLLUP_DISABLETXPOOLGOSSIP=true
- GETH_ROLLUP_SEQUENCERHTTP=https://rpc.minato.soneium.org - GETH_ROLLUP_SEQUENCERHTTP=https://rpc.soneium.org
entrypoint: /bin/sh -c 'exec geth "$@"' -- entrypoint: /bin/sh -c 'exec geth "$@"' --
command: command:
- --datadir=/data - --datadir=/data
@@ -66,7 +66,7 @@ services:
- --metrics.addr=0.0.0.0 - --metrics.addr=0.0.0.0
- --metrics.port=6060 - --metrics.port=6060
- --nat=extip:${IP} - --nat=extip:${IP}
- --port=12166 - --port=14827
- --rpc.gascap=600000000 - --rpc.gascap=600000000
- --rpc.txfeecap=0 - --rpc.txfeecap=0
- --state.scheme=path - --state.scheme=path
@@ -89,7 +89,7 @@ services:
networks: networks:
- chains - chains
volumes: volumes:
- ${SONEIUM_MINATO_SEPOLIA_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-soneium-minato-sepolia-op-geth-pruned-pebble-path}:/data - ${SONEIUM_MINIATO_SEPOLIA_OP_GETH_PRUNED_PEBBLE_PATH_DATA:-soneium-miniato-sepolia-op-geth-pruned-pebble-path}:/data
- .jwtsecret:/jwtsecret:ro - .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk - /slowdisk:/slowdisk
logging: *logging-defaults logging: *logging-defaults
@@ -98,39 +98,39 @@ services:
- prometheus-scrape.port=6060 - prometheus-scrape.port=6060
- prometheus-scrape.path=/debug/metrics/prometheus - prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia - traefik.http.middlewares.soneium-miniato-sepolia-op-geth-pruned-pebble-path-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia
- traefik.http.services.soneium-minato-sepolia-op-geth-pruned-pebble-path.loadbalancer.server.port=8545 - traefik.http.services.soneium-miniato-sepolia-op-geth-pruned-pebble-path.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/soneium-minato-sepolia`) || Path(`/soneium-minato-sepolia/`))} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path.rule=Host(`$DOMAIN`) && (Path(`/soneium-miniato-sepolia`) || Path(`/soneium-miniato-sepolia/`))}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path.rule=Path(`/soneium-minato-sepolia`) || Path(`/soneium-minato-sepolia/`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path.rule=Path(`/soneium-miniato-sepolia`) || Path(`/soneium-miniato-sepolia/`)}
- traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path.middlewares=soneium-minato-sepolia-op-geth-pruned-pebble-path-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path.middlewares=soneium-miniato-sepolia-op-geth-pruned-pebble-path-stripprefix, ipallowlist
soneium-minato-sepolia-node: soneium-miniato-sepolia-node:
image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINATO_SEPOLIA_NODE_VERSION:-v1.19.2} image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINIATO_SEPOLIA_NODE_VERSION:-v1.19.2}
ports: ports:
- 17166:17166 - 19827:19827
- 17166:17166/udp - 19827:19827/udp
environment: environment:
- OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST} - OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER} - OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${SONEIUM_MINATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}} - OP_NODE_L1_ETH_RPC=${SONEIUM_MINIATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard} - 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=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret - OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://soneium-minato-sepolia:8551 - OP_NODE_L2_ENGINE_RPC=http://soneium-miniato-sepolia:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s - OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true - OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info - OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0 - OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true - OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300 - OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=soneium-minato-sepolia - OP_NODE_NETWORK=soneium-miniato-sepolia
- OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400 - OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400
- OP_NODE_P2P_ADVERTISE_IP=${IP} - OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0 - OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=17166 - OP_NODE_P2P_LISTEN_TCP_PORT=19827
- OP_NODE_P2P_LISTEN_UDP_PORT=17166 - OP_NODE_P2P_LISTEN_UDP_PORT=19827
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true - OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0 - OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545 - OP_NODE_RPC_PORT=9545
@@ -140,7 +140,7 @@ services:
entrypoint: [op-node] entrypoint: [op-node]
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
soneium-minato-sepolia: soneium-miniato-sepolia:
condition: service_started condition: service_started
restart: true restart: true
networks: networks:
@@ -153,16 +153,16 @@ services:
- prometheus-scrape.port=7300 - prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics - prometheus-scrape.path=/metrics
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia/node - traefik.http.middlewares.soneium-miniato-sepolia-op-geth-pruned-pebble-path-node-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia/node
- traefik.http.services.soneium-minato-sepolia-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545 - traefik.http.services.soneium-miniato-sepolia-op-geth-pruned-pebble-path-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path-node.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-minato-sepolia/node`)} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-miniato-sepolia/node`)}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/soneium-minato-sepolia/node`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path-node.rule=PathPrefix(`/soneium-miniato-sepolia/node`)}
- traefik.http.routers.soneium-minato-sepolia-op-geth-pruned-pebble-path-node.middlewares=soneium-minato-sepolia-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-geth-pruned-pebble-path-node.middlewares=soneium-miniato-sepolia-op-geth-pruned-pebble-path-node-stripprefix, ipallowlist
volumes: volumes:
soneium-minato-sepolia-op-geth-pruned-pebble-path: soneium-miniato-sepolia-op-geth-pruned-pebble-path:
x-upstreams: x-upstreams:
- id: $${ID} - id: $${ID}
@@ -176,7 +176,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: soneium-minato chain: soneium
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -0,0 +1,214 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "512m"
max-file: "2"
# 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.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_NODE_IMAGE:-zircuit1/op-node}:${MAINNET_NODE_VERSION:-v1.138.8}
user: root
ports:
- 19463:19463
- 19463:19463/udp
environment:
- OP_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_MAINNET_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_MAINNET_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://zircuit-mainnet-archive:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=mainnet
- OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=19463
- OP_NODE_P2P_LISTEN_UDP_PORT=19463
- OP_NODE_P2P_STATIC=/dns4/node1-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAm5Uxn3E8RXEM2e5YsR9VNM8uKoPmZzwQjqp7r64ZLspd5,/dns4/node2-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmPoLg64PL2X2oLrUSmYaqAbkATPAMNRxLCZTBavUP8UEB,/dns4/node3-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmB9iZKfv9RPRZj6JwcwjbwZWECFwJ67b1LJMHrczTnbjf
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SEQUENCER_ENABLED=false
- OP_NODE_SEQUENCER_L1_CONFS=0
- OP_NODE_SEQUENCER_MAX_SAFE_LAG=0
- OP_NODE_SEQUENCER_STOPPED=false
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-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

@@ -0,0 +1,214 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "512m"
max-file: "2"
# 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.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_NODE_IMAGE:-zircuit1/op-node}:${MAINNET_NODE_VERSION:-v1.138.8}
user: root
ports:
- 15588:15588
- 15588:15588/udp
environment:
- OP_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_MAINNET_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_MAINNET_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://zircuit-mainnet-archive:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=mainnet
- OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=15588
- OP_NODE_P2P_LISTEN_UDP_PORT=15588
- OP_NODE_P2P_STATIC=/dns4/node1-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAm5Uxn3E8RXEM2e5YsR9VNM8uKoPmZzwQjqp7r64ZLspd5,/dns4/node2-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmPoLg64PL2X2oLrUSmYaqAbkATPAMNRxLCZTBavUP8UEB,/dns4/node3-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmB9iZKfv9RPRZj6JwcwjbwZWECFwJ67b1LJMHrczTnbjf
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SEQUENCER_ENABLED=false
- OP_NODE_SEQUENCER_L1_CONFS=0
- OP_NODE_SEQUENCER_MAX_SAFE_LAG=0
- OP_NODE_SEQUENCER_STOPPED=false
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-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

@@ -0,0 +1,214 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "512m"
max-file: "2"
# 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.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_NODE_IMAGE:-zircuit1/op-node}:${MAINNET_NODE_VERSION:-v1.138.8}
user: root
ports:
- 18688:18688
- 18688:18688/udp
environment:
- OP_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_MAINNET_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_MAINNET_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://zircuit-mainnet:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=mainnet
- OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=18688
- OP_NODE_P2P_LISTEN_UDP_PORT=18688
- OP_NODE_P2P_STATIC=/dns4/node1-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAm5Uxn3E8RXEM2e5YsR9VNM8uKoPmZzwQjqp7r64ZLspd5,/dns4/node2-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmPoLg64PL2X2oLrUSmYaqAbkATPAMNRxLCZTBavUP8UEB,/dns4/node3-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmB9iZKfv9RPRZj6JwcwjbwZWECFwJ67b1LJMHrczTnbjf
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SEQUENCER_ENABLED=false
- OP_NODE_SEQUENCER_L1_CONFS=0
- OP_NODE_SEQUENCER_MAX_SAFE_LAG=0
- OP_NODE_SEQUENCER_STOPPED=false
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-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

@@ -0,0 +1,216 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "512m"
max-file: "2"
# 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.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_NODE_IMAGE:-zircuit1/op-node}:${MAINNET_NODE_VERSION:-v1.138.8}
user: root
ports:
- 18359:18359
- 18359:18359/udp
environment:
- OP_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_MAINNET_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_MAINNET_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_RPC=http://zircuit-mainnet:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=mainnet
- OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=18359
- OP_NODE_P2P_LISTEN_UDP_PORT=18359
- OP_NODE_P2P_STATIC=/dns4/node1-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAm5Uxn3E8RXEM2e5YsR9VNM8uKoPmZzwQjqp7r64ZLspd5,/dns4/node2-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmPoLg64PL2X2oLrUSmYaqAbkATPAMNRxLCZTBavUP8UEB,/dns4/node3-eu-p2p.mainnet.zircuit.com/tcp/9003/p2p/16Uiu2HAmB9iZKfv9RPRZj6JwcwjbwZWECFwJ67b1LJMHrczTnbjf
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SEQUENCER_ENABLED=false
- OP_NODE_SEQUENCER_L1_CONFS=0
- OP_NODE_SEQUENCER_MAX_SAFE_LAG=0
- OP_NODE_SEQUENCER_STOPPED=false
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-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

@@ -20,17 +20,17 @@ x-logging-defaults: &logging-defaults
# ... # ...
# IP=$(curl ipinfo.io/ip) # IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me # DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/soneium-minato-sepolia-op-reth-archive-trace.yml # COMPOSE_FILE=base.yml:rpc.yml:op/reth/soneium-miniato-sepolia-op-reth-archive-trace.yml
# #
# docker compose up -d # docker compose up -d
# #
# curl -X POST https://${IP}.traefik.me/soneium-minato-sepolia-op-reth \ # curl -X POST https://${IP}.traefik.me/soneium-miniato-sepolia-op-reth \
# -H "Content-Type: application/json" \ # -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' # --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services: services:
soneium-minato-sepolia-op-reth: soneium-miniato-sepolia-op-reth:
image: ${SONEIUM_RETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-reth}:${SONEIUM_MINATO_SEPOLIA_RETH_VERSION:-v2.3.3} image: ${SONEIUM_RETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-reth}:${SONEIUM_MINIATO_SEPOLIA_RETH_VERSION:-v2.3.3}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -47,27 +47,27 @@ services:
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX) memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root user: root
ports: ports:
- 14829:14829 - 11940:11940
- 14829:14829/udp - 11940:11940/udp
expose: expose:
- 8545 - 8545
- 9001 - 9001
- 8551 - 8551
entrypoint: [op-reth, node] entrypoint: [op-reth, node]
command: command:
- --chain=soneium-minato-sepolia - --chain=soneium-miniato-sepolia
- --datadir=/root/.local/share/reth - --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0 - --discovery.addr=0.0.0.0
- --discovery.port=14829 - --discovery.port=11940
- --discovery.v5.addr=0.0.0.0 - --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=14829 - --discovery.v5.port=11940
- --engine.cross-block-cache-size=${SONEIUM_MINATO_SEPOLIA_RETH_STATE_CACHE:-4096} - --engine.cross-block-cache-size=${SONEIUM_MINIATO_SEPOLIA_RETH_STATE_CACHE:-4096}
- --max-inbound-peers=50 - --max-inbound-peers=50
- --max-outbound-peers=50 - --max-outbound-peers=50
- --metrics=0.0.0.0:9001 - --metrics=0.0.0.0:9001
- --nat=extip:${IP} - --nat=extip:${IP}
- --port=14829 - --port=11940
- --rollup.sequencer-http=https://rpc.minato.soneium.org - --rollup.sequencer-http=https://rpc.soneium.org
- --rpc-cache.max-blocks=10000 - --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048 - --rpc-cache.max-concurrent-db-requests=2048
- --rpc.gascap=600000000 - --rpc.gascap=600000000
@@ -92,7 +92,7 @@ services:
networks: networks:
- chains - chains
volumes: volumes:
- ${SONEIUM_MINATO_SEPOLIA_OP_RETH_ARCHIVE_TRACE_DATA:-soneium-minato-sepolia-op-reth-archive-trace}:/root/.local/share/reth - ${SONEIUM_MINIATO_SEPOLIA_OP_RETH_ARCHIVE_TRACE_DATA:-soneium-miniato-sepolia-op-reth-archive-trace}:/root/.local/share/reth
- .jwtsecret:/jwtsecret:ro - .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk - /slowdisk:/slowdisk
logging: *logging-defaults logging: *logging-defaults
@@ -101,41 +101,41 @@ services:
- prometheus-scrape.port=9001 - prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics - prometheus-scrape.path=/metrics
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-reth-archive-trace-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-op-reth - traefik.http.middlewares.soneium-miniato-sepolia-op-reth-archive-trace-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-op-reth
- traefik.http.services.soneium-minato-sepolia-op-reth-archive-trace.loadbalancer.server.port=8545 - traefik.http.services.soneium-miniato-sepolia-op-reth-archive-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/soneium-minato-sepolia-op-reth`) || Path(`/soneium-minato-sepolia-op-reth/`))} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace.rule=Host(`$DOMAIN`) && (Path(`/soneium-miniato-sepolia-op-reth`) || Path(`/soneium-miniato-sepolia-op-reth/`))}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace.rule=Path(`/soneium-minato-sepolia-op-reth`) || Path(`/soneium-minato-sepolia-op-reth/`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace.rule=Path(`/soneium-miniato-sepolia-op-reth`) || Path(`/soneium-miniato-sepolia-op-reth/`)}
- traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace.middlewares=soneium-minato-sepolia-op-reth-archive-trace-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace.middlewares=soneium-miniato-sepolia-op-reth-archive-trace-stripprefix, ipallowlist
shm_size: 2gb shm_size: 2gb
soneium-minato-sepolia-op-reth-node: soneium-miniato-sepolia-op-reth-node:
image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINATO_SEPOLIA_NODE_VERSION:-v1.19.2} image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINIATO_SEPOLIA_NODE_VERSION:-v1.19.2}
ports: ports:
- 19829:19829 - 16940:16940
- 19829:19829/udp - 16940:16940/udp
environment: environment:
- OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST} - OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER} - OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${SONEIUM_MINATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}} - OP_NODE_L1_ETH_RPC=${SONEIUM_MINIATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard} - 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=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret - OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_KIND=reth - OP_NODE_L2_ENGINE_KIND=reth
- OP_NODE_L2_ENGINE_RPC=http://soneium-minato-sepolia-op-reth:8551 - OP_NODE_L2_ENGINE_RPC=http://soneium-miniato-sepolia-op-reth:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s - OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true - OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info - OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0 - OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true - OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300 - OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=soneium-minato-sepolia - OP_NODE_NETWORK=soneium-miniato-sepolia
- OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400 - OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400
- OP_NODE_P2P_ADVERTISE_IP=${IP} - OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0 - OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=19829 - OP_NODE_P2P_LISTEN_TCP_PORT=16940
- OP_NODE_P2P_LISTEN_UDP_PORT=19829 - OP_NODE_P2P_LISTEN_UDP_PORT=16940
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true - OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0 - OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545 - OP_NODE_RPC_PORT=9545
@@ -145,7 +145,7 @@ services:
entrypoint: [op-node] entrypoint: [op-node]
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
soneium-minato-sepolia-op-reth: soneium-miniato-sepolia-op-reth:
condition: service_started condition: service_started
restart: true restart: true
networks: networks:
@@ -158,16 +158,16 @@ services:
- prometheus-scrape.port=7300 - prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics - prometheus-scrape.path=/metrics
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-reth-archive-trace-node-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-op-reth/node - traefik.http.middlewares.soneium-miniato-sepolia-op-reth-archive-trace-node-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-op-reth/node
- traefik.http.services.soneium-minato-sepolia-op-reth-archive-trace-node.loadbalancer.server.port=9545 - traefik.http.services.soneium-miniato-sepolia-op-reth-archive-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace-node.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace-node.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-minato-sepolia-op-reth/node`)} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-miniato-sepolia-op-reth/node`)}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace-node.rule=PathPrefix(`/soneium-minato-sepolia-op-reth/node`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace-node.rule=PathPrefix(`/soneium-miniato-sepolia-op-reth/node`)}
- traefik.http.routers.soneium-minato-sepolia-op-reth-archive-trace-node.middlewares=soneium-minato-sepolia-op-reth-archive-trace-node-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-reth-archive-trace-node.middlewares=soneium-miniato-sepolia-op-reth-archive-trace-node-stripprefix, ipallowlist
volumes: volumes:
soneium-minato-sepolia-op-reth-archive-trace: soneium-miniato-sepolia-op-reth-archive-trace:
x-upstreams: x-upstreams:
- id: $${ID} - id: $${ID}
@@ -181,7 +181,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: soneium-minato chain: soneium
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -20,17 +20,17 @@ x-logging-defaults: &logging-defaults
# ... # ...
# IP=$(curl ipinfo.io/ip) # IP=$(curl ipinfo.io/ip)
# DOMAIN=${IP}.traefik.me # DOMAIN=${IP}.traefik.me
# COMPOSE_FILE=base.yml:rpc.yml:op/reth/soneium-minato-sepolia-op-reth-pruned-trace.yml # COMPOSE_FILE=base.yml:rpc.yml:op/reth/soneium-miniato-sepolia-op-reth-pruned-trace.yml
# #
# docker compose up -d # docker compose up -d
# #
# curl -X POST https://${IP}.traefik.me/soneium-minato-sepolia-op-reth-pruned \ # curl -X POST https://${IP}.traefik.me/soneium-miniato-sepolia-op-reth-pruned \
# -H "Content-Type: application/json" \ # -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' # --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services: services:
soneium-minato-sepolia-op-reth-pruned: soneium-miniato-sepolia-op-reth-pruned:
image: ${SONEIUM_RETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-reth}:${SONEIUM_MINATO_SEPOLIA_RETH_VERSION:-v2.3.3} image: ${SONEIUM_RETH_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-reth}:${SONEIUM_MINIATO_SEPOLIA_RETH_VERSION:-v2.3.3}
sysctls: sysctls:
# TCP Performance # TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -47,28 +47,28 @@ services:
memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX) memlock: -1 # Disable memory locking limits (for in-memory DBs like MDBX)
user: root user: root
ports: ports:
- 13724:13724 - 11094:11094
- 13724:13724/udp - 11094:11094/udp
expose: expose:
- 8545 - 8545
- 9001 - 9001
- 8551 - 8551
entrypoint: [op-reth, node] entrypoint: [op-reth, node]
command: command:
- --chain=soneium-minato-sepolia - --chain=soneium-miniato-sepolia
- --datadir=/root/.local/share/reth - --datadir=/root/.local/share/reth
- --discovery.addr=0.0.0.0 - --discovery.addr=0.0.0.0
- --discovery.port=13724 - --discovery.port=11094
- --discovery.v5.addr=0.0.0.0 - --discovery.v5.addr=0.0.0.0
- --discovery.v5.port=13724 - --discovery.v5.port=11094
- --engine.cross-block-cache-size=${SONEIUM_MINATO_SEPOLIA_RETH_STATE_CACHE:-4096} - --engine.cross-block-cache-size=${SONEIUM_MINIATO_SEPOLIA_RETH_STATE_CACHE:-4096}
- --full - --full
- --max-inbound-peers=50 - --max-inbound-peers=50
- --max-outbound-peers=50 - --max-outbound-peers=50
- --metrics=0.0.0.0:9001 - --metrics=0.0.0.0:9001
- --nat=extip:${IP} - --nat=extip:${IP}
- --port=13724 - --port=11094
- --rollup.sequencer-http=https://rpc.minato.soneium.org - --rollup.sequencer-http=https://rpc.soneium.org
- --rpc-cache.max-blocks=10000 - --rpc-cache.max-blocks=10000
- --rpc-cache.max-concurrent-db-requests=2048 - --rpc-cache.max-concurrent-db-requests=2048
- --rpc.gascap=600000000 - --rpc.gascap=600000000
@@ -93,7 +93,7 @@ services:
networks: networks:
- chains - chains
volumes: volumes:
- ${SONEIUM_MINATO_SEPOLIA_OP_RETH_PRUNED_TRACE_DATA:-soneium-minato-sepolia-op-reth-pruned-trace}:/root/.local/share/reth - ${SONEIUM_MINIATO_SEPOLIA_OP_RETH_PRUNED_TRACE_DATA:-soneium-miniato-sepolia-op-reth-pruned-trace}:/root/.local/share/reth
- .jwtsecret:/jwtsecret:ro - .jwtsecret:/jwtsecret:ro
- /slowdisk:/slowdisk - /slowdisk:/slowdisk
logging: *logging-defaults logging: *logging-defaults
@@ -102,41 +102,41 @@ services:
- prometheus-scrape.port=9001 - prometheus-scrape.port=9001
- prometheus-scrape.path=/metrics - prometheus-scrape.path=/metrics
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-reth-pruned-trace-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-op-reth-pruned - traefik.http.middlewares.soneium-miniato-sepolia-op-reth-pruned-trace-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-op-reth-pruned
- traefik.http.services.soneium-minato-sepolia-op-reth-pruned-trace.loadbalancer.server.port=8545 - traefik.http.services.soneium-miniato-sepolia-op-reth-pruned-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace.rule=Host(`$DOMAIN`) && (Path(`/soneium-minato-sepolia-op-reth-pruned`) || Path(`/soneium-minato-sepolia-op-reth-pruned/`))} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace.rule=Host(`$DOMAIN`) && (Path(`/soneium-miniato-sepolia-op-reth-pruned`) || Path(`/soneium-miniato-sepolia-op-reth-pruned/`))}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace.rule=Path(`/soneium-minato-sepolia-op-reth-pruned`) || Path(`/soneium-minato-sepolia-op-reth-pruned/`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace.rule=Path(`/soneium-miniato-sepolia-op-reth-pruned`) || Path(`/soneium-miniato-sepolia-op-reth-pruned/`)}
- traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace.middlewares=soneium-minato-sepolia-op-reth-pruned-trace-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace.middlewares=soneium-miniato-sepolia-op-reth-pruned-trace-stripprefix, ipallowlist
shm_size: 2gb shm_size: 2gb
soneium-minato-sepolia-op-reth-pruned-node: soneium-miniato-sepolia-op-reth-pruned-node:
image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINATO_SEPOLIA_NODE_VERSION:-v1.19.2} image: ${SONEIUM_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${SONEIUM_MINIATO_SEPOLIA_NODE_VERSION:-v1.19.2}
ports: ports:
- 18724:18724 - 16094:16094
- 18724:18724/udp - 16094:16094/udp
environment: environment:
- OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST} - OP_NODE_L1_BEACON=${ETHEREUM_SEPOLIA_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER} - OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_SEPOLIA_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${SONEIUM_MINATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}} - OP_NODE_L1_ETH_RPC=${SONEIUM_MINIATO_SEPOLIA_L1_EXECUTION_RPC:-${ETHEREUM_SEPOLIA_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_SEPOLIA_EXECUTION_KIND:-standard} - 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=${ETHEREUM_SEPOLIA_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret - OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_KIND=reth - OP_NODE_L2_ENGINE_KIND=reth
- OP_NODE_L2_ENGINE_RPC=http://soneium-minato-sepolia-op-reth-pruned:8551 - OP_NODE_L2_ENGINE_RPC=http://soneium-miniato-sepolia-op-reth-pruned:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s - OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true - OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info - OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0 - OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true - OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300 - OP_NODE_METRICS_PORT=7300
- OP_NODE_NETWORK=soneium-minato-sepolia - OP_NODE_NETWORK=soneium-miniato-sepolia
- OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400 - OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=1742486400
- OP_NODE_P2P_ADVERTISE_IP=${IP} - OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_LISTEN_IP=0.0.0.0 - OP_NODE_P2P_LISTEN_IP=0.0.0.0
- OP_NODE_P2P_LISTEN_TCP_PORT=18724 - OP_NODE_P2P_LISTEN_TCP_PORT=16094
- OP_NODE_P2P_LISTEN_UDP_PORT=18724 - OP_NODE_P2P_LISTEN_UDP_PORT=16094
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true - OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0 - OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545 - OP_NODE_RPC_PORT=9545
@@ -146,7 +146,7 @@ services:
entrypoint: [op-node] entrypoint: [op-node]
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
soneium-minato-sepolia-op-reth-pruned: soneium-miniato-sepolia-op-reth-pruned:
condition: service_started condition: service_started
restart: true restart: true
networks: networks:
@@ -159,16 +159,16 @@ services:
- prometheus-scrape.port=7300 - prometheus-scrape.port=7300
- prometheus-scrape.path=/metrics - prometheus-scrape.path=/metrics
- traefik.enable=true - traefik.enable=true
- traefik.http.middlewares.soneium-minato-sepolia-op-reth-pruned-trace-node-stripprefix.stripprefix.prefixes=/soneium-minato-sepolia-op-reth-pruned/node - traefik.http.middlewares.soneium-miniato-sepolia-op-reth-pruned-trace-node-stripprefix.stripprefix.prefixes=/soneium-miniato-sepolia-op-reth-pruned/node
- traefik.http.services.soneium-minato-sepolia-op-reth-pruned-trace-node.loadbalancer.server.port=9545 - traefik.http.services.soneium-miniato-sepolia-op-reth-pruned-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace-node.entrypoints=websecure} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace-node.tls.certresolver=myresolver} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-minato-sepolia-op-reth-pruned/node`)} - ${NO_SSL:-traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/soneium-miniato-sepolia-op-reth-pruned/node`)}
- ${NO_SSL:+traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace-node.rule=PathPrefix(`/soneium-minato-sepolia-op-reth-pruned/node`)} - ${NO_SSL:+traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace-node.rule=PathPrefix(`/soneium-miniato-sepolia-op-reth-pruned/node`)}
- traefik.http.routers.soneium-minato-sepolia-op-reth-pruned-trace-node.middlewares=soneium-minato-sepolia-op-reth-pruned-trace-node-stripprefix, ipallowlist - traefik.http.routers.soneium-miniato-sepolia-op-reth-pruned-trace-node.middlewares=soneium-miniato-sepolia-op-reth-pruned-trace-node-stripprefix, ipallowlist
volumes: volumes:
soneium-minato-sepolia-op-reth-pruned-trace: soneium-miniato-sepolia-op-reth-pruned-trace:
x-upstreams: x-upstreams:
- id: $${ID} - id: $${ID}
@@ -182,7 +182,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: soneium-minato chain: soneium
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -184,7 +184,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: zircuit-garfield-testnet chain: zircuit-testnet
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -1,200 +0,0 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "512m"
max-file: "2"
# 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/zircuit-mainnet-op-reth-pruned-trace.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/zircuit-mainnet-op-reth-pruned \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
zircuit-mainnet-op-reth-pruned:
image: ${ZIRCUIT_RETH_IMAGE:-ghcr.io/conduitxyz/conduit-op-reth}:${ZIRCUIT_MAINNET_RETH_VERSION:-v2.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
expose:
- 8545
- 9001
- 8551
entrypoint: [op-reth, node]
command:
- --chain=/config/genesis.json
- --config=/config/reth/reth.toml
- --datadir=/root/.local/share/reth
- --disable-discovery
- --engine.cross-block-cache-size=${ZIRCUIT_MAINNET_RETH_STATE_CACHE:-4096}
- --full
- --max-inbound-peers=50
- --max-outbound-peers=50
- --metrics=0.0.0.0:9001
- --rollup.sequencer-http=https://proxyd-ingress-eu.mainnet.zircuit.com/?token=drpcvATEn3gsYCLyLw7ztFLCBwQNoDJr2QjpcsNNkksu
- --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:
- ${ZIRCUIT_MAINNET_OP_RETH_PRUNED_TRACE_DATA:-zircuit-mainnet-op-reth-pruned-trace}:/root/.local/share/reth
- ./op/zircuit/mainnet:/config
- .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.zircuit-mainnet-op-reth-pruned-trace-stripprefix.stripprefix.prefixes=/zircuit-mainnet-op-reth-pruned
- traefik.http.services.zircuit-mainnet-op-reth-pruned-trace.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace.rule=Host(`$DOMAIN`) && (Path(`/zircuit-mainnet-op-reth-pruned`) || Path(`/zircuit-mainnet-op-reth-pruned/`))}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace.rule=Path(`/zircuit-mainnet-op-reth-pruned`) || Path(`/zircuit-mainnet-op-reth-pruned/`)}
- traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace.middlewares=zircuit-mainnet-op-reth-pruned-trace-stripprefix, ipallowlist
shm_size: 2gb
zircuit-mainnet-op-reth-pruned-node:
image: ${ZIRCUIT_NODE_IMAGE:-us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node}:${MAINNET_NODE_VERSION:-v1.19.3}
user: root
ports:
- 17481:17481
- 17481:17481/udp
environment:
- OP_NODE_L1_BEACON=${ETHEREUM_MAINNET_BEACON_REST}
- OP_NODE_L1_BEACON_ARCHIVER=${ETHEREUM_MAINNET_BEACON_ARCHIVER}
- OP_NODE_L1_ETH_RPC=${MAINNET_L1_EXECUTION_RPC:-${ETHEREUM_MAINNET_EXECUTION_RPC}}
- OP_NODE_L1_RPC_KIND=${ETHEREUM_MAINNET_EXECUTION_KIND:-standard}
- OP_NODE_L1_TRUST_RPC=${ETHEREUM_MAINNET_EXECUTION_TRUST:-false}
- OP_NODE_L2_ENGINE_AUTH=/jwtsecret
- OP_NODE_L2_ENGINE_KIND=reth
- OP_NODE_L2_ENGINE_RPC=http://zircuit-mainnet-op-reth-pruned:8551
- OP_NODE_L2_ENGINE_RPC_TIMEOUT=120s
- OP_NODE_L2_SKIP_SYNC_START_CHECK=true
- OP_NODE_LOG_LEVEL=info
- OP_NODE_METRICS_ADDR=0.0.0.0
- OP_NODE_METRICS_ENABLED=true
- OP_NODE_METRICS_PORT=7300
- OP_NODE_P2P_ADVERTISE_IP=${IP}
- OP_NODE_P2P_BOOTNODES=enode://de9f4784612b7523dc029a38091139aafae293c2f7d17c11bce8579f6246782216a7d61599fb001c38042e8e6ac6a0cdafd1a26d37743e5439bc3d4d6680f7df@35.185.208.192: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=17481
- OP_NODE_P2P_LISTEN_UDP_PORT=17481
- OP_NODE_P2P_STATIC=/ip4/35.185.208.192/tcp/9222/p2p/16Uiu2HAmTe1j7ubQUanCiUSQs7K7SzkWxdrfDUP9GifkMoC2osLm
- OP_NODE_ROLLUP_CONFIG=/config/rollup.json
- OP_NODE_ROLLUP_LOAD_PROTOCOL_VERSIONS=true
- OP_NODE_RPC_ADDR=0.0.0.0
- OP_NODE_RPC_PORT=9545
- OP_NODE_SEQUENCER_ENABLED=false
- OP_NODE_SEQUENCER_L1_CONFS=0
- OP_NODE_SEQUENCER_MAX_SAFE_LAG=0
- OP_NODE_SEQUENCER_STOPPED=false
- OP_NODE_SNAPSHOT_LOG=/tmp/op-node-snapshot-log
- OP_NODE_SYNCMODE=consensus-layer
- OP_NODE_VERIFIER_L1_CONFS=0
entrypoint: [op-node]
restart: unless-stopped
depends_on:
zircuit-mainnet-op-reth-pruned:
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-reth-pruned-trace-node-stripprefix.stripprefix.prefixes=/zircuit-mainnet-op-reth-pruned/node
- traefik.http.services.zircuit-mainnet-op-reth-pruned-trace-node.loadbalancer.server.port=9545
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace-node.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace-node.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace-node.rule=Host(`$DOMAIN`) && PathPrefix(`/zircuit-mainnet-op-reth-pruned/node`)}
- ${NO_SSL:+traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace-node.rule=PathPrefix(`/zircuit-mainnet-op-reth-pruned/node`)}
- traefik.http.routers.zircuit-mainnet-op-reth-pruned-trace-node.middlewares=zircuit-mainnet-op-reth-pruned-trace-node-stripprefix, ipallowlist
volumes:
zircuit-mainnet-op-reth-pruned-trace:
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
- trace
methods:
disabled:
- name: eth_maxPriorityFeePerGas
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
- name: zirc_getQuarantineHistory
- name: zirc_getQuarantined
- name: zirc_isQuarantined
...

File diff suppressed because one or more lines are too long

View File

View File

@@ -1,44 +0,0 @@
{
"genesis": {
"l1": {
"hash": "0xf03d3d2e16e6d3512472719b04087404b9d229fd9319df354de978f9eac4b782",
"number": 25681768
},
"l2": {
"hash": "0x739969caccf91d17020409893e4ba2bb25957a1f80c8821322a2136eea0709b5",
"number": 32956468
},
"l2_time": 1785849151,
"system_config": {
"batcherAddr": "0xcf8225801df6ef90ad3bc86808f574403a309de8",
"overhead": "0x0000000000000000000000000000000000000000000000000000000000000000",
"scalar": "0x010000000000000000000000000000000000000000000000000d273000001db0",
"gasLimit": 30000000,
"eip1559Params": "0x0000000000000000",
"operatorFeeParams": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
},
"block_time": 2,
"max_sequencer_drift": 1800,
"seq_window_size": 3600,
"channel_timeout": 300,
"l1_chain_id": 1,
"l2_chain_id": 48900,
"regolith_time": 0,
"canyon_time": 0,
"delta_time": 0,
"ecotone_time": 0,
"fjord_time": 0,
"granite_time": 0,
"holocene_time": 0,
"isthmus_time": 0,
"batch_inbox_address": "0xff00000000000000000000000000000000048900",
"deposit_contract_address": "0x17bfafa932d2e23bd9b909fd5b4d2e2a27043fb1",
"l1_system_config_address": "0x30f82a1ca89226e8b8815d6ebb728e3b18a428ff",
"protocol_versions_address": "0x0000000000000000000000000000000000000000",
"chain_op_config": {
"eip1559Elasticity": 6,
"eip1559Denominator": 50,
"eip1559DenominatorCanyon": 250
}
}

View File

@@ -56,7 +56,7 @@ services:
- DEPLOYMENT=test - DEPLOYMENT=test
- ETHSTATS_ENDPOINT=d${DOMAIN}:WSyDMrhRBe111@ronin-stats-ws.roninchain.com:443 - ETHSTATS_ENDPOINT=d${DOMAIN}:WSyDMrhRBe111@ronin-stats-ws.roninchain.com:443
- MINE=false - MINE=false
- NETWORK_ID=202601 - NETWORK_ID=2021
- NETWORK_PORT=12612 - NETWORK_PORT=12612
- PASSWORD=stupidpassword - PASSWORD=stupidpassword
- STATE_SCHEME=hash - STATE_SCHEME=hash
@@ -110,7 +110,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: ronin-saigon chain:
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -56,7 +56,7 @@ services:
- DEPLOYMENT=test - DEPLOYMENT=test
- ETHSTATS_ENDPOINT=d${DOMAIN}:WSyDMrhRBe111@ronin-stats-ws.roninchain.com:443 - ETHSTATS_ENDPOINT=d${DOMAIN}:WSyDMrhRBe111@ronin-stats-ws.roninchain.com:443
- MINE=false - MINE=false
- NETWORK_ID=202601 - NETWORK_ID=2021
- NETWORK_PORT=10493 - NETWORK_PORT=10493
- PASSWORD=stupidpassword - PASSWORD=stupidpassword
- STATE_SCHEME=hash - STATE_SCHEME=hash
@@ -110,7 +110,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: ronin-saigon chain:
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -56,7 +56,7 @@ services:
- DEPLOYMENT=test - DEPLOYMENT=test
- ETHSTATS_ENDPOINT=d${DOMAIN}:WSyDMrhRBe111@ronin-stats-ws.roninchain.com:443 - ETHSTATS_ENDPOINT=d${DOMAIN}:WSyDMrhRBe111@ronin-stats-ws.roninchain.com:443
- MINE=false - MINE=false
- NETWORK_ID=202601 - NETWORK_ID=2021
- NETWORK_PORT=13559 - NETWORK_PORT=13559
- PASSWORD=stupidpassword - PASSWORD=stupidpassword
- STATE_SCHEME=path - STATE_SCHEME=path
@@ -110,7 +110,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: ronin-saigon chain:
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -126,7 +126,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: sonic-testnet-v2 chain: sonic-testnet
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -126,7 +126,7 @@ x-upstreams:
frameSize: 20Mb frameSize: 20Mb
msgSize: 50Mb msgSize: 50Mb
url: $${WS_URL} url: $${WS_URL}
chain: sonic-testnet-v2 chain: sonic-testnet
method-groups: method-groups:
enabled: enabled:
- debug - debug

View File

@@ -2,8 +2,8 @@
x-logging-defaults: &logging-defaults x-logging-defaults: &logging-defaults
driver: json-file driver: json-file
options: options:
max-size: "512m" max-size: "10m"
max-file: "2" max-file: "3"
# this snapshots works https://services.shachopra.com/zero-gravity-galileo-testnet/0g-validator-snapshot # this snapshots works https://services.shachopra.com/zero-gravity-galileo-testnet/0g-validator-snapshot
# Usage: # Usage:
@@ -72,7 +72,7 @@ services:
- --metrics.addr=0.0.0.0 - --metrics.addr=0.0.0.0
- --metrics.port=6060 - --metrics.port=6060
- --nat=extip:${IP} - --nat=extip:${IP}
- --networkid=16602 - --networkid=16601
- --port=11172 - --port=11172
- --rpc.gascap=600000000 - --rpc.gascap=600000000
- --rpc.txfeecap=0 - --rpc.txfeecap=0