Commit Graph
100 Commits
Author SHA1 Message Date
robandClaude Fable 5 932617814a accesslog-shipper: emit __shipstat__ sent-line checkpoints for splits reconciliation
The splits completeness floor is TIME-based (trust hours complete since shipper
connect) and blind to event-loss-by-rotation (2026-07-10: raw_events rotated
every 1-2min, cruncher lost ~85% of us-32 events, floor still called the hours
complete). Shipper now injects {"__shipstat__":1,"sess":..,"sent":N,"ts":..}
every 1000 lines or 30s through the SAME tcp pipe. Cruncher diffs shipper-sent
vs DB-ingested per gateway/hour -> a reconciliation-based floor that catches the
loss a clock cannot. sess=connection-start epoch so resets on reconnect are
detectable. Logic in a mounted .awk file (not inline) to dodge sh/awk quoting.
Verified on busybox:1.36 (systime/fflush OK). NOT deployed until claude@'s
cruncher filters __shipstat__ from event parsing - coordinating via SIP.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 02:41:01 +00:00
robandClaude Fable 5 ea7d207994 robinhood: nitro archive profile (pebble/hash) - mainnet archive for US-West placement (operator request 2026-07-11); pruned regen picks up filter-log-cache knob
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 05:15:25 +00:00
robandClaude Fable 5 190a23ceb8 clone-node: port both slowdisk extract fixes from clone-backup (EXDEV transform + script-file listener)
Same duplicated listener code, same two latent bugs. Not exercised today
(de-32 target has SLOWDISK=False) but any clone to a SLOWDISK=True host
would have failed identically.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 04:49:56 +00:00
robandClaude Fable 5 9898af951a clone-backup: ship the nc listener as a script file - inline bash -c quoting cannot carry --transform expressions
The slowdisk --transform args contain '|' and quotes; the ssh+screen+bash -c
stack strips one quoting level too many and splits the pipeline (broke the
katana retry within minutes of fccf2792). A heredoc-generated
/tmp/transfer_<key>.sh is parsed exactly once on the target. Applies to both
the screen and nohup listener branches; the direct-ssh fallback already had a
single shell layer and stays inline.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 02:21:34 +00:00
robandClaude Fable 5 fccf279262 slowdisk offload: fix EXDEV - extract statics via tar --transform, not through symlinks
tar cannot create files through a directory symlink whose target is on
another device: open() fails with 'Invalid cross-device link' even under
--keep-directory-symlink (reproduced, GNU tar 1.34 and 1.35). This killed
the katana->uk-4 provision (place-provision-katana-EU-NorthWest-p1) and
means the slowdisk EXTRACT path never worked on hosts with a separate
/slowdisk device. Rewrite member paths with --transform so tar writes
directly into /slowdisk/rpc_<key>__data_<rel>; the symlink stays for the
container's runtime view. Also aligns restore-volumes' nested-path target
naming to the double-underscore convention clone-backup already uses.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 01:50:20 +00:00
robandClaude Fable 5 f04d2f9440 cronos Dockerfile: support -testnet version suffix (release tag = base version, asset keeps suffix) - testnet builds use tcrc bech32 prefixes; mainnet binary crashes on testnet validator addresses
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 17:58:09 +00:00
robandClaude Fable 5 2814d358fe cronos-testnet: new pruned node compose (cronostestnet_338-3)
Verified from crypto-org-chain/cronos-testnets: genesis, 3 official seeds,
t3 statesync RPC, basetcro denom; official daily snapshots exist for restore
(sidesteps the cosmos binary-upgrade gauntlet). Closes the planner's
'cronos-testnet: no known node_path' escalation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 16:35:38 +00:00
robandClaude Fable 5 8c73946212 bor: env-parameterize --cache (default 1024 = bor's own default, rendering no-op) - polygon getLogs at 11.6s mean was pure cache starvation on a 125G/104G-free NVMe host
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 16:19:51 +00:00
robandClaude Fable 5 927afb2dab op-reth: env knobs for --rpc.max-trace-filter-blocks (default 10000 = previous hardcoded) and --rpc.max-response-size (default 160 = reth default) - tracer-mule tuning surface; max-tracing-requests deliberately NOT pinned (reth self-sizes to cores)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 15:55:51 +00:00
robandClaude Fable 5 3d22031a12 dshackle overrides: tab guard - dshackle silently skips hot-reloading YAML containing tabs (operator gotcha); refuse to write tabbed output + audit all configs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 15:17:35 +00:00
robandClaude Fable 5 091a759367 dshackle overrides: read chain-level disables from .env (DSHACKLE_<CHAIN>_METHOD_GROUPS_DISABLED) - flows from host_vars env_overrides through the standard envfile pipeline; host-local yaml remains as secondary source
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 15:05:27 +00:00
robandClaude Fable 5 f85b2f457f dshackle overrides weave: host-local method/option overrides survive config regens
/root/rpc-local/dshackle-overrides.yaml (host-local, like rpc-local/compose.d) is
re-woven into main_configs/*.yaml by reload_dshackle.sh on every config push.
Method-disable decisions are local to each gateway's market (operator eviction
rule: cost_ratio = time_share/call_share at flat pay); this makes them durable
inputs instead of fragile output patches. Step 1 of moving dshackle config
generation onto the gateway hosts (step 2: ssh forced-command upstreams fetch,
generic dshackle.yaml include list derived from drpc-gateways.json).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 15:04:43 +00:00
robandClaude Fable 5 2c6938dee5 method-economics.py: host-local method cost-vs-pay analysis
Each gateway serves its own regional market, so the eviction economics
(cost_ratio = time_share/call_share at flat per-call pay) are computed where
they apply: against the local dshackle's histograms. Silent on non-gateway
hosts. Offenders = candidates for per-upstream method-groups/methods disables
(operator eviction rule 2026-07-10). sendRawTransaction et al [protected].

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 15:01:06 +00:00
robandClaude Fable 5 f88ec86b47 cache knobs: env-parameterize geth/op-geth --cache (default 1024 = geth's own), l2geth --cache (default 8192 = previous hardcoded), nethermind MEMORYHINT (default 2048000000)
All defaults preserve current effective behavior - this deploy is a rendering no-op
until a host_var overrides a value. Part of the resource-optimizer knob rollout
(resource-optimizer/knob-manifest.yaml is the registry; verify_manifest.py enforces
default sync between templates and envfile).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 14:34:10 +00:00
robandClaude Fable 5 6ccd711ad5 mantle-sepolia: materialize static-peer template change into rendered composes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 14:34:10 +00:00
robandClaude Fable 5 36f5f34536 ink-mainnet: materialize merged Karst-genesis template changes (PR #38) into rendered composes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 14:33:31 +00:00
robandClaude Fable 5 5d0bc35eaf nitro: env-parameterized --execution.rpc.filter-log-cache-size (default 32) - getLogs is 22% of arbitrum traffic; big-RAM hosts can cache hours of log blocks
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 13:20:13 +00:00
robandClaude Fable 5 a8655586db beacon x-upstreams: disable-validation on all beacon-chain upstreams
dshackle 0.79.10's beacon health validator (GET /eth/v1/node/health via
GenericSingleCallValidator) times out after 5000ms on the spec-compliant
empty-body 200 that nimbus returns, marking the upstream UNAVAILABLE in a
flap loop; live requests routed during flap windows fail 'Source was empty'.
This is the root cause behind dRPC's 617k failed validators POSTs complaint
(2026-07-09). Reproduced + workaround verified on an isolated dshackle
instance on de-14. Head tracking still governs availability.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 12:22:18 +00:00
robandClaude Fable 5 8273fc9c5b aztec-mainnet: new pruned full-node compose (early dRPC presence, EU-West) - L1 via ETHEREUM_MAINNET_* env, p2p 13840
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 07:30:21 +00:00
robandClaude Fable 5 b824fb0cf4 aztec-testnet: 5.0.0-rc.1 -> 5.0.0-rc.2 - VK tree root mismatch with upgraded testnet rollup (node wedged 'Still waiting' on de-13)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 07:04:14 +00:00
robandClaude Fable 5 9f96548ca3 drpc: fix shipper command YAML (colon-space in unquoted scalar broke compose)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 13:24:17 +00:00
robandClaude Fable 5 dc14e9cf2b drpc: accesslog-shipper sidecar (NDJSON tail -> splits listener)
Decoupled by design: dshackle writes the file regardless; a dead listener
or slow link stalls only the busybox sidecar. Retry resumes at file end
(bounded loss); the listener-side prometheus reconciliation surfaces gaps.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 13:10:10 +00:00
robandClaude Fable 5 00356d77e6 edge map: +177.54.154.0/24 Singapore (sentinel catch; adjacent /24 is Chicago)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 12:43:57 +00:00
robandClaude Fable 5 8cc850160d utils: canonical dRPC edge IP prefix -> region map (splits pipeline seed)
7 edge locations from us-16 + de-14 captures: Chicago/Ashburn/LA/Frankfurt/
Falkenstein(=eu-west2)/London/Tokyo/Singapore. /24 granularity mandatory
(adjacent /24s differ by city). eu-west3 reserved for the GCP edge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 12:41:05 +00:00
robandClaude Fable 5 53162f7ee0 drpc: mount ./dshackle_logs:/logs for the dshackle accessLog
Gateway request-splits pilot (earnings misattribution fix): the accessLog
stub in main_configs pointed at /logs which was never mounted. Host-side
dir lets the splits tailer aggregate per-caller response counts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 12:15:55 +00:00
robandClaude Fable 5 8baf603b48 Add hemi sepolia (testnet, chain 743111): op-geth pruned variant
hemi-testnet US-Central market $6/day with 2 providers. BTC side =
testnet3 (own hVM genesis @3522419), L1 = ethereum sepolia, snap sync,
genesis+rollup checked in per hemi-node testnet dir, fork overrides in
env/op/hemi/sepolia/.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 09:35:25 +00:00
robandClaude Fable 5 b54bfa84ef slowdisk fit check: 90d growth headroom (statics grow; /slowdisk is often the root partition)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 07:22:13 +00:00
robandClaude Fable 5 a0b47b3631 restore-volumes: fail loudly when static offload cannot fit on /slowdisk
A silent fallback to primary-disk extraction violates the caller's NVMe
capacity math now that the planner treats slowdisk as a separate pool.
When SLOWDISK=True and the manifest's static sizes (accurate, replacing
the whole-archive x2 estimate that false-refuses large restores) do not
fit above the floor, error out with the explicit remedy: re-run with
--no-slowdisk as the conscious override. Operator directive 2026-07-09.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 07:20:52 +00:00
robandClaude Fable 5 331a9c27a8 Lift reth static-file symlink guard: op-reth v2.3.2 verified through symlink
Live test on rpc-uk-4 (unichain-mainnet pruned, 166G static_files moved to
/slowdisk + symlinked): reth healed consistency, initialized the
StaticFileProducer, and resumed committing canonical blocks - full
read/write through the symlink. The guard's premise (old reth refusing
symlinked static_files) no longer holds; pre-v2 reths fail loudly at start,
fallback is --no-slowdisk. Restores/clones of reth nodes to SLOWDISK=True
hosts now offload statics automatically (NVMe is the scarce resource).
Note: reth also has --datadir.static-files for a flag-based layout later.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 07:10:23 +00:00
robandClaude Fable 5 5137dcbfba hemi mainnet: op-geth 05d4d8f -> 7cfc394 (2026-07-08 build)
Candidate fix for the receipts RLP decode failure that blocks snap sync
past block 4,178,637 (2026-04-12): peers dropped with 'invalid message
(code 10) receipt 1: rlp: ListEnd not positioned at EOL' on the previous
newest published image.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 01:41:19 +00:00
robandClaude Fable 5 c07dc9f720 show-status: footer listing fenced nodes (maintenance windows)
Fenced nodes are dropped from COMPOSE_FILE so show-status silently omitted
them - a fenced-but-running node looked 'gone'. rpc-update now writes
/root/rpc/.fenced (node | until | reason | owner per active window); print
it as a footer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 13:06:15 +00:00
robandClaude Fable 5 1ebabee93d volume-utils: per-volume-kind restorable floor (_config tars are legitimately tiny)
The 1MB near-empty guard (added for purged-volume zstd stubs) rejected every
legitimate _config volume archive (cronos: 68KB), so any node whose registry
entry includes a _config volume reported Restorable: 0 despite healthy
multi-GB data backups (cronos had three; 14 registry entries carry _config
volumes). _config archives now pass at >=4KB; data volumes keep the 1MB floor.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 12:01:44 +00:00
robandClaude Fable 5 9aa98718b6 hemi mainnet: syncmode full -> snap
hemi cannot full-sync across old BTC reorg points: EVM blocks referencing
orphaned Bitcoin Attributes ancestors are unexecutable once no peer retains
the stale BTC block (us-16 wedged at 3353463 on reorged-out block
00000000000000000001dcb3...b971). hemi's official l2-config.toml ships
SyncMode=snap. Registry: 150 entries gain node names (regen enrichment).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 11:44:52 +00:00
rob 9ac5529ef5 R-2: gitignore chaindata/snapshot/tarball patterns 2026-07-08 04:20:06 +00:00
robandClaude Fable 5 5ee02b85d4 Add unichain op-reth archive-trace variants (mainnet + sepolia)
Operator wants a reth archive sync on de-32 to compare footprint vs the
612G op-erigon archive.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 03:03:49 +00:00
rob 4d5d8f4be1 Merge pull request 'katana-mainnet genesis: add isthmusTime + jovianTime (unblock op-reth) [issue-501]' (#25) from issue-501-katana-jovian into main
Reviewed-on: #25
2026-07-02 14:05:25 +00:00
rob 915192acc5 Add CURSOR.md (seeded from VIBE.md) for cursor-agent implementer backend
Faithful copy of VIBE.md to seed cursor-specific tuning. The implement-vibe-node-change
wrapper, when run with VN_ENGINE=cursor (now the default), points cursor-agent at this
doc instead of VIBE.md so the two backends' instructions can diverge over time.
2026-06-23 02:54:14 +00:00
rob dd8ce689e4 Add VIBE.md debugging guide and update README.md
- Add VIBE.md as primary debugging reference for automated tools
- Rewrite README.md as human-focused operator guide
- Fix README.md inaccuracies (remove show-networks.sh references, fix typo)
- Split content: README for humans, VIBE for agents

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-22 08:37:38 +00:00
robandClaude Opus 4.8 25b0ab049c shibarium heimdall: fix REST listen-address flag (--laddr, not --rest-server.addr)
heimdall crash-looped on 'unknown flag: --rest-server.addr'. Per heimdalld start
--help, the bone-fork binary takes --rest-server (bool) to enable REST/LCD and
--laddr (default tcp://0.0.0.0:1317) for its listen address — there is no
--rest-server.addr. Swap it. (The rest_server-injection + idempotent-init fixes
from the prior PR worked: init now skips re-init, fetches the heimdall-109 genesis,
no more 'rest_server already defined'.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 04:30:59 +00:00
robandClaude Opus 4.8 39d2fa93e2 shibarium heimdall init.sh: stop injecting rest_server (crash fix) + idempotent init
heimdall crash-looped on 'toml: key rest_server is already defined'. init.sh
inserted 'rest_server = true' after [rpc] on EVERY boot (non-idempotent), piling up
duplicates; rest_server is not a valid CometBFT config.toml key anyway — REST is
enabled by the --rest-server flag in the start command.

- Remove the rest_server / rest_server_addr config injection.
- Self-heal: strip any previously-injected rest_server lines (so already-corrupted
  volumes recover on next boot — no volume wipe needed).
- Guard heimdalld init to first boot only (config.toml absent) so restarts don't
  reset node identity or re-parse the existing config.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 03:24:37 +00:00
robandClaude Opus 4.8 9fc368f405 shibarium: build heimdall from source (cometbft.Dockerfile)
A parallel change reverted this to FROM shibaone/heimdall:v1.0.7-bone — an image
that exists on no registry, so the heimdall build fails. Restore the source build:
clone shibaone/heimdall@${CL_VERSION}, make install, then layer the CometBFT init
entrypoint. Pairs with vibe-node PR (node_build + standalone service name).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 02:56:17 +00:00
rob 4dd902e9af Merge branch 'issue-63' 2026-06-19 14:19:50 +00:00
robandClaude Opus 4.8 ee21a0245e shibarium: build bor + heimdall from source (no published images)
shibaone ships no docker images for the bone fork — only source + .deb config
packages — so both Dockerfiles must clone+build, not FROM a (nonexistent) image.

- bor.Dockerfile: clone shibaone/bor@${BOR_VERSION}, make bor, cp build/bin/bor
  (was: alpine + wrong /src/build/bor path). golang:1.22.1 like upstream.
- cometbft.Dockerfile: clone shibaone/heimdall@${CL_VERSION}, make install
  (was: FROM shibaone/heimdall:v1.0.7-bone — that tag does not exist on any
  registry), then layer the CometBFT init entrypoint.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 11:46:00 +00:00
robandClaude Opus 4.8 aefcd41a88 status sweep: cap check-health per node (timeout) so one stuck node can't wedge fleet rpc-update
A hung check-health.sh (aztec-testnet, looping on an unresponsive reference RPC)
blocked show-status.sh's parallel 'wait' for 3.5h, hanging the whole fleet
rpc-update and holding the deploy lock. Each curl was bounded (-m 3) and the
retry loop capped (3x), but the call itself wasn't time-bounded.
- sync-status.sh: wrap each check-health.sh call in 'timeout ${HC_TIMEOUT:-30}'
  (-> exit 124 + 'timeout' status on overrun).
- show-status.sh: wrap the whole per-node sync-status.sh call in
  'timeout ${SYNC_TIMEOUT:-60}' so the parallel wait can never block forever.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 03:57:18 +00:00
rob 9ad7565f97 deploy: regenerate compose from vibe-node main f843789776db 2026-06-18 16:34:36 +00:00
rob c56542ade0 deploy: regenerate compose from parent main 1ecbe0739ddc 2026-06-18 15:19:10 +00:00
rob e9ed1c0cd3 check-health.sh: add retry logic for hash comparison to fix false-positive forked status 2026-06-18 14:49:34 +00:00
rob a3a78cb3be deploy: regenerate compose from parent main 3cc8d26c8d58 2026-06-18 13:44:07 +00:00
rob 7d00f3a1ce deploy: regenerate compose from parent main 0abbb3abd857 2026-06-18 11:20:34 +00:00
rob 6bb0b19f45 Harden restore-volumes.sh against silent restore truncation and incomplete-download skips
- BUG 1: Add error checking after tar extraction for both LOCAL and REMOTE-CACHE branches
  - Check exit status of tar -I zstd -xf commands
  - Print error to stderr and exit non-zero on failure
  - Prevents silent truncation where corrupt/incomplete backup extracts partial data
  - Mirrors existing remote-STREAM branch error handling
- BUG 2: Fix REMOTE branch to resume incomplete aria2c downloads
  - Check for presence of <file>.aria2 control file as incomplete signal
  - aria2c -c continues/resumes download when .aria2 file exists
  - Only skip download when file exists AND no .aria2 control file remains
  - aria2 deletes .aria2 sidecar on successful completion, making it a reliable signal
- Maintain all existing flags: aria2c -c -Z -x8 -j8 -s8 -d
- Preserve reth guard logic and static-file offload behavior unchanged

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-17 16:22:50 +00:00
rob 6ddb18dbc5 Fix /slowdisk static-file offload: add reth guard and --keep-directory-symlink
- Add RETH GUARD to clone-backup.sh and clone-node.sh: when the config name
  contains 'reth', skip the whole /slowdisk static-file symlink offload and
  extract everything onto the primary disk (equivalent to --no-slowdisk).
  This matches the already-correct restore-volumes.sh behavior.
  Reason: reth refuses to start when its static_files directory is a symlink,
  failing at boot with 'failed to create dir static_files: File exists'.

- Add --keep-directory-symlink to all tar extraction options in both scripts
  for the SLOWDISK path. This allows tar to extract files THROUGH the
  pre-created directory symlinks instead of trying to mkdir over them
  (which fails with 'Cannot mkdir: File exists'). This matches the
  already-correct restore-volumes.sh behavior.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-17 16:07:21 +00:00
rob 27d0ea0d28 op/doma: rename celestia relay to op-alt, add mainnet op-alt relay, vendor mainnet rollup.json
- Rename doma testnet relay from celestia to op-alt (ghcr.io/celestiaorg/op-alt-da)
- Add op-alt relay for doma mainnet with image tag 0.15.0 (not v0.15.0)
- Vendor complete mainnet rollup.json with alt_da (GenericCommitment)
- Fix per-network relay settings: namespace + CELESTIA_*_RPC env vars
- Switch mainnet op-geth to use vendored rollup.json (bind-mounted)

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-17 14:02:34 +00:00
rob 1944662053 op/doma/testnet: fix celestia relay image tag from v0.15.0 to 0.14.0-mocha
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-17 11:21:56 +00:00
rob fc03d6ddf6 op/doma/testnet: add Celestia Alt-DA support (celestiaorg/op-alt-da:v0.15.0)
- Add relay template (templates/relays/celestia.doma.yml) for op-alt-da
- Add celestia relay config to op/doma stack in context.yml
- Add relay: celestia to op/doma testnet in config.yml
- Add op-node.doma.yml template with ALTDA env vars gated on relay_name
- Update op/doma/testnet/rollup.json with complete config including alt_da block

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-06-17 10:40:59 +00:00
robandClaude Opus 4.8 df6c17f5cc arb nitro minimal: prune-cycle model (.prune.yml --init.prune=minimal)
Revert to the prune-cycle model for minimal nodes: the normal compose serves
RPC with no --init.prune, and a generated .prune.yml runs --init.prune=minimal,
driven periodically by prune-if-prunable (same mechanism as pruned/full). Minimal
nodes are seeded from a pruned backup, then pruned to minimal.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 05:43:09 +00:00
robandClaude Opus 4.8 fd283122f5 arb nitro minimal: self-prune via --init.prune=minimal in normal compose
Correct the minimal-node model: the minimal compose itself carries
--init.prune=minimal (prunes to genesis+head on start) instead of relying on a
separate .prune.yml — otherwise a minimal node was byte-identical to pruned in
normal operation and had no way to enforce minimal state. Removed the redundant
minimal .prune.yml files.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 04:19:09 +00:00
robandClaude Opus 4.8 48683cabba arb nitro: add minimal-prune node variant (--init.prune=minimal)
New minimal profile for arbitrum one/nova/sepolia: a pruned-style node whose
prune cycle uses --init.prune=minimal (most aggressive: genesis+head only)
instead of full. Separate composes so it can be tested independently of the
production pruned nodes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:34:22 +00:00
robandClaude Opus 4.8 e8dafa1383 prune: regenerate matching-version .prune.yml + add avalanche offline-pruning
Fixes prune-version drift that corrupted nodes (prune ran an older nitro binary
than the node). All .prune.yml now regenerate from the same config as the normal
compose via client_needs_prune.

- arb nitro: nova/one/sepolia .prune.yml bumped to the node's version (v3.10.1)
- avalanche: add .prune.yml variants that mount a /config/prune chain-config with
  offline-pruning-enabled, plus avalanche/{mainnet,fuji}/prune/C/config.json
- archive profiles are excluded (db_type==pruned gate) so they are never pruned

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 12:40:10 +00:00
robandClaude Opus 4.8 b24c0f12dd clone-node/clone-backup: add --no-slowdisk override for /slowdisk offload
Mirror the restore-volumes.sh --no-slowdisk capability for live/backup clones.
Both scripts gate the target /slowdisk static-file offload on the target's
SLOWDISK env (case-insensitive, matches the Python-templated 'True') and accept
a --no-slowdisk flag that forces the offload off for one run. When SLOWDISK is
on but the target /slowdisk is too small for the static files, the clone warns
and aborts, telling the operator to re-run with --no-slowdisk.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 05:43:45 +00:00
rob 400ea86d29 Adding json files for katana testnet 2026-02-08 14:15:57 +00:00
rob b74d521064 Add config files 2026-02-08 02:07:03 +00:00
rob 02976155d5 Add Katana (Ronin L2) node configurations for mainnet and testnet 2026-02-07 22:32:52 +00:00
robandClaude Opus 4.5 a583d9cf8c Add Aztec devnet/testnet to reference endpoints
Adds rollup_version-based lookup for Aztec chains.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 17:17:50 +00:00
robandClaude Opus 4.5 c8f96a3a39 show-size.sh: Add disk space info when called without args
Shows free/total disk space at the end, similar to show-db-size.sh

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 10:24:13 +00:00
robandClaude Opus 4.5 413ca7ccd4 show-ram.sh: Fix to show node paths like show-status
- Use COMPOSE_FILE from .env to get list of nodes
- Match containers by service labels from compose files
- Output format now matches show-status (node paths, not container IDs)
- Sorted by RAM usage descending

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 10:13:47 +00:00
robandClaude Opus 4.5 f92f80abd0 show-ram.sh: Fix path mapping to compose file
Path maps directly to compose file in subdirectories:
op/reth/base-mainnet-op-reth-archive-trace -> op/reth/base-mainnet-op-reth-archive-trace.yml

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 09:52:28 +00:00
robandClaude Opus 4.5 67731beed0 show-ram.sh: Fix node_path handling, group by node
- Fix: handle full path like ethereum/geth/node-name (extract basename)
- Without args: show RAM per node (grouped by compose project), not per container
- Sorted by RAM usage descending

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 09:46:51 +00:00
robandClaude Opus 4.5 9ce4b5cd0a show-ram.sh: Show all containers when no node_path given
- Without argument: shows all containers sorted by RAM, total container RAM, server RAM
- With argument: shows RAM for specific node only

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 09:38:49 +00:00
robandClaude Opus 4.5 433bb6f341 Add show-ram.sh script to show RAM usage per node
Shows RAM usage for all containers in a compose file with total.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-07 08:50:59 +00:00
robandClaude Opus 4.5 65919f6c01 Update dshackle: 0.73.0 → 0.74.0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 05:11:36 +00:00
robandClaude Opus 4.5 73d376f589 Update client versions
- agave (solana): v3.1.7 → v3.1.8
- bitcoind (bitcoin-cash): 0.32.6 → 0.32.7
- erigon3 (ethereum, gnosis): v3.3.3 → v3.3.4
- geth/node (mantle.sepolia): v1.4.1 → v1.4.2
- go-wemix: w0.10.11 → w0.10.12
- haqq: v1.9.1 → v1.9.2
- reth (op-stack, ethereum): v1.10.1 → v1.10.2

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 05:08:20 +00:00
robandClaude Opus 4.5 c6d33fde72 Update Celo versions: geth celo-v2.1.3, op-node celo-v2.1.1
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 03:16:55 +00:00
robandClaude Opus 4.5 08e537ee71 Update client versions (cursor-verified)
- juno: v0.15.16 → v0.15.17 (starknet)
- scroll l2geth: v5.10.1 → v5.10.2 (SECURITY FIX)
- reth: v1.9.3 → v1.10.1 (ethereum)
- op-reth: v1.9.3 → v1.10.1 (base/lisk/op/soneium)
- metis dtl: v0.2.5 → v0.2.6
- xlayer geth/node: v0.1.2 → v0.1.3
- solana agave: v3.0.13/v3.1.6 → v3.1.7
- linea geth: v1.16.7 → v1.16.8

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 01:45:48 +00:00
robandClaude Opus 4.5 6915a759d1 Update taiko-hekla nethermind to 1.36.0, fix linea-sepolia sync mode
- taiko-hekla nethermind: 1.35.8 -> 1.36.0 (security + Taiko fixes)
- linea-sepolia-besu: SNAP -> FULL sync mode (SNAP broken for Linea)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 10:27:52 +00:00
robandClaude Opus 4.5 a7661930be Fix Linea Sepolia maru config for snapshot sync
- Disable payload-validation-enabled (same as mainnet fix)
- Increase desync-tolerance to 100000 (allow CL/EL sync gap)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 05:26:30 +00:00
robandClaude Opus 4.5 749ff64f8f Switch Linea Besu from SNAP to FULL sync mode
SNAP sync is broken for Linea - it picks an old pivot block (~24.7M) that
no peers can serve world state for. This causes:
- World state download stuck with 0 pending requests
- Maru unable to push blocks to EL without complete world state
- Node stuck returning block 0 for "latest"

FULL sync executes every block from genesis. It's slower but reliable
and allows maru to drive the sync via engine API.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 05:02:06 +00:00
robandClaude Opus 4.5 b7fe145fa5 Fix Linea maru: increase desync-tolerance to allow catchup sync
When Besu is behind the CL head (e.g., during initial sync or after restart),
desync-tolerance=0 prevents maru from sending any fork choice updates to Besu.
This causes Besu to remain stuck at its current block.

Increasing desync-tolerance to 100000 allows maru to continue sending blocks
even when Besu is significantly behind, enabling it to catch up.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 04:49:52 +00:00
robandClaude Opus 4.5 bd6083231f Fix Linea maru: disable payload-validation-enabled to match official config
When payload-validation-enabled is true, maru validates every block against
Besu before sending fork choice updates. If Besu is in an inconsistent state
(e.g., stuck in SNAP sync), this causes maru to stop sending fork choice
updates entirely, preventing Besu from ever syncing.

The official Linea configuration uses payload-validation-enabled = false,
which allows maru to continue sending fork choice updates regardless of
Besu's current state.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 04:37:19 +00:00
rob 0a880c3f3f Revert Linea mainnet Besu to SNAP sync mode 2026-01-17 03:41:44 +00:00
rob 1987f07cf8 Change Linea mainnet Besu to CHECKPOINT sync mode 2026-01-17 03:40:54 +00:00
rob a0f098de79 Change Linea mainnet Besu from SNAP to FULL sync mode 2026-01-17 03:40:05 +00:00
rob 6fb1d76b13 fix(zircuit): update Garfield configs for Sepolia L1 and testnet op_network 2026-01-17 03:02:50 +00:00
rob e136b0fc52 Update Linea Besu to beta-v4.4-rc7-20260108212219-738a446 2026-01-15 13:40:08 +00:00
rob 607dbe7020 Add bootnodes for Linea Besu - remove network exclusion from template 2026-01-15 13:34:19 +00:00
robandClaude Opus 4.5 c2582b0b76 Enable payload-validation for Linea Maru
Set payload-validation-enabled=true in Maru config to ensure
payloads are sent to the execution client. Without this, Maru
doesn't send forkchoice/newPayload calls when EL reports synced
status (even at block 0).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 13:23:17 +00:00
robandClaude Opus 4.5 ec2fb6c883 Add Linea Geth configs with Maru consensus
- Add linea/geth/ compose files (mainnet/sepolia, pruned/archive)
- Update Maru version and --network flag in besu/erigon3 configs
- Update compose_registry.json

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 10:08:04 +00:00
robandClaude Opus 4.5 d28342683c Update Maru to v1.0.0 and use --network flag
- Upgrade from 9737a45 to v1.0.0-20260108114606-36f5e2f
- Use --network=linea-mainnet for built-in config
- May fix advertise-ip issue for peer discovery

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 09:40:36 +00:00
robandClaude Opus 4.5 52d7ec6d40 Fix Starknet chain ID matching - handle hex-encoded ASCII
Juno returns chain ID as hex-encoded ASCII (0x534e5f5345504f4c4941)
rather than plain string (SN_SEPOLIA). Match both formats.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 09:17:22 +00:00
robandClaude Opus 4.5 6917005776 Add Starknet support to blocknumber.sh
- Detect Starknet paths and use starknet_getBlockWithTxHashes
- Return decimal block_number directly instead of hex conversion

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 09:11:39 +00:00
robandClaude Opus 4.5 63b720f1e9 Add Starknet support to sync-status and check-health scripts
- sync-status.sh now detects Starknet paths and uses starknet_chainId
- Maps SN_MAIN/SN_SEPOLIA chain IDs to reference endpoints
- check-health.sh accepts --starknet flag for Starknet mode
- Uses starknet_getBlockWithTxHashes instead of eth_getBlockByNumber
- Handles decimal timestamps and block_hash field differences

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 09:10:52 +00:00
rob db681b5a74 Add Starknet RPC support to sync check scripts 2026-01-15 09:07:36 +00:00
rob 42a91a5bac Add explicit http-port and ws-port to juno config 2026-01-15 07:23:23 +00:00
rob 8dfdaf3548 Add --p2p-feeder-node to juno for feeder gateway sync 2026-01-15 06:48:22 +00:00
robandClaude Opus 4.5 98e1c88293 Update client versions
- erigon3: v3.3.2 → v3.3.3
- taiko geth: v1.17.3 → v1.17.4
- taiko driver: v1.11.0 → v1.11.2

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 04:56:51 +00:00
robandClaude Opus 4.5 5c0fb760cc Remove nginx sidecar from rootstock, use traefik headers
- Service name simplified to rootstock-mainnet (no -client suffix)
- Traefik middlewares handle Host:localhost header rewriting
- Proper WS routing on port 8546

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 10:27:19 +00:00
robandClaude Opus 4.5 004476216e Remove nginx sidecar from rootstock, use traefik headers
Replace nginx proxy with traefik headers middleware for Host rewriting.
Fixes container IP mismatch issues on container restart.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 10:22:46 +00:00
robandClaude Opus 4.5 eee0a4092d Update dshackle to v0.73.0
Bump drpcorg/dshackle from 0.72.6 to 0.73.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 09:13:59 +00:00
robandClaude Opus 4.5 662ecbfe5c Update client versions for multiple chains
- geth: v1.16.7 → v1.16.8 (security fix for p2p vulnerabilities)
- blsync: alltools-v1.16.7 → alltools-v1.16.8
- nethermind: 1.35.8 → 1.36.0 (major release with 416 improvements)
- avalanche-go: v1.14.0 → v1.14.1 (Granite.1 release)
- bsc: 1.6.5 → 1.6.6 (security fixes from geth v1.16.8)
- pathfinder: v0.21.3 → v0.21.5 (sync hotfix)
- reth_gnosis: v1.0.0 → v1.0.1 (RPC bugfixes)
- bitcoind: 0.32.5 → 0.32.6
- zircuit: v1.125.6-hotfix → v1.127.13-beta
- fraxtal geth: v1.101603.5 → v1.101605.0
- fraxtal op-node: v1.16.3 → v1.16.5

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 09:11:35 +00:00
rob e4dfd2f4ab update reference-rpc file with hyperliquid fix forked status 2026-01-14 01:25:53 +00:00
rob a24f8ed258 add testnet support for cdk-erigon 2025-12-31 02:25:45 +00:00