Skip to content

op-node: execute NUT bundles at Karst fork activation#19220

Merged
maurelian merged 12 commits intodevelopfrom
jm/l2cm-opnode-fork-nuts
Mar 2, 2026
Merged

op-node: execute NUT bundles at Karst fork activation#19220
maurelian merged 12 commits intodevelopfrom
jm/l2cm-opnode-fork-nuts

Conversation

@maurelian
Copy link
Contributor

@maurelian maurelian commented Feb 17, 2026

Introduces Network Upgrade Transactions (NUTs) for the Karst fork, encapsulated in a JSON bundle.

The changes are made in two commits:

  1. feat(op-node): execute NUT bundles at Karst fork activation
  • Adds the Karst fork (between Jovian and Interop) across rollup config, chain spec, batch validation, and sequencer
  • Wires NUT bundle execution into PreparePayloadAttributes — bundles are embedded via go:embed and parsed at fork activation
  • Allocates upgrade gas to the block gas limit so upgrade transactions aren't constrained by the system tx gas limit
  • Adds UpgradeTransactionsFromNUTBundle as a generic helper for any fork to use
  • Karst bundle is currently an empty placeholder
  1. feat: add NUT bundle fork lock with CI check
  • Adds op-core/nuts/fork_lock.toml to lock finalized bundles by sha256 hash
  • Adds ops/scripts/check-nut-locks/main.go CI check (follows check-op-geth-version pattern)
  • Adds CircleCI job + workflow entry and Makefile target

@codecov
Copy link

codecov bot commented Feb 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 76.5%. Comparing base (42f6e3b) to head (eb7b6a6).
⚠️ Report is 4 commits behind head on develop.

Additional details and impacted files
@@             Coverage Diff             @@
##           develop   #19220      +/-   ##
===========================================
+ Coverage     75.2%    76.5%    +1.3%     
===========================================
  Files          193      729     +536     
  Lines        11225    81341   +70116     
===========================================
+ Hits          8443    62242   +53799     
- Misses        2638    18955   +16317     
  Partials       144      144              
Flag Coverage Δ
cannon-go-tests-64 66.4% <ø> (ø)
contracts-bedrock-tests 79.9% <ø> (-0.2%) ⬇️
unit 76.7% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 539 files with indirect coverage changes

🚀 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.

@wiz-inc-a178a98b5d
Copy link

wiz-inc-a178a98b5d bot commented Feb 18, 2026

Wiz Scan Summary

Scanner Findings
Vulnerability Finding Vulnerabilities -
Data Finding Sensitive Data -
Secret Finding Secrets -
IaC Misconfiguration IaC Misconfigurations -
SAST Finding SAST Findings 1 Medium
Software Management Finding Software Management Findings -
Total 1 Medium

View scan details in Wiz

To detect these findings earlier in the dev lifecycle, try using Wiz Code VS Code Extension.

@maurelian maurelian force-pushed the jm/l2cm-opnode-fork-nuts branch 2 times, most recently from e4dc280 to d289a02 Compare February 18, 2026 21:29
@maurelian maurelian marked this pull request as ready for review February 19, 2026 16:27
@maurelian maurelian requested a review from a team as a code owner February 19, 2026 16:27
@maurelian maurelian requested a review from theochap February 19, 2026 16:27
@maurelian maurelian force-pushed the jm/l2cm-opnode-fork-nuts branch from d289a02 to 7e6e507 Compare February 20, 2026 13:29
@maurelian maurelian requested review from a team as code owners February 20, 2026 13:29
@maurelian maurelian requested a review from Ethnical February 20, 2026 13:29
@maurelian maurelian force-pushed the jm/l2cm-opnode-fork-nuts branch 2 times, most recently from f510233 to 8f0f374 Compare February 20, 2026 20:01
@maurelian maurelian requested a review from a team as a code owner February 20, 2026 20:01
@maurelian maurelian changed the base branch from develop to jm/add-karst February 20, 2026 20:04
Base automatically changed from jm/add-karst to develop February 24, 2026 18:39
@maurelian maurelian force-pushed the jm/l2cm-opnode-fork-nuts branch from 11512b1 to d4925fd Compare February 25, 2026 17:59
Copy link
Member

@sebastianst sebastianst left a comment

Choose a reason for hiding this comment

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

LGTM!
The nut test fails because of just not recognizing the [script] tag yet. I suggest we just bump the mise just version, my local just supports it already without --unstable, am on 1.46.0.

@maurelian maurelian force-pushed the jm/l2cm-opnode-fork-nuts branch 2 times, most recently from f315ddf to 2ed628c Compare February 27, 2026 16:21
@maurelian maurelian enabled auto-merge February 27, 2026 16:23
@maurelian
Copy link
Contributor Author

LGTM! The nut test fails because of just not recognizing the [script] tag yet. I suggest we just bump the mise just version, my local just supports it already without --unstable, am on 1.46.0.

@sebastianst I'm just seeing this comment. For now I've addressed this by using go run in CI rather than the just command. 2ed628c

@maurelian maurelian force-pushed the jm/l2cm-opnode-fork-nuts branch 2 times, most recently from 2da1598 to 1247444 Compare March 2, 2026 21:09
maurelian added 12 commits March 2, 2026 16:56
Add the Karst fork and wire NUT bundle execution into the derivation
pipeline, with upgrade gas allocated to the block gas limit.
Prevent accidental modification of finalized NUT bundles by adding a
lock file with sha256 hashes and a CI check that enforces immutability.
Only UpgradeTransactions (to be added) will be the public API for NUTs.
This enables easier refactoring and eventual migration to op-core.
Co-locates the embedded JSON with the code that parses it.
Encapsulates fork-to-bundle mapping in a single public function,
wraps errors with context, and simplifies the call site in attributes.go.
Also updates CI to call just directly.
Per review feedback to use a simpler file name.
Globs known bundle locations to catch bundles added without
a corresponding fork_lock.toml entry.
@maurelian maurelian force-pushed the jm/l2cm-opnode-fork-nuts branch from 3d51555 to eb7b6a6 Compare March 2, 2026 21:56
@maurelian maurelian added this pull request to the merge queue Mar 2, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Mar 2, 2026
@maurelian maurelian added this pull request to the merge queue Mar 2, 2026
Merged via the queue into develop with commit 0777438 Mar 2, 2026
115 checks passed
@maurelian maurelian deleted the jm/l2cm-opnode-fork-nuts branch March 2, 2026 23:55
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