Skip to content

Merge main, latest spec tests and their fixes into bal-devnet-3#10091

Merged
daniellehrner merged 78 commits into
besu-eth:bal-devnet-3from
daniellehrner:bal-devnet-3
Mar 23, 2026
Merged

Merge main, latest spec tests and their fixes into bal-devnet-3#10091
daniellehrner merged 78 commits into
besu-eth:bal-devnet-3from
daniellehrner:bal-devnet-3

Conversation

@daniellehrner
Copy link
Copy Markdown
Contributor

PR description

Fixed Issue(s)

Thanks for sending a pull request! Have you done the following?

  • Checked out our contribution guidelines?
  • Considered documentation and added the doc-change-required label to this PR if updates are required.
  • Considered the changelog and included an update if required.
  • For database changes (e.g. KeyValueSegmentIdentifier) considered compatibility and performed forwards and backwards compatibility tests

Locally, you can run these tests to catch failures early:

  • spotless: ./gradlew spotlessApply
  • unit tests: ./gradlew build
  • acceptance tests: ./gradlew acceptanceTest
  • integration tests: ./gradlew integrationTest
  • reference tests: ./gradlew ethereum:referenceTests:referenceTests
  • hive tests: Engine or other RPCs modified?

siladu and others added 30 commits March 6, 2026 16:18
e.g. ./gradlew --no-daemon :ethereum:core:jmh -Pincludes=Mod -Pexcludes=Mul,Add,SMod -Pcases=MOD_256_128,MOD_256_192

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
…eth#9972)

* preserve caller-provided gas prices in TransactionSimulator

When isAllowExceedingBalance is true but the caller explicitly provided
non-zero gas pricing parameters, preserve them and the block header's
baseFee so effective gas price is computed correctly during execution.
This ensures gas fees are actually charged so that stateRoot and block
hash are correct in eth_simulateV1 results.

When gas params are absent or zero (typical eth_call, or explicitly
zero maxFeePerGas), behavior is unchanged - all fields stay zero and
baseFee is zeroed to avoid validation failures.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit fixes 2 issues:
- in mulSubOverflow there was no addBack in case of limb overflow;
- reductions were too few in the case that the higher limb exceeds modulus.

Co-authored-by: Luis Pinto <luis.pinto@consensys.net>

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
…th#9777)

Removing memoize from the signature algorithm (besu-eth#8619)

Signed-off-by: mamoralesiob <miguelangel@io.builders>
Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
* Update benchmarking docs with -Pcases

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>

* CHANGELOG for besu-eth#9982

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>

---------

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
* return the correct disconnect reason

Signed-off-by: stefan.pingel@consensys.net <stefan.pingel@consensys.net>

Signed-off-by: Stefan Pingel <16143240+pinges@users.noreply.github.com>
- Replace javax.annotation.Nullable and javax.annotation.CheckForNull with org.jspecify.annotations.Nullable across 18 Java files
- Update platform constraint to org.jspecify:jspecify:1.0.0
- Replace compileOnly com.google.code.findbugs:jsr305 with compileOnly org.jspecify:jspecify in affected modules

Signed-off-by: Mykim <38449976+Apisapple@users.noreply.github.com>
Co-authored-by: Simon Dudley <simon.dudley@consensys.net>

Signed-off-by: Mykim <kimminyong2034@gmail.com>
Increase poa-block-txs-selection-max-time to 95% for the bundle failure
tests so the plugin has ~712ms instead of ~562ms to process transactions.
The failure tests are not testing timeout behaviour, so the tighter budget
was only causing intermittent PLUGIN_SELECTION_TIMEOUT events on loaded CI
machines before the invalid transaction could be reached.

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
shouldSyncUntilHash and shouldSyncUntilRemoteBranch used isCompleted()
inside untilAsserted, which only passes for normal completion. On slow CI
machines the backward sync occasionally completes the future exceptionally,
causing isCompleted() to fail on every retry until the 30s Awaitility
timeout, which then rethrows the AssertionError.

Change to isDone() inside the Awaitility block (matching the fix applied
to shouldAddExpectedBlock in besu-eth#9856) so Awaitility exits as soon as the
future reaches any terminal state. The subsequent future.get() will then
surface the real exception if the sync failed.

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
* use sha256 hardware implementation if available, if not fall back to sun.security.provider.SHA2$SHA256

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
---------

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
When discovery produces a local ENR, log it at INFO level right after
the enode URL so operators can easily find both identifiers. Closes besu-eth#9967

Signed-off-by: Usman Saleem <usman@usmans.info>
…9653) (besu-eth#9957)

Signed-off-by: kkaur01 <kanchan.kaur@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>

Signed-off-by: Kanchan Kaur <87459628+kkaur01@users.noreply.github.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
* add max-blobs-per-block CLI option

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…/besu (besu-eth#10015)

Prepare for org migration by updating all GitHub repository references
to the new besu-eth organization. External service URLs (Docker Hub,
Artifactory, docs site, homebrew, wiki, email) are intentionally left
unchanged for a separate rebranding phase.

Closes besu-eth#9911 (Phase 1 final step)

Signed-off-by: jflo <justin+github@florentine.us>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Signed-off-by: Justin Florentine <justin+github@florentine.us>
* Update GitHub repository references from hyperledger/besu to besu-eth/besu

Prepare for org migration by updating all GitHub repository references
to the new besu-eth organization. External service URLs (Docker Hub,
Artifactory, docs site, homebrew, wiki, email) are intentionally left
unchanged for a separate rebranding phase.

Closes besu-eth#9911 (Phase 1 final step)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: jflo <justin+github@florentine.us>

* Update platform/build.gradle

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Justin Florentine <justin+github@florentine.us>

* updated changelog and version

Signed-off-by: jflo <justin+github@florentine.us>

---------

Signed-off-by: jflo <justin+github@florentine.us>
Signed-off-by: Justin Florentine <justin+github@florentine.us>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* enable gradle caching and configureondemand

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

* comment

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

* add comment and remove configureondemand

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
* feat: replace Java serialization with RLP in trie log prune batch files

Replace saveTrieLogsInFile/readTrieLogsFromFile with the existing RLP-based saveTrieLogsAsRlpInFile/readTrieLogsAsRlpFromFile methods.

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
Add `calculateECDHKeyAgreementCompressed` to the `SecurityModule` plugin API and its implementations, returning the full SEC1 compressed EC point (33 bytes) instead of just the x-coordinate. This is needed by the DiscV5 handshake which requires the compressed shared secret.

Changes:
  - Add `calculateECDHKeyAgreementCompressed` default method to `SecurityModule`
  - Implement in `KeyPairSecurityModule` and expose via `NodeKey`
  - Extract shared `ecdhScalarMultiply` helper in `AbstractSECP256` to eliminate
    duplication between the x-only and compressed ECDH variants
  - Use `ECAlgorithms.cleanPoint` for EC point validation (curve membership check)
  - Add unit tests for ECDH key agreement across SECP256K1, SECP256R1,
    KeyPairSecurityModule, and NodeKey
  - Update plugin-api known checksum
---------

Signed-off-by: Usman Saleem <usman@usmans.info>
…h#9979)

* delay snap chain download if zero peers
* handle cancellation eg if no peers

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Add ENR (enr:) bootnode support for DiscV5 discovery by introducing a new v5Bootnodes section in genesis config alongside the existing bootnodes (enode) section.

Genesis config changes:
  - Add v5Bootnodes to config.discovery for ENR-format bootnodes
  - Add getV5BootNodes() to DiscoveryOptions to parse the new section
  - Populate mainnet.json with 17 ENR bootnodes and hoodi.json with 9

Bootnode parsing simplification:
  - Use --Xv5-discovery-enabled flag to determine expected format (ENR vs enode) instead of prefix detection heuristic
  - EthNetworkConfig reads bootnodes and v5Bootnodes independently
  - CLI --bootnodes overrides the active protocol's list and clears
    the unused protocol's list; genesis defaults keep both intact
  - Replace heuristic fallback in getBootnodeIdentifiers() with
    explicit discoveryV5Enabled flag check

DiscV5 peer connection pipeline fixes:
  - Handle compressed public keys (33-byte SEC1) in
    NodeKeySigner.deriveECDHKeyAgreement
  - Fix candidatePeers() to use isListening() instead of
    isReadyForConnections() which requires DiscV4 bonding status
  - Filter out the local node record from streamLiveNodes()
  - Explicitly use secp256k1 for ENR identity scheme v4

  Cleanup:
  - Remove dead MAINNET fallback null-checks in RunnerBuilder
---------

Signed-off-by: Usman Saleem <usman@usmans.info>
besu-eth#9992)

Delete the Clique JSON-RPC method implementations (clique_getSigners,
clique_propose, clique_discard, clique_proposals, clique_getSignerMetrics,
clique_getSignersAtHash) and all supporting classes:
- consensus/clique/.../jsonrpc/ (production + test, 12 files)
- CliqueQueryPluginServiceFactory (replaced with NoopPluginServiceFactory)
- Acceptance-test DSL: condition/clique/ and transaction/clique/ packages
- NodeRequests: drop CliqueRequestFactory field and clique() accessor
- AcceptanceTestBase: drop clique/cliqueTransactions fields
- BesuNode: remove CliqueRequestFactory from NodeRequests construction
- NodeConfigurationFactory: remove createJsonRpcWithCliqueEnabledConfig()
- BftConditions / AwaitValidatorSetChange: inline "latest" constant

Remove RpcMethod entries CLIQUE_* and RpcApis.CLIQUE enum value.
CliqueBesuControllerBuilder no longer overrides createAdditionalJsonRpcMethodFactory.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…x requests by size (besu-eth#9990)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Fixes case in addMod for 256bit modulus, changes some strange logic in 64bit modulus for reduceNormalised with UInt256 and UInt257 dividends and refactor of unit tests to use parameterized tests.

Signed-off-by: Luis Pinto <luis.pinto@consensys.net>
…h#9976)

Signed-off-by: Luis Pinto <luis.pinto@consensys.net>
… ENR bootnodes are present (besu-eth#9955)

* Update --bootnodes description and throw exception is mixed enode and ENR bootnodes are present

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Fix BesuCommandTest

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Revert changes to BesuCommand

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Revert changes to BesuCommand

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Apply suggestion from @macfarla

Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
Signed-off-by: Matilda-Clerke <matilda.clerke@consensys.net>

---------

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>
Signed-off-by: Matilda-Clerke <matilda.clerke@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
…eth#9952)

* Remove Peer Task System feature toggle from DownloadBodiesStep

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Fix FullSyncChainDownloaderForkTest

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Remove invalid test

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* spotless

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Fix FullSyncChainDownloaderTotalTerminalDifficultyTest

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Remove unneeded old code

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

* Fix infinite loop in CompleteBlocksWithPeerTask and add unit test

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

---------

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

Signed-off-by: Matilda-Clerke <matilda.clerke@consensys.net>
* Replace commons-net SubnetUtils with IPAddress library for IPv6 subnet support

Apache Commons Net SubnetUtils only supports IPv4 CIDR notation, causing
--net-restrict to fail at CLI parse time for IPv6 subnets (e.g. fd00::/64).
Replace it with the IPAddress library (com.github.seancfoley:ipaddress)
which supports both IPv4 and IPv6 CIDR notation natively.

Closes besu-eth#10026

Signed-off-by: Usman Saleem <usman@usmans.info>

* Address PR review: rename SubnetInfoConverter and add mixed IPv4+IPv6 test

- Rename SubnetInfoConverter to SubnetCidrConverter to match new IPAddress
  return type
- Add mixed IPv4+IPv6 test case ("127.0.0.0/24,fd00::/64") to
  BesuCommandTest parameterized net-restrict tests

Signed-off-by: Usman Saleem <usman@usmans.info>

* Add changelog entry for IPv6 --net-restrict support

Signed-off-by: Usman Saleem <usman@usmans.info>

---------

Signed-off-by: Usman Saleem <usman@usmans.info>
macfarla and others added 25 commits March 18, 2026 01:41
)

* Fix typed receipt encoding in putSyncTransactionReceipts

Receipts received via snap sync (eth/68) arrive through
ReceiptsMessage.deserializeReceiptLists() which calls readBytes(),
stripping the outer RLP bytes-element wrapper and leaving raw
typeCode||rlp_body bytes (first byte in 0x01-0x7f).

When these were passed directly to SimpleNoCopyRlpEncoder.encodeList(),
the single-byte type code (e.g. 0x02 for EIP-1559) was stored as a
standalone RLP item and the rlp_body as another, splitting one receipt
into two items. On read-back, TransactionReceiptDecoder.readFrom() saw
only the 1-byte type code, called slice(1) producing Bytes.EMPTY, and
enterList() threw RLPException -- causing the server to disconnect
peers with BREACH_OF_PROTOCOL_MALFORMED_MESSAGE_RECEIVED.

Fix by checking if the raw bytes start with a byte < 0x80 (raw EIP-2718
type code with no RLP wrapper) and, if so, encoding them as a proper
RLP bytes element via NO_COPY_RLP_ENCODER.encode(). Receipts that
already carry a valid RLP element header (>= 0x80: either a string
prefix 0x80-0xbf or list prefix 0xc0-0xff) are stored unchanged.

Adds a test that simulates the network receive path (readBytes()
stripping the outer wrapper) for EIP-1559 and ACCESS_LIST receipts.

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

* review comments

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Stefan Pingel <16143240+pinges@users.noreply.github.com>
)

* fix: add blockchain-head guard to handleBlockTimerExpiry

Signed-off-by: Qian-Cheng-nju <Qian-Cheng-nju@users.noreply.github.com>

Signed-off-by: Qian Cheng <91401632+Qian-Cheng-nju@users.noreply.github.com>
* test: combine snap fixes and enable Besu-to-Besu snap sync test

Cherry-pick all snap fixes (besu-eth#9876, besu-eth#9877, besu-eth#9855) and Fabio's
CliqueToPoSTest from besu-eth#9852 with the snap sync section uncommented.

* allow pivot distance to be customized for test

* request tracking bug

* Frontier receipts were never detected as Frontier

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

* fix: use getEthSerializedType in SyncTransactionReceiptDecoder for Frontier receipts

The decoder was storing Frontier type code as getSerializedType() (0xf8)
but the encoder checks getEthSerializedType() (0x00). When a peer sends
Frontier receipts with empty type bytes (e.g. reth), the decoder stored
0xf8, the encoder didn't recognize it as Frontier, and encoded it as a
typed receipt - producing wrong receipt roots and disconnecting the peer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

* logging improvements for breach of protocol for rlp

* Fix typed receipt encoding in putSyncTransactionReceipts

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
* Revert "Tracer aggregator (besu-eth#9745)"

This reverts commit 219b28e.

TracerAggregator iterates a List<OperationTracer> on every per-opcode
call (tracePreExecution, tracePostExecution, traceContextEnter, etc.),
which is a performance hit on the hot path. The InterruptibleOperationTracer
single-delegate pattern is preferred for tracer composition.

EthTransferLogOperationTracer and custom tracers remain mutually exclusive
in BlockSimulator for now (isTraceTransfers will go away with Glamsterdam).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* report slowest tests once from unittests-passed, not per-runner

* report total test and class counts in summary

* suppress Gradle job summaries from unit test matrix runners on success

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* reduce volume of chain data pruner test

* address matkt review: restore timeline comments and fix loop boundary

- Restore the detailed pruning timeline explanation in pruningWithFrequency
  and balPruningWithTwoBatches, adapted to use derived variable names
- Fix forkBlocksRemovedInBalOnlyMode: the second loop was starting at 45
  instead of 25; pruningMark = 280 - 256 = 24, so block 25 is the first
  unpruned block. Also fix stale comment "i <= 44" -> "i <= 24" and
  extend the upper bound to 280 (the full canonical chain length)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>

Signed-off-by: Miroslav Kovář <miroslavkovar@protonmail.com>
Signed-off-by: Luis Pinto <luis.pinto@consensys.net>
Signed-off-by: Jason Frame <jason.frame@consensys.net>
…-eth#10060)

* fix: prevent unsigned underflow in eth_feeHistory reward bounds

Wei.subtract() wraps around on underflow since Wei is unsigned 256-bit.
In boundRewards(), when nextBaseFee exceeds gasPriceLowerBound (happens
when querying historical blocks from a higher-fee period), the
subtraction produces a near-2^256 value. This corrupts every reward
entry in the response, causing wallets to suggest absurd gas prices.

Floor the priority fee delta at zero when nextBaseFee is larger.

Signed-off-by: Shridhar Panigrahi <sridharpanigrahi2006@gmail.com>

* test: address review feedback on eth_feeHistory underflow fix

  - Shorten verbose comment in boundRewards to a single line
  - Replace indirect <= 2L assertion with exact expected reward values
  - Add equal-case test (nextBaseFee == lowerBoundGasPrice) confirming
    lowerBoundPriorityFee is Wei.ZERO and rewards are correct

Signed-off-by: Shridhar Panigrahi <sridharpanigrahi2006@gmail.com>

---------

Signed-off-by: Shridhar Panigrahi <sridharpanigrahi2006@gmail.com>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>

Signed-off-by: Cyrus <sridharpanigrahi2006@gmail.com>
…th#10071)

When GetSyncReceiptsFromPeerTask returns RESULTS_DO_NOT_MATCH_QUERY,
log the block number, hash, expected receiptsRoot, and calculated
receiptsRoot at DEBUG level so the failing blocks can be identified
without enabling TRACE logging.

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Luis Pinto <luis.pinto@consensys.net>
…th#10072)

* reduce key-pair generations

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

* Pre-size ArrayList instances in BlockchainUtilParameterizedTest

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* minimize setup for BesuCommandTest

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>

---------

Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com>
…sing (besu-eth#10048)

* Defer Snappy decompression of P2P messages until worker thread processing

RawMessage now supports a compressed constructor that defers Snappy
decompression until getData() is first called on the worker thread.
Messages stay in their compressed form while queued in the tx worker pool.

Additionally, worker threads now skip processing for messages from
already-disconnected peers, and decompression/deserialization failures
disconnect the peer with BREACH_OF_PROTOCOL.

Signed-off-by: stefan.pingel@consensys.net <stefan.pingel@consensys.net>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Stefan Pingel <16143240+pinges@users.noreply.github.com>
* return -38015 when tx gas exceeds block gas limit

* added tets for mid-block partial consumption

Signed-off-by: kkaur01 <kanchan.kaur@consensys.net>

---------

Signed-off-by: kkaur01 <kanchan.kaur@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>

Signed-off-by: Kanchan Kaur <87459628+kkaur01@users.noreply.github.com>
* use latest snapshot if no memory wright op

Signed-off-by: Ali <alijakparov.kz@gmail.com>
Co-authored-by: ahamlat <ameziane.hamlat@consensys.net>

Signed-off-by: Ali Zhagparov <alijakparov.kz@gmail.com>
* update devnet test

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* oversized code no longer charges state gas

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* do not force-charge state gas when code deposit state gas is insufficient

When charge_state_gas fails (OutOfGasError), the spec modifies nothing:
no reservoir drain, no stateGasUsed increment. Remove consumeStateGasForced
which was incorrectly inflating stateGasUsed on failure, fixing short_one_gas
reference tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Track collision-burned gas in regular_gas_used so 2D block gas
accounting correctly reflects gas consumed on EIP-684 address collisions

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* addressed pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
…irement

EIP-8037 specifies that regular gas must be deducted before state gas so
the reservoir/gasRemaining split is correct when state gas overflows.
Also updates devnet reference tests to bal@v5.5.1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
…037 ordering requirement

Same fix as the prior SSTORE commit: deduct regular gas before charging
state gas so the reservoir/gasRemaining split is correct. Fixes the
remaining 6 failing amsterdam devnet reference tests (bal@v5.5.1).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
# Conflicts:
#	ethereum/blockcreation/src/main/java/org/hyperledger/besu/ethereum/blockcreation/AbstractBlockCreator.java
#	ethereum/blockcreation/src/main/java/org/hyperledger/besu/ethereum/blockcreation/txselection/selectors/BlockSizeTransactionSelector.java
#	ethereum/blockcreation/src/main/java/org/hyperledger/besu/ethereum/blockcreation/txselection/selectors/GasState.java
#	ethereum/blockcreation/src/test/java/org/hyperledger/besu/ethereum/blockcreation/txselection/selectors/BlockSizeTransactionSelectorTest.java
#	ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/AbstractBlockProcessor.java
#	ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/BlockGasAccountingStrategy.java
#	ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java
#	ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetTransactionProcessor.java
#	ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/OsakaTargetingGasLimitCalculator.java
#	ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/TransactionGasAccounting.java
#	ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/BlockGasAccountingStrategyTest.java
#	ethereum/core/src/test/java/org/hyperledger/besu/ethereum/mainnet/TransactionGasAccountingTest.java
#	ethereum/referencetests/build.gradle
#	evm/src/main/java/org/hyperledger/besu/evm/frame/MessageFrame.java
#	evm/src/main/java/org/hyperledger/besu/evm/frame/TxValues.java
#	evm/src/main/java/org/hyperledger/besu/evm/gascalculator/Eip8037StateGasCostCalculator.java
#	evm/src/main/java/org/hyperledger/besu/evm/gascalculator/StateGasCostCalculator.java
#	evm/src/main/java/org/hyperledger/besu/evm/operation/AbstractCreateOperation.java
#	evm/src/main/java/org/hyperledger/besu/evm/operation/SStoreOperation.java
#	evm/src/main/java/org/hyperledger/besu/evm/operation/SelfDestructOperation.java
#	evm/src/main/java/org/hyperledger/besu/evm/processor/AbstractMessageProcessor.java
#	evm/src/main/java/org/hyperledger/besu/evm/processor/ContractCreationProcessor.java
#	gradle/verification-metadata.xml

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
@daniellehrner daniellehrner force-pushed the bal-devnet-3 branch 2 times, most recently from c31e2be to 6d8a0b4 Compare March 23, 2026 13:18
@daniellehrner daniellehrner merged commit b83d2e5 into besu-eth:bal-devnet-3 Mar 23, 2026
3 checks passed
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.