github besu-eth/besu 26.6.0

4 hours ago

This is a recommended update for all users.

Important

You must upgrade Java to version 25+ to run this release.
Ubuntu Guide to upgrade Java

Breaking Changes

  • Besu now requires JDK 25 to build and run.
  • RPC changes to enhance compatibility with other ELs
    • Block number parameter in RPCs now only supports hex values. Non-hex (decimal) block number parameters are now rejected. Affected RPCs including but not limited to: admin_logsRemoveCache, admin_generateLogBloomCache, eth_estimateGas, eth_getBlockByNumber, eth_getBlockTransactionCountByNumber, eth_getTransactionByBlockNumberAndIndex, eth_getUncleByBlockNumberAndIndex, eth_getUncleCountByBlockNumber, eth_feeHistory, eth_getProof, trace_block, trace_call, trace_callMany, trace_replayBlockTransactions, debug_traceBlockByNumber, debug_traceCall, debug_replayBlock, debug_getRawBlock, debug_getRawHeader, and debug_getRawReceipts #10515, #10240
    • Hash parameter in RPCs now only supports hex values. Hash values without a 0x prefix are now rejected with -32602 INVALID_PARAMS. Affected RPCs including but not limited to: debug_getRawTransaction, eth_getTransactionByHash, eth_getTransactionReceipt #10505

Upcoming Breaking Changes

  • Sunsetting features - for more context on the reasoning behind the deprecation of these features, including alternative options, read this blog post
    • Proof of Work consensus (PoW)
  • --min-block-occupancy-ratio is deprecated and will be removed in a future release
  • Plugin API
    • PluginTransactionSelectorFactory.create(final SelectorsStateManager selectorsStateManager) is deprecated for removal
  • --Xmax-tracked-seen-txs-per-peer renamed to --Xmax-tracked-seen-txs (old name kept as deprecated alias will be removed in a future release)
  • BFT option xemptyblockperiodseconds has been taken out of experimental and been renamed emptyblockperiodseconds. The old config option is deprecated and will be removed in a future release.
  • --Xbft-legacy-protocol-encoding will be removed once Besu 25.x is no longer supported. #10499

Performance

  • Parallelize block body lookups in engine_getPayloadBodiesByHashV1, engine_getPayloadBodiesByHashV2, engine_getPayloadBodiesByRangeV1, and engine_getPayloadBodiesByRangeV2 to reduce latency when fetching up to 1024 block bodies from RocksDB. #10532

Bug fixes

  • debug_accountAt: fix off-by-one in transaction index validation that caused an IndexOutOfBoundsException when txIndex equalled the transaction list size; the boundary is now correctly rejected with INVALID_TRANSACTION_PARAMS #10464
  • Fix transaction pool save/restore so disk access lock contention is reported through the returned futures instead of blocking callers or leaving the pool partially disabled. #10561
  • Fix Address.addressHash() stalling under high concurrent load: replaced Guava LoadingCache (non-fair segment lock caused indefinite starvation when transaction pool validation and parallel block processing threads simultaneously saturated the same cache segments) with Caffeine, which computes hashes without holding a segment lock. #10235
  • Fix testing_buildBlockV1 to return correct blockValue (actual priority fees) and omit null blockAccessList/slotNumber fields from the response payload; same omission applies to engine_getPayloadV6 (these fields are always populated for a V6 payload). #10492
  • Fix testing_buildBlockV1 to return error -32000 when an explicitly provided transaction is not applicable (e.g. wrong nonce), instead of silently dropping it and returning a success response. #10486
  • Fix LayeredKeyValueStorage.isClosed() repeatedly re-walking the full parent chain on every storage operation, causing CPU saturation under a stalled forkchoice head. The closed-state is now cached per layer after the first propagation. #10508
  • Fix engine_forkchoiceUpdatedV1 now returns -38003 INVALID_PAYLOAD_ATTRIBUTES for invalid payload attribute timestamps (zero or not greater than head). #10353
  • Fix engine_newPayloadV4/V5 returns -32602 INVALID_PARAMS when execution requests are out of order, have empty data, contain duplicate type bytes, or the param is null; returns INVALID payload status for unknown request type bytes. #10484
  • Fix debug_trace* storage field to emit only for SLOAD/SSTORE opcodes showing the single slot touched, matching the execution-apis spec and geth behaviour #10176
  • Fix blob transaction sidecar validation: detect missing sidecars, KZG commitment/versioned-hash mismatches, and type/size mismatches against eth/68 announcements; disconnect offending peers immediately #10510
  • Fix PeerTransactionTracker incorrectly evicting peers that are connected but awaiting ChainHeadTracker validation, causing Besu to silently drop announced transactions from those peers #10511
  • Fix RLPException observed during BFT (QBFT/IBFT2) rolling upgrades from Besu 25.x. Use the flag --Xbft-legacy-protocol-encoding on each upgrading Besu node to remain compatible with existing Besu 25.x nodes on the BFT network. #10499
  • Use a non-zero exit code when Besu shuts down after detecting disk-full errors in RocksDB transactions or log bloom cache I/O, allowing process managers to restart or alert correctly #10254
  • Cache successfully validated engine JWT token so that the same token is only checked once per minute #10559

Additions and Improvements

  • Add eth_baseFee JSON-RPC method, returning the calculated base fee of the next block #10457
  • Add eth_getStorageValues JSON-RPC method for batched reads of multiple storage slots across multiple accounts in a single call #10259
  • Add enableReturnData parameter to debug_traceTransaction and debug_traceBlockByNumber, and include returnData in StructLog when captured; the field is omitted when return data is empty or not captured. #10172
  • Updated Bouncycastle to 1.84 and maven-artifact to 3.9.15 to resolve CVEs reported in those libraries. Besu's usage patterns are not affected by these vulnerabilities. #10420
  • Improve native memory handling in RocksDB storage: LRUCache, ColumnFamilyOptions, and temporary options-file loading objects are now explicitly closed #10456
  • eth_capabilities: state and stateproofs now report disabled: true when genesis world state is unavailable (e.g. SNAP sync nodes) #10377
  • Auto-discover the advertised IPv6 host in the ENR from DiscV5 peer consensus when --p2p-interface-ipv6 is set without --p2p-host-ipv6. #10468

Distribution checksums

45d0087e33cb6477c3515db61324d25e5333115aa0f699d03ed35791dfc876a1  besu-26.6.0.zip
3f511e8abd9af38c5a4dcc47c0503a7db94759736b207cd7f292f61419f8cb65  besu-26.6.0.tar.gz

Don't miss a new besu release

NewReleases is sending notifications on new releases.