Skip to content

core, core/vm, params: adopt the EIP-2780 and EIP-8037 spec changes (#35318) - #2455

Merged
pratikspatil024 merged 3 commits into
upstream-merge-v1.17.4from
ppatil-upstream-eip2780-8037
Oct 1, 2026
Merged

pratikspatil024 merged 3 commits into
upstream-merge-v1.17.4from
ppatil-upstream-eip2780-8037

Conversation

@pratikspatil024

@pratikspatil024 pratikspatil024 commented Sep 28, 2026 •

Copy link
Copy Markdown
Member

Important

Status, 2026-10-01: #2345, #2346 and #2354 have merged, so this PR now targets upstream-merge-v1.17.4 directly. It is no longer part of a GitHub stack: merging #2354 made GitHub rebase this branch onto the base automatically (754d732aa → ada1fc786), so the stack was removed. The content is unchanged except that the switch-dispatch generator went back to #2346's chargeRegular/chargeState form, which charges gas identically. Merge with a merge commit. Don't use "Update branch" with rebase, or any rebase. The notes below describe the earlier stacked layout.

Stacked on #2354 (base ppatil-upstream-v1.17.5), not develop. Part of the go-ethereum upstream sync (POS-2549), which merges into upstream-merge-v1.17.4 and reaches develop once, at the end.

Merge with a merge commit. Never squash. Squashing rewrites this branch's SHAs and breaks every PR stacked above it.

Review bottom-up: #2308, #2319, #2325, #2328, #2337, #2340, #2341, #2342 and #2343 have merged into the base. The open stack is #2345 → #2346 → #2354 → #2455 → #2461. Start at #2345.

Review fixes and cascade, 2026-09-29: three findings from Marcello's review were fixed where the code lives and cascaded up. #2346 f2fde2692: the switch-dispatch interpreter (runSwitch, on by default on mainnet BPs) now charges EIP-8037 state gas like Run, with a new Amsterdam differential test. #2354 0166dcc9d: the pebble v1 path, which every existing bor database opens through, keeps bor's tuning and metrics (new databases use pebble v2; upgrade command tracked in POS-3746). #2354 aac7dd01e: V2's FinaliseFast settles EIP-8246 self-destructs like serial Finalise. Cascade: #2354 256e10c39 → #2455 d96fcc81b → #2461 440ed1ac4; at #2455 and #2461 the generator mirrors that level's renamed Run helpers. All dormant until Amsterdam except the pebble fix, which restores today's behaviour for existing nodes. Every hop builds and passes the dispatch/V2/parity tests, and the witness regeneration tests pass on the top of the chain.

Review follow-up and cascade, 2026-09-30: per Jerry's review on #2346 (49aa12b54), both BlockSTM processors run their pre-execution system calls through the serial PreExecution instead of inline copies (no behaviour change there). Merged up into #2354 (ab0921f62), that closes a dormant gap: #35285 had moved the EIP-7997 factory insert (first Amsterdam block) into PreExecution, which V1/V2 didn't call, so they would have disagreed with serial on the root at activation; TestV2PreExecEIP7997Activation covers it. Cascade: #2354 ab0921f62 → #2455 c27e0f29a → #2461 caeadc89b, where upstream's #35458 drops the insert altogether and the test goes with it. Every hop builds and passes the parity/V2 tests, and the witness regeneration tests pass on the top of the chain.

Cascade, 2026-09-28: #2342 merged into the base (cd9097f32) and was cascaded up the stack: #2343 663809636 → #2345 4aa9ff8f0 → #2346 8971e231a → #2354 778958987 → #2455 f1c5c8571. It brings only #2342's final changes (develop's otel 1.45 go.mod/go.sum bump, the nightly-govulncheck workflow and one eth/70 receipt test). Every hop test-compiles, and the witness regeneration tests pass on the top of the chain.

2026-09-29: #2343 merged into the base (cc07116a3, a two-parent merge whose tree matches 663809636), so nothing new cascades from the base. Review fixes since: #2354 64709a22f (Finalise errTerminated log filter, override-flag help text), merged up into #2455 as c4922a57b; #2455 855630f34 (EIP-8037 test configs run without Bor forks, block-based Amsterdam entry in tests.Forks). The v1.17.6 sync, #2461, now sits on top of #2455, so the release covers v1.17.4 + v1.17.5 + v1.17.6.

Summary

Adopts upstream #35318 (EIP-2780 and EIP-8037 spec changes, upstream 1ef0ffb98). It was deferred out of the v1.17.5 sync with the recorded decision "take as its own stacked PR". It has to land before the v1.17.6 sync, because v1.17.6's gas changes (#35454, #35457, #35486, #35497) are written against it.

This changes nothing on Bor's networks. Everything #35318 touches is gated on Amsterdam, and AmsterdamBlock is nil on every Bor preset.

This is a hand-written port, not a merge. #35318's history is already in the tree from v1.17.5, and its content was reverted there, so the diff was replayed 3-way onto Bor's files.

What upstream changes

  • IntrinsicGas returns uint64 and drops costPerStateByte. State gas is now charged at runtime, not as part of intrinsic gas.
  • The block gas-pool reservation and the EIP-3860 init-code size check move from buyGas into preCheck.
  • A new initRuntimeGasBudget sets up the running budget after the intrinsic charge.
  • The top-level frames move into executeCreate and executeCall.
  • EVM.Create and Create2 no longer return a creation flag. The account-creation state charge moves into chargeAccountCreation, called from opCreate and opCreate2.

Kept from Bor (the three items the v1.17.5 ledger required)

  1. The Madhugiri arm of the EIP-7825 per-transaction gas cap. Upstream's replacement is !rules.IsAmsterdam && rules.IsOsaka, which would drop the cap Bor has had live since Madhugiri. The port keeps !rules.IsAmsterdam && (rules.IsOsaka || isMadhugiri).
  2. Block-based, one-argument fork checks.
  3. Bor's fee handling in execute. That's the burn to the burnt contract, the tip, and the fee transfer log, including its pre-gas-purchase balance snapshots. effectiveTip stays on signed big.Int, and upstream's NoBaseFee skip stays commented out, matching the existing TODO(raneet10).

Also:

  • #35396 (tracer panic fix): its state_transition.go half is applied here. It fell with the deferral; its core/tracing/hooks.go half was already in.
  • eth/tracers/parity.go, which is Bor-only, follows the new IntrinsicGas signature.
  • Constants: EpochDuration, ExpByteGas, SloadGas and TierStepGas are removed as upstream did. None had a user in Bor.

Where to spend review time

File What to check
core/state_transition.go The port itself. preCheck: the EIP-7825 cap with the Madhugiri arm. execute: Bor's fee block and input1/input2, which must be captured before preCheck buys gas.
core/vm/evm.go, core/vm/instructions.go createFramePreCheck / chargeAccountCreation. Before Amsterdam, create() runs the same checks in the same order.
core/vm/gas_table.go, core/vm/operations_acl.go Every hunk is in an Amsterdam-only *8037 function. The PIP-88 twins are untouched.
core/txpool/validation.go The mechanical IntrinsicGas change; Bor's txpool gates are unchanged.

Provenance

Each ported file was diffed against upstream v1.17.5, not just against the #35318 commit. Every remaining difference is an existing Bor divergence:

  • Bor's MaxTxGas (2^25) and base-fee parameters;
  • the declined stack arena;
  • Bor's checkMaxCodeSize (the Ahmedabad cap);
  • Bor's fee handling and fork-check shape.

No other upstream change was lost with the deferral.

Restored tests

The upstream EIP tests dropped in v1.17.5 are restored from upstream v1.17.5 and converted to Bor's block-based Amsterdam gate (AmsterdamTime becomes AmsterdamBlock).

  • Restored, all passing:
    • core/eip8037_test.go
    • core/eip2780_test.go
    • core/eip7997_test.go
    • core/eip8038_test.go
    • core/vm/eip8037_test.go
  • core/eip_testenv_test.go holds the part of upstream's eip7928_test.go test environment that these tests use. Remove it when eip7928_test.go is restored (POS-3737).
  • Adaptations for Bor's MaxTxGas (2^25 against upstream's 2^24): TestEIP2780RuntimeOOGRevertsDelegations/with-reservoir uses 200 authorizations instead of 100, and TestValidationFloorCostCap uses 600,000 bytes of calldata instead of 300,000.
  • The EIP-8037 test configs clear Bor (855630f). With Bor's forks, NewEVM selects Chicago's instruction set ahead of Amsterdam's, so the opcode tests would otherwise skip or pass without exercising EIP-8037. All of them now run and pass.
  • tests.Forks has a block-based Amsterdam entry, so transaction fixtures with an Amsterdam result are validated.

Held back, and why this matters for enabling Amsterdam (POS-3738):

  • The fork-ordering blocker itself: on a real Bor config, Chicago's instruction set shadows Amsterdam's, so EIP-8037/8038 opcode pricing wouldn't activate. The tests above run with Bor = nil for that reason.
  • core/vm/eip8038_test.go is held back for the same reason.
  • core/eip7708_test.go is held back because Bor's legacy transfer log is emitted alongside EIP-7708's.
  • core/eip8246_test.go is held back because it fails at chain creation on Bor.

POS-3738 tracks all of these as blockers for scheduling Amsterdam. docs/upstream-merges/v1.17.5/needs-wiring.md is updated row by row.

Executed tests

  • go build ./... is clean.
  • go test -run XXXNOMATCHXXX ./... compiles every test package.
  • go vet on core, core/vm and eth/tracers shows only the known pre-existing lock-copy finding. gofmt is clean.
  • go test -short passes on core, core/vm/..., core/txpool/..., core/tracing/..., eth/tracers/..., internal/ethapi/..., tests, miner and params.
  • Mainnet replay, TestV2BlockSTMAllBlocks (BOR_BLOCKSTM_TEST=1): identical results to the unmodified core/vm, params, eth: merge geth v1.17.5 (v1.17.5 sync) #2354 tip. 238/241 blocks are consistent between serial and BlockSTM V2 execution on both trees. The same three blocks fail on both with "code is not found": fixture data the test fetches from an RPC endpoint (ALCHEMY_URL) when available. None of the failures is a state-root mismatch.
  • TestV2WitnessRegeneration{AllBlocks,PipelinedSRCAllBlocks,PipelinedSRCChained} pass in non-short mode. Chained covers 222/222 consecutive mainnet pairs.

Rollout notes

  • Not consensus-affecting as merged. Every behaviour change is behind IsAmsterdam, which is nil on every Bor preset. Before Amsterdam, the EIP-7825 cap, the intrinsic gas values and the fee handling are unchanged. The replay above is the empirical check.
  • RPC-visible: error ordering in preCheck. The gas-pool check and the init-code size check now run before the balance check, as upstream has them. A transaction that fails several checks may report a different error first. Gas-tracer events keep the same sequence, because #35396 re-emits the initial-balance event.
  • No coordinated upgrade is needed, and there's no operator-facing change.

🤖 Generated with Claude Code

@pratikspatil024

Copy link
Copy Markdown
Member Author

@claude review

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Amsterdam runtime creation bypasses required checks, and parts of the restored test harness do not exercise the intended fork behavior.

Review effort: Balanced
Findings: 2 Medium severity

Open (2)
What changed in this PR

Adopts updated EIP-2780/EIP-8037 gas accounting behind the dormant Amsterdam fork.

Changes:

  • Moves state-dependent gas charges from intrinsic gas to runtime execution.
  • Refactors CREATE/CALL gas accounting and tracing.
  • Restores Amsterdam EIP tests and fixture support.
File Description
cmd/​evm/​internal/​t8ntool/​transaction.go Adapts intrinsic-gas API.
core/​bench_test.go Updates benchmark gas calculation.
core/​eip2780_test.go Adds EIP-2780 coverage.
core/​eip7997_test.go Adds factory-transition tests.
core/​eip8037_test.go Adds state-transition gas tests.
core/​eip8038_test.go Adds authorization gas tests.
core/​eip_testenv_test.go Supplies shared EIP test fixtures.
core/​error.go Adds runtime out-of-gas error.
core/​state_transition.go Implements runtime gas charging.
core/​state_transition_test.go Updates intrinsic-gas expectations.
core/​tracing/​hooks.go Adds gas-change reasons.
core/​tracing/​gen_gas_change_reason_stringer.go Regenerates reason strings.
core/​txpool/​validation.go Adapts transaction validation.
core/​vm/​common.go Minor formatting cleanup.
core/​vm/​eip8037_test.go Adds VM gas-accounting tests.
core/​vm/​evm.go Refactors contract creation.
core/​vm/​gas_table.go Moves creation charges to runtime.
core/​vm/​gascosts.go Updates gas-budget operations.
core/​vm/​instructions.go Charges conditional creation costs.
core/​vm/​interface.go Minor interface formatting.
core/​vm/​interpreter.go Uses exported regular-gas charging.
core/​vm/​operations_acl.go Applies Amsterdam warm-access pricing.
core/​vm/​runtime/​runtime.go Adapts the CREATE return signature.
docs/​upstream-merges/​v1.17.5/​needs-wiring.md Records adoption and remaining blockers.
eth/​tracers/​parity.go Adapts parity intrinsic-gas tracing.
params/​protocol_params.go Updates Amsterdam gas constants.
tests/​gen_sttransaction.go Supports arbitrary-precision fixture nonces.
tests/​state_test_util.go Validates fixture nonces against EIP-2681.
tests/​transaction_test_util.go Adds Osaka and Amsterdam cases.
Files not reviewed (2)
  • core/tracing/gen_gas_change_reason_stringer.go: Generated file
  • tests/gen_sttransaction.go: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread core/vm/eip8037_test.go
Comment thread tests/transaction_test_util.go

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Nothing blocking. The comments below are optional suggestions. There is no need to push a fix for them before merging.

Comment thread core/vm/evm.go
Comment thread core/vm/evm.go
@codecov

codecov Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.11204% with 71 lines in your changes missing coverage. Please review.
✅ Project coverage is 56.42%. Comparing base (679b805) to head (ada1fc7).
⚠️ Report is 4 commits behind head on upstream-merge-v1.17.4.

Files with missing lines Patch % Lines
core/state_transition.go 88.36% 17 Missing and 10 partials ⚠️
core/vm/evm.go 69.04% 11 Missing and 2 partials ⚠️
tests/state_test_util.go 0.00% 10 Missing ⚠️
core/txpool/validation.go 20.00% 3 Missing and 1 partial ⚠️
core/vm/instructions.go 83.33% 2 Missing and 2 partials ⚠️
tests/gen_sttransaction.go 0.00% 4 Missing ⚠️
tests/transaction_test_util.go 0.00% 4 Missing ⚠️
core/vm/gascosts.go 25.00% 3 Missing ⚠️
core/tracing/gen_gas_change_reason_stringer.go 0.00% 1 Missing ⚠️
core/vm/operations_acl.go 0.00% 1 Missing ⚠️

❌ Your patch check has failed because the patch coverage (80.11%) is below the target coverage (90.00%). You can increase the patch coverage or adjust the target coverage.

Additional details and impacted files

Impacted file tree graph

@@                    Coverage Diff                     @@
##           upstream-merge-v1.17.4    #2455      +/-   ##
==========================================================
+ Coverage                   56.25%   56.42%   +0.16%     
==========================================================
  Files                         944      944              
  Lines                      174742   174836      +94     
==========================================================
+ Hits                        98295    98645     +350     
+ Misses                      70396    70158     -238     
+ Partials                     6051     6033      -18     
Files with missing lines Coverage Δ
core/tracing/hooks.go 0.00% <ø> (ø)
core/vm/common.go 59.67% <ø> (ø)
core/vm/gas_table.go 44.15% <100.00%> (+9.47%) ⬆️
core/vm/interpreter.go 65.89% <100.00%> (ø)
core/vm/runtime/runtime.go 83.89% <100.00%> (ø)
eth/tracers/parity.go 81.40% <100.00%> (ø)
params/protocol_params.go 84.21% <ø> (ø)
tests/init.go 0.00% <ø> (ø)
core/tracing/gen_gas_change_reason_stringer.go 0.00% <0.00%> (ø)
core/vm/operations_acl.go 46.44% <0.00%> (+2.13%) ⬆️
... and 8 more

... and 25 files with indirect coverage changes

Files with missing lines Coverage Δ
core/tracing/hooks.go 0.00% <ø> (ø)
core/vm/common.go 59.67% <ø> (ø)
core/vm/gas_table.go 44.15% <100.00%> (+9.47%) ⬆️
core/vm/interpreter.go 65.89% <100.00%> (ø)
core/vm/runtime/runtime.go 83.89% <100.00%> (ø)
eth/tracers/parity.go 81.40% <100.00%> (ø)
params/protocol_params.go 84.21% <ø> (ø)
tests/init.go 0.00% <ø> (ø)
core/tracing/gen_gas_change_reason_stringer.go 0.00% <0.00%> (ø)
core/vm/operations_acl.go 46.44% <0.00%> (+2.13%) ⬆️
... and 8 more

... and 25 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.

@pratikspatil024
pratikspatil024 marked this pull request as ready for review September 29, 2026 06:19

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

@lucca30 lucca30 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hi Pratik, approving this one. I compared the port with upstream v1.17.5: state_transition.go only has our known differences (Madhugiri cap arm, fee burn/tip/log, block based fork checks), and gas_table.go and gascosts.go are identical. Before Amsterdam, IntrinsicGas, the create() prechecks and the gas budget are the same as before. The new check order in preCheck changes only which error comes first, and miner/BlockSTM don't depend on the error type, so no impact there.

One small ask: the 2 claude[bot] points (no tracer frame when the CREATE precheck fails, and runtime.Create skipping the precheck under Amsterdam) are upstream verbatim, ok. But can you add them to POS-3738 / needs-wiring so we check them again when we schedule Amsterdam?

Nit: Forks["Amsterdam"] in tests/init.go has no BPO1/BPO2 blob config like upstream. Fine if it is on purpose (same as our Osaka), right?

pratikspatil024 added a commit that referenced this pull request Sep 30, 2026
Carries #2346's review follow-up (49aa12b, BlockSTM pre-execution through
PreExecution) and its #2354 adaptation (ab0921f), via #2455 (c27e0f2).

One conflict, in core/parallel_state_processor_fork_parity_test.go: kept this
branch's IsEIP158 entry (it follows the params.Rules both paths pass, #35498)
and took the new IsVerkle classification (the gate lives only in
PreExecution).

Adapted outside the conflict: this branch's #35458 removed the EIP-7997
factory insert from PreExecution, so the BlockSTM processors drop it along
with serial and TestV2PreExecEIP7997Activation, added on #2354, has nothing
left to check. It is removed here, and the v1.17.6 ledger's #35458 row says
so.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
pratikspatil024 added a commit that referenced this pull request Sep 30, 2026
Carries the v1.17.5 needs-wiring corrections from review (679b805 via
#2354, and #2455's two Amsterdam create-precheck rows). Docs only; clean merge.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@pratikspatil024

Copy link
Copy Markdown
Member Author

@lucca30 thanks for the review.

  • The two claude[bot] points: both are now needs-wiring rows pointing at POS-3738 (754d732), with the review links, and I added them to POS-3738 so we recheck them when Amsterdam is scheduled. On the runtime.Create one, I confirmed block processing is unaffected: the state transition checks CanTransfer and the nonce ceiling before its evm.Create, and vm/runtime.Create is the only other direct caller.
  • Forks["Amsterdam"] without BPO1/BPO2: yes, on purpose, same as our Osaka entry. Bor's ChainConfig has no BPO forks at all (no BPO1Block or IsBPO*), so there's nothing to hang upstream's BPO blob entries on.

Base automatically changed from ppatil-upstream-v1.17.5 to upstream-merge-v1.17.4 October 1, 2026 08:07
pratikspatil024 and others added 3 commits October 1, 2026 13:37
…#35318)

Ports upstream 1ef0ffb (#35318), deferred out of the v1.17.5 sync,
onto bor's diverged state transition. IntrinsicGas returns uint64 and
drops costPerStateByte; the gas-pool reservation and the init-code size
check move into preCheck; the running budget is set up after the
intrinsic charge by initRuntimeGasBudget; the top-level create and call
frames move into executeCreate and executeCall.

Kept from bor:
- the Madhugiri arm of the EIP-7825 per-tx gas cap, which upstream's
  replacement drops;
- block-based one-argument fork checks;
- the fee burn to the burnt contract, the tip, and the fee transfer log
  in execute, with effectiveTip on signed big.Int and the NoBaseFee skip
  still commented out.

Also applies the state_transition.go half of #35396 (tracer frames for
transactions that halt before the top frame); its core/tracing half was
already in. eth/tracers/parity.go follows the IntrinsicGas signature.

Everything #35318 changes is Amsterdam-gated, and Amsterdam is nil on
every bor preset.

Restores the upstream EIP-8037, EIP-2780, EIP-7997 and EIP-8038
state-transition tests dropped in v1.17.5, on bor's block-based
Amsterdam gate. Seven core/vm EIP-8037 tests are skipped and three test
files are held back: on a config with bor's forks, Chicago's instruction
set takes precedence over Amsterdam's (POS-3738).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rdam fork

The EIP-8037 test configs cloned MergedTestChainConfig with its Bor config,
so Chicago's instruction set was selected ahead of Amsterdam's: seven opcode
tests were skipped and the rest passed without exercising the state-gas
charges. Clear Bor in both configs so Amsterdam's pricing is what runs, and
drop the skips. The fork-ordering problem on real Bor configs stays tracked
under POS-3738.

TestValidationFloorCostCap now uses 600,000 bytes of calldata, because Bor's
MaxTxGas is 2^25 against upstream's 2^24.

Add a block-based Amsterdam entry to tests.Forks so transaction fixtures with
an Amsterdam result are validated instead of rejected as unsupported.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Both were raised in AI review and are upstream verbatim, so the port keeps
them: a CREATE whose precheck fails under Amsterdam gets no tracer frame,
and direct EVM.Create callers (vm/runtime.Create, i.e. cmd/evm) skip the
precheck. Block processing is unaffected, since the state transition checks
CanTransfer and the nonce ceiling itself. Recorded as needs-wiring rows
pointing at POS-3738 so both are rechecked when Amsterdam is scheduled, as
asked in PR review.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@pratikspatil024
pratikspatil024 force-pushed the ppatil-upstream-eip2780-8037 branch from 754d732 to ada1fc7 Compare October 1, 2026 08:07
@pratikspatil024
pratikspatil024 removed this pull request from stack #2457 October 1, 2026 08:28
@pratikspatil024
pratikspatil024 merged commit 174b61b into upstream-merge-v1.17.4 Oct 1, 2026
19 of 22 checks passed
@pratikspatil024
pratikspatil024 deleted the ppatil-upstream-eip2780-8037 branch October 1, 2026 09:15
pratikspatil024 added a commit that referenced this pull request Oct 1, 2026
Brings in #2455's merge into the base (174b61b) so this PR's diff is only
v1.17.6 again.

GitHub rebased #2455 onto the base when #2354 merged, so its commits
(b4a3d86, 89d2fd3, ada1fc7) are new copies of the ones this branch
already contains via 754d732. A normal three-way merge re-applies the
same #2455 hunks and conflicts wherever v1.17.6 changed them further.

This merge keeps this branch's tree unchanged (-s ours), and that is the
correct result. The merged base's tree equals ada1fc7, which differs from
754d732 (an ancestor of this branch) only in core/vm/gen_dispatch/main.go
and core/vm/interpreter_dispatch.go, where the rebase restored #2346's
RegularGas form. This branch needs its own form there (ExecutionGas,
mirroring this branch's Run), which it already has. Nothing else in the
base is missing here.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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