Skip to content

Refactor bpo hardfork gating#420

Merged
piersy merged 3 commits intocelo-rebase-16from
piersy/refactor-gated-bpo-hardfork-activation
Feb 24, 2026
Merged

Refactor bpo hardfork gating#420
piersy merged 3 commits intocelo-rebase-16from
piersy/refactor-gated-bpo-hardfork-activation

Conversation

@piersy
Copy link
Copy Markdown

@piersy piersy commented Feb 19, 2026

The previous implementation was broken since it was using block numbers to determine if jovian was active, but in fact jovian is activated by timestamp. Thanks to @seolaoh for pointing this out.

The previous implementation was broken since it was using block numbers
to determine if jovian was active, but in fact jovian is activated by
timestamp.
@piersy piersy requested a review from seolaoh February 19, 2026 20:18
// is enabled for the given L2 chain. Returns nil if BPO is not yet supported.
func bpoActivationBlock(l2ChainID uint64) *uint64 {
switch l2ChainID {
func isPreJovialCeloChain(rollupCfg *rollup.Config, l2BlockTimestamp uint64) bool {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: Jovian, also occurs multiple time below.

@piersy piersy merged commit f819454 into celo-rebase-16 Feb 24, 2026
60 checks passed
@piersy piersy deleted the piersy/refactor-gated-bpo-hardfork-activation branch February 24, 2026 14:39
karlb pushed a commit that referenced this pull request Mar 3, 2026
* op-node/derive: Gate BPO activation in L1InfoDeposit per L2 chain

Disable BPO/Osaka blob fee formula for Celo L2 chains (mainnet,
sepolia, chaos) until Jovian hardfork, matching the gating in
celo-kona PR #121. For non-Celo chains, BPO remains enabled by
default (preserving upstream behavior).

* Update op-geth

Updates op-geth to a version that specifies CeloChaosChainID

* Fix TestBlobBaseFeeFromSepolia: use stripBPOActivations and inline header data

The test was failing because it computed BlobBaseFee using the full
SepoliaChainConfig (which includes BPO activation times), but the
expected value was the Prague-era blob fee from the actual Celo Sepolia
L2 block (derived before BPO was known).

Fix by:
- Using stripBPOActivations on the config, which is exactly what
  the production code does for Celo chains
- Inlining the header data (ExcessBlobGas, Time) instead of making
  a live RPC call, so the test runs in CI's -short mode
- Removing unused context and ethclient imports

* ci: Skip OP mainnet upgrade tests not relevant to Celo

The contracts-bedrock-tests-upgrade and coverage-upgrade tests fork OP
mainnet to test OP-specific upgrade paths. These fail on the Celo fork
because ForkLive.s.sol is out of sync with upstream (the
DelayedWETHProxy deployment lookup fails).

Since these tests are not relevant to Celo chains, skip them:
- Comment out contracts-bedrock-tests-upgrade workflow jobs
- Use coverage-lcov instead of coverage-lcov-all (which includes
  upgrade coverage)

---------

Co-authored-by: Karl Bartel <karl.bartel@clabs.co>

Refactor bpo hardfork gating (#420)

The previous implementation was broken since it was using block numbers
to determine if jovian was active, but in fact jovian is activated by
timestamp.
karlb pushed a commit that referenced this pull request Mar 4, 2026
* op-node/derive: Gate BPO activation in L1InfoDeposit per L2 chain

Disable BPO/Osaka blob fee formula for Celo L2 chains (mainnet,
sepolia, chaos) until Jovian hardfork, matching the gating in
celo-kona PR #121. For non-Celo chains, BPO remains enabled by
default (preserving upstream behavior).

* Update op-geth

Updates op-geth to a version that specifies CeloChaosChainID

* Fix TestBlobBaseFeeFromSepolia: use stripBPOActivations and inline header data

The test was failing because it computed BlobBaseFee using the full
SepoliaChainConfig (which includes BPO activation times), but the
expected value was the Prague-era blob fee from the actual Celo Sepolia
L2 block (derived before BPO was known).

Fix by:
- Using stripBPOActivations on the config, which is exactly what
  the production code does for Celo chains
- Inlining the header data (ExcessBlobGas, Time) instead of making
  a live RPC call, so the test runs in CI's -short mode
- Removing unused context and ethclient imports

* ci: Skip OP mainnet upgrade tests not relevant to Celo

The contracts-bedrock-tests-upgrade and coverage-upgrade tests fork OP
mainnet to test OP-specific upgrade paths. These fail on the Celo fork
because ForkLive.s.sol is out of sync with upstream (the
DelayedWETHProxy deployment lookup fails).

Since these tests are not relevant to Celo chains, skip them:
- Comment out contracts-bedrock-tests-upgrade workflow jobs
- Use coverage-lcov instead of coverage-lcov-all (which includes
  upgrade coverage)

---------

Co-authored-by: Karl Bartel <karl.bartel@clabs.co>

Refactor bpo hardfork gating (#420)

The previous implementation was broken since it was using block numbers
to determine if jovian was active, but in fact jovian is activated by
timestamp.
karlb pushed a commit that referenced this pull request Mar 6, 2026
* op-node/derive: Gate BPO activation in L1InfoDeposit per L2 chain

Disable BPO/Osaka blob fee formula for Celo L2 chains (mainnet,
sepolia, chaos) until Jovian hardfork, matching the gating in
celo-kona PR #121. For non-Celo chains, BPO remains enabled by
default (preserving upstream behavior).

* Update op-geth

Updates op-geth to a version that specifies CeloChaosChainID

* Fix TestBlobBaseFeeFromSepolia: use stripBPOActivations and inline header data

The test was failing because it computed BlobBaseFee using the full
SepoliaChainConfig (which includes BPO activation times), but the
expected value was the Prague-era blob fee from the actual Celo Sepolia
L2 block (derived before BPO was known).

Fix by:
- Using stripBPOActivations on the config, which is exactly what
  the production code does for Celo chains
- Inlining the header data (ExcessBlobGas, Time) instead of making
  a live RPC call, so the test runs in CI's -short mode
- Removing unused context and ethclient imports

* ci: Skip OP mainnet upgrade tests not relevant to Celo

The contracts-bedrock-tests-upgrade and coverage-upgrade tests fork OP
mainnet to test OP-specific upgrade paths. These fail on the Celo fork
because ForkLive.s.sol is out of sync with upstream (the
DelayedWETHProxy deployment lookup fails).

Since these tests are not relevant to Celo chains, skip them:
- Comment out contracts-bedrock-tests-upgrade workflow jobs
- Use coverage-lcov instead of coverage-lcov-all (which includes
  upgrade coverage)

---------

Co-authored-by: Karl Bartel <karl.bartel@clabs.co>

Refactor bpo hardfork gating (#420)

The previous implementation was broken since it was using block numbers
to determine if jovian was active, but in fact jovian is activated by
timestamp.
karlb pushed a commit that referenced this pull request Mar 9, 2026
* op-node/derive: Gate BPO activation in L1InfoDeposit per L2 chain

Disable BPO/Osaka blob fee formula for Celo L2 chains (mainnet,
sepolia, chaos) until Jovian hardfork, matching the gating in
celo-kona PR #121. For non-Celo chains, BPO remains enabled by
default (preserving upstream behavior).

* Update op-geth

Updates op-geth to a version that specifies CeloChaosChainID

* Fix TestBlobBaseFeeFromSepolia: use stripBPOActivations and inline header data

The test was failing because it computed BlobBaseFee using the full
SepoliaChainConfig (which includes BPO activation times), but the
expected value was the Prague-era blob fee from the actual Celo Sepolia
L2 block (derived before BPO was known).

Fix by:
- Using stripBPOActivations on the config, which is exactly what
  the production code does for Celo chains
- Inlining the header data (ExcessBlobGas, Time) instead of making
  a live RPC call, so the test runs in CI's -short mode
- Removing unused context and ethclient imports

* ci: Skip OP mainnet upgrade tests not relevant to Celo

The contracts-bedrock-tests-upgrade and coverage-upgrade tests fork OP
mainnet to test OP-specific upgrade paths. These fail on the Celo fork
because ForkLive.s.sol is out of sync with upstream (the
DelayedWETHProxy deployment lookup fails).

Since these tests are not relevant to Celo chains, skip them:
- Comment out contracts-bedrock-tests-upgrade workflow jobs
- Use coverage-lcov instead of coverage-lcov-all (which includes
  upgrade coverage)

---------

Co-authored-by: Karl Bartel <karl.bartel@clabs.co>

Refactor bpo hardfork gating (#420)

The previous implementation was broken since it was using block numbers
to determine if jovian was active, but in fact jovian is activated by
timestamp.
karlb pushed a commit that referenced this pull request Mar 10, 2026
* op-node/derive: Gate BPO activation in L1InfoDeposit per L2 chain

Disable BPO/Osaka blob fee formula for Celo L2 chains (mainnet,
sepolia, chaos) until Jovian hardfork, matching the gating in
celo-kona PR #121. For non-Celo chains, BPO remains enabled by
default (preserving upstream behavior).

* Update op-geth

Updates op-geth to a version that specifies CeloChaosChainID

* Fix TestBlobBaseFeeFromSepolia: use stripBPOActivations and inline header data

The test was failing because it computed BlobBaseFee using the full
SepoliaChainConfig (which includes BPO activation times), but the
expected value was the Prague-era blob fee from the actual Celo Sepolia
L2 block (derived before BPO was known).

Fix by:
- Using stripBPOActivations on the config, which is exactly what
  the production code does for Celo chains
- Inlining the header data (ExcessBlobGas, Time) instead of making
  a live RPC call, so the test runs in CI's -short mode
- Removing unused context and ethclient imports

* ci: Skip OP mainnet upgrade tests not relevant to Celo

The contracts-bedrock-tests-upgrade and coverage-upgrade tests fork OP
mainnet to test OP-specific upgrade paths. These fail on the Celo fork
because ForkLive.s.sol is out of sync with upstream (the
DelayedWETHProxy deployment lookup fails).

Since these tests are not relevant to Celo chains, skip them:
- Comment out contracts-bedrock-tests-upgrade workflow jobs
- Use coverage-lcov instead of coverage-lcov-all (which includes
  upgrade coverage)

---------

Co-authored-by: Karl Bartel <karl.bartel@clabs.co>

Refactor bpo hardfork gating (#420)

The previous implementation was broken since it was using block numbers
to determine if jovian was active, but in fact jovian is activated by
timestamp.
karlb pushed a commit that referenced this pull request Mar 10, 2026
* op-node/derive: Gate BPO activation in L1InfoDeposit per L2 chain

Disable BPO/Osaka blob fee formula for Celo L2 chains (mainnet,
sepolia, chaos) until Jovian hardfork, matching the gating in
celo-kona PR #121. For non-Celo chains, BPO remains enabled by
default (preserving upstream behavior).

* Update op-geth

Updates op-geth to a version that specifies CeloChaosChainID

* Fix TestBlobBaseFeeFromSepolia: use stripBPOActivations and inline header data

The test was failing because it computed BlobBaseFee using the full
SepoliaChainConfig (which includes BPO activation times), but the
expected value was the Prague-era blob fee from the actual Celo Sepolia
L2 block (derived before BPO was known).

Fix by:
- Using stripBPOActivations on the config, which is exactly what
  the production code does for Celo chains
- Inlining the header data (ExcessBlobGas, Time) instead of making
  a live RPC call, so the test runs in CI's -short mode
- Removing unused context and ethclient imports

* ci: Skip OP mainnet upgrade tests not relevant to Celo

The contracts-bedrock-tests-upgrade and coverage-upgrade tests fork OP
mainnet to test OP-specific upgrade paths. These fail on the Celo fork
because ForkLive.s.sol is out of sync with upstream (the
DelayedWETHProxy deployment lookup fails).

Since these tests are not relevant to Celo chains, skip them:
- Comment out contracts-bedrock-tests-upgrade workflow jobs
- Use coverage-lcov instead of coverage-lcov-all (which includes
  upgrade coverage)

---------

Co-authored-by: Karl Bartel <karl.bartel@clabs.co>

Refactor bpo hardfork gating (#420)

The previous implementation was broken since it was using block numbers
to determine if jovian was active, but in fact jovian is activated by
timestamp.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants