params: EIP-7892 - Blob Parameter Only Hardforks#32193
Merged
fjl merged 2 commits intoethereum:masterfrom Jul 14, 2025
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull Request Overview
Adds support for five new "BPO" hardfork timestamps (BPO1–BPO5) and integrates them into chain configuration and blob gas scheduling.
- Introduce
BPO1Time–BPO5TimeinChainConfig, update display banner, fork-order validation, and compatibility checks. - Extend
BlobScheduleConfigwith BPO entries and refactor blob fee and blob scheduling functions to use a newlatestBlobConfighelper. - Replace legacy switch on
LatestForkineip4844.gowith unified logic that accounts for BPO forks.
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| params/config.go | Add BPO1–BPO5 time fields, IsBPO methods, integrate into Description, fork ordering, and compatibility checks |
| consensus/misc/eip4844/eip4844.go | Refactor blob fee and capacity functions to use latestBlobConfig with BPO support; remove direct fork switch |
Comments suppressed due to low confidence (4)
params/config.go:782
- [nitpick] The
namefield uses "bpo1" which is inconsistent with other entries like "pragueTime"; consider using "bpo1Time" to match the JSON key and improve clarity.
{name: "bpo1", timestamp: c.BPO1Time, optional: true},
params/config.go:414
- New fork fields like
BPO1TimethroughBPO5Timeintroduce behavior that should be covered by unit tests (e.g.,IsBPOmethods and fork ordering) to prevent regressions.
BPO1Time *uint64 `json:"bpo1Time,omitempty"` // BPO1 switch time (nil = no fork, 0 = already on bpo1)
params/config.go:684
- Using
c.IsLondonfor BPO forks may prematurely activate forks before the intended predecessor (e.g., Cancun) is reached; consider usingc.IsCancunor the appropriate previous fork condition.
return c.IsLondon(num) && isTimestampForked(c.BPO1Time, time)
consensus/misc/eip4844/eip4844.go:123
- Using
cfg.LondonBlockas the block number when determining blob config may ignore the actual block height for later forks; consider passing the real block number instead of a fixed London threshold.
london = cfg.LondonBlock
Comment on lines
+682
to
+694
| // IsBPO1 returns whether time is either equal to the BPO1 fork time or greater. | ||
| func (c *ChainConfig) IsBPO1(num *big.Int, time uint64) bool { | ||
| return c.IsLondon(num) && isTimestampForked(c.BPO1Time, time) | ||
| } | ||
|
|
||
| // IsBPO2 returns whether time is either equal to the BPO2 fork time or greater. | ||
| func (c *ChainConfig) IsBPO2(num *big.Int, time uint64) bool { | ||
| return c.IsLondon(num) && isTimestampForked(c.BPO2Time, time) | ||
| } | ||
|
|
||
| // IsBPO3 returns whether time is either equal to the BPO3 fork time or greater. | ||
| func (c *ChainConfig) IsBPO3(num *big.Int, time uint64) bool { | ||
| return c.IsLondon(num) && isTimestampForked(c.BPO3Time, time) |
There was a problem hiding this comment.
[nitpick] The IsBPO1 through IsBPO5 methods are nearly identical; consider refactoring into a helper or loop to reduce code duplication and ease future additions.
Suggested change
| // IsBPO1 returns whether time is either equal to the BPO1 fork time or greater. | |
| func (c *ChainConfig) IsBPO1(num *big.Int, time uint64) bool { | |
| return c.IsLondon(num) && isTimestampForked(c.BPO1Time, time) | |
| } | |
| // IsBPO2 returns whether time is either equal to the BPO2 fork time or greater. | |
| func (c *ChainConfig) IsBPO2(num *big.Int, time uint64) bool { | |
| return c.IsLondon(num) && isTimestampForked(c.BPO2Time, time) | |
| } | |
| // IsBPO3 returns whether time is either equal to the BPO3 fork time or greater. | |
| func (c *ChainConfig) IsBPO3(num *big.Int, time uint64) bool { | |
| return c.IsLondon(num) && isTimestampForked(c.BPO3Time, time) | |
| // IsForked returns whether time is either equal to the specified fork time or greater. | |
| func (c *ChainConfig) IsForked(num *big.Int, time uint64, forkTime uint64) bool { | |
| return c.IsLondon(num) && isTimestampForked(forkTime, time) | |
| } | |
| // IsBPO1 returns whether time is either equal to the BPO1 fork time or greater. | |
| func (c *ChainConfig) IsBPO1(num *big.Int, time uint64) bool { | |
| return c.IsForked(num, time, c.BPO1Time) | |
| } | |
| // IsBPO2 returns whether time is either equal to the BPO2 fork time or greater. | |
| func (c *ChainConfig) IsBPO2(num *big.Int, time uint64) bool { | |
| return c.IsForked(num, time, c.BPO2Time) | |
| } | |
| // IsBPO3 returns whether time is either equal to the BPO3 fork time or greater. | |
| func (c *ChainConfig) IsBPO3(num *big.Int, time uint64) bool { | |
| return c.IsForked(num, time, c.BPO3Time) |
howjmay
pushed a commit
to iotaledger/go-ethereum
that referenced
this pull request
Aug 27, 2025
This is a resubmit of ethereum#31820 against the `master` branch. --------- Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de> Co-authored-by: Gary Rong <garyrong0905@gmail.com>
gballet
pushed a commit
to gballet/go-ethereum
that referenced
this pull request
Sep 11, 2025
This is a resubmit of ethereum#31820 against the `master` branch. --------- Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de> Co-authored-by: Gary Rong <garyrong0905@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a resubmit of #31820 against the
masterbranch.