diff --git a/ethereum/besu/ethereum-mainnet-besu-pruned-bonsai--nimbus.yml b/ethereum/besu/ethereum-mainnet-besu-pruned-bonsai--nimbus.yml index b9d8c7a5..5d6e5446 100644 --- a/ethereum/besu/ethereum-mainnet-besu-pruned-bonsai--nimbus.yml +++ b/ethereum/besu/ethereum-mainnet-besu-pruned-bonsai--nimbus.yml @@ -195,6 +195,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/geth/ethereum-hoodi-geth-pruned-pebble-path--nimbus.yml b/ethereum/geth/ethereum-hoodi-geth-pruned-pebble-path--nimbus.yml index 56ca85fd..080bc9a1 100644 --- a/ethereum/geth/ethereum-hoodi-geth-pruned-pebble-path--nimbus.yml +++ b/ethereum/geth/ethereum-hoodi-geth-pruned-pebble-path--nimbus.yml @@ -201,6 +201,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/geth/ethereum-mainnet-geth-pruned-leveldb-hash--nimbus--fireeth.yml b/ethereum/geth/ethereum-mainnet-geth-pruned-leveldb-hash--nimbus--fireeth.yml index 47b870ce..e035c9be 100644 --- a/ethereum/geth/ethereum-mainnet-geth-pruned-leveldb-hash--nimbus--fireeth.yml +++ b/ethereum/geth/ethereum-mainnet-geth-pruned-leveldb-hash--nimbus--fireeth.yml @@ -265,6 +265,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus--fireeth.yml b/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus--fireeth.yml index 75154eff..f44fc154 100644 --- a/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus--fireeth.yml +++ b/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus--fireeth.yml @@ -267,6 +267,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus.yml b/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus.yml index 81c0b412..aab91974 100644 --- a/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus.yml +++ b/ethereum/geth/ethereum-mainnet-geth-pruned-pebble-path--nimbus.yml @@ -201,6 +201,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/geth/ethereum-sepolia-geth-pruned-pebble-path--nimbus.yml b/ethereum/geth/ethereum-sepolia-geth-pruned-pebble-path--nimbus.yml index d4e3f979..ce18e004 100644 --- a/ethereum/geth/ethereum-sepolia-geth-pruned-pebble-path--nimbus.yml +++ b/ethereum/geth/ethereum-sepolia-geth-pruned-pebble-path--nimbus.yml @@ -201,6 +201,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/nethermind/ethereum-hoodi-nethermind-pruned-rocksdb-trace--nimbus.yml b/ethereum/nethermind/ethereum-hoodi-nethermind-pruned-rocksdb-trace--nimbus.yml index ecaf9b21..b8bc5956 100644 --- a/ethereum/nethermind/ethereum-hoodi-nethermind-pruned-rocksdb-trace--nimbus.yml +++ b/ethereum/nethermind/ethereum-hoodi-nethermind-pruned-rocksdb-trace--nimbus.yml @@ -175,6 +175,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/nethermind/ethereum-mainnet-nethermind-pruned-rocksdb-trace--nimbus.yml b/ethereum/nethermind/ethereum-mainnet-nethermind-pruned-rocksdb-trace--nimbus.yml index e338dd5a..1635d931 100644 --- a/ethereum/nethermind/ethereum-mainnet-nethermind-pruned-rocksdb-trace--nimbus.yml +++ b/ethereum/nethermind/ethereum-mainnet-nethermind-pruned-rocksdb-trace--nimbus.yml @@ -175,6 +175,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/nethermind/ethereum-sepolia-nethermind-pruned-rocksdb-trace--nimbus.yml b/ethereum/nethermind/ethereum-sepolia-nethermind-pruned-rocksdb-trace--nimbus.yml index ae5185de..c3d07208 100644 --- a/ethereum/nethermind/ethereum-sepolia-nethermind-pruned-rocksdb-trace--nimbus.yml +++ b/ethereum/nethermind/ethereum-sepolia-nethermind-pruned-rocksdb-trace--nimbus.yml @@ -175,6 +175,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/reth/ethereum-mainnet-reth-archive-trace--nimbus.yml b/ethereum/reth/ethereum-mainnet-reth-archive-trace--nimbus.yml index fe2662ae..bd7d2b10 100644 --- a/ethereum/reth/ethereum-mainnet-reth-archive-trace--nimbus.yml +++ b/ethereum/reth/ethereum-mainnet-reth-archive-trace--nimbus.yml @@ -190,6 +190,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/reth/ethereum-mainnet-reth-minimal-trace--nimbus.yml b/ethereum/reth/ethereum-mainnet-reth-minimal-trace--nimbus.yml index ec464c91..0e0cadfe 100644 --- a/ethereum/reth/ethereum-mainnet-reth-minimal-trace--nimbus.yml +++ b/ethereum/reth/ethereum-mainnet-reth-minimal-trace--nimbus.yml @@ -249,6 +249,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/reth/ethereum-mainnet-reth-pruned-trace--nimbus.yml b/ethereum/reth/ethereum-mainnet-reth-pruned-trace--nimbus.yml index 43271d5b..b944acf6 100644 --- a/ethereum/reth/ethereum-mainnet-reth-pruned-trace--nimbus.yml +++ b/ethereum/reth/ethereum-mainnet-reth-pruned-trace--nimbus.yml @@ -191,6 +191,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/reth/ethereum-sepolia-reth-archive-trace--nimbus.yml b/ethereum/reth/ethereum-sepolia-reth-archive-trace--nimbus.yml index 76f704b5..ba30a479 100644 --- a/ethereum/reth/ethereum-sepolia-reth-archive-trace--nimbus.yml +++ b/ethereum/reth/ethereum-sepolia-reth-archive-trace--nimbus.yml @@ -190,6 +190,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/ethereum/reth/ethereum-sepolia-reth-pruned-trace--nimbus.yml b/ethereum/reth/ethereum-sepolia-reth-pruned-trace--nimbus.yml index 882e6623..254abb90 100644 --- a/ethereum/reth/ethereum-sepolia-reth-pruned-trace--nimbus.yml +++ b/ethereum/reth/ethereum-sepolia-reth-pruned-trace--nimbus.yml @@ -191,6 +191,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/nethermind/gnosis-chiado-nethermind-archive-rocksdb-trace.yml b/gnosis/nethermind/gnosis-chiado-nethermind-archive-rocksdb-trace.yml index 5b36f195..4fa38fd1 100644 --- a/gnosis/nethermind/gnosis-chiado-nethermind-archive-rocksdb-trace.yml +++ b/gnosis/nethermind/gnosis-chiado-nethermind-archive-rocksdb-trace.yml @@ -177,6 +177,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/nethermind/gnosis-chiado-nethermind-minimal-rocksdb-trace.yml b/gnosis/nethermind/gnosis-chiado-nethermind-minimal-rocksdb-trace.yml index fed68282..e977dc3f 100644 --- a/gnosis/nethermind/gnosis-chiado-nethermind-minimal-rocksdb-trace.yml +++ b/gnosis/nethermind/gnosis-chiado-nethermind-minimal-rocksdb-trace.yml @@ -180,6 +180,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/nethermind/gnosis-chiado-nethermind-pruned-rocksdb-trace.yml b/gnosis/nethermind/gnosis-chiado-nethermind-pruned-rocksdb-trace.yml index c35725b6..d70c8b8b 100644 --- a/gnosis/nethermind/gnosis-chiado-nethermind-pruned-rocksdb-trace.yml +++ b/gnosis/nethermind/gnosis-chiado-nethermind-pruned-rocksdb-trace.yml @@ -175,6 +175,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/nethermind/gnosis-mainnet-nethermind-archive-rocksdb-trace.yml b/gnosis/nethermind/gnosis-mainnet-nethermind-archive-rocksdb-trace.yml index b1b28106..ad24e8ac 100644 --- a/gnosis/nethermind/gnosis-mainnet-nethermind-archive-rocksdb-trace.yml +++ b/gnosis/nethermind/gnosis-mainnet-nethermind-archive-rocksdb-trace.yml @@ -177,6 +177,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/nethermind/gnosis-mainnet-nethermind-minimal-rocksdb-trace.yml b/gnosis/nethermind/gnosis-mainnet-nethermind-minimal-rocksdb-trace.yml index 0fa3c29c..7298b02d 100644 --- a/gnosis/nethermind/gnosis-mainnet-nethermind-minimal-rocksdb-trace.yml +++ b/gnosis/nethermind/gnosis-mainnet-nethermind-minimal-rocksdb-trace.yml @@ -180,6 +180,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/nethermind/gnosis-mainnet-nethermind-pruned-rocksdb-trace.yml b/gnosis/nethermind/gnosis-mainnet-nethermind-pruned-rocksdb-trace.yml index 4a0ab337..16418ef5 100644 --- a/gnosis/nethermind/gnosis-mainnet-nethermind-pruned-rocksdb-trace.yml +++ b/gnosis/nethermind/gnosis-mainnet-nethermind-pruned-rocksdb-trace.yml @@ -175,6 +175,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/reth/gnosis-chiado-reth-archive-trace.yml b/gnosis/reth/gnosis-chiado-reth-archive-trace.yml index 4511241f..7b3168df 100644 --- a/gnosis/reth/gnosis-chiado-reth-archive-trace.yml +++ b/gnosis/reth/gnosis-chiado-reth-archive-trace.yml @@ -189,6 +189,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/reth/gnosis-chiado-reth-pruned-trace.yml b/gnosis/reth/gnosis-chiado-reth-pruned-trace.yml index 006b903c..2bb991d5 100644 --- a/gnosis/reth/gnosis-chiado-reth-pruned-trace.yml +++ b/gnosis/reth/gnosis-chiado-reth-pruned-trace.yml @@ -190,6 +190,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/reth/gnosis-mainnet-reth-archive-trace.yml b/gnosis/reth/gnosis-mainnet-reth-archive-trace.yml index 2a14bc52..f190dbc9 100644 --- a/gnosis/reth/gnosis-mainnet-reth-archive-trace.yml +++ b/gnosis/reth/gnosis-mainnet-reth-archive-trace.yml @@ -189,6 +189,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/* diff --git a/gnosis/reth/gnosis-mainnet-reth-pruned-trace.yml b/gnosis/reth/gnosis-mainnet-reth-pruned-trace.yml index 9c201056..63b677fb 100644 --- a/gnosis/reth/gnosis-mainnet-reth-pruned-trace.yml +++ b/gnosis/reth/gnosis-mainnet-reth-pruned-trace.yml @@ -190,6 +190,15 @@ 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 + # dshackle runs internal lower-bound detectors against each upstream. + # For a nimbus beacon endpoint the epoch detector calls POST /eth/v1/beacon/rewards/attestations/{epoch} + # every ~5 minutes with a hardcoded 5-second internal timeout, while nimbus needs 16-22 seconds + # to replay that historical state. The probe therefore always times out, retries, and + # re-issues the same historical request forever, which pins the node in constant + # historical state replay and has repeatedly degraded the mainnet ethereum node. + # The code path is GenericUpstream.upstreamStart(): if (!getOptions().disableBoundValidation) + # { detectLowerBlock() }. The YAML key is read by ChainOptionsReader as disable-bound-validation. + disable-bound-validation: true methods: disabled: - name: GET#/eth/v2/debug/beacon/states/*