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, anddebug_getRawReceipts#10515, #10240 - Hash parameter in RPCs now only supports hex values. Hash values without a
0xprefix are now rejected with-32602 INVALID_PARAMS. Affected RPCs including but not limited to:debug_getRawTransaction,eth_getTransactionByHash,eth_getTransactionReceipt#10505
- 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:
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-ratiois 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-peerrenamed to--Xmax-tracked-seen-txs(old name kept as deprecated alias will be removed in a future release)- BFT option
xemptyblockperiodsecondshas been taken out of experimental and been renamedemptyblockperiodseconds. The old config option is deprecated and will be removed in a future release. --Xbft-legacy-protocol-encodingwill be removed once Besu 25.x is no longer supported. #10499
Performance
- Parallelize block body lookups in
engine_getPayloadBodiesByHashV1,engine_getPayloadBodiesByHashV2,engine_getPayloadBodiesByRangeV1, andengine_getPayloadBodiesByRangeV2to 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 anIndexOutOfBoundsExceptionwhentxIndexequalled the transaction list size; the boundary is now correctly rejected withINVALID_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 GuavaLoadingCache(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_buildBlockV1to return correctblockValue(actual priority fees) and omit nullblockAccessList/slotNumberfields from the response payload; same omission applies toengine_getPayloadV6(these fields are always populated for a V6 payload). #10492 - Fix
testing_buildBlockV1to return error-32000when 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_forkchoiceUpdatedV1now returns-38003 INVALID_PAYLOAD_ATTRIBUTESfor invalid payload attribute timestamps (zero or not greater than head). #10353 - Fix
engine_newPayloadV4/V5returns-32602 INVALID_PARAMSwhen execution requests are out of order, have empty data, contain duplicate type bytes, or the param is null; returnsINVALIDpayload status for unknown request type bytes. #10484 - Fix
debug_trace*storagefield 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
PeerTransactionTrackerincorrectly evicting peers that are connected but awaitingChainHeadTrackervalidation, causing Besu to silently drop announced transactions from those peers #10511 - Fix
RLPExceptionobserved during BFT (QBFT/IBFT2) rolling upgrades from Besu 25.x. Use the flag--Xbft-legacy-protocol-encodingon 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_baseFeeJSON-RPC method, returning the calculated base fee of the next block #10457 - Add
eth_getStorageValuesJSON-RPC method for batched reads of multiple storage slots across multiple accounts in a single call #10259 - Add
enableReturnDataparameter todebug_traceTransactionanddebug_traceBlockByNumber, and includereturnDatainStructLogwhen captured; the field is omitted when return data is empty or not captured. #10172 - Updated
Bouncycastleto 1.84 andmaven-artifactto 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:stateandstateproofsnow reportdisabled: truewhen 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-ipv6is set without--p2p-host-ipv6. #10468
Distribution checksums
45d0087e33cb6477c3515db61324d25e5333115aa0f699d03ed35791dfc876a1 besu-26.6.0.zip
3f511e8abd9af38c5a4dcc47c0503a7db94759736b207cd7f292f61419f8cb65 besu-26.6.0.tar.gz