Skip to content

Commit bc4e654

Browse files
yperbasisclaudeAskAlexSharov
authored
ci, cl/clparams: bump kurtosis assertoor to v0.1.2 and align CL clients (erigontech#21449)
## Summary Bumps the kurtosis/assertoor test stack from **assertoor v0.0.17 to v0.1.2** (to fix v0.0.17-era flakes, e.g. the regular suite's eoa-transactions generator stall) and aligns the CL clients that v0.1.2's stricter spec cross-check requires. ## Changes - **assertoor v0.0.17 → v0.1.2** — the workflow env (`test-kurtosis-assertoor.yml`, `test-kurtosis-gloas.yml`) and the suites that pin it (`regular`, `caplin-minimal`), plus the `caplin-assertoor.io` reference config and the caplin-hive-testing doc. - **lighthouse v7.0.1 → v8.1.3 and teku 25.9.1 → 26.4.0** for the `regular` suite (and the shared cache-warming env). assertoor v0.1.0+ cross-checks the beacon-chain spec between CL clients, including `GLOAS_FORK_EPOCH`; lighthouse v7.0.1 and teku 25.9.1 report it inconsistently, which v0.1.2 rejects. v8.1.3 + 26.4.0 are a matched pair that agree. - **`caplin-minimal` keeps lighthouse v7.0.1 as its VC** (only assertoor is bumped to v0.1.2). lighthouse v8 submits attestations exclusively as the Electra `SingleAttestation` form, which caplin's pre-Electra attestation-pool endpoint rejects on this Deneb network; caplin-minimal runs a single caplin beacon node (no teku, no gloas cross-check), so it doesn't need the v8 bump. - **`cl/clparams`: `CustomConfig` defaults unspecified fork epochs to far-future** (matching lighthouse/teku/prysm) instead of inheriting the mainnet base config's finite epochs — so caplin no longer advertises a mainnet fork epoch (e.g. Fulu) on a custom devnet whose config omits it. ## Not in this PR **`pectra` stays on assertoor v0.0.17** (unchanged from main). It is flaky under v0.1.2 — the zero-tolerance `check_consensus_forks` trips on transient forks in its 2-node topology, plus an `el-triggered-consolidation` deposit-activation timing issue. Both are CL test-infra, not erigon. Bumping pectra to v0.1.2 is tracked in erigontech#21891. ## Validation - `caplin-minimal` verified locally end-to-end on v0.1.2 (stability-check passes, finality reached, 100% attestation participation). - CI exercises `regular`, `glamsterdam`, and `caplin-minimal`. --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Alex Sharov <AskAlexSharov@gmail.com>
1 parent 71c54fc commit bc4e654

8 files changed

Lines changed: 64 additions & 12 deletions

File tree

.github/docs/caplin-hive-testing.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ participants:
184184
cl_log_level: "debug"
185185
use_separate_vc: true
186186
vc_type: lighthouse
187-
vc_image: sigp/lighthouse:v7.0.1
187+
vc_image: sigp/lighthouse:v8.1.3
188188
network_params:
189189
seconds_per_slot: 12
190190
deneb_fork_epoch: 0
@@ -193,7 +193,7 @@ additional_services:
193193
assertoor_params:
194194
run_stability_check: true
195195
run_block_proposal_check: true
196-
image: ethpandaops/assertoor:v0.0.17
196+
image: ethpandaops/assertoor:v0.1.2
197197
tests:
198198
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/synchronized-check.yaml
199199
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/block-proposal-check.yaml

.github/workflows/kurtosis/caplin-assertoor.io

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ participants:
77
cl_log_level: "debug"
88
use_separate_vc: true
99
vc_type: lighthouse
10-
vc_image: sigp/lighthouse:v7.0.1
10+
vc_image: sigp/lighthouse:v8.1.3
1111
network_params:
1212
seconds_per_slot: 12
1313
deneb_fork_epoch: 0
@@ -16,7 +16,7 @@ additional_services:
1616
assertoor_params:
1717
run_stability_check: true
1818
run_block_proposal_check: true
19-
image: ethpandaops/assertoor:v0.0.17
19+
image: ethpandaops/assertoor:v0.1.2
2020
tests:
2121
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/synchronized-check.yaml
2222
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/block-proposal-check.yaml

.github/workflows/kurtosis/caplin-minimal-assertoor.io

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ participants:
77
cl_log_level: "debug"
88
use_separate_vc: true
99
vc_type: lighthouse
10+
# Keep lighthouse v7.0.1 here: v8 submits attestations only as Electra
11+
# SingleAttestation, which caplin's pre-Electra pool endpoint rejects on
12+
# this Deneb network (the pinned ethereum-package can't do Electra genesis).
1013
vc_image: sigp/lighthouse:v7.0.1
1114
network_params:
1215
preset: "minimal"
@@ -16,7 +19,7 @@ additional_services:
1619
assertoor_params:
1720
run_stability_check: true
1821
run_block_proposal_check: true
19-
image: ethpandaops/assertoor:v0.0.17
22+
image: ethpandaops/assertoor:v0.1.2
2023
tests:
2124
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/synchronized-check.yaml
2225
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/block-proposal-check.yaml

.github/workflows/kurtosis/regular-assertoor.io

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ participants_matrix:
55
el_log_level: "debug"
66
cl:
77
- cl_type: lighthouse
8-
cl_image: sigp/lighthouse:v7.0.1
8+
cl_image: sigp/lighthouse:v8.1.3
99
- cl_type: teku
10-
cl_image: consensys/teku:25.9.1
10+
cl_image: consensys/teku:26.4.0
1111
network_params:
1212
#electra_fork_epoch: 1
1313
min_validator_withdrawability_delay: 1
@@ -19,7 +19,7 @@ additional_services:
1919
assertoor_params:
2020
run_stability_check: false
2121
run_block_proposal_check: true
22-
image: ethpandaops/assertoor:v0.0.17
22+
image: ethpandaops/assertoor:v0.1.2
2323
tests:
2424
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/all-opcodes-test.yaml
2525
- https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/blob-transactions-test.yaml

.github/workflows/test-kurtosis-assertoor.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ env:
66
# Pinned versions of third-party containers — bump here when upgrading.
77
# These are cached via actions/cache (docker save/load) to avoid re-pulling
88
# on every run and to eliminate Docker Hub rate-limit exposure.
9-
LIGHTHOUSE_IMAGE: "sigp/lighthouse:v7.0.1"
10-
TEKU_IMAGE: "consensys/teku:25.9.1"
11-
ASSERTOOR_IMAGE: "ethpandaops/assertoor:v0.0.17"
9+
LIGHTHOUSE_IMAGE: "sigp/lighthouse:v8.1.3"
10+
TEKU_IMAGE: "consensys/teku:26.4.0"
11+
ASSERTOOR_IMAGE: "ethpandaops/assertoor:v0.1.2"
1212
# Kurtosis CLI pinned so its infra images (engine/core/files-artifacts-expander
1313
# are tagged with the CLI version) can be cached too. The vector and fluent-bit
1414
# tags are dictated by the Kurtosis release — sync them when bumping (see

.github/workflows/test-kurtosis-gloas.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ env:
44
DOCKERHUB_REPOSITORY: "erigontech/erigon"
55
APP_REPO: "erigontech/erigon"
66
LIGHTHOUSE_IMAGE: "sigp/lighthouse:v7.0.1"
7-
ASSERTOOR_IMAGE: "ethpandaops/assertoor:v0.0.17"
7+
ASSERTOOR_IMAGE: "ethpandaops/assertoor:v0.1.2"
88
# Kurtosis CLI pinned so its infra images (engine/core/files-artifacts-expander
99
# are tagged with the CLI version) can be cached too. The vector and fluent-bit
1010
# tags are dictated by the Kurtosis release — sync them when bumping (see

cl/clparams/config.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,6 +1088,28 @@ func CustomConfig(configFile string) (BeaconChainConfig, NetworkConfig, error) {
10881088
if err := yaml.Unmarshal(b, &beaconCfg); err != nil {
10891089
return BeaconChainConfig{}, NetworkConfig{}, err
10901090
}
1091+
1092+
// Forks absent from a custom config are unscheduled (far-future), as in other
1093+
// clients, rather than inheriting the mainnet base config's finite epochs.
1094+
var rawCfg map[string]any
1095+
if err := yaml.Unmarshal(b, &rawCfg); err != nil {
1096+
return BeaconChainConfig{}, NetworkConfig{}, err
1097+
}
1098+
forkEpochs := map[string]*uint64{
1099+
"ALTAIR_FORK_EPOCH": &beaconCfg.AltairForkEpoch,
1100+
"BELLATRIX_FORK_EPOCH": &beaconCfg.BellatrixForkEpoch,
1101+
"CAPELLA_FORK_EPOCH": &beaconCfg.CapellaForkEpoch,
1102+
"DENEB_FORK_EPOCH": &beaconCfg.DenebForkEpoch,
1103+
"ELECTRA_FORK_EPOCH": &beaconCfg.ElectraForkEpoch,
1104+
"FULU_FORK_EPOCH": &beaconCfg.FuluForkEpoch,
1105+
"GLOAS_FORK_EPOCH": &beaconCfg.GloasForkEpoch,
1106+
}
1107+
for key, epoch := range forkEpochs {
1108+
if _, ok := rawCfg[key]; !ok {
1109+
*epoch = math.MaxUint64
1110+
}
1111+
}
1112+
10911113
beaconCfg.InitializeForkSchedule()
10921114

10931115
// setup network config

cl/clparams/config_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,33 @@ MIN_BUILDER_WITHDRAWABILITY_DELAY: 8192
128128
require.Equal(t, GloasVersion, beaconCfg.GetCurrentStateVersion(100))
129129
}
130130

131+
// TestCustomConfigUnsetForksAreFarFuture verifies that fork epochs omitted from a
132+
// custom config default to far-future, like other clients, rather than inheriting
133+
// the finite epochs of the mainnet base config.
134+
func TestCustomConfigUnsetForksAreFarFuture(t *testing.T) {
135+
yamlContent := `
136+
PRESET_BASE: minimal
137+
ALTAIR_FORK_EPOCH: 0
138+
BELLATRIX_FORK_EPOCH: 0
139+
CAPELLA_FORK_EPOCH: 0
140+
DENEB_FORK_EPOCH: 0
141+
ELECTRA_FORK_EPOCH: 100000000
142+
`
143+
dir := t.TempDir()
144+
configPath := filepath.Join(dir, "config.yaml")
145+
require.NoError(t, os.WriteFile(configPath, []byte(yamlContent), 0644))
146+
147+
beaconCfg, _, err := CustomConfig(configPath)
148+
require.NoError(t, err)
149+
150+
// Explicitly-set forks are preserved.
151+
require.Equal(t, uint64(0), beaconCfg.DenebForkEpoch)
152+
require.Equal(t, uint64(100000000), beaconCfg.ElectraForkEpoch)
153+
// Omitted forks are far-future, not the inherited mainnet epoch (Fulu=411392).
154+
require.Equal(t, uint64(math.MaxUint64), beaconCfg.FuluForkEpoch)
155+
require.Equal(t, uint64(math.MaxUint64), beaconCfg.GloasForkEpoch)
156+
}
157+
131158
func TestMaxBlobsPerBlockUpperBound(t *testing.T) {
132159
// The max is taken across the base fields and every BlobSchedule entry, not just the
133160
// last (highest-epoch) one — here the peak (48) sits in the middle of the schedule.

0 commit comments

Comments
 (0)