Skip to content

[DO-NOT-MERGE] bal-devnet-4#20606

Open
taratorio wants to merge 2 commits intomainfrom
bal-devnet-4
Open

[DO-NOT-MERGE] bal-devnet-4#20606
taratorio wants to merge 2 commits intomainfrom
bal-devnet-4

Conversation

@taratorio
Copy link
Copy Markdown
Member

for #20542

Flip the devnet-only defaults for the bal-devnet-4 branch:
  - ExperimentalBAL: false -> true (ethconfig.Defaults, CLI flag, tester)
  - EXEC3_PARALLEL env default: false -> true

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
yperbasis added a commit that referenced this pull request Apr 20, 2026
…tics

#19277 added `&& !syscall` to the Spurious Dragon zero-value short-circuit
in evm.call, so system calls to a non-deployed target now run
CreateAccount(addr, false) instead of returning a no-op. That breaks
EIP-4788's rule that the beacon-root syscall is a no-op when the
contract code is empty — specifically at the fork-transition block,
where the beacon-root contract is deployed later in the same block by a
CREATE tx. The pre-tx CreateAccount diverts state enough that a later
verifier tx underuses gas and the block is rejected with a gas mismatch.

Surfaced once #20606 (bal-devnet-4) flipped ExperimentalBAL + Exec3Parallel
on by default: eest_blockchain's
cancun/eip4788_beacon_root/test_beacon_root_contract_deploy[deploy_on_cancun]
goes red with "gas used by execution: 52529, in header: 116552" on
block 2. Dropping the `!syscall` clause restores the no-op short-circuit.
The rest of #19277 (skip CanTransfer on zero-value calls, TouchAccount(caller)
instead of Transfer for syscalls, intra_block_state refactor) is preserved.

TestSystemCallZeroValueSkipsTransferChecks still passes (its target
already exists, so this path isn't exercised).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
yperbasis added a commit that referenced this pull request Apr 20, 2026
…tics

#19277 added `&& !syscall` to the Spurious Dragon zero-value short-circuit
in evm.call, so system calls to a non-deployed target now run
CreateAccount(addr, false) instead of returning a no-op. That breaks
EIP-4788's rule that the beacon-root syscall is a no-op when the
contract code is empty — specifically at the fork-transition block,
where the beacon-root contract is deployed later in the same block by a
CREATE tx. The pre-tx CreateAccount diverts state enough that a later
verifier tx underuses gas and the block is rejected with a gas mismatch.

Surfaced once #20606 (bal-devnet-4) flipped ExperimentalBAL + Exec3Parallel
on by default: eest_blockchain's
cancun/eip4788_beacon_root/test_beacon_root_contract_deploy[deploy_on_cancun]
goes red with "gas used by execution: 52529, in header: 116552" on
block 2. Dropping the `!syscall` clause restores the no-op short-circuit.
The rest of #19277 (skip CanTransfer on zero-value calls, TouchAccount(caller)
instead of Transfer for syscalls, intra_block_state refactor) is preserved.

TestSystemCallZeroValueSkipsTransferChecks still passes (its target
already exists, so this path isn't exercised).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
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.

2 participants