Skip to content

op-node/derive: Gate BPO activation per L2 chain#417

Merged
piersy merged 5 commits intopiersy/celo-rebase-16from
piersy/strip-bpos
Feb 17, 2026
Merged

op-node/derive: Gate BPO activation per L2 chain#417
piersy merged 5 commits intopiersy/celo-rebase-16from
piersy/strip-bpos

Conversation

@piersy
Copy link
Copy Markdown

@piersy piersy commented Feb 17, 2026

Summary

  • Gate BPO/Osaka blob fee formula in L1InfoDeposit per L2 chain, matching celo-kona PR #121
  • Disable BPO for Celo chains (mainnet, sepolia, chaos) so blob base fee uses pre-BPO parameters until Jovian hardfork
  • Preserve default upstream behavior (BPO enabled) for all other chains

Closes https://github.com/celo-org/celo-blockchain-planning/issues/1301
Closes https://github.com/celo-org/celo-blockchain-planning/issues/1343

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).
@palango
Copy link
Copy Markdown

palango commented Feb 17, 2026

Seems to be the same as #414

@piersy
Copy link
Copy Markdown
Author

piersy commented Feb 17, 2026

Seems to be the same as #414

Yep, the early application of the BPO config was causing the snap sync to re-org to before the pivot block, which resulted in the missing trie error, which then caused the sync to fail. So hopefully this is the final fix required to get syncing back on track.

@palango
Copy link
Copy Markdown

palango commented Feb 17, 2026

Yep, the early application of the BPO config was causing the snap sync to re-org to before the pivot block, which resulted in the missing trie error, which then caused the sync to fail.

Ah, that makes sense! Nice find!

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Feb 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 66.42%. Comparing base (7f51b4b) to head (f202bc2).

Additional details and impacted files
@@                  Coverage Diff                   @@
##           piersy/celo-rebase-16     #417   +/-   ##
======================================================
  Coverage                  66.42%   66.42%           
======================================================
  Files                         55       55           
  Lines                       4030     4030           
======================================================
  Hits                        2677     2677           
  Misses                      1209     1209           
  Partials                     144      144           
Flag Coverage Δ
cannon-go-tests-64 66.42% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Updates op-geth to a version that specifies CeloChaosChainID
…ader 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
@piersy piersy requested a review from karlb February 17, 2026 12:01
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)
Copy link
Copy Markdown

@karlb karlb left a comment

Choose a reason for hiding this comment

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

Looks good! I added two commits to make the CI pass. Please have a quick look at them before merging.

@piersy piersy merged commit 89b3935 into piersy/celo-rebase-16 Feb 17, 2026
58 checks passed
@piersy piersy deleted the piersy/strip-bpos branch February 17, 2026 20:57
piersy added a commit that referenced this pull request Feb 18, 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>
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.

4 participants