Commit Graph

4995 Commits

Author SHA1 Message Date
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
92cdb31d17 zero-gravity: init guard must check the CONFIG volume, not a data-volume proxy
aristotle @ rpc-de-32 crash-looped after its build was fixed:

    priv_validator_state.json found in /root/.0g. Continuing!
    Already initialized, continuing!
    panic: ProvideBlsSigner (node-core/components/signer.go:46):
           key file does not exist at path: /root/.0g/config/priv_validator_key.json

$DATA_DIR and $CONFIG_DIR are SEPARATE docker volumes (<node>_zerog and
<node>_config), but the guard tested only $DATA_DIR/priv_validator_state.json —
inferring the state of the config volume from a file on the data volume. Worse, the
copy order wrote that guard file BEFORE the two key files, so an init interrupted
between them left the data volume with the guard and the config volume without the
keys. Every later start then took the 'Already initialized' branch, copied nothing,
and panicked. Unrecoverable by restarting: the node wedges permanently. aristotle
got there via the repeated build failures earlier today.

Fix, two parts:
  - guard on everything 0gchaind needs to boot (both config keys AND the data state
    file), not one proxy file on the wrong volume;
  - write the keys FIRST and the guard file LAST, so an interrupted init re-runs on
    the next start instead of latching into the wedged state.

Tested locally against the real 0gchaind binary (aristotle v1.0.6), sandboxed HOME:

  scenario                     before            after
  fresh volumes                keys created      keys created        (no regression)
  wedged (state, no keys)      keys MISSING      keys created        (unwedges)
  partial (state+node_key)     keys MISSING      keys created
  healthy (all present)        no re-init        no re-init, and a SENTINEL written
                                                 into priv_validator_key.json survives
                                                 -> never clobbers an initialized node

The 'wedged' row reproduces aristotle's production failure exactly.

Note this regenerates node identity on an affected node (node_key.json,
priv_validator_key.json). These are RPC nodes that never sign, so a fresh identity is
harmless; chain data on the _zerog volume is untouched.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 19:33:48 +00:00
4a060bee0d deploy: regenerate compose from vibe-node main 3c848087f5c8 2026-08-12 17:37:46 +00:00
4db13b2fc4 deploy: regenerate compose from vibe-node main 0415567d141c 2026-08-12 16:53:00 +00:00
6df9f0f17a zero-gravity: detect tarball layout; galileo 3.0.8 moved binaries to a shared root bin/
Fixes the de-32 build break introduced by vibe-node #2912 (galileo 3.0.3 -> 3.0.8,
merged as bc4cecf). Job ad580587:

    #16 chmod: cannot access '/0g/bin/0gchaind': No such file or directory

The Dockerfile hardcoded 'galileo -> mv <root>/rpc /0g'. That held for 3.0.3, where
every profile dir carried its own copy of the binaries. 3.0.8 DEDUPLICATED them into
a shared <root>/bin/ (168 MB -> 69 MB), leaving rpc/ as configs-only — so the move
produced configs and no binaries, and the build died two layers later on a chmod.

Note 'does <root>/rpc exist' is not a sufficient test: 3.0.8 still ships rpc/, it just
no longer holds bin/. Verified layouts:

  galileo 3.0.3     <root>/{rpc,validator,archive,seed}/bin/ + configs
  galileo 3.0.8     <root>/bin/ shared + <root>/{rpc,...}/ configs
  aristotle 1.0.6   <root>/bin/ + configs, no profile dirs

So: take configs from the profile dir when present, then top the binaries up from the
shared root bin/ if the profile dir did not supply them.

Also asserts both binaries exist immediately after extraction, naming the chain, the
version and the known layouts — so the next upstream reshuffle reports itself at the
point of failure rather than as an anonymous chmod error.

Verified against the real artifacts — all three now yield an identical /0g
(bin/0gchaind 76M, bin/geth 46M, geth-config.toml, geth-genesis.json,
kzg-trusted-setup.json, 0g-home/, rollback_cl.sh), and a synthetic unknown layout
exits 1 with the diagnostic instead of reaching chmod.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 11:09:51 +00:00
561ff43828 deploy: regenerate compose from vibe-node main bc4cecf1a74f 2026-08-12 08:38:04 +00:00
cfac32736e zero-gravity: resolve release tag by probing known forms; fail loudly on 404
0G publishes aristotle and galileo from two different repos, and neither uses a
consistent release-tag format. The asset filename is always <spec>-v<version>.tar.gz;
only the tag varies:

  aristotle -> 0gchain-Aristotle   1.0.4 = "1.0.4"    1.0.6 = "v1.0.6"
  galileo   -> 0gchain-NG          3.0.3 = "v3.0.3"   3.0.7 = "galileo-v3.0.7"   3.0.8 = "v3.0.8"

The hardcoded formats meant aristotle could not go past 1.0.4 and galileo could not
reach 3.0.7. Resolve the tag by trying the known forms in order instead.

Also switch curl -sL to -fsSL. Without -f a 404 HTML body was written into the
.tar.gz and the build failed several layers later at 'tar: not in gzip format',
an error pointing nowhere near the cause. That has now caused three separate
misdiagnoses, including a de-32 build blocker.

Verified end-to-end against the real artifacts: aristotle 1.0.4/1.0.6 and galileo
3.0.3/3.0.7/3.0.8 all resolve; aristotle 3.0.3 and galileo 9.9.9 fail immediately
with an actionable message.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-11 06:21:38 +00:00
799209b5d2 zero-gravity-aristotle: fix node version to 1.0.4 (was 3.0.3 which doesn't exist for Aristotle repo) 2026-08-10 21:56:44 +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
17cd0d5f23 deploy: regenerate compose from vibe-node main c5e4641499ff 2026-08-07 12:13:22 +00:00
d57fd2e644 tempo-mainnet: bump reth to 1.12.0 (T9 hardfork requires v1.12.0, node crash-loop at block 33513646) 2026-08-06 16:24:58 +00:00
e1427de966 ethereum: bump blsync to alltools-v1.17.5 for go-ethereum v1.17.5 patch (2026-07-27); includes polygon-amoy bor 2.10.0-private for hardfork at block 44,120,000 2026-08-06 11:48:53 +00:00
db38905bfe polygon-amoy: bump bor from 2.9.0 to 2.10.0-private for private Amoy hardfork at block 44,120,000 (ExtraData layout change)
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-05 22:35:04 +00:00
699723d742 berachain: upgrade bera-reth to v1.4.4 for Osaka1 hardfork support
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-05 21:15:20 +00:00
a0483f6934 thundercore: zeus is MAINNET (chainid 108) — fix mislabeled thundercore-testnet upstream label (drpc_name pin; SLUG-COLLISION lint find) 2026-08-05 05:09:30 +00:00
b940a72643 soneium: remove 5 orphaned 'soneium-miniato' composes (typo'd generated leftovers from a pre-rename config; correct minato-sepolia variants exist; flagged by SLUG-COLLISION lint) 2026-08-05 04:14:00 +00:00
d5e39c2329 zircuit: migrate mainnet to Conduit op-reth stack, drop dead op-geth archives
- Add zircuit-mainnet to conduit-op-reth (ghcr.io/conduitxyz/conduit-op-reth:v2.1.1)
- Add genesis.json/rollup.json from Conduit API with bedrockBlock=32956468 fix
- Add Conduit P2P bootnodes + static peer
- Use ETHEREUM_MAINNET_* vars for L1 (chainid 1) with oplabs op-node:v1.19.3
- Remove zircuit-mainnet op-geth archive/pruned profiles (SLS dependency dead)
- Keep sequencer endpoint and drpc_chain=zircuit-mainnet

SLS-decommission root cause: zircuit1/l2-geth hard-requires Zircuit-hosted
SLS DB that no longer resolves (mainnet-sls-db-global-primary.cluster-ro...
no such host). Migrating to Conduit external-node stack per operator directive.
2026-08-05 03:58:36 +00:00
rob
e536c19191 slug resolution: derive from dRPC chains.yaml, no in-code name heuristics
Regenerated by the expand_config.py redesign (see vibe-node commit). Slug
corrections, each verified present in chains.yaml:
  soneium-minato-sepolia x5: soneium (MAINNET!) -> soneium-minato
  avalanche-fuji x5:         avalanche (MAINNET!) -> avalanche-fuji
  thundercore-venus:         thundercore (MAINNET!) -> thundercore-testnet
  core-pigeon:               core-pigeon -> core-testnet
  zircuit-garfield:          zircuit-testnet -> zircuit-garfield-testnet
  sonic-testnet x2:          sonic-testnet -> sonic-testnet-v2
  ronin-saigon x3:           (none) -> ronin-saigon
  everclear-sepolia x2:      dropped (chain shut down 2026-06-05)
fuse-spark x3 (hand-written, fuse has chains: null in context.yml): x-upstreams
REMOVED - Sparknet is absent from chains.yaml; it declared the mainnet slug.

Verified: 310 testnet composes, 0 wrong-slug failures (was 22); 0 mainnet
composes carrying a testnet slug; 0 mainnet slug changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 03:28:22 +00:00
7d27ff1918 fix list-restorable.sh process-substitution infinite loop in volume-keys read loop
Regression from d896378e: putting < <(...) on `read` re-runs the producer each iteration. Capture required volume keys once and feed via done<<<.
2026-08-04 16:23:48 +02:00
b23545e143 immutable-zkevm: bump geth v1.17.4→v1.17.5 (mainnet)
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-08-04 12:20:48 +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