From d826ffad516f725415e1d9c5837e54bea891c6d5 Mon Sep 17 00:00:00 2001 From: Rafael Matias Date: Tue, 23 Jun 2026 15:46:42 +0200 Subject: [PATCH] core: inherit prior fork blob schedule when overriding amsterdam --override.amsterdam onto a pre-amsterdam config left blobSchedule.amsterdam unset, which CheckConfigForkOrder rejects. Inherit the most recent preceding fork's blob params (Amsterdam/EIP-7928 doesn't change blob parameters). --- core/genesis.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/genesis.go b/core/genesis.go index 910a3fb0f5..24318ab72c 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -294,6 +294,14 @@ func (o *ChainOverrides) apply(cfg *params.ChainConfig) error { } if o.OverrideAmsterdam != nil { cfg.AmsterdamTime = o.OverrideAmsterdam + // Amsterdam (EIP-7928 BAL) doesn't change blob parameters. When the + // bundled config has no amsterdam blobSchedule entry yet, inherit the + // most recent preceding fork's so CheckConfigForkOrder validates. + if cfg.BlobScheduleConfig != nil && cfg.BlobScheduleConfig.Amsterdam == nil { + if prev := latestBlobConfig(cfg.BlobScheduleConfig); prev != nil { + cfg.BlobScheduleConfig.Amsterdam = prev + } + } } if o.OverrideBPO1 != nil { cfg.BPO1Time = o.OverrideBPO1 @@ -307,6 +315,22 @@ func (o *ChainOverrides) apply(cfg *params.ChainConfig) error { return cfg.CheckConfigForkOrder() } +// latestBlobConfig returns the blob configuration of the most recent fork +// defined in bs (scanning newest-first, excluding Amsterdam/UBT), or nil if none +// is set. Used to give a newly-overridden fork sensible blob parameters. +func latestBlobConfig(bs *params.BlobScheduleConfig) *params.BlobConfig { + for _, c := range []*params.BlobConfig{ + bs.BPO5, bs.BPO4, bs.BPO3, bs.BPO2, bs.BPO1, + bs.Osaka, bs.Prague, bs.Cancun, + } { + if c != nil { + return c + } + } + + return nil +} + // SetupGenesisBlock writes or updates the genesis block in db. // The block that will be used is: //