Compare commits

..

85 Commits

Author SHA1 Message Date
b062191754 deploy: regenerate compose from vibe-node main c16e40b68366 2026-09-11 10:27:10 +00:00
rob
eee8bc13de avalanche C-chain configs: select APIs via eth-apis (defaults + debug/debug-tracer/debug-file-tracer/debug-handler); the legacy *-api-enabled flags are ignored by avalanchego 1.14.2 (canary rpc-de-22: debug_trace* now served)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KjqejYycVyVvrxV9aTDhgX
2026-09-11 09:58:49 +00:00
rob
2960ac3480 avalanche C-chain configs: debug-api-enabled true (mainnet pruned/archive/firewood, fuji pruned/archive) so the advertised dshackle debug group is actually served (dRPC routed 110 debug_trace* calls/day into method-not-available)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KjqejYycVyVvrxV9aTDhgX
2026-09-11 09:34:36 +00:00
03eece850f deploy: regenerate compose from vibe-node main ad1b9236adf5 2026-09-11 09:31:12 +00:00
20618f9f56 deploy: regenerate compose from vibe-node main c113407f089d 2026-09-11 08:56:22 +00:00
be4c1a599f deploy: regenerate compose from vibe-node main 218bbb0b7615 2026-09-11 08:11:28 +00:00
a8a8986305 deploy: regenerate compose from vibe-node main 2c123e09150c 2026-09-11 07:16:37 +00:00
dd059dfa1e deploy: regenerate compose from vibe-node main 02930ac0a52b 2026-09-11 06:32:40 +00:00
75e92270c6 Merge pull request 'haqq: fix startup crash-loop by adding missing cometbft-common.sh' (#73) from issue-4373 into main 2026-09-10 14:25:53 +00:00
ecf3eea227 deploy: regenerate compose from vibe-node main 8d6970c716b7 2026-09-10 09:50:10 +00:00
bc81a514d3 deploy: regenerate compose from vibe-node main 588eabf061ef 2026-09-10 09:22:19 +00:00
4d0d4e84bd deploy: regenerate compose from vibe-node main 482841b9f702 2026-09-10 09:17:47 +00:00
rob
4daf21cb27 haqq: drop truncated dteam peer, stop feeding the Polkachu addrbook JSON to ct_merge_seeds; cometbft-common: validate peer entries
- haqq/scripts/init.sh: 7c153a83@peer.haqq.mainnet.dteam.tech:28656 is not a 40-hex node id;
  haqqd refuses to start with it in seeds/persistent_peers. Removed from both defaults.
- haqq/scripts/init.sh: ct_merge_seeds was given ADDRBOOK_URL (a JSON addrbook, hundreds of KB)
  as the official seed list; the resulting sed argument exceeded ARG_MAX on Alpine. The
  addrbook is already installed by ct_set_addrbook; pass no seeds URL.
- scripts/cometbft-common.sh (+ per-chain copies via update.sh sync): ct_valid_peers filters
  seeds and persistent_peers to <40-hex>@host:port and logs what it drops, so a bad upstream
  entry can never block startup again.

Replaces the runtime override /root/onsite-overrides/haqq-mainnet-skip-addrbook-as-seeds.yml
that the onsite agent left on rpc-de-31 on 2026-09-07.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KjqejYycVyVvrxV9aTDhgX
2026-09-09 06:43:08 +00:00
7006907548 bump apechain nitro version to apechain-3.9.9 and sync with current context
- Update apechain nitro node from v3.5.6 to 3.9.9 for ArbOS v33 support
- Sync ARC client versions (reth: 0.8.0 -> 0.7.2, consensus: 0.8.0 -> 0.7.2)
- Sync Linea besu client version (2.0.0-20260714 -> 2.2.0-20260821)
2026-09-08 20:57:08 +00:00
611b962db5 tac: bump tacchaind client version from v1.6.0 to v1.6.2-beta.2-manual for mainnet hardfork
TAC mainnet halted at block 24,671,475 on 2026-08-22 and RESUMED 2026-09-02 via
one-shot Aug-2026 state-recovery hardfork gated on chain-id tacchain_239-1 +
height 24,671,476. v1.6.0 lacks that migration and cannot cross the fork height.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-09-07 13:09:17 +00:00
73c9362f9f nethermind: bump client version from 1.39.1 to 1.39.2 2026-09-07 12:40:14 +00:00
9f7317dcd1 haqq: add missing cometbft-common.sh COPY to Dockerfile 2026-09-07 11:48:42 +00:00
3e126d424f core: bump core-chain client from 1.0.22 to 1.0.26 for mainnet hardfork
Mainnet hardfork activated 2026-09-03 13:00 UTC; nodes on v1.0.22 stuck at
block 38376796 ('Re-queue blocks' loop). GitHub release v1.0.26 published
2026-09-02 with mainnet hardfork support.

Applies to all core networks: mainnet (chain 1116), buffalo, pigeon.
Image-only change: ghcr.io/coredao-org/core-chain:1.0.26

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-09-05 09:45:38 +00:00
5415831756 Merge pull request 'reference-rpc-endpoint: new zircuit-garfield-testnet reference RPC' (#72) from garfield-reference-rpc into main 2026-09-05 09:15:32 +00:00
dbead7d8ab reference-rpc-endpoint: zircuit-garfield-testnet — replace dead garfield-testnet.zircuit.com with rpc.garfield-testnet.zircuit.com
https://garfield-testnet.zircuit.com/ no longer answers JSON-RPC (empty reply), and
zircuit-garfield-testnet.drpc.org returns 'chain is not available on free plan'
(code 35), so sync-status reports garfield as 'unverified (reference unreachable)'
on de-32/de-11. https://rpc.garfield-testnet.zircuit.com answers eth_blockNumber
(0x1703803 on 2026-09-05). drpc kept as second URL.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzxemENdcZBCxdGrzXiFvS
2026-09-05 09:15:10 +00:00
561abcabac Merge pull request 'clone-backup: delete node identity keys on the destination after a successful restore' (#70) from fix-restore-delete-node-keys into main 2026-09-05 09:14:11 +00:00
4c86367c5f Merge pull request 'haqq: move CometBFT RPC laddr off 8545 to 26657 (EVM json-rpc never bound)' (#71) from haqq-init-cometbft-rpc-port into main 2026-09-05 08:41:49 +00:00
db7ef4c8cd haqq: fix CometBFT RPC port conflict - move [rpc] laddr from 8545 to 26657 2026-09-05 08:17:44 +00:00
45d3add2dd Add node identity key deletion after fast-path restore (fixes rpc-us-50 avalanche incident) 2026-09-04 09:21:21 +00:00
da5c600846 Merge pull request 'haqq: COPY cometbft-common.sh into the image (fix startup crash-loop)' (#69) from haqq-dockerfile-cometbft-common into main 2026-09-04 07:01:52 +00:00
833e7b2713 haqq: add missing cometbft-common.sh COPY to Dockerfile 2026-09-04 06:54:16 +00:00
b91f20a876 deploy: regenerate compose from vibe-node main 1b5ba9b72fe1 2026-09-04 03:57:52 +00:00
44fecc0269 Merge pull request 'zircuit: add Jovian + Karst fork times (garfield PAST since 2026-08-26; mainnet Sep 15 / Sep 23)' (#68) from zircuit-jovian-karst into main 2026-09-04 02:21:22 +00:00
0bac72abb4 zircuit: add jovian_time + karst_time (garfield PAST jovian 1787761801/karst 1788883201; mainnet jovian 1789489801/karst 1790179201) from live sequencers
garfield forked at Jovian (2026-08-26, ~block 23712660) on rpc-de-11 because rollup.json/genesis.json stopped at Isthmus; the de-32 bench copy restored from Conduit's snapshot cannot parse post-Jovian L1-info deposits (data is unexpected length: 178) for the same reason. mainnet activates Jovian 2026-09-15 and Karst 2026-09-23.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzxemENdcZBCxdGrzXiFvS
2026-09-04 02:20:47 +00:00
e4bfd6e50e deploy: regenerate compose from vibe-node main 5712d6ff2ee2 2026-09-04 01:29:27 +00:00
78dc41bd7e deploy: regenerate compose from vibe-node main 7e17db3a2710 2026-09-04 01:01:56 +00:00
abd240821b deploy: regenerate compose from vibe-node main ace5146f8c1c 2026-09-03 07:57:10 +00:00
bf9bee1742 ronin: add Karst hardfork times (mainnet: 1791388801, saigon: 1788364801) 2026-09-03 07:21:59 +00:00
7fd209c1ba fraxtal-mainnet: add fjord/granite/holocene/isthmus fork times to genesis.json (check_fork_times --fix)
Source: FraxFinance/fraxtal-node master mainnet/rollup.json (published; RPCs refuse
optimism_rollupConfig). rollup.json already had them; genesis.json stopped at
ecotone so op-geth (geth init runs every start) never activated Fjord+.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzxemENdcZBCxdGrzXiFvS
2026-09-03 03:54:17 +00:00
7c21ad95d8 Fix cronos port collision: remove hardcoded client_port 10521 from context.yml
cronos-mainnet now uses port 11552, cronos-testnet uses port 14547
to prevent Bind for 0.0.0.0:10521 port already allocated errors on rpc-de-35

cronosd supports custom P2P_PORT via ct_patch_p2p in init.sh, so auto-generated
ports are wired through correctly via P2P_PORT env var.
2026-09-03 03:52:38 +00:00
13e11730ec ethereum: replace beaconstate.ethstaker.cc with sync-mainnet.beaconcha.in for mainnet checkpoint-sync
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-09-03 03:32:53 +00:00
4340204c5c superseed-mainnet: add Jovian (1769065201) + Karst (1787673601) fork times to rollup.json and genesis.json
Live sequencer optimism_rollupConfig carries jovian_time/karst_time; our custom
configs stopped at Isthmus, so the de-32 bench sync diverged at block 21442759
(first Jovian block). Source: https://mainnet.superseed.xyz optimism_rollupConfig.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzxemENdcZBCxdGrzXiFvS
2026-09-03 03:16:01 +00:00
d9cb8f144d Add methods.disabled to beacon-chain upstreams for expensive state dumps
Disable GET#/eth/v2/debug/beacon/states/*, GET#/eth/v1/beacon/states/*/committees,
GET#/eth/v1/beacon/states/*/validators, and POST#/eth/v1/beacon/states/*/validators
which produce multi-GB responses that timeout at the gateway.

These were applied live on hosts 2026-08-31 (rob, operator-approved) but existed
nowhere durable. Baking them in at the source prevents regeneration from
erasing them.

Affects all ethereum and gnosis beacon-chain upstreams.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-09-02 05:51:16 +00:00
cb144f7d06 Replace dead beaconstate.info checkpoint-sync domains
- mainnet.beaconstate.info -> beaconstate.ethstaker.cc
- sepolia.beaconstate.info -> checkpoint-sync.sepolia.ethpandaops.io
- Preserve holesky.beaconstate.info and beaconstate-hoodi.chainsafe.io (alive)

Fixes CL container crash-loops on fresh starts due to dead DNS.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-09-02 03:45:23 +00:00
cd65972c45 superseed-mainnet: add missing EL fork times (granite/holocene/isthmus) 2026-09-01 01:02:19 +00:00
503246f795 regenerate all nitro-client composes with secondary-beacon-url fallback
Adds --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_<L1>_BEACON_REST_FALLBACK}
to all nitro clients using ethereum L1 (non-arbitrum l1_network_name).
Chains with l1_network_name=arbitrum (apechain, opencampuscodex) remain unchanged
as the flag is inside the non-arbitrum guard.

Generated from templates/clients/nitro.yml + default.env changes in PR #4332.
2026-08-30 05:51:37 +00:00
08becee73e katana-mainnet: regenerate op-reth compose files with OP_NODE_L2_SKIP_SYNC_START_CHECK=false 2026-08-30 05:38:31 +00:00
361d93d1ad Fix arc version tag: remove v-prefix from v0.8.0 -> 0.8.0
The arc-network cloudsmith registry has NO v-prefix for 0.8.0.
Available tags are 0.8.0 and 0.8.0-66ad2d5a (the v-prefix existed
only for v0.7.3). Deploy of the previous change failed with
manifest-unknown for arc-consensus:v0.8.0.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-30 04:59:40 +00:00
c8cbd8a925 Add superseed mainnet op-reth pruned-trace profile
- Add new superseed-mainnet-op-reth-pruned-trace.yml compose file
- Update compose_registry.json with new entry
- Mirror sepolia op-reth profile structure with mainnet settings

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-30 04:39:47 +00:00
0f6e212d39 arc: upgrade to v0.8.0 with reth 2.2 Storage V2 support
- Bump execution client version from v0.7.3 to v0.8.0
- Bump consensus client version from v0.7.3 to v0.8.0
- Add --prune.block-interval=5000 to retain previous pruning schedule
- Supports reth Storage V2 (v0.8.0 binary runs V1 data without migration)
- Addresses breaking changes from arc-node v0.8.0 BREAKING_CHANGES.md

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-30 03:46:00 +00:00
3657fc49f2 Add Humanity chain node profile (arb/humanity)
- Add Arbitrum Orbit L2 chain Humanity with nitro client
- Mainnet chain-id: 13600000, testnet chain-id: 7080969
- Generate pruned-pebble-hash and pruned-pebble-hash.prune variants
- Use offchainlabs/nitro-node:v3.11.2-3599aca
- Parent chain: Arbitrum One (l1: one, l1_network_name: arbitrum)

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-29 12:47:12 +00:00
40a415cee8 avalanche: revert fuji profile to leveldb (remove firewood, restore leveldb)
The previous commit (b578bd85) incorrectly renamed fuji from leveldb to firewood.
On-disk verification on rpc-de-10 (64k *.ldb files, --db-type=leveldb flag,
startup log databaseConfig.name=leveldb) proves the avalanche-fuji node uses
LEVELDB. This commit restores the leveldb profiles and removes the firewood
variants for fuji.

- Restored: avalanche-fuji-go-pruned-leveldb.yml, .prune.yml, archive-leveldb.yml
- Removed: avalanche-fuji-go-pruned-firewood.yml, .prune.yml
- Updated: compose_registry.json

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-29 05:49:57 +00:00
b578bd8514 avalanche: fix fuji profile naming to use firewood db (remove pebbledb/leveldb profiles)
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-29 05:43:20 +00:00
7b667fe049 avalanche: add firewood profile for mainnet (pruning-free merkle DB)
Add new avalanchego v1.14.2 profile with Firewood state database backend:
- state-scheme: firewood (with required populate-missing-tries:null, snapshot-cache:0)
- state-sync-enabled: true (confirmed supported in v1.14.2)
- chain-config-dir: /config/firewood
- db-type: firewood
- coreth-state-scheme: firewood

Generated compose: avalanche-mainnet-go-firewood-firewood.yml

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-29 05:29:45 +00:00
cf91b6f14d Merge pull request 'linea: reduce Maru engine API parallelism' (#49) from issue-2412 into main 2026-08-28 05:25:30 +00:00
529a91f0d7 Merge pull request 'show-status: exit code was always 0 — three compounding bugs' (#66) from fix-show-status-exit-code into main 2026-08-28 05:25:11 +00:00
3478d286f6 reload_dshackle.sh: make gateway reconnect conditional on upstream/disabled-method removals
Operator ruling: NEVER force a reconnect on a routine reload/rpc-update run.
Only upstream REMOVALS or new disabled-method ADDITIONS require a gateway
reconnect to be seen by dRPC gateways.

Implement snapshot-based comparison:
- Before SIGHUP, read current advertised set (upstream IDs + disabled methods)
- Compare against previous snapshot (if exists)
- Drop established gRPC connections ONLY IF:
  * an upstream ID disappeared, OR
  * a new disabled-method entry appeared
- Pure additions or no change: reload only, no drop
- First run with no prior snapshot: do NOT drop, just write snapshot
- Always rewrite snapshot after successful reload
- All operations best-effort (failures never fail the script)

Live-measured: upstream/method additions propagate over existing connection
in ~16s (no reconnect needed).

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-27 03:28:32 +00:00
8f8ac427d3 kite: fix staking port mapping to use fixed container port 9651
Fix AVAGO_STAKING_PORT to use fixed port 9651 instead of salted client_port.
Fix port mapping from {{ client_port }}:{{ client_port }} to {{ client_port }}:9651
to ensure container uses fixed P2P port while host binds to salted port.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-27 03:23:29 +00:00
81c9addac9 reload_dshackle.sh: drop established gRPC connections after successful SIGHUP reload
Extend reload_dshackle.sh to drop established gateway gRPC connections on
port 2449 after a successful SIGHUP config reload, forcing the dRPC edge
to reconnect within ~1s and re-read the advertised chain/method list.
Gateways only re-initialize advertisements on reconnection (verified live:
0.03-0.06s serving gap, 33 re-probes in 4s). This allows deploy-time upstream
additions (new chains like mova, new backends like us-50) to be seen by
dRPC immediately rather than waiting for natural reconnection.

The TCP-level drop is best-effort: failure does NOT fail the script.
Operator ruling: this stays a TCP-level drop, NOT a dshackle code change.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-27 03:14:47 +00:00
37a26d8791 mova: add mainnet-v2 geth profile (pruned, archive)
Add MOVA Mainnet v2 node profile with geth client and std_pruned_archive
profiles (pebble/path pruned, leveldb/hash archive). Chain ID 61901.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-27 03:10:45 +00:00
783435dc20 Raise cronos feeHistory cap from 100 to 250
- Add FEEHISTORY_CAP env tunable with default 250
- Update init.sh to use FEEHISTORY_CAP for feehistory-cap in app.toml
- Maintain backward compatibility with JSON_RPC_FEEHISTORY_CAP
- Apply to both mainnet and testnet profiles

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-27 02:46:48 +00:00
48302a4270 abcore: fix version interpolation and state scheme
- Use canonical clients version substitution format:
  ${SERVICE_CLIENT_VERSION:-version} instead of ${SERVICE_GETH_VERSION:-version}
- Change profile from pruned-pebble-path to pruned-pebble-hash
- Remove --state.scheme=path from run command (geth v1.13 cannot write path scheme)
- Remove --state.scheme=path from init.sh geth init command
- Keep --db.engine=pebble and --config=/config/config.toml

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-26 03:35:23 +00:00
d5e3068e7f Fix abcore init: add --db.engine=pebble --state.scheme=path to geth init
Matches the run profile flags to prevent 'incompatible state scheme' crash
on fresh datadir initialization (stored: hash, provided: path).

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-26 03:27:25 +00:00
5182ab6bd4 Fix abcore mainnet: wire client_version to build arg and use equals form for --config flag
- Fix ABCORE_MAINNET_GETH_VERSION default from empty to v1.13.15-abcore-1.2
- Fix command flag from '--config /config/config.toml' to '--config=/config/config.toml'

Both issues caused first-deploy failures on rpc-de-32:
1. Empty version default caused curl exit 22 on binary download
2. Space-separated flag/value caused geth crash-loop with 'flag provided but not defined: -config'

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-26 03:14:14 +00:00
20e2c1a66e Merge pull request 'haqq: fix init.sh addrbook bootstrap bug' (#50) from issue-2601 into main 2026-08-26 02:45:56 +00:00
bedd7a32aa Add abcore mainnet node profile (chain-id 36888)
- Add abcore.Dockerfile for geth-fork binary download from ABFoundationGlobal/abcore
- Add scripts/init.sh for geth initialization with genesis.json and config.toml
- Add generated compose file abcore-mainnet-geth-pruned-pebble-path.yml
- Update compose_registry.json with new entry

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-26 02:44:57 +00:00
206fc78735 Merge branch 'main' into issue-2601 2026-08-26 02:42:30 +00:00
20511cd247 Merge pull request 'abcore mainnet: add geth-fork chain-id 36888' (#56) from issue-3079 into main 2026-08-26 02:35:13 +00:00
42bc7f504e avalanche fuji: enable C-chain state-sync on pruned profile (mirrors #48 for mainnet; full block execution was 55h+ ETA on the de-22 prune-cycle test node) 2026-08-26 01:50:29 +00:00
fed15a5484 Merge pull request 'avalanche: enable state-sync on C-chain pruned profile' (#48) from issue-2307 into main 2026-08-26 01:49:58 +00:00
ba44def37b fix zero-gravity doubled-v: add VERSION normalization to extraction RUN step
The previous commit (7cbd0532) added VERSION normalization to the DOWNLOAD
RUN step but forgot to add it to the EXTRACTION RUN step. Each Dockerfile
RUN is a fresh shell, so the extraction step fails with 'VERSION: unbound
variable' when it tries to use ${VERSION} in the SRC variable.

Fix: add VERSION="${ZERO_GRAVITY_VERSION#v}"; to the extraction RUN step
(line 73) so it defines VERSION before using it.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-25 09:14:25 +00:00
0071f41e4c tac: update mainnet peer list with verified live peers (2026-08-25) 2026-08-25 05:35:26 +00:00
7cbd053236 fix zero-gravity doubled-v bug in Dockerfile asset names
Remove leading 'v' from ZERO_GRAVITY_VERSION values in context.yml
(1.0.6, 3.0.8 instead of v1.0.6, v3.0.8) and add defensive stripping in
zerog.Dockerfile (VERSION=${ZERO_GRAVITY_VERSION#v}) to prevent
asset names like aristotle-vv1.0.6.tar.gz / galileo-vv3.0.8.tar.gz.

The asset filename is always <spec>-v<version>.tar.gz, and the Dockerfile
was adding a 'v' prefix to versions that already had one.

Verified URLs resolve:
- aristotle: https://github.com/0gfoundation/0gchain-Aristotle/releases/download/v1.0.6/aristotle-v1.0.6.tar.gz
- galileo: https://github.com/0gfoundation/0gchain-NG/releases/download/v3.0.8/galileo-v3.0.8.tar.gz

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-25 04:36:36 +00:00
6979290310 tac: fix malformed sed address ranges in init.sh
Fix four sed address ranges that were missing closing slash before comma:
- /^\[rpc\],/^\[/ -> /^\[rpc\]/,/^\[/
- /^\[json-rpc\],/^\[/ -> /^\[json-rpc\]/,/^\[/ (3 occurrences)

The malformed patterns caused sed to crash-loop the TAC container.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-25 04:08:06 +00:00
0e6c2a3bc7 zero-gravity: bump zerog node versions aristotle 1.0.6->v1.0.6, galileo 3.0.8->v3.0.8
Match upstream release tags: aristotle v1.0.6 (0gchain-Aristotle) and
galileo v3.0.8 (0gchain-NG) both carry v-prefix in their release tags.
Required for 0g hardfork; old clients stuck-syncing.

Supersedes stale unmergeable PR ethereum-rpc-docker#62.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-25 04:03:35 +00:00
Mistral Vibe
7cab80da70 avalanche: bump fuji avalanchego version to v1.15.0-fuji
Fuji validators run the v1.15.0-fuji prerelease and refuse v1.14.2 peers
('peer attempting to connect with newer version'), so fuji nodes cannot
bootstrap on the stable version.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-25 03:51:42 +00:00
fc9f82ec48 tac: fix crash-loop by installing GNU sed for sed command compatibility
The TAC mainnet container was crash-looping with 'sed: unsupported command ^'
because busybox sed in Alpine does not support the GNU sed extensions used in
the cometbft-common.sh scripts (address ranges with ^ anchor and {} grouping).

Adding the 'sed' package installs GNU sed which supports these features.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-25 03:40:27 +00:00
b93ad15f52 avalanche: add mainnet offline-prune config matching fuji pattern
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-24 05:31:21 +00:00
cff52429bd tac: add TAC mainnet archive profile with EVM JSON-RPC upstream
- Add archive profile (pruning=nothing) for tacchaind
- Change client_rpc_port from 26657 (CometBFT) to 8545 (EVM JSON-RPC)
- Update Dockerfile to download pre-built binary from GitHub releases v1.6.0
- Verify binary against checksums.txt
- Update init.sh to support PRUNING env var (nothing for archive, default for pruned)
- Update peers from NETWORKS.md
- Add archive snapshot URL note
- Traefik routes to EVM JSON-RPC port 8545 for both pruned and archive

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-23 10:55:39 +00:00
434717b194 deploy: regenerate compose from vibe-node main a86fd1cc5923 2026-08-20 17:16:40 +00:00
25b764684d deploy: regenerate compose from vibe-node main 57aeb4d4424f 2026-08-20 04:01:57 +00:00
502a75b2fd show-status: exit code was always 0 — three compounding bugs
show-status.sh could never report failure. The ansible task that wraps it
('Execute show-status.sh and fail on failure') therefore always passed, on every
host, regardless of node state. Three bugs, each masking the next:

1. $? read too late. `code=0` sits between the sync-status.sh call and
   `if [ $? -ne 0 ]`. A plain assignment succeeds and overwrites $? with 0, so
   the condition was ALWAYS false and the else branch always taken.

2. The else branch was inverted. It is the sync-status-SUCCEEDED path, yet it set
   `code=1; any_failure=true` — marking healthy nodes as failures.

3. any_failure could never propagate. check_sync_status runs backgrounded (`&`),
   i.e. in a subshell, so `any_failure=true` inside it is discarded; and the
   `wait "$pid"` loop threw away each job's exit status.

(3) hid (1) and (2): a script that believed every node had failed still exited 0,
so nobody saw it.

Fix: capture rc immediately; restore the intended logic (success => 0, syncing or
lagging => tolerated, anything else => failure); propagate failure in the PARENT
via `wait "$pid" || any_failure=true`, since the subshell cannot.

Verified with a stubbed sync-status.sh:

  scenario              before   after
  all online              0        0
  one syncing             0        0   (tolerated)
  one lagging             0        0   (tolerated)
  one ERROR               0        1
  ALL error               0        1

Behaviour for healthy fleets is unchanged; only genuine failures now surface.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 19:56:10 +00:00
b92fb0ecb3 deploy: regenerate compose from vibe-node main a1ebdcbaffd4 2026-08-13 08:08:13 +00:00
477e969e54 abcore: add mainnet genesis.json and config.toml for chain-id 36888 2026-08-09 00:19:29 +00:00
b0efb236bf Add abcore mainnet genesis.json (chain-id 36888, Newton) 2026-08-08 22:47:51 +00:00
bfe5bdd97d haqq: add required DTEAM and allnodes.me seeds to bootstrap config 2026-08-04 12:04:21 +00:00
223c694085 haqq: fix bootstrap config - correct addrbook filename, add Polkachu seeds, persistent peers, auto-refresh from Polkachu when empty 2026-08-04 10:28:18 +00:00
80b0e4253e linea/mainnet/maru: reduce blocks-parallelism 10→2 and blocks-batch-size 10→5 to reduce engine API saturation 2026-08-02 18:03:02 +00:00
c5f9e5000f linea: lower desync-tolerance from 100000 to 64 to allow range-sync mode 2026-08-02 14:51:49 +00:00
7a3003cb63 avalanche: enable state-sync on C-chain pruned profile 2026-08-01 00:17:37 +00:00
256 changed files with 4708 additions and 676 deletions

25
abcore/abcore.Dockerfile Normal file
View File

@@ -0,0 +1,25 @@
FROM rockylinux:9
COPY ./scripts/init.sh /usr/local/bin/init.sh
RUN chmod +x /usr/local/bin/init.sh
ARG ABCORE_MAINNET_GETH_VERSION
# Download and verify the geth binary from GitHub releases
RUN set -eu; \
VERSION="${ABCORE_MAINNET_GETH_VERSION}"; \
BINARY="geth-${VERSION}"; \
URL="https://github.com/ABFoundationGlobal/abcore/releases/download/${VERSION}/${BINARY}"; \
SHA256_URL="${URL}.sha256"; \
echo "abcore: downloading geth binary from ${URL}"; \
curl -fsSL "${URL}" -o "/tmp/${BINARY}"; \
echo "abcore: downloading sha256 checksum from ${SHA256_URL}"; \
curl -fsSL "${SHA256_URL}" -o "/tmp/${BINARY}.sha256"; \
cd /tmp; \
sha256sum -c "${BINARY}.sha256" || (echo "abcore: SHA256 verification failed for ${BINARY}" >&2 && exit 1); \
chmod +x "${BINARY}"; \
mkdir -p /abcore/bin; \
mv "${BINARY}" /abcore/bin/geth; \
rm -f "${BINARY}" "${BINARY}.sha256"
ENTRYPOINT [ "init.sh" ]

View File

@@ -0,0 +1,151 @@
---
x-logging-defaults: &logging-defaults
driver: json-file
options:
max-size: "512m"
max-file: "2"
# ABFoundationGlobal/abcore geth-fork client
# Distributed as release binaries from https://github.com/ABFoundationGlobal/abcore/releases
# Version: v1.13.15-abcore-1.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:abcore/geth/abcore-mainnet-geth-pruned-pebble-hash.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/abcore-mainnet-geth \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
abcore-mainnet-geth:
build:
context: ./abcore
dockerfile: abcore.Dockerfile
args:
ABCORE_MAINNET_GETH_VERSION: ${ABCORE_MAINNET_GETH_VERSION:-v1.13.15-abcore-1.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13110:13110
- 13110:13110/udp
expose:
- 8545
- 6060
environment:
- CHAIN_NAME=mainnet
entrypoint: [/usr/local/bin/init.sh]
command:
- --config=/config/config.toml
- --datadir=/root/.ethereum
- --db.engine=pebble
- --gcmode=full
- --http
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,debug,admin,txpool,engine
- --http.port=8545
- --http.vhosts=*
- --maxpeers=50
- --metrics
- --metrics.addr=0.0.0.0
- --metrics.port=6060
- --nat=extip:${IP}
- --networkid=36888
- --port=13110
- --rpc.gascap=600000000
- --rpc.txfeecap=0
- --syncmode=full
- --ws
- --ws.addr=0.0.0.0
- --ws.api=eth,net,web3,debug,admin,txpool,engine
- --ws.origins=*
- --ws.port=8545
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${ABCORE_MAINNET_GETH_PRUNED_PEBBLE_HASH_DATA:-abcore-mainnet-geth-pruned-pebble-hash}:/root/.ethereum
- ./abcore/mainnet:/config
- /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.abcore-mainnet-geth-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/abcore-mainnet-geth
- traefik.http.services.abcore-mainnet-geth-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.abcore-mainnet-geth-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.abcore-mainnet-geth-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.abcore-mainnet-geth-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/abcore-mainnet-geth`) || Path(`/abcore-mainnet-geth/`))}
- ${NO_SSL:+traefik.http.routers.abcore-mainnet-geth-pruned-pebble-hash.rule=Path(`/abcore-mainnet-geth`) || Path(`/abcore-mainnet-geth/`)}
- traefik.http.routers.abcore-mainnet-geth-pruned-pebble-hash.middlewares=abcore-mainnet-geth-pruned-pebble-hash-stripprefix, ipallowlist
volumes:
abcore-mainnet-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: abcore
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -0,0 +1,33 @@
[Eth]
NetworkId = 36888
SyncMode = "snap"
NoPruning = false
NoPrefetch = false
[Eth.Miner]
GasFloor = 0
GasCeil = 63000000
GasPrice = 50000000000000
Recommit = 2000000000
NewPayloadTimeout = 2000000000
[Node]
DataDir = "/root/.ethereum"
HTTPHost = "0.0.0.0"
HTTPPort = 8545
HTTPVirtualHosts = ["*"]
HTTPModules = ["eth", "net", "web3", "debug", "admin", "txpool", "engine"]
WSHost = "0.0.0.0"
WSPort = 8546
WSModules = ["eth", "net", "web3", "debug", "admin", "txpool", "engine"]
WSOrigins = ["*"]
[Node.P2P]
MaxPeers = 50
NoDiscovery = false
DiscoveryV4 = true
ListenAddr = ":33333"
[Metrics]
HTTP = "127.0.0.1"
Port = 6060

View File

@@ -0,0 +1,28 @@
{
"config": {
"chainId": 36888,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"clique": {
"period": 3,
"epoch": 30000
}
},
"timestamp": "0x67fda368",
"difficulty": "1",
"gasLimit": "63000000",
"extradata": "0x0000000000000000000000000000000000000000000000000000000000000000E9B95948d28EF808a9184d5fC98346EF3e56839c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"da8B88027Ac27532E1525DD67974c2377b450A08": {
"balance": "100000000000000000000000000000"
}
}
}

22
abcore/scripts/init.sh Normal file
View File

@@ -0,0 +1,22 @@
#!/bin/sh
set -e # Exit on failure
GETH_DATA_DIR="/root/.ethereum"
CONFIG_FILE="/config/config.toml"
GENESIS_FILE="/config/genesis.json"
# Initialize geth from genesis if data directory is empty
if [ -z "$(ls -A "$GETH_DATA_DIR")" ]; then
echo "abcore: data directory is empty, initializing from genesis..."
if [ -f "$GENESIS_FILE" ]; then
/abcore/bin/geth init --datadir "$GETH_DATA_DIR" --db.engine=pebble "$GENESIS_FILE"
else
echo "abcore: genesis file not found at $GENESIS_FILE" >&2
exit 1
fi
else
echo "abcore: data directory not empty, continuing..."
fi
exec /abcore/bin/geth --config "$CONFIG_FILE" --datadir "$GETH_DATA_DIR" "$@"

View File

@@ -54,7 +54,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@abstract-mainnet-archive-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_MAINNET_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -54,7 +54,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@abstract-mainnet-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_MAINNET_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -54,7 +54,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@abstract-testnet-archive-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -54,7 +54,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@abstract-testnet-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/alephzero-mainnet-archive
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/alephzero-mainnet
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/alephzero-sepolia-archive
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/alephzero-sepolia
- --persistent.db-engine=pebble

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
apechain-mainnet-archive:
image: ${APECHAIN_NITRO_IMAGE:-public.ecr.aws/i6b2w2n6/nitro-node}:${APECHAIN_MAINNET_NITRO_VERSION:-apechain-v3.5.6}
image: ${APECHAIN_NITRO_IMAGE:-public.ecr.aws/i6b2w2n6/nitro-node}:${APECHAIN_MAINNET_NITRO_VERSION:-apechain-3.9.9}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
apechain-mainnet:
image: ${APECHAIN_NITRO_IMAGE:-public.ecr.aws/i6b2w2n6/nitro-node}:${APECHAIN_MAINNET_NITRO_VERSION:-apechain-v3.5.6}
image: ${APECHAIN_NITRO_IMAGE:-public.ecr.aws/i6b2w2n6/nitro-node}:${APECHAIN_MAINNET_NITRO_VERSION:-apechain-3.9.9}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -69,6 +69,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-nova-archive
- --ws.addr=0.0.0.0

View File

@@ -69,6 +69,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-nova-archive
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-nova-minimal
- --persistent.db-engine=pebble

View File

@@ -69,6 +69,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-nova-minimal
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-nova
- --persistent.db-engine=pebble

View File

@@ -69,6 +69,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-nova
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one-archive
- --ws.addr=0.0.0.0

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one-archive
- --persistent.db-engine=pebble

View File

@@ -69,6 +69,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one-archive
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one-minimal
- --persistent.db-engine=pebble

View File

@@ -69,6 +69,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one-minimal
- --persistent.db-engine=pebble

View File

@@ -71,6 +71,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one
- --persistent.db-engine=pebble

View File

@@ -69,6 +69,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-one
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-sepolia-archive
- --persistent.db-engine=pebble

View File

@@ -71,6 +71,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-sepolia-minimal
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-sepolia-minimal
- --persistent.db-engine=pebble

View File

@@ -71,6 +71,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-sepolia
- --persistent.db-engine=pebble

View File

@@ -70,6 +70,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/arbitrum-sepolia
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/connext-sepolia-archive
- --ws.addr=0.0.0.0

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/connext-sepolia
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/everclear-mainnet-archive
- --ws.addr=0.0.0.0

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/everclear-mainnet
- --persistent.db-engine=pebble

View File

@@ -0,0 +1,144 @@
---
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:arb/nitro/humanity-mainnet-nitro-pruned-pebble-hash.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/humanity-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
humanity-mainnet:
image: ${HUMANITY_NITRO_IMAGE:-offchainlabs/nitro-node}:${HUMANITY_MAINNET_NITRO_VERSION:-v3.11.2-3599aca}
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
command:
- --conf.file=/config/baseConfig.json
- --execution.caching.archive=${HUMANITY_MAINNET_ARCHIVE_DB:-false}
- --execution.caching.database-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_DATABASE_CACHE:-2048}
- --execution.caching.snapshot-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_SNAPSHOT_CACHE:-400}
- --execution.caching.trie-clean-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_CLEAN_CACHE:-600}
- --execution.caching.trie-dirty-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_DIRTY_CACHE:-1024}
- --execution.forwarding-target=https://humanity-main.g.alchemy.com/public
- --execution.rpc.gas-cap=5500000000
- --execution.rpc.log-history=0
- --execution.sequencer.enable=false
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,arb,txpool,debug
- --http.corsdomain=*
- --http.port=8545
- --http.vhosts=*
- --init.prune=full
- --metrics
- --metrics-server.addr=0.0.0.0
- --metrics-server.port=6070
- --node.batch-poster.enable=false
- --node.da.anytrust.enable=true
- --node.da.anytrust.rest-aggregator.enable=true
- --node.da.anytrust.rest-aggregator.urls=https://humanity-main.g.alchemy.com/public
- --node.feed.input.url=wss://humanity-main.g.alchemy.com/public
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.connection.url=${ARBITRUM_ONE_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/humanity-mainnet
- --persistent.db-engine=pebble
- --ws.addr=0.0.0.0
- --ws.origins=*
- --ws.port=8545
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_DATA:-humanity-mainnet-nitro-pruned-pebble-hash}:/root/.arbitrum
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6070
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.humanity-mainnet-nitro-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/humanity-mainnet
- traefik.http.services.humanity-mainnet-nitro-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/humanity-mainnet`) || Path(`/humanity-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.rule=Path(`/humanity-mainnet`) || Path(`/humanity-mainnet/`)}
- traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.middlewares=humanity-mainnet-nitro-pruned-pebble-hash-stripprefix, ipallowlist
volumes:
humanity-mainnet-nitro-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: humanity
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -0,0 +1,143 @@
---
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:arb/nitro/humanity-mainnet-nitro-pruned-pebble-hash.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/humanity-mainnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
humanity-mainnet:
image: ${HUMANITY_NITRO_IMAGE:-offchainlabs/nitro-node}:${HUMANITY_MAINNET_NITRO_VERSION:-v3.11.2-3599aca}
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
command:
- --conf.file=/config/baseConfig.json
- --execution.caching.archive=${HUMANITY_MAINNET_ARCHIVE_DB:-false}
- --execution.caching.database-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_DATABASE_CACHE:-2048}
- --execution.caching.snapshot-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_SNAPSHOT_CACHE:-400}
- --execution.caching.trie-clean-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_CLEAN_CACHE:-600}
- --execution.caching.trie-dirty-cache=${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_DIRTY_CACHE:-1024}
- --execution.forwarding-target=https://humanity-main.g.alchemy.com/public
- --execution.rpc.gas-cap=5500000000
- --execution.rpc.log-history=0
- --execution.sequencer.enable=false
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,arb,txpool,debug
- --http.corsdomain=*
- --http.port=8545
- --http.vhosts=*
- --metrics
- --metrics-server.addr=0.0.0.0
- --metrics-server.port=6070
- --node.batch-poster.enable=false
- --node.da.anytrust.enable=true
- --node.da.anytrust.rest-aggregator.enable=true
- --node.da.anytrust.rest-aggregator.urls=https://humanity-main.g.alchemy.com/public
- --node.feed.input.url=wss://humanity-main.g.alchemy.com/public
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.connection.url=${ARBITRUM_ONE_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/humanity-mainnet
- --persistent.db-engine=pebble
- --ws.addr=0.0.0.0
- --ws.origins=*
- --ws.port=8545
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${HUMANITY_MAINNET_NITRO_PRUNED_PEBBLE_HASH_DATA:-humanity-mainnet-nitro-pruned-pebble-hash}:/root/.arbitrum
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6070
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.humanity-mainnet-nitro-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/humanity-mainnet
- traefik.http.services.humanity-mainnet-nitro-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/humanity-mainnet`) || Path(`/humanity-mainnet/`))}
- ${NO_SSL:+traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.rule=Path(`/humanity-mainnet`) || Path(`/humanity-mainnet/`)}
- traefik.http.routers.humanity-mainnet-nitro-pruned-pebble-hash.middlewares=humanity-mainnet-nitro-pruned-pebble-hash-stripprefix, ipallowlist
volumes:
humanity-mainnet-nitro-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: humanity
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -0,0 +1,144 @@
---
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:arb/nitro/humanity-testnet-nitro-pruned-pebble-hash.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/humanity-testnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
humanity-testnet:
image: ${HUMANITY_NITRO_IMAGE:-offchainlabs/nitro-node}:${HUMANITY_TESTNET_NITRO_VERSION:-v3.11.2-3599aca}
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
command:
- --conf.file=/config/baseConfig.json
- --execution.caching.archive=${HUMANITY_TESTNET_ARCHIVE_DB:-false}
- --execution.caching.database-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_DATABASE_CACHE:-2048}
- --execution.caching.snapshot-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_SNAPSHOT_CACHE:-400}
- --execution.caching.trie-clean-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_CLEAN_CACHE:-600}
- --execution.caching.trie-dirty-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_DIRTY_CACHE:-1024}
- --execution.forwarding-target=https://rpc.testnet.humanity.org
- --execution.rpc.gas-cap=5500000000
- --execution.rpc.log-history=0
- --execution.sequencer.enable=false
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,arb,txpool,debug
- --http.corsdomain=*
- --http.port=8545
- --http.vhosts=*
- --init.prune=full
- --metrics
- --metrics-server.addr=0.0.0.0
- --metrics-server.port=6070
- --node.batch-poster.enable=false
- --node.da.anytrust.enable=true
- --node.da.anytrust.rest-aggregator.enable=true
- --node.da.anytrust.rest-aggregator.urls=https://rpc.testnet.humanity.org
- --node.feed.input.url=wss://rpc.testnet.humanity.org
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.connection.url=${ARBITRUM_ONE_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/humanity-testnet
- --persistent.db-engine=pebble
- --ws.addr=0.0.0.0
- --ws.origins=*
- --ws.port=8545
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_DATA:-humanity-testnet-nitro-pruned-pebble-hash}:/root/.arbitrum
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6070
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.humanity-testnet-nitro-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/humanity-testnet
- traefik.http.services.humanity-testnet-nitro-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/humanity-testnet`) || Path(`/humanity-testnet/`))}
- ${NO_SSL:+traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.rule=Path(`/humanity-testnet`) || Path(`/humanity-testnet/`)}
- traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.middlewares=humanity-testnet-nitro-pruned-pebble-hash-stripprefix, ipallowlist
volumes:
humanity-testnet-nitro-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: humanity-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -0,0 +1,143 @@
---
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:arb/nitro/humanity-testnet-nitro-pruned-pebble-hash.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/humanity-testnet \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
humanity-testnet:
image: ${HUMANITY_NITRO_IMAGE:-offchainlabs/nitro-node}:${HUMANITY_TESTNET_NITRO_VERSION:-v3.11.2-3599aca}
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
command:
- --conf.file=/config/baseConfig.json
- --execution.caching.archive=${HUMANITY_TESTNET_ARCHIVE_DB:-false}
- --execution.caching.database-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_DATABASE_CACHE:-2048}
- --execution.caching.snapshot-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_SNAPSHOT_CACHE:-400}
- --execution.caching.trie-clean-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_CLEAN_CACHE:-600}
- --execution.caching.trie-dirty-cache=${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_TRIE_DIRTY_CACHE:-1024}
- --execution.forwarding-target=https://rpc.testnet.humanity.org
- --execution.rpc.gas-cap=5500000000
- --execution.rpc.log-history=0
- --execution.sequencer.enable=false
- --http.addr=0.0.0.0
- --http.api=eth,net,web3,arb,txpool,debug
- --http.corsdomain=*
- --http.port=8545
- --http.vhosts=*
- --metrics
- --metrics-server.addr=0.0.0.0
- --metrics-server.port=6070
- --node.batch-poster.enable=false
- --node.da.anytrust.enable=true
- --node.da.anytrust.rest-aggregator.enable=true
- --node.da.anytrust.rest-aggregator.urls=https://rpc.testnet.humanity.org
- --node.feed.input.url=wss://rpc.testnet.humanity.org
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.connection.url=${ARBITRUM_ONE_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/humanity-testnet
- --persistent.db-engine=pebble
- --ws.addr=0.0.0.0
- --ws.origins=*
- --ws.port=8545
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${HUMANITY_TESTNET_NITRO_PRUNED_PEBBLE_HASH_DATA:-humanity-testnet-nitro-pruned-pebble-hash}:/root/.arbitrum
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=true
- prometheus-scrape.port=6070
- prometheus-scrape.path=/debug/metrics/prometheus
- traefik.enable=true
- traefik.http.middlewares.humanity-testnet-nitro-pruned-pebble-hash-stripprefix.stripprefix.prefixes=/humanity-testnet
- traefik.http.services.humanity-testnet-nitro-pruned-pebble-hash.loadbalancer.server.port=8545
- ${NO_SSL:-traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.rule=Host(`$DOMAIN`) && (Path(`/humanity-testnet`) || Path(`/humanity-testnet/`))}
- ${NO_SSL:+traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.rule=Path(`/humanity-testnet`) || Path(`/humanity-testnet/`)}
- traefik.http.routers.humanity-testnet-nitro-pruned-pebble-hash.middlewares=humanity-testnet-nitro-pruned-pebble-hash-stripprefix, ipallowlist
volumes:
humanity-testnet-nitro-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: humanity-testnet
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
# standard geth only
- name: debug_getRawBlock
- name: debug_getRawTransaction
- name: debug_getRawReceipts
- name: debug_getRawHeader
- name: debug_getBadBlocks
# non standard geth only slightly dangerous
- name: debug_intermediateRoots
- name: debug_dumpBlock
# standard geth and erigon
- name: debug_accountRange
- name: debug_getModifiedAccountsByNumber
- name: debug_getModifiedAccountsByHash
# non standard geth and erigon
- name: eth_getRawTransactionByHash
- name: eth_getRawTransactionByBlockHashAndIndex
...

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-mainnet-archive
- --ws.addr=0.0.0.0

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-mainnet-archive
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-mainnet
- --ws.addr=0.0.0.0

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-mainnet
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-testnet-archive
- --ws.addr=0.0.0.0

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-testnet-archive
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-testnet
- --ws.addr=0.0.0.0

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/plume-testnet
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/real-mainnet-archive
- --ws.addr=0.0.0.0

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/real-mainnet-archive
- --persistent.db-engine=pebble

View File

@@ -74,6 +74,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/real-mainnet
- --persistent.db-engine=pebble

View File

@@ -71,6 +71,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_MAINNET_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_MAINNET_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_MAINNET_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/robinhood-mainnet
- --persistent.db-engine=pebble

View File

@@ -71,6 +71,7 @@ services:
- --node.sequencer=false
- --node.staker.enable=false
- --parent-chain.blob-client.beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST}
- --parent-chain.blob-client.secondary-beacon-url=${ETHEREUM_SEPOLIA_BEACON_REST_FALLBACK}
- --parent-chain.connection.url=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- --persistent.chain=/root/.arbitrum/robinhood-testnet
- --persistent.db-engine=pebble

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
arc-mainnet-archive-consensus-init:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-0.7.2}
user: 0:0
entrypoint: [/usr/local/bin/arc-node-consensus, init]
command:
@@ -57,7 +57,7 @@ services:
logging: *logging-defaults
arc-mainnet-archive:
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_MAINNET_RETH_VERSION:-v0.7.3}
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_MAINNET_RETH_VERSION:-0.7.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -119,7 +119,7 @@ services:
shm_size: 2gb
arc-mainnet-archive-node:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-0.7.2}
user: 0:0
expose:
- 31000

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
arc-mainnet-consensus-init:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-0.7.2}
user: 0:0
entrypoint: [/usr/local/bin/arc-node-consensus, init]
command:
@@ -57,7 +57,7 @@ services:
logging: *logging-defaults
arc-mainnet:
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_MAINNET_RETH_VERSION:-v0.7.3}
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_MAINNET_RETH_VERSION:-0.7.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -92,6 +92,7 @@ services:
- --ipcpath=/sockets/reth.ipc
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --prune.block-interval=5000
- --rpc.forwarder=https://rpc.arc.network/
restart: unless-stopped
stop_grace_period: 5m
@@ -120,7 +121,7 @@ services:
shm_size: 2gb
arc-mainnet-node:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_MAINNET_CONSENSUS_VERSION:-0.7.2}
user: 0:0
expose:
- 31000

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
arc-testnet-archive-consensus-init:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.8.0}
user: 0:0
entrypoint: [/usr/local/bin/arc-node-consensus, init]
command:
@@ -57,7 +57,7 @@ services:
logging: *logging-defaults
arc-testnet-archive:
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_TESTNET_RETH_VERSION:-v0.7.3}
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_TESTNET_RETH_VERSION:-0.8.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -119,7 +119,7 @@ services:
shm_size: 2gb
arc-testnet-archive-node:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.8.0}
user: 0:0
expose:
- 31000

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
arc-testnet-consensus-init:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.8.0}
user: 0:0
entrypoint: [/usr/local/bin/arc-node-consensus, init]
command:
@@ -57,7 +57,7 @@ services:
logging: *logging-defaults
arc-testnet:
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_TESTNET_RETH_VERSION:-v0.7.3}
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_TESTNET_RETH_VERSION:-0.8.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -92,6 +92,7 @@ services:
- --ipcpath=/sockets/reth.ipc
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --prune.block-interval=5000
- --rpc.forwarder=https://rpc.quicknode.testnet.arc.network/
restart: unless-stopped
stop_grace_period: 5m
@@ -120,7 +121,7 @@ services:
shm_size: 2gb
arc-testnet-node:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.8.0}
user: 0:0
expose:
- 31000

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
arc-testnet-consensus-init:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.8.0}
user: 0:0
entrypoint: [/usr/local/bin/arc-node-consensus, init]
command:
@@ -57,7 +57,7 @@ services:
logging: *logging-defaults
arc-testnet:
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_TESTNET_RETH_VERSION:-v0.7.3}
image: ${ARC_RETH_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-execution}:${ARC_TESTNET_RETH_VERSION:-0.8.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -92,6 +92,7 @@ services:
- --ipcpath=/sockets/reth.ipc
- --log.file.directory=/data/execution/logs
- --metrics=0.0.0.0:9001
- --prune.block-interval=5000
- --rpc.forwarder=https://rpc.quicknode.testnet.arc.network/
restart: unless-stopped
stop_grace_period: 5m
@@ -120,7 +121,7 @@ services:
shm_size: 2gb
arc-testnet-node:
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-v0.7.3}
image: ${ARC_CONSENSUS_IMAGE:-docker.cloudsmith.io/circle/arc-network/arc-consensus}:${ARC_TESTNET_CONSENSUS_VERSION:-0.8.0}
user: 0:0
expose:
- 31000

View File

@@ -2,5 +2,18 @@
"state-sync-enabled": false,
"pruning-enabled": false,
"rpc-gas-cap": 2500000000,
"eth-rpc-gas-limit": 2500000000
"eth-rpc-gas-limit": 2500000000,
"eth-apis": [
"eth",
"eth-filter",
"net",
"web3",
"internal-eth",
"internal-blockchain",
"internal-transaction",
"debug",
"debug-tracer",
"debug-file-tracer",
"debug-handler"
]
}

View File

@@ -1,4 +1,19 @@
{
"rpc-gas-cap": 2500000000,
"eth-rpc-gas-limit": 2500000000
}
"eth-rpc-gas-limit": 2500000000,
"state-sync-enabled": true,
"state-sync-skip-resume": true,
"eth-apis": [
"eth",
"eth-filter",
"net",
"web3",
"internal-eth",
"internal-blockchain",
"internal-transaction",
"debug",
"debug-tracer",
"debug-file-tracer",
"debug-handler"
]
}

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
avalanche-fuji-archive:
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.14.2}
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.15.0-fuji}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
avalanche-fuji:
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.14.2}
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.15.0-fuji}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
avalanche-fuji:
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.14.2}
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.15.0-fuji}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -1,119 +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:avalanche/go/avalanche-fuji-go-pruned-pebbledb.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/avalanche-fuji \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
avalanche-fuji:
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.14.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 10350:10350
- 10350:10350/udp
expose:
- 9650
entrypoint: [/bin/sh, -c, mkdir -p /root/.avalanchego/offline-pruning && exec /avalanchego/build/avalanchego "$@", --]
command:
- --chain-config-dir=/config/prune
- --db-type=pebbledb
- --http-allowed-hosts=*
- --http-host=
- --network-id=fuji
- --public-ip=${IP}
- --staking-port=10350
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${AVALANCHE_FUJI_GO_PRUNED_PEBBLEDB_DATA:-avalanche-fuji-go-pruned-pebbledb}:/root/.avalanchego
- ./avalanche/fuji:/config
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=false
- traefik.enable=true
- traefik.http.middlewares.avalanche-fuji-go-pruned-pebbledb-set-path.replacepath.path=/ext/bc/C/rpc
- traefik.http.middlewares.avalanche-fuji-go-pruned-pebbledb-stripprefix.stripprefix.prefixes=/avalanche-fuji
- traefik.http.services.avalanche-fuji-go-pruned-pebbledb.loadbalancer.server.port=9650
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.rule=Host(`$DOMAIN`) && (Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`))}
- ${NO_SSL:+traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.rule=Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`)}
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.middlewares=avalanche-fuji-go-pruned-pebbledb-stripprefix, avalanche-fuji-go-pruned-pebbledb-set-path, ipallowlist
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.priority=50 # gets any request that is not GET with UPGRADE header
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.priority=100 # answers GET requests first
- traefik.http.middlewares.avalanche-fuji-go-pruned-pebbledb-set-ws-path.replacepath.path=/ext/bc/C/ws
- traefik.http.services.avalanche-fuji-go-pruned-pebbledb-ws.loadbalancer.server.port=9650
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.service=avalanche-fuji-go-pruned-pebbledb-ws
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.service=avalanche-fuji-go-pruned-pebbledb
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.tls.certresolver=myresolver}
# case-insensitive Upgrade: python websocket-client sends "WebSocket" (capital W)
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.rule=Host(`$DOMAIN`) && (Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`)) && HeadersRegexp(`Upgrade`, `(?i)websocket`)}
- ${NO_SSL:+traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.rule=(Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`)) && HeadersRegexp(`Upgrade`, `(?i)websocket`)}
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.middlewares=avalanche-fuji-go-pruned-pebbledb-stripprefix, avalanche-fuji-go-pruned-pebbledb-set-ws-path, ipallowlist
volumes:
avalanche-fuji-go-pruned-pebbledb:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: avalanche-fuji
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -1,119 +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:avalanche/go/avalanche-fuji-go-pruned-pebbledb.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/avalanche-fuji \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
avalanche-fuji:
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_FUJI_GO_VERSION:-v1.14.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 10350:10350
- 10350:10350/udp
expose:
- 9650
entrypoint: [/avalanchego/build/avalanchego]
command:
- --chain-config-dir=/config/pruned
- --db-type=pebbledb
- --http-allowed-hosts=*
- --http-host=
- --network-id=fuji
- --public-ip=${IP}
- --staking-port=10350
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${AVALANCHE_FUJI_GO_PRUNED_PEBBLEDB_DATA:-avalanche-fuji-go-pruned-pebbledb}:/root/.avalanchego
- ./avalanche/fuji:/config
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=false
- traefik.enable=true
- traefik.http.middlewares.avalanche-fuji-go-pruned-pebbledb-set-path.replacepath.path=/ext/bc/C/rpc
- traefik.http.middlewares.avalanche-fuji-go-pruned-pebbledb-stripprefix.stripprefix.prefixes=/avalanche-fuji
- traefik.http.services.avalanche-fuji-go-pruned-pebbledb.loadbalancer.server.port=9650
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.rule=Host(`$DOMAIN`) && (Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`))}
- ${NO_SSL:+traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.rule=Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`)}
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.middlewares=avalanche-fuji-go-pruned-pebbledb-stripprefix, avalanche-fuji-go-pruned-pebbledb-set-path, ipallowlist
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.priority=50 # gets any request that is not GET with UPGRADE header
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.priority=100 # answers GET requests first
- traefik.http.middlewares.avalanche-fuji-go-pruned-pebbledb-set-ws-path.replacepath.path=/ext/bc/C/ws
- traefik.http.services.avalanche-fuji-go-pruned-pebbledb-ws.loadbalancer.server.port=9650
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.service=avalanche-fuji-go-pruned-pebbledb-ws
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb.service=avalanche-fuji-go-pruned-pebbledb
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.tls.certresolver=myresolver}
# case-insensitive Upgrade: python websocket-client sends "WebSocket" (capital W)
- ${NO_SSL:-traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.rule=Host(`$DOMAIN`) && (Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`)) && HeadersRegexp(`Upgrade`, `(?i)websocket`)}
- ${NO_SSL:+traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.rule=(Path(`/avalanche-fuji`) || Path(`/avalanche-fuji/`)) && HeadersRegexp(`Upgrade`, `(?i)websocket`)}
- traefik.http.routers.avalanche-fuji-go-pruned-pebbledb-ws.middlewares=avalanche-fuji-go-pruned-pebbledb-stripprefix, avalanche-fuji-go-pruned-pebbledb-set-ws-path, ipallowlist
volumes:
avalanche-fuji-go-pruned-pebbledb:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: avalanche-fuji
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -0,0 +1,120 @@
---
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:avalanche/go/avalanche-mainnet-go-firewood-firewood.yml
#
# docker compose up -d
#
# curl -X POST https://${IP}.traefik.me/avalanche-mainnet-firewood \
# -H "Content-Type: application/json" \
# --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
services:
avalanche-mainnet-firewood:
image: ${AVALANCHE_GO_IMAGE:-avaplatform/avalanchego}:${AVALANCHE_MAINNET_GO_VERSION:-v1.14.2}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
net.ipv4.tcp_no_metrics_save: 1 # Disable metrics cache
net.ipv4.tcp_rmem: 4096 87380 16777216 # Increase TCP read buffers
net.ipv4.tcp_wmem: 4096 87380 16777216 # Increase TCP write buffers
net.core.somaxconn: 32768 # Higher connection queue
# Memory/Connection Management
# net.core.netdev_max_backlog: 50000 # Increase network buffer
net.ipv4.tcp_max_syn_backlog: 30000 # More SYN requests
net.ipv4.tcp_max_tw_buckets: 2000000 # Allow more TIME_WAIT sockets
ulimits:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 13144:13144
- 13144:13144/udp
expose:
- 9650
entrypoint: [/avalanchego/build/avalanchego]
command:
- --chain-config-dir=/config/firewood
- --coreth-state-scheme=firewood
- --db-type=firewood
- --http-allowed-hosts=*
- --http-host=
- --network-id=mainnet
- --public-ip=${IP}
- --staking-port=13144
restart: unless-stopped
stop_grace_period: 5m
networks:
- chains
volumes:
- ${AVALANCHE_MAINNET_GO_FIREWOOD_FIREWOOD_DATA:-avalanche-mainnet-go-firewood-firewood}:/root/.avalanchego
- ./avalanche/mainnet:/config
- /slowdisk:/slowdisk
logging: *logging-defaults
labels:
- prometheus-scrape.enabled=false
- traefik.enable=true
- traefik.http.middlewares.avalanche-mainnet-go-firewood-firewood-set-path.replacepath.path=/ext/bc/C/rpc
- traefik.http.middlewares.avalanche-mainnet-go-firewood-firewood-stripprefix.stripprefix.prefixes=/avalanche-mainnet-firewood
- traefik.http.services.avalanche-mainnet-go-firewood-firewood.loadbalancer.server.port=9650
- ${NO_SSL:-traefik.http.routers.avalanche-mainnet-go-firewood-firewood.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.avalanche-mainnet-go-firewood-firewood.tls.certresolver=myresolver}
- ${NO_SSL:-traefik.http.routers.avalanche-mainnet-go-firewood-firewood.rule=Host(`$DOMAIN`) && (Path(`/avalanche-mainnet-firewood`) || Path(`/avalanche-mainnet-firewood/`))}
- ${NO_SSL:+traefik.http.routers.avalanche-mainnet-go-firewood-firewood.rule=Path(`/avalanche-mainnet-firewood`) || Path(`/avalanche-mainnet-firewood/`)}
- traefik.http.routers.avalanche-mainnet-go-firewood-firewood.middlewares=avalanche-mainnet-go-firewood-firewood-stripprefix, avalanche-mainnet-go-firewood-firewood-set-path, ipallowlist
- traefik.http.routers.avalanche-mainnet-go-firewood-firewood.priority=50 # gets any request that is not GET with UPGRADE header
- traefik.http.routers.avalanche-mainnet-go-firewood-firewood-ws.priority=100 # answers GET requests first
- traefik.http.middlewares.avalanche-mainnet-go-firewood-firewood-set-ws-path.replacepath.path=/ext/bc/C/ws
- traefik.http.services.avalanche-mainnet-go-firewood-firewood-ws.loadbalancer.server.port=9650
- traefik.http.routers.avalanche-mainnet-go-firewood-firewood-ws.service=avalanche-mainnet-go-firewood-firewood-ws
- traefik.http.routers.avalanche-mainnet-go-firewood-firewood.service=avalanche-mainnet-go-firewood-firewood
- ${NO_SSL:-traefik.http.routers.avalanche-mainnet-go-firewood-firewood-ws.entrypoints=websecure}
- ${NO_SSL:-traefik.http.routers.avalanche-mainnet-go-firewood-firewood-ws.tls.certresolver=myresolver}
# case-insensitive Upgrade: python websocket-client sends "WebSocket" (capital W)
- ${NO_SSL:-traefik.http.routers.avalanche-mainnet-go-firewood-firewood-ws.rule=Host(`$DOMAIN`) && (Path(`/avalanche-mainnet-firewood`) || Path(`/avalanche-mainnet-firewood/`)) && HeadersRegexp(`Upgrade`, `(?i)websocket`)}
- ${NO_SSL:+traefik.http.routers.avalanche-mainnet-go-firewood-firewood-ws.rule=(Path(`/avalanche-mainnet-firewood`) || Path(`/avalanche-mainnet-firewood/`)) && HeadersRegexp(`Upgrade`, `(?i)websocket`)}
- traefik.http.routers.avalanche-mainnet-go-firewood-firewood-ws.middlewares=avalanche-mainnet-go-firewood-firewood-stripprefix, avalanche-mainnet-go-firewood-firewood-set-ws-path, ipallowlist
volumes:
avalanche-mainnet-go-firewood-firewood:
x-upstreams:
- id: $${ID}
labels:
provider: $${PROVIDER}
connection:
generic:
rpc:
url: $${RPC_URL}
ws:
frameSize: 20Mb
msgSize: 50Mb
url: $${WS_URL}
chain: avalanche
method-groups:
enabled:
- debug
- filter
methods:
disabled:
enabled:
- name: txpool_content # TODO: should be disabled for rollup nodes
...

View File

@@ -1,4 +1,17 @@
{
"state-sync-enabled": false,
"pruning-enabled": false
"pruning-enabled": false,
"eth-apis": [
"eth",
"eth-filter",
"net",
"web3",
"internal-eth",
"internal-blockchain",
"internal-transaction",
"debug",
"debug-tracer",
"debug-file-tracer",
"debug-handler"
]
}

View File

@@ -0,0 +1,29 @@
{
"rpc-gas-cap": 2500000000,
"rpc-tx-fee-cap": 100,
"eth-rpc-gas-limit": 2500000000,
"local-txs-enabled": false,
"pruning-enabled": false,
"api-max-duration": 0,
"api-max-blocks-per-request": 0,
"allow-unfinalized-queries": false,
"log-level": "info",
"state-sync-enabled": true,
"state-sync-skip-resume": true,
"state-scheme": "firewood",
"populate-missing-tries": null,
"snapshot-cache": 0,
"eth-apis": [
"eth",
"eth-filter",
"net",
"web3",
"internal-eth",
"internal-blockchain",
"internal-transaction",
"debug",
"debug-tracer",
"debug-file-tracer",
"debug-handler"
]
}

View File

@@ -1,23 +1,6 @@
{
"snowman-api-enabled": false,
"coreth-admin-api-enabled": false,
"net-api-enabled": true,
"rpc-gas-cap": 2500000000,
"rpc-tx-fee-cap": 100,
"eth-rpc-gas-limit": 2500000000,
"eth-api-enabled": true,
"personal-api-enabled": false,
"tx-pool-api-enabled": false,
"debug-api-enabled": false,
"web3-api-enabled": true,
"local-txs-enabled": false,
"pruning-enabled": true,
"api-max-duration": 0,
"api-max-blocks-per-request": 0,
"allow-unfinalized-queries": false,
"log-level": "info",
"state-sync-enabled": false,
"state-sync-skip-resume": true,
"offline-pruning-enabled": true,
"offline-pruning-data-directory": "/root/.avalanchego/offline-pruning"
}

View File

@@ -1,21 +1,26 @@
{
"snowman-api-enabled": false,
"coreth-admin-api-enabled": false,
"net-api-enabled": true,
"rpc-gas-cap": 2500000000,
"rpc-tx-fee-cap": 100,
"eth-rpc-gas-limit": 2500000000,
"eth-api-enabled": true,
"personal-api-enabled": false,
"tx-pool-api-enabled": false,
"debug-api-enabled": false,
"web3-api-enabled": true,
"local-txs-enabled": false,
"pruning-enabled": true,
"api-max-duration": 0,
"api-max-blocks-per-request": 0,
"allow-unfinalized-queries": false,
"log-level": "info",
"state-sync-enabled": false,
"state-sync-skip-resume": true
}
"state-sync-enabled": true,
"state-sync-skip-resume": true,
"eth-apis": [
"eth",
"eth-filter",
"net",
"web3",
"internal-eth",
"internal-blockchain",
"internal-transaction",
"debug",
"debug-tracer",
"debug-file-tracer",
"debug-handler"
]
}

View File

@@ -68,11 +68,28 @@ ct_merge_seeds() {
ct_log "no official seeds fetched from $_url (continuing with configured)"
fi
fi
_seeds=$(ct_valid_peers "$_seeds")
if [ -n "$_seeds" ]; then
sed -i "s/^seeds = \".*\"/seeds = \"${_seeds}\"/" "$_cfg"
fi
}
# ct_valid_peers LIST
# Keep only well-formed CometBFT peer entries (<40-hex node id>@<host>:<port>), drop and
# log the rest. A truncated id such as 7c153a83@peer.haqq.mainnet.dteam.tech:28656 makes
# haqqd refuse to start ("invalid node ID"), 2026-09-07 rpc-de-31.
ct_valid_peers() {
_in="$1"; _out=""
for _p in $(echo "$_in" | tr ',' ' '); do
if echo "$_p" | grep -Eqi '^[0-9a-f]{40}@[^@,:]+:[0-9]+$'; then
_out="${_out:+$_out,}$_p"
else
ct_log "dropping malformed peer entry: $_p"
fi
done
echo "$_out"
}
# 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.
@@ -80,6 +97,8 @@ ct_set_persistent_peers() {
_cfg="$1"; _peers="$2"
[ -f "$_cfg" ] || return 0
[ -n "$_peers" ] || return 0
_peers=$(ct_valid_peers "$_peers")
[ -n "$_peers" ] || return 0
sed -i "s/^persistent_peers = \".*\"/persistent_peers = \"${_peers}\"/" "$_cfg"
sed -i "s/^persistent-peers = \".*\"/persistent-peers = \"${_peers}\"/" "$_cfg"
return 0

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
bsc-chapel:
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_CHAPEL_BSC_VERSION:-1.7.6}
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_CHAPEL_BSC_VERSION:-1.7.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -32,7 +32,7 @@ x-logging-defaults: &logging-defaults
services:
bsc-mainnet-minimal:
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_MAINNET_BSC_VERSION:-1.7.6}
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_MAINNET_BSC_VERSION:-1.7.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -32,7 +32,7 @@ x-logging-defaults: &logging-defaults
services:
bsc-mainnet-minimal:
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_MAINNET_BSC_VERSION:-1.7.6}
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_MAINNET_BSC_VERSION:-1.7.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
bsc-mainnet:
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_MAINNET_BSC_VERSION:-1.7.6}
image: ${BSC_BSC_IMAGE:-ghcr.io/bnb-chain/bsc}:${BSC_MAINNET_BSC_VERSION:-1.7.8}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -7,6 +7,7 @@
# --no-slowdisk : do NOT offload static files to /slowdisk (no symlinks);
# extract everything onto the local disk instead. Required to
# proceed when /slowdisk is too small for the static files.
# KEEP_NODE_KEYS=1 : keep the restored identity keys (default: delete via node-key-globs.txt)
# Pull the --no-slowdisk flag out of the args so the positional <config>/<dest>
# parsing below is unaffected regardless of where the flag is placed.
@@ -689,6 +690,17 @@ main() {
[[ -n "$skipped_volumes" ]] && echo " Skipped (no backup by design):$skipped_volumes"
[[ -n "$failed_volumes" ]] && echo " Failed:$failed_volumes"
# Regenerate the node's P2P identity on the destination (2026-09-04, rpc-us-50 avalanche
# incident): a restored volume carries the SOURCE node's identity keys (avalanchego
# staking/*, geth nodekey, ...). If the source still runs elsewhere, the copy is a
# duplicate NodeID and never peers. restore-volumes.sh already does this as its last
# step; the fast path skipped it. Patterns: node-key-globs.txt. KEEP_NODE_KEYS=1 opts out.
if [[ -z "$failed_volumes" && "${KEEP_NODE_KEYS:-0}" != "1" ]]; then
echo "Deleting node identity keys on $DEST_HOST (node-key-globs.txt) ..."
$SSH_CMD "$DEST_HOST" "cd /root/rpc && ./delete-node-keys.sh '$1'" \
|| echo "WARNING: delete-node-keys.sh failed on $DEST_HOST - the restored node may carry a duplicate identity; run ./delete-node-keys <host> $1 manually"
fi
# Restore Network buffer and congestion control settings.
# These are better for your 0.2-1.4ms environment

View File

@@ -1,4 +1,22 @@
[
{
"chain": "mainnet",
"client": "geth",
"compose_file": "abcore/geth/abcore-mainnet-geth-pruned-pebble-hash",
"drpc_chain": "abcore",
"features": [
"hash",
"pebble"
],
"network": "abcore",
"node": null,
"relay": null,
"stack": null,
"type": "pruned",
"volumes": [
"abcore-mainnet-geth-pruned-pebble-hash"
]
},
{
"chain": "mainnet",
"client": "external-node",
@@ -589,6 +607,42 @@
"everclear-mainnet-nitro-pruned-pebble-path"
]
},
{
"chain": "mainnet",
"client": "nitro",
"compose_file": "arb/nitro/humanity-mainnet-nitro-pruned-pebble-hash",
"drpc_chain": "humanity",
"features": [
"hash",
"pebble"
],
"network": "humanity",
"node": null,
"relay": null,
"stack": "arb",
"type": "pruned",
"volumes": [
"humanity-mainnet-nitro-pruned-pebble-hash"
]
},
{
"chain": "testnet",
"client": "nitro",
"compose_file": "arb/nitro/humanity-testnet-nitro-pruned-pebble-hash",
"drpc_chain": "humanity-testnet",
"features": [
"hash",
"pebble"
],
"network": "humanity",
"node": null,
"relay": null,
"stack": "arb",
"type": "pruned",
"volumes": [
"humanity-testnet-nitro-pruned-pebble-hash"
]
},
{
"chain": "sepolia",
"client": "nitro",
@@ -1122,23 +1176,6 @@
"avalanche-fuji-go-pruned-leveldb"
]
},
{
"chain": "fuji",
"client": "go",
"compose_file": "avalanche/go/avalanche-fuji-go-pruned-pebbledb",
"drpc_chain": "avalanche-fuji",
"features": [
"leveldb"
],
"network": "avalanche",
"node": null,
"relay": null,
"stack": null,
"type": "pruned",
"volumes": [
"avalanche-fuji-go-pruned-pebbledb"
]
},
{
"chain": "mainnet",
"client": "go",
@@ -1156,6 +1193,23 @@
"avalanche-mainnet-go-archive-leveldb"
]
},
{
"chain": "mainnet-firewood-firewood",
"client": "go",
"compose_file": "avalanche/go/avalanche-mainnet-go-firewood-firewood",
"drpc_chain": "avalanche",
"features": [
"leveldb"
],
"network": "avalanche",
"node": null,
"relay": null,
"stack": null,
"type": "archive",
"volumes": [
"avalanche-mainnet-go-firewood-firewood"
]
},
{
"chain": "mainnet",
"client": "go",
@@ -4148,6 +4202,42 @@
"morph-mainnet-l2geth-archive-leveldb-hash-mpt_morph"
]
},
{
"chain": "mainnet-v2",
"client": "geth",
"compose_file": "mova/geth/mova-mainnet-v2-geth-archive-leveldb-hash",
"drpc_chain": "mova-mainnet-v2",
"features": [
"hash",
"leveldb"
],
"network": "mova",
"node": null,
"relay": null,
"stack": null,
"type": "archive",
"volumes": [
"mova-mainnet-v2-geth-archive-leveldb-hash"
]
},
{
"chain": "mainnet-v2",
"client": "geth",
"compose_file": "mova/geth/mova-mainnet-v2-geth-pruned-pebble-path",
"drpc_chain": "mova-mainnet-v2",
"features": [
"path",
"pebble"
],
"network": "mova",
"node": null,
"relay": null,
"stack": null,
"type": "pruned",
"volumes": [
"mova-mainnet-v2-geth-pruned-pebble-path"
]
},
{
"chain": "mainnet",
"client": "erigon",
@@ -7616,6 +7706,23 @@
"base-mainnet-op-reth-archive-trace"
]
},
{
"chain": "mainnet",
"client": "reth",
"compose_file": "op/reth/base-mainnet-op-reth-minimal-trace--kona",
"drpc_chain": "base",
"features": [
"trace"
],
"network": "base",
"node": "kona",
"relay": null,
"stack": "op",
"type": "minimal",
"volumes": [
"base-mainnet-op-reth-minimal-trace"
]
},
{
"chain": "mainnet",
"client": "reth",
@@ -7625,7 +7732,7 @@
"trace"
],
"network": "base",
"node": "node",
"node": "kona",
"relay": null,
"stack": "op",
"type": "minimal",
@@ -7633,6 +7740,23 @@
"base-mainnet-op-reth-minimal-trace"
]
},
{
"chain": "mainnet",
"client": "reth",
"compose_file": "op/reth/base-mainnet-op-reth-pruned-trace--kona",
"drpc_chain": "base",
"features": [
"trace"
],
"network": "base",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"base-mainnet-op-reth-pruned-trace"
]
},
{
"chain": "mainnet",
"client": "reth",
@@ -7642,7 +7766,7 @@
"trace"
],
"network": "base",
"node": "node",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
@@ -7650,6 +7774,23 @@
"base-mainnet-op-reth-pruned-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
"compose_file": "op/reth/base-sepolia-op-reth-archive-trace--kona",
"drpc_chain": "base-sepolia",
"features": [
"trace"
],
"network": "base",
"node": "kona",
"relay": null,
"stack": "op",
"type": "archive",
"volumes": [
"base-sepolia-op-reth-archive-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
@@ -7659,7 +7800,7 @@
"trace"
],
"network": "base",
"node": "node",
"node": "kona",
"relay": null,
"stack": "op",
"type": "archive",
@@ -7667,6 +7808,23 @@
"base-sepolia-op-reth-archive-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
"compose_file": "op/reth/base-sepolia-op-reth-minimal-trace--kona",
"drpc_chain": "base-sepolia",
"features": [
"trace"
],
"network": "base",
"node": "kona",
"relay": null,
"stack": "op",
"type": "minimal",
"volumes": [
"base-sepolia-op-reth-minimal-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
@@ -7676,7 +7834,7 @@
"trace"
],
"network": "base",
"node": "node",
"node": "kona",
"relay": null,
"stack": "op",
"type": "minimal",
@@ -7684,6 +7842,23 @@
"base-sepolia-op-reth-minimal-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
"compose_file": "op/reth/base-sepolia-op-reth-pruned-trace--kona",
"drpc_chain": "base-sepolia",
"features": [
"trace"
],
"network": "base",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"base-sepolia-op-reth-pruned-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
@@ -7693,7 +7868,7 @@
"trace"
],
"network": "base",
"node": "node",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
@@ -8452,6 +8627,23 @@
"soneium-minato-sepolia-op-reth-pruned-trace"
]
},
{
"chain": "mainnet",
"client": "reth",
"compose_file": "op/reth/superseed-mainnet-op-reth-pruned-trace",
"drpc_chain": "superseed",
"features": [
"trace"
],
"network": "superseed",
"node": "node",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"superseed-mainnet-op-reth-pruned-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
@@ -8537,6 +8729,23 @@
"unichain-sepolia-op-reth-archive-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
"compose_file": "op/reth/unichain-sepolia-op-reth-pruned-trace--kona",
"drpc_chain": "unichain-sepolia",
"features": [
"trace"
],
"network": "unichain",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"unichain-sepolia-op-reth-pruned-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
@@ -8546,7 +8755,7 @@
"trace"
],
"network": "unichain",
"node": "node",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
@@ -8622,6 +8831,23 @@
"worldchain-sepolia-op-reth-minimal-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
"compose_file": "op/reth/worldchain-sepolia-op-reth-pruned-trace--kona",
"drpc_chain": "worldchain-sepolia",
"features": [
"trace"
],
"network": "worldchain",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
"volumes": [
"worldchain-sepolia-op-reth-pruned-trace"
]
},
{
"chain": "sepolia",
"client": "reth",
@@ -8631,7 +8857,7 @@
"trace"
],
"network": "worldchain",
"node": "node",
"node": "kona",
"relay": null,
"stack": "op",
"type": "pruned",
@@ -8756,8 +8982,7 @@
"type": "pruned",
"volumes": [
"plasma-mainnet-reth-pruned-trace-consensus",
"plasma-mainnet-reth-pruned-trace-execution",
"plasma-mainnet-reth-pruned-trace-jwt"
"plasma-mainnet-reth-pruned-trace-execution"
]
},
{
@@ -8775,8 +9000,7 @@
"type": "pruned",
"volumes": [
"plasma-testnet-reth-pruned-trace-consensus",
"plasma-testnet-reth-pruned-trace-execution",
"plasma-testnet-reth-pruned-trace-jwt"
"plasma-testnet-reth-pruned-trace-execution"
]
},
{
@@ -9672,6 +9896,22 @@
"starknet-sepolia-pathfinder-pruned"
]
},
{
"chain": "mainnet",
"client": "tacchaind",
"compose_file": "tac/tacchaind/tac-mainnet-tacchaind-archive",
"drpc_chain": "tac",
"features": [],
"network": "tac",
"node": "config",
"relay": null,
"stack": null,
"type": "archive",
"volumes": [
"tac-mainnet-tacchaind-archive",
"tac-mainnet-tacchaind-archive_config"
]
},
{
"chain": "mainnet",
"client": "tacchaind",
@@ -9688,6 +9928,22 @@
"tac-mainnet-tacchaind-pruned_config"
]
},
{
"chain": "spb",
"client": "tacchaind",
"compose_file": "tac/tacchaind/tac-spb-tacchaind-archive",
"drpc_chain": "tac-spb",
"features": [],
"network": "tac",
"node": "config",
"relay": null,
"stack": null,
"type": "archive",
"volumes": [
"tac-spb-tacchaind-archive",
"tac-spb-tacchaind-archive_config"
]
},
{
"chain": "spb",
"client": "tacchaind",

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
core-buffalo:
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_BUFFALO_CORE_VERSION:-1.0.22}
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_BUFFALO_CORE_VERSION:-1.0.26}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
core-mainnet-archive:
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_MAINNET_CORE_VERSION:-1.0.22}
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_MAINNET_CORE_VERSION:-1.0.26}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
core-mainnet:
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_MAINNET_CORE_VERSION:-1.0.22}
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_MAINNET_CORE_VERSION:-1.0.26}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
core-pigeon:
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_PIGEON_CORE_VERSION:-1.0.22}
image: ${CORE_CORE_IMAGE:-ghcr.io/coredao-org/core-chain}:${CORE_PIGEON_CORE_VERSION:-1.0.26}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -35,7 +35,7 @@ services:
dockerfile: cometbft.Dockerfile
args:
CL_IMAGE: ${COSMOS_GAIAD_IMAGE:-ghcr.io/cosmos/gaia}
CL_VERSION: ${COSMOS_MAINNET_GAIAD_VERSION:-v27.5.0}
CL_VERSION: ${COSMOS_MAINNET_GAIAD_VERSION:-v27.6.0}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle

View File

@@ -68,11 +68,28 @@ ct_merge_seeds() {
ct_log "no official seeds fetched from $_url (continuing with configured)"
fi
fi
_seeds=$(ct_valid_peers "$_seeds")
if [ -n "$_seeds" ]; then
sed -i "s/^seeds = \".*\"/seeds = \"${_seeds}\"/" "$_cfg"
fi
}
# ct_valid_peers LIST
# Keep only well-formed CometBFT peer entries (<40-hex node id>@<host>:<port>), drop and
# log the rest. A truncated id such as 7c153a83@peer.haqq.mainnet.dteam.tech:28656 makes
# haqqd refuse to start ("invalid node ID"), 2026-09-07 rpc-de-31.
ct_valid_peers() {
_in="$1"; _out=""
for _p in $(echo "$_in" | tr ',' ' '); do
if echo "$_p" | grep -Eqi '^[0-9a-f]{40}@[^@,:]+:[0-9]+$'; then
_out="${_out:+$_out,}$_p"
else
ct_log "dropping malformed peer entry: $_p"
fi
done
echo "$_out"
}
# 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.
@@ -80,6 +97,8 @@ ct_set_persistent_peers() {
_cfg="$1"; _peers="$2"
[ -f "$_cfg" ] || return 0
[ -n "$_peers" ] || return 0
_peers=$(ct_valid_peers "$_peers")
[ -n "$_peers" ] || return 0
sed -i "s/^persistent_peers = \".*\"/persistent_peers = \"${_peers}\"/" "$_cfg"
sed -i "s/^persistent-peers = \".*\"/persistent-peers = \"${_peers}\"/" "$_cfg"
return 0

View File

@@ -57,7 +57,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@cronos-zkevm-mainnet-archive-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_MAINNET_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -57,7 +57,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@cronos-zkevm-mainnet-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_MAINNET_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -57,7 +57,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@cronos-zkevm-testnet-archive-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -57,7 +57,7 @@ services:
environment:
- DATABASE_POOL_SIZE=50
- DATABASE_URL=postgres://postgres:notsecurepassword@cronos-zkevm-testnet-db:5430/zksync_local_ext_node
- EN_API_NAMESAPCES=eth,net,web3,debug,pubsub,debug,zks
- EN_API_NAMESPACES=eth,net,web3,debug,pubsub,debug,zks
- EN_ETH_CLIENT_URL=${ETHEREUM_SEPOLIA_EXECUTION_RPC}
- EN_HEALTHCHECK_PORT=3081
- EN_HTTP_PORT=8545

View File

@@ -50,8 +50,8 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 10521:10521
- 10521:10521/udp
- 11552:11552
- 11552:11552/udp
expose:
- 8545
- 8546
@@ -61,17 +61,18 @@ services:
- API=eth,txpool,net,debug,web3
- CHAINID=cronosmainnet_25-1
- EVM_MAX_TX_GAS_WANTED=500000
- FEEHISTORY_CAP=250
- GENESIS_URL=https://raw.githubusercontent.com/crypto-org-chain/cronos-mainnet/master/cronosmainnet_25-1/genesis.json
- IP=${IP}
- JSON_RPC_BLOCK_RANGE_CAP=10000
- JSON_RPC_ENABLE=true
- JSON_RPC_ENABLE_INDEXER=true
- JSON_RPC_FEEHISTORY_CAP=100
- JSON_RPC_FEEHISTORY_CAP=250
- JSON_RPC_HTTP_TIMEOUT=30s
- JSON_RPC_LOGS_CAP=10000
- MIN_GAS=5000000000000basecro
- MONIKER=d${DOMAIN:-local}
- P2P_PORT=10521
- P2P_PORT=11552
- PRUNING=custom
- PRUNING_INTERVAL=19
- PRUNING_KEEP_RECENT=100

View File

@@ -50,8 +50,8 @@ services:
nofile: 1048576 # Max open files (for RPC/WS connections)
user: root
ports:
- 10521:10521
- 10521:10521/udp
- 14547:14547
- 14547:14547/udp
expose:
- 8545
- 8546
@@ -61,17 +61,18 @@ services:
- API=eth,txpool,net,debug,web3
- CHAINID=cronostestnet_338-3
- EVM_MAX_TX_GAS_WANTED=500000
- FEEHISTORY_CAP=250
- GENESIS_URL=https://raw.githubusercontent.com/crypto-org-chain/cronos-testnets/main/cronostestnet_338-3/genesis.json
- IP=${IP}
- JSON_RPC_BLOCK_RANGE_CAP=10000
- JSON_RPC_ENABLE=true
- JSON_RPC_ENABLE_INDEXER=true
- JSON_RPC_FEEHISTORY_CAP=100
- JSON_RPC_FEEHISTORY_CAP=250
- JSON_RPC_HTTP_TIMEOUT=30s
- JSON_RPC_LOGS_CAP=10000
- MIN_GAS=5000000000000basetcro
- MONIKER=d${DOMAIN:-local}
- P2P_PORT=10521
- P2P_PORT=14547
- PRUNING=custom
- PRUNING_INTERVAL=19
- PRUNING_KEEP_RECENT=100

View File

@@ -68,11 +68,28 @@ ct_merge_seeds() {
ct_log "no official seeds fetched from $_url (continuing with configured)"
fi
fi
_seeds=$(ct_valid_peers "$_seeds")
if [ -n "$_seeds" ]; then
sed -i "s/^seeds = \".*\"/seeds = \"${_seeds}\"/" "$_cfg"
fi
}
# ct_valid_peers LIST
# Keep only well-formed CometBFT peer entries (<40-hex node id>@<host>:<port>), drop and
# log the rest. A truncated id such as 7c153a83@peer.haqq.mainnet.dteam.tech:28656 makes
# haqqd refuse to start ("invalid node ID"), 2026-09-07 rpc-de-31.
ct_valid_peers() {
_in="$1"; _out=""
for _p in $(echo "$_in" | tr ',' ' '); do
if echo "$_p" | grep -Eqi '^[0-9a-f]{40}@[^@,:]+:[0-9]+$'; then
_out="${_out:+$_out,}$_p"
else
ct_log "dropping malformed peer entry: $_p"
fi
done
echo "$_out"
}
# 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.
@@ -80,6 +97,8 @@ ct_set_persistent_peers() {
_cfg="$1"; _peers="$2"
[ -f "$_cfg" ] || return 0
[ -n "$_peers" ] || return 0
_peers=$(ct_valid_peers "$_peers")
[ -n "$_peers" ] || return 0
sed -i "s/^persistent_peers = \".*\"/persistent_peers = \"${_peers}\"/" "$_cfg"
sed -i "s/^persistent-peers = \".*\"/persistent-peers = \"${_peers}\"/" "$_cfg"
return 0

View File

@@ -18,7 +18,8 @@ PRUNING_KEEP_RECENT="${PRUNING_KEEP_RECENT:-100}"
PRUNING_INTERVAL="${PRUNING_INTERVAL:-19}"
JSON_RPC_ENABLE="${JSON_RPC_ENABLE:-true}"
JSON_RPC_ENABLE_INDEXER="${JSON_RPC_ENABLE_INDEXER:-true}"
JSON_RPC_FEEHISTORY_CAP="${JSON_RPC_FEEHISTORY_CAP:-100}"
FEEHISTORY_CAP="${FEEHISTORY_CAP:-250}"
JSON_RPC_FEEHISTORY_CAP="${JSON_RPC_FEEHISTORY_CAP:-$FEEHISTORY_CAP}"
JSON_RPC_LOGS_CAP="${JSON_RPC_LOGS_CAP:-10000}"
JSON_RPC_BLOCK_RANGE_CAP="${JSON_RPC_BLOCK_RANGE_CAP:-10000}"
JSON_RPC_HTTP_TIMEOUT="${JSON_RPC_HTTP_TIMEOUT:-30s}"
@@ -47,7 +48,7 @@ sed -i "/^\[json-rpc\]/,/^\[/{s|^ws-origins = .*|ws-origins = \"$JSON_RPC_WS_ORI
sed -i "/^\[json-rpc\]/,/^\[/{s|^api = .*|api = \"$API\"|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^enable = .*|enable = $JSON_RPC_ENABLE|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^enable-indexer = .*|enable-indexer = $JSON_RPC_ENABLE_INDEXER|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^feehistory-cap = .*|feehistory-cap = $JSON_RPC_FEEHISTORY_CAP|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^feehistory-cap = .*|feehistory-cap = $FEEHISTORY_CAP|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^logs-cap = .*|logs-cap = $JSON_RPC_LOGS_CAP|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^block-range-cap = .*|block-range-cap = $JSON_RPC_BLOCK_RANGE_CAP|}" "$CONFIG_DIR/app.toml"
sed -i "/^\[json-rpc\]/,/^\[/{s|^http-timeout = .*|http-timeout = \"$JSON_RPC_HTTP_TIMEOUT\"|}" "$CONFIG_DIR/app.toml"

View File

@@ -30,7 +30,7 @@ x-logging-defaults: &logging-defaults
services:
ethereum-mainnet-besu:
image: ${ETHEREUM_BESU_IMAGE:-hyperledger/besu}:${ETHEREUM_MAINNET_BESU_VERSION:-26.7.1}
image: ${ETHEREUM_BESU_IMAGE:-hyperledger/besu}:${ETHEREUM_MAINNET_BESU_VERSION:-26.8.1}
sysctls:
# TCP Performance
net.ipv4.tcp_slow_start_after_idle: 0 # Disable slow start after idle
@@ -122,7 +122,7 @@ services:
- 18205:18205/udp
expose:
- 3500
entrypoint: /bin/sh -c '/home/user/nimbus-eth2/build/nimbus_beacon_node trustedNodeSync --network=mainnet --trusted-node-url=https://mainnet.beaconstate.info --backfill=false; exec /home/user/nimbus-eth2/build/nimbus_beacon_node "$@"' --
entrypoint: /bin/sh -c '/home/user/nimbus-eth2/build/nimbus_beacon_node trustedNodeSync --network=mainnet --trusted-node-url=https://sync-mainnet.beaconcha.in --backfill=false; exec /home/user/nimbus-eth2/build/nimbus_beacon_node "$@"' --
command:
- --history=prune
- --jwt-secret=/jwtsecret
@@ -195,6 +195,12 @@ x-upstreams:
# UNAVAILABLE and failing live requests ("Source was empty"). Head tracking
# still governs health with validation off. 2026-07-10, dRPC incident.
disable-validation: true
methods:
disabled:
- name: GET#/eth/v2/debug/beacon/states/*
- name: GET#/eth/v1/beacon/states/*/committees
- name: GET#/eth/v1/beacon/states/*/validators
- name: POST#/eth/v1/beacon/states/*/validators
connection:
generic:
rpc:

View File

@@ -201,6 +201,12 @@ x-upstreams:
# UNAVAILABLE and failing live requests ("Source was empty"). Head tracking
# still governs health with validation off. 2026-07-10, dRPC incident.
disable-validation: true
methods:
disabled:
- name: GET#/eth/v2/debug/beacon/states/*
- name: GET#/eth/v1/beacon/states/*/committees
- name: GET#/eth/v1/beacon/states/*/validators
- name: POST#/eth/v1/beacon/states/*/validators
connection:
generic:
rpc:

View File

@@ -202,6 +202,12 @@ x-upstreams:
# UNAVAILABLE and failing live requests ("Source was empty"). Head tracking
# still governs health with validation off. 2026-07-10, dRPC incident.
disable-validation: true
methods:
disabled:
- name: GET#/eth/v2/debug/beacon/states/*
- name: GET#/eth/v1/beacon/states/*/committees
- name: GET#/eth/v1/beacon/states/*/validators
- name: POST#/eth/v1/beacon/states/*/validators
connection:
generic:
rpc:

View File

@@ -116,7 +116,7 @@ services:
command:
- --accept-terms-of-use
- --beacon-db-pruning
- --checkpoint-sync-url=https://mainnet.beaconstate.info
- --checkpoint-sync-url=https://sync-mainnet.beaconcha.in
- --datadir=/data
- --enable-historical-state-representation=false
- --execution-endpoint=http://ethereum-mainnet-geth-minimal:8551
@@ -206,6 +206,12 @@ x-upstreams:
# UNAVAILABLE and failing live requests ("Source was empty"). Head tracking
# still governs health with validation off. 2026-07-10, dRPC incident.
disable-validation: true
methods:
disabled:
- name: GET#/eth/v2/debug/beacon/states/*
- name: GET#/eth/v1/beacon/states/*/committees
- name: GET#/eth/v1/beacon/states/*/validators
- name: POST#/eth/v1/beacon/states/*/validators
connection:
generic:
rpc:

View File

@@ -175,7 +175,7 @@ services:
- 15455:15455/udp
expose:
- 3500
entrypoint: /bin/sh -c '/home/user/nimbus-eth2/build/nimbus_beacon_node trustedNodeSync --network=mainnet --trusted-node-url=https://mainnet.beaconstate.info --backfill=false; exec /home/user/nimbus-eth2/build/nimbus_beacon_node "$@"' --
entrypoint: /bin/sh -c '/home/user/nimbus-eth2/build/nimbus_beacon_node trustedNodeSync --network=mainnet --trusted-node-url=https://sync-mainnet.beaconcha.in --backfill=false; exec /home/user/nimbus-eth2/build/nimbus_beacon_node "$@"' --
command:
- --history=prune
- --jwt-secret=/jwtsecret
@@ -265,6 +265,12 @@ x-upstreams:
# UNAVAILABLE and failing live requests ("Source was empty"). Head tracking
# still governs health with validation off. 2026-07-10, dRPC incident.
disable-validation: true
methods:
disabled:
- name: GET#/eth/v2/debug/beacon/states/*
- name: GET#/eth/v1/beacon/states/*/committees
- name: GET#/eth/v1/beacon/states/*/validators
- name: POST#/eth/v1/beacon/states/*/validators
connection:
generic:
rpc:

View File

@@ -175,7 +175,7 @@ services:
- 17023:17023/udp
expose:
- 3500
entrypoint: /bin/sh -c '/home/user/nimbus-eth2/build/nimbus_beacon_node trustedNodeSync --network=mainnet --trusted-node-url=https://mainnet.beaconstate.info --backfill=false; exec /home/user/nimbus-eth2/build/nimbus_beacon_node "$@"' --
entrypoint: /bin/sh -c '/home/user/nimbus-eth2/build/nimbus_beacon_node trustedNodeSync --network=mainnet --trusted-node-url=https://sync-mainnet.beaconcha.in --backfill=false; exec /home/user/nimbus-eth2/build/nimbus_beacon_node "$@"' --
command:
- --history=prune
- --jwt-secret=/jwtsecret
@@ -267,6 +267,12 @@ x-upstreams:
# UNAVAILABLE and failing live requests ("Source was empty"). Head tracking
# still governs health with validation off. 2026-07-10, dRPC incident.
disable-validation: true
methods:
disabled:
- name: GET#/eth/v2/debug/beacon/states/*
- name: GET#/eth/v1/beacon/states/*/committees
- name: GET#/eth/v1/beacon/states/*/validators
- name: POST#/eth/v1/beacon/states/*/validators
connection:
generic:
rpc:

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