Releases: besu-eth/besu
26.6.0
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
26.5.0
Breaking Changes
- Plugin API
- Removed
BesuConfiguration#getRpcHttpHost()andBesuConfiguration#getRpcHttpPort()which have been deprecated since25.1.0. UsegetConfiguredRpcHttpHost()andgetConfiguredRpcHttpPort()instead. #10268
- Removed
- Experimental Bonsai Archive column families have changed removing freezer column families. If you are using the Bonsai archive you will need to do a full resync #10339
Upcoming Breaking Changes
- RPC changes to enhance compatibility with other ELs
- Block number parameter in RPCs will only support hex values. Support for non-hex (decimal) block number parameters is deprecated.
- This affects several RPCs, including
admin_logsRemoveCache,debug_getRawHeader,eth_call,eth_simulateV1,trace_calland more.
- 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)- Besu will require Java JDK 25 to build and run 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.
Bug fixes
engine_newPayloadV3/V4/V5: validate parameters before fork-support check so that missing required fields return-32602(INVALID_PARAMS) instead of-38005(UNSUPPORTED_FORK), matching the Engine API spec #10249- Fix data race in
SyncDurationMetricswhere the backingHashMapwas mutated from multiple sync threads in parallel, causing missing or zerosync_durationsamples. #10277 - Fix CVE-2026-34480 and CVE-2026-34478 in log4j #10332
- Reject Status messages whose declared
protocolVersionfield disagrees with the on-wire layout (eth/68 vs eth/69+). The decoder now throwsRLPExceptiondirectly so the peer is cleanly disconnected withSUBPROTOCOL_TRIGGERED_UNPARSABLE_STATUS. #10241 - Fix
updateForkChoiceignoringsetNewHeadfailure: when world state cannot be rolled to the target block, returnINVALIDto the CL instead of silently returningVALIDwith inconsistent finalized/safe state. #10224 - Fix
DefaultPeerIdcomparator #10321 - Apply node-ID–based permission checks to address-less ENRs in discv5: previously, ENRs without UDP/TCP endpoints bypassed denylist enforcement; now denylisted peers are rejected even when no network address is present. #10308
- Cleanly stop backward sync if world state is unavailable #10021
- Enforce that
blob_versioned_hashesmatch the supplied blobs #10278 - Restrict no-reorg behavior to the prefix of the known finalized chain (per execution-apis #786) #10335
eth_getFilterLogs: cache the chain head once when resolving defaultlatest..latestbounds, so a block arriving between the two reads no longer expands the queried range into[N, N+1]and returns extra logs. #10368
Additions and Improvements
- The option to set a different block period for empty BFT blocks (
emptyblockperiodseconds) is no longer experimental. The experimental flagxemptyblockperiodsecondswill be removed in a future release. #10264 - Release worker threads after engine API timeout to avoid blocking subsequent requests #10311
evmtool blocktest --verboseflag, default off, removes noise from output #10348- Bound precompile result caches to the semantic-prefix slice and apply a 16 MB byte-weight cap per cache, providing a uniform memory ceiling across all 14 precompile caches #10350
- Lazy RLP decoding of
GetBlockBodiesmessages reduces memory and CPU spent on dropped requests #10342 - Speed up backward sync phase 1 relinking after a restart by batching restored ancestor header writes into a single chainStorage transaction instead of one per header #10276
- Move Block Access List download from the state pipeline into the chain pipeline #10245
- Reduce memory copying in eth/snap message handling and improve RLP performance #10130
- Save and resume header download progress on pipeline restart, so backward header downloads resume from where they left off rather than from the pivot #10275
- Pin Dockerfile base images by SHA256 digest for reproducible builds and supply chain security #10309
- Remove
GetNodeData/NodeDataeth-protocol messages, which are no longer used by snap sync #10330 - Enforce EIP-7928 Block Access List item budget per transaction in both processing and mining #10250
- Include
slotNumberinpayloadIdentifiergeneration #10242 - Change Block Access List index encoding to
uint32#10279 - Add
limitsupport to debug opcode tracing to stop capture after N EVM steps (0keeps the previous unlimited behavior) and reject negative values at the RPC parameter boundary #10173 - Add EIP-7981 to Amsterdam #10388
- Bonsai Archive storage now uses Bonsai for head and Bonsai for near head improving performance for head queries #10192
- Added
eth_capabilitiesJSON-RPC method that returns the node's data-serving capabilities, including chain head and per-resource availability flags #10322 - Upgrade execution-spec-tests to v5.4.0 and fix test harness to correctly handle blocks with expected exceptions #10287
Plugin API
- Publish Guava as an API dependency from
plugin-api#10248 - Publish
besu-evmas an API dependency fromplugin-api#10262 - Update Gradle plugin for Besu plugin development to 0.2.0 #10263
- Rename
InvalidSystemCallAddressExceptiontoSystemCallNoCodeAtAddressExceptionto better reflect when it is thrown #10305
Distribution checksums
9ddbe9e94662459898ff7b3ff4439821eeeee3bc2ff961378604202fa7da09e6 besu-26.5.0.zip
3feda5b2ff1cae8fdb160cd774cc9a2d69402383965370529368bfe019862733 besu-26.5.0.tar.gz
26.4.0
26.4.0
Repository Migration
- The Besu repository has moved from
hyperledger/besutobesu-eth/besu. GitHub automatically redirects all existing links from the old location.
Breaking Changes
- Clique consensus has been removed. Besu can no longer start or mine on pure Clique networks. Syncing networks that started as Clique and have since transitioned to PoS via
terminalTotalDifficulty(e.g. Linea Mainnet) are still supported. #9852 - Deprecated
--min-block-occupancy-ratiofor removal and make it noop. That option, that is ignored on PoS networks, is related to the deprecated PoW, and allowed to broadcast a mined block as soon as it reached a satisfying fill threshold. The option is still recognized, but it has no effect and will be completely removed in a future release. #10036 - Plugin API
- Removed
TransactionSelectionResult.BLOCK_OCCUPANCY_ABOVE_THRESHOLD, in general it could be replaced withBLOCK_FULL
- Removed
- Experimental Bonsai Archive column families have changed to improve performance during bonsai to archive migration. If you are using the Bonsai archive you will need to do a full resync #10058
debug_traceTransactionanddebug_traceBlockByNumber: theerrorfield inStructLogentries is now serialized as a plain string (e.g."INVALID_JUMP_DESTINATION") instead of an array of strings, aligning with the execution-apis opcode tracer spec. #10117debug_traceTransactionnow returns a JSON-RPC error response (-32000: Transaction not found) instead of a success response withnullresult when the transaction hash is unknown #10150debug_traceBlockByNumbernow returns a JSON-RPC error response (-32000: genesis is not traceable) instead of a success response withnullresult when tracing the genesis block #10133- Removed deprecated Holesky network.
--network holeskyis no longer a valid option. #10161
Upcoming Breaking Changes
- RPC changes to enhance compatibility with other ELs
- Block number parameter in RPCs will only support hex values. Support for non-hex (decimal) block number parameters is deprecated.
- This affects several RPCs, including
admin_logsRemoveCache,debug_getRawHeader,eth_call,eth_simulateV1,trace_calland more.
- 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)- Besu will require Java JDK 25 to build and run in a future release.
Bug fixes
- Fix eth/69 snap sync receipt root mismatch by correctly identifying Frontier transaction type in SyncTransactionReceiptEncoder #9900
- Fix outstanding request counter leak in RequestManager that could cause peers to appear at capacity #9900
- BFT forks that change block period on time-based forks don't take effect 9681
- Fix QBFT
RLPExceptionwhen decoding proposals from pre-26.1.0 nodes that do not include theblockAccessListfield #9977 - Fix eth_simulateV1 discrepancy [9960] (#9960) eth_simulateV1 now accepts calls where both input and data
are provided with different values, using input as per the execution-apis spec instead of returning an error. - Fix eth_simulateV1 returning wrong error code when transaction gas exceeds block gas limit: now correctly returns -38015 (BLOCK_GAS_LIMIT_EXCEEDED) instead of -38014 or succeeding #10073
- Wait for peers before starting chain download. Prevents an OutOfMemory (OOM) error when the node has zero peers #9979
- Upgrade besu-native libraries version to 1.5.0. This fixes the issue of besu-native/secp256r1 exporting OpenSSL symbols in JVM space. besu-native #308
Additions and Improvements
- Add
transactionReceiptssubscription type toeth_subscribethat pushes all transaction receipts when a new block is added, with optionaltransactionHashesfilter to receive receipts for specific transactions only #10190 - Add
enableMemoryparameter todebug_traceTransactionanddebug_traceBlockByNumber. Defaults tofalse; memory is only included in trace output when explicitly enabled. The existingdisableMemoryparameter continues to work for backwards compatibility #10169 --net-restrictnow supports IPv6 CIDR notation (e.g.fd00::/64) in addition to IPv4, enabling subnet-based peer filtering in IPv6 and dual-stack deployments #10028- Stop EngineQosTimer as part of shutdown #9903
- Add
--max-blobs-per-transactionCLI option to configure the maximum number of blobs per transaction #9912 - Add
--max-blobs-per-blockCLI option to configure the maximum number of blobs per block when block building #9983 - Use JDK SHA-256 provider to leverage hardware SHA-NI instructions instead of BouncyCastle #9924
- Support EIP-7975: eth/70 - partial block receipt lists
- Support EIP-8159: eth/71 - block access list exchange
- Support EIP-8189: snap/2 - block access list exchange
- Limit pooled tx requests by size and remove pre-eth/68 transaction announcement support #9990
- Reduce tx p2p broadcast bandwidth and memory used #9937
- Improve syncing time of the experimental Bonsai Archive storage by migrating after a Bonsai full sync #9979
- Layered txpool: enable balance check by default #10175
Plugin API
- Plugin API: Allow the registration of multiple PluginTransactionPoolValidatorFactory #9964
- Plugin API: pass pending block header when creating selectors #10034
RPCs
- Add
blockTimestampto transaction RPC results #9887 - Add
txpool_statusRPC method #10002 - Add
txpool_contentFromJSON-RPC method #10111 - Add
txpool_contentJSON-RPC method #10120 - Add
txpool_inspectJSON-RPC method #10121 - Add
maxUsedGasfield to eth_simulateV1 results #10066 - Add
latestBlockfield to admin_peers result #10163
Performance
- UInt256 arithmetics with long limbs #9677
- Fix edge case in MOD variant operations regarding multiply subtract step #9934
- Fix addMod case with 256bit moduluses #10001
- Performance improvements on MOD variant instructions while converting from byte[] to longs #9976
- Implement DIV and SDIV with long limbs #9923
- Improve MULMOD worst cases #10088
- Optimized MUL and SUB to use UInt256 #10030
- Use cache locality to improve Shift opcodes #9878
- Defer Snappy decompression of inbound P2P messages from the Netty I/O thread to the worker thread, reducing memory held in the transaction worker queue to compressed size #10048
- Dispatch snap server request processing (GET_ACCOUNT_RANGE, GET_STORAGE_RANGE, GET_BYTECODES, GET_TRIE_NODES, GET_BLOCK_ACCESS_LISTS) off the Netty event loop to prevent heavy trie/DB work from blocking ETH protocol message handling #10083
- Add
-Pcasescase name filtering to JMH benchmark suite #9982
Discovery V5
- Add IPv6 dual-stack support for DiscV5 peer discovery (enabled via
--Xv5-discovery-enabled): new--p2p-host-ipv6,--p2p-interface-ipv6, and--p2p-port-ipv6CLI options enable a second UDP discovery socket;--p2p-ipv6-outbound-enabledcontrols whether IPv6 is preferred for outbound connections when a peer advertises both address families #9763; RLPx now also binds a second TCP socket on the IPv6 interface so IPv6-only peers c...
26.2.0
26.2.0
This is a recommended update for all users.
Breaking Changes
- ETC Classic support in Besu is removed. This includes all ETC related hardforks including Mordor and Spiral. #9671
- Forest db subcommands
x-backup-stateandx-restore-stateare removed #9821 - Omit totalDifficulty from post-merge blockResults #9836
- Chain pruning CLI options have been redesigned with new behavior: #9637
--Xchain-pruning-enablednow accepts three strategy values instead of boolean:ALL- prunes both blocks and BALs (replaces the old--Xchain-pruning-enabled=true)BAL- prunes only BALs, keeps all blocks forever (new mode, now the default)NONE- disables all pruning (replaces the old--Xchain-pruning-enabled=false)
--Xchain-pruning-blocks-retainedbehavior changes:- In
ALLmode: controls block retention (previously the only mode) - In
BALmode: has no effect as blocks are never pruned - Default value changed from
7200to113056blocks (Weak Subjectivity Period: 3533 epochs × 32 slots)
- In
- New flag
--Xchain-pruning-bals-retainedsets the number of BALs to retain:- Defaults to the value of
--Xchain-pruning-blocks-retainedwhen not specified - Must be >=
113056(configurable via--Xchain-pruning-retained-minimum) - In
ALLmode: should typically be less than or equal to--Xchain-pruning-blocks-retained - In
BALmode: controls BAL retention independently
- Defaults to the value of
--Xchain-pruning-frequencynow controls both block and BAL pruning operations (previously only controlled block pruning)- Renamed
--Xchain-pruning-blocks-retained-limitto--Xchain-pruning-retained-minimum(applies to both blocks and BALs)- New default value:
113056blocks (3533 epochs × 32 slots, based on Weak Subjectivity Period) - Previous default:
7200blocks
- New default value:
- Fast Sync is no longer supported, snap sync can be used instead #9814
- CHECKPOINT sync is deprecated. Selecting CHECKPOINT sync now performs a SNAP sync: #9814
- eth_simulateV1 returns BLOCK_NOT_FOUND instead of null success response when called with a future block #9837
- eth_simulateV1: when validation is enabled, map UPFRONT_COST_EXCEEDS_BALANCE (-38014) error code to -32602 #9837
Upcoming Breaking Changes
- RPC changes to enhance compatibility with other ELs
- Block number parameter in RPCs will only support hex values. Support for non-hex (decimal) block number parameters is deprecated.
- This affects several RPCs, including
admin_logsRemoveCache,debug_getRawHeader,eth_call,eth_simulateV1,trace_calland more.
- Holesky network is deprecated #9437
- 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)
- Clique Block Production (mining) - you will still be able to sync existing Clique networks, but not be a validator or create new Clique networks.
Additions and Improvements
- Support substring and glob matching for
--test-nameinblock-testevmtool subcommand #9790 - Improve performance of snap sync chain download #9510 and #9621
- Add ability to pass a custom tracer to block simulation #9708
- Add support for
4byteTracerindebug_trace*methods to collect function selectors from internal calls via PR #9642. Thanks to @JukLee0ira. - Update assertj to v3.27.7 #9710
- Update vertx to 4.5.24 #9645
- Add byte-level metrics for P2P message exchange #9666
- Add IPv6 dual-stack support for DiscV5 peer discovery (enabled via
--Xv5-discovery-enabled): new--p2p-host-ipv6,--p2p-interface-ipv6, and--p2p-port-ipv6CLI options enable a second UDP discovery socket;--p2p-ipv6-outbound-enabledcontrols whether IPv6 is preferred for outbound connections when a peer advertises both address families #9763; RLPx now also binds a second TCP socket on the IPv6 interface so IPv6-only peers can establish connections #9873
Performance
- EVM optimisations - Improves 70% of EEST benchmarks #9775
- EVM optimisations - Improve SAR, SHR and SHL opcodes performance #9796
Bug fixes
- Fix epoch reset not clearing DROP votes in Clique/IBFT/QBFT consensus #9870
- Fix DiscV5 ENR
udp/udp6fields: when--p2p-port=0is used, the OS-assigned UDP port is now correctly propagated to the ENR after the socket is bound; in dual-stack mode both UDP sockets resolve before the ENRseqis incremented #9888 - Fix DiscV5 ENR
tcp/tcp6fields: previously these reflected the UDP discovery bind port instead of the actual RLPx listening port; ENR initialisation is now deferred until the RLPx TCP port is known #9873 - Fix QBFT Shanghai support by reintroducing NotApplicableWithdrawals withdrawals validator #9830
- Fix callTracer handling of failed CREATE operations, including correct input field extraction and proper error reporting for both soft failures and revert reasons
- Upgrade netty to 4.2.10-Final - Fixes
setsockopt() failed: Protocol not available#9783 - Allow nonce to be max value when
isAllowFutureNonceis true #9759
90b78a6739c37c6edffe362587231c51ce1b816b1f13c7aad94547e1a3a86e10 besu-26.2.0.zip
0b9535001e0081a5bd7c861a1c6444914ae7f0869355588e260d97ae5a59a914 besu-26.2.0.tar.gz
26.1.0
26.1.0
This is a recommended update for all users.
Breaking Changes
- Remove experimental CLI flag
--Xenable-extra-debug-tracers. Call tracer (callTracer) is now always available fordebug_trace*methods. - RPC changes to enhance compatibility with other ELs
- RPCs using filter parameter including
eth_getLogsandtrace_filterreturn an error iffromBlockis greater thantoBlock, or iftoBlockextends beyond chain head (previously returned an empty list) #9604
- RPCs using filter parameter including
- Plugin API changes to BlockHeader, Log, LogWithMetadata, TransactionProcessingResult and TransactionReceipt to use specific types for LogsBloomFilter, LogTopic and Log #9556
Upcoming Breaking Changes
- RPC changes to enhance compatibility with other ELs
- Block number parameter in RPCs will only support hex values. Support for non-hex (decimal) block number parameters is deprecated.
- This affects several RPCs, including
admin_logsRemoveCache,debug_getRawHeader,eth_call,eth_simulateV1,trace_calland more.
- ETC Classic and Mordor network support in Besu is deprecated #9437
- Holesky network is deprecated #9437
- Sunsetting features - for more context on the reasoning behind the deprecation of these features, including alternative options, read this blog post
- ETC (Ethereum Classic) network support
- Proof of Work consensus (PoW)
- Clique Block Production (mining) - you will still be able to sync existing Clique networks, but not be a validator or create new Clique networks.
- Fast Sync
--history-expiry-pruneis deprecated and will be removed in a future release
Additions and Improvements
- Update to Netty 4.2.9.Final #9587
- Update to log4j 2.25.3 #9600
- Add
engine_getBlobsV3method #9582 - Verify plugins on start #9601
- Add EIP-7778 to Amsterdam #9664
- Treat EndOfRLPException as invalid packet in peer discovery, meaning you will no longer see these exceptions, unless you enable DEBUG logs #9597
Performance
- Optimise ADD Opcode: ADD 86% faster, using new UInt256 implementation #9477
- Optimise EIP-196 AltBn128: EcAdd 33-128% faster, EcMul 8% faster #9570
- Improve
getBlobsV2by disabling HTTP response compression for engine API, with up to 10× throughput improvement observed for large numbers of blobs. #9667 - Replace BytesTrieSet with HashSet, improves CREATE, CREATE2, SELFDESTRUCT and jumpdest analysis by up to 48% #9641
- Parallelize state root computation for Bonsai #9576
Bug fixes
- Fix promotion to prioritized layer for gas price fee markets #9635
- Fix callTracer to properly capture nested calls and populate revertReason field when transactions revert #9651
- Enhance payload selection with tx count and creation time tiebreakers #9657
- Fix mining beneficiary for BFT networks when set to zero address #9679
356bae18a4c08a2135aa006e62a550b52428e1d613c08aa97c40ec8b908ae6cf besu-26.1.0.zip
de6356bf2db9e7a68dc3de391864dc373a0440f51fbf6d78d63d1e205091248e besu-26.1.0.tar.gz
New Contributors
- @eeemmmmmm made their first contribution in #9595
- @avorylli made their first contribution in #9592
- @cuiweixie made their first contribution in #9599
- @0xEllie made their first contribution in #9210
Full Changelog: 25.12.0...26.1.0
25.12.0
25.12.0
Breaking Changes
- Remove these deprecated CLI options #9385
- Remove
--Xbonsai-parallel-tx-processing-enableddeprecated since 25.7.0. Use--bonsai-parallel-tx-processing-enabledinstead. - Remove
--Xsnapsync-server-enableddeprecated since 25.7.0. Use--snapsync-server-enabledinstead. - Remove
--Xsnapsync-synchronizer-pre-merge-headers-only-enableddeprecated since 25.7.0. Use--snapsync-synchronizer-pre-checkpoint-headers-only-enabledinstead. - Remove
--Xhistory-expiry-prunedeprecated since 25.7.0. Use--history-expiry-pruneinstead.
- Remove
- RPC changes to enhance compatibility with other ELs
- Use error code 3 for execution reverted #9365
- eth_createAccessList now returns success result if execution reverted #9358
- Return null result if block not found for
debug_accountAt,debug_setHead,eth_call,eth_getBlockReceipts,eth_getProof,eth_simulateV1,eth_getBalance,eth_getCode,eth_getStorageAt,eth_getTransactionCount#9303
- Remove PoW specific RPCs:
eth_getMinerDataByBlockHash,eth_getMinerDataByBlockNumber,miner_setCoinbase,miner_setEtherbase#9481,eth_coinbase#9487 - Remove PoW CLI options:
--miner-enabled,--miner-coinbase#9486
Upcoming Breaking Changes
- ETC Classic and Mordor network support in Besu is deprecated #9437
- Holesky network is deprecated #9437
- Sunsetting features - for more context on the reasoning behind the deprecation of these features, including alternative options, read this blog post
- ETC (Ethereum Classic) network support
- Proof of Work consensus (PoW)
- Clique Block Production (mining) - you will still be able to sync existing Clique networks, but not be a validator or create new Clique networks.
- Fast Sync
Additions and Improvements
- Update to vertx 4.5.22 #9375
- Add
opcodesoptional parameter to RPC methods:debug_standardTraceBlockToFile,debug_standardTraceBadBlockToFile,debug_traceBlockByNumber,debug_traceBlockByHash,debug_traceTransaction,debug_traceBlock,debug_traceCallfor tracing specified opcodes #9335 - Use Eclipse Temurin OpenJDK JRE in Besu docker image #9392
- Add Linea named networks for
linea_mainnetandlinea_sepolia#9436, #9518 - Add
eth_subscribeandeth_unsubscribesupport to IPC service #9504 - Add experimental
callTracertracer option todebug_trace*methods. Enabled using--Xenable-extra-debug-tracers=trueoption. Issue #8326 implemented via PR #8960 and #9072.
Performance
- 5-6x faster toFastHex calculation for engine_getBlobsV2 #9426
- Optimise
engine_getPayload*methods andengine_getBlobsV2#9445 - Optimise performances of AND, OR, XOR and NOT opcodes #9489
Bug fixes
- Fix non-deterministic sub-protocol registration during IBFT2 to QBFT consensus migration #9516
- Fix loss of colored output in terminal when using
--color-enabled=trueoption #8908 - Fix an issue where Besu does not support
0x80as transaction type when decoding eth/69 receipts #9520
fa02fc7d9f7965036caea0b86efdcfdddb9e982416c8fb026b580815a1ee2de7 besu-25.12.0.zip
11a880ad19cbfa30edb71a0a990310c704d6f6625601e6125507092b07db51a5 besu-25.12.0.tar.gz
New Contributors
- @jintukumardas made their first contribution in #9250
- @taxmeifyoucan made their first contribution in #9354
- @Bilogweb3 made their first contribution in #9440
- @MqllR made their first contribution in #9496
- @julien-marchand made their first contribution in #9505
- @saeeddawod made their first contribution in #9516
Full Changelog: 25.11.0...25.12.0
25.11.0
25.11.0 - Fusaka Mainnet Release
Important
This is the Fusaka Mainnet-ready release. This is a mandatory update for Mainnet users.
- Adds Osaka, BPO1, and BPO2 fork times for Mainnet
- Increases the Mainnet gas limit to 60M.
All Mainnet nodes must be updated before the activation of the Fusaka fork:
| Network | Fork Name | Time (UTC) | Epoch | Start Slot | Unix Timestamp |
|---|---|---|---|---|---|
| Mainnet | Fusaka | 2025-12-03 21:49:11 | 411392 | 13,164,544 | 1764798551 |
| Mainnet | BPO 1 | 2025-12-09 14:21:11 | 412672 | 13,205,504 | 1765290071 |
| Mainnet | BPO 2 | 2026-01-07 01:01:11 | 419072 | 13,410,304 | 1767747671 |
Upcoming Breaking Changes
- Deprecated CLI options
--Xbonsai-parallel-tx-processing-enabledis deprecated since 25.7.0. Use--bonsai-parallel-tx-processing-enabledinstead.--Xsnapsync-server-enabledis deprecated since 25.7.0. Use--snapsync-server-enabledinstead.--Xsnapsync-synchronizer-pre-merge-headers-only-enabledis deprecated since 25.7.0. Use--snapsync-synchronizer-pre-checkpoint-headers-only-enabledinstead.--Xhistory-expiry-pruneis deprecated since 25.7.0. Use--history-expiry-pruneinstead.
- 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)
- Fast Sync
Additions and Improvements
- Add Osaka, BPO1 and BPO2 fork times for mainnet #9380
- Increase mainnet gas limit to 60M #9339
- Add blockTimestamp to receipt logs for
eth_getBlockReceiptsandeth_getTransactionReceiptresults #9294 - Upgrade to execution-spec-tests v5.3.0 #9301
- Update to netty 4.2.7.Final #9330
- Ability to enable/disable stack, storage and returnData tracing data in debug_traceStandardBlockToFile and debug_traceStandardBadBlockToFile endpoints #9183
- Update to tuweni 2.7.2 #9338
- Support blob fee market when zeroBaseFee enabled for forks with blobs #9344
New Contributors
Full Changelog: 25.10.0...25.11.0
a91b07434e7c4a57bb336888f5262b6e92518bf5fd8323624f74b0b5637c28d5 besu-25.11.0.zip
d38533bb4c02dd1363ddf48552ba2acaabf9ec7dafde208393b43adbfeb70946 besu-25.11.0.tar.gz
25.10.0
25.10.0 - Fusaka Testnet Release
Important
This is an optional update for Mainnet users. This is a recommended update for Holesky, Sepolia and Hoodi users for the upcoming Fusaka hardfork. There will be another release before the Mainnet Fusaka hardfork.
Fusaka Hardfork details: https://eips.ethereum.org/EIPS/eip-7607#activation
- Holešky scheduled to fork on 2025-10-01 08:48:00
- Sepolia scheduled to fork on 2025-10-14 07:36:00
- Hoodi scheduled to fork on 2025-10-28 18:53:12
Upcoming Breaking Changes
- Deprecated CLI options
--Xbonsai-parallel-tx-processing-enabledis deprecated since 25.7.0. Use--bonsai-parallel-tx-processing-enabledinstead.--Xsnapsync-server-enabledis deprecated since 25.7.0. Use--snapsync-server-enabledinstead.--Xsnapsync-synchronizer-pre-merge-headers-only-enabledis deprecated since 25.7.0. Use--snapsync-synchronizer-pre-checkpoint-headers-only-enabledinstead.--Xhistory-expiry-pruneis deprecated since 25.7.0. Use--history-expiry-pruneinstead.
- 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)
- Fast Sync
Breaking Changes
Additions and Improvements
- Update spring security framework (toml parsing) #9153
- Update grpc and guava #9150
- Implement optional sender balance checks in the layered txpool #9176
- Add
--cache-last-block-headersflag to cache the last n block headers persisted to the blockchain #9223 - Manage unexpected exceptions during block creation #9208
- Add
--cache-last-block-headers-preload-enabledflag to enable preloading the block headers cache during startup time #9248 - Upgrade to execution-spec-tests v5.2.0 #9226, #9242
- Add blockTimestamp to
eth_getLogsresult #9278 - Add
--ethstats-report-intervalCLI option to control ethstats reporting frequency instead of using hardcoded 5-second interval #9271 - Performance improvements to EQ opcode #9229
- Update jc-kzg dependency #9261
- Add
isCancelledmethod toTransactionEvaluationContext. That way selectors could check if the block creation has been cancelled or in timeout #9285 - Performance improvements for MOD related opcodes #9188 thanks to @thomas-quadratic
Bug fixes
- Fix eth_subscribe RPC failing returning a block response #9212
- Fix ethstats integration failing to provide block updates to ethstats server #9220
New Contributors
- @nethoxa made their first contribution in #9231
- @jintukumardas made their first contribution in #9250
- @dhvogel made their first contribution in #9271
- @isuniverseok-ua made their first contribution in #9280
- @thomas-quadratic made their first contribution in #9188
- @moodmosaic made their first contribution in #9188
Full Changelog: 25.9.0...25.10.0
a67ba604f278b784cb427a1ad514c97c680cb83cd09594143e34428bafc7ff62 besu-25.10.0.zip
bc9d0b2d2206c0565b57e23069e20751836595bd3fa0e0b9fc263388ff6c0bb6 besu-25.10.0.tar.gz
25.10.0-RC2
25.10.0-RC2
Important
This RC is a recommended update for Holesky and Sepolia users for the Fusaka hardfork.
This RC is still pending burn in for mainnet.
This RC includes an update for a dependency used in PeerDAS.
There is likely to be another release before Hoodi's Fusaka fork.
Upcoming Breaking Changes
- Deprecated CLI options
--Xbonsai-parallel-tx-processing-enabledis deprecated since 25.7.0. Use--bonsai-parallel-tx-processing-enabledinstead.--Xsnapsync-server-enabledis deprecated since 25.7.0. Use--snapsync-server-enabledinstead.--Xsnapsync-synchronizer-pre-merge-headers-only-enabledis deprecated since 25.7.0. Use--snapsync-synchronizer-pre-checkpoint-headers-only-enabledinstead.--Xhistory-expiry-pruneis deprecated since 25.7.0. Use--history-expiry-pruneinstead.
- 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)
- Fast Sync
Additions and Improvements
Full Changelog: 25.9.0...25.10.0-RC2
725ff15187f8b37caa860d383f4f78b36a99e904ec835f7390087dae9449a17a besu-25.10.0-RC2.zip
8ceffc213596ca5cef3a821020b00026f0f82316e2ec519cc9152407c3c6418a besu-25.10.0-RC2.tar.gz
25.10.0-RC1
25.10.0-RC1
Important
This RC is an optional update for Holesky and Sepolia users. 25.9.0 remains the official Fusaka Testnet release.
You only need to upgrade to this release if you're experiencing the eth_subscribe or ethstats known issue from 25.9.0.
This RC is still pending burn in for mainnet.
Fusaka Hardfork details: https://eips.ethereum.org/EIPS/eip-7607#activation
- Holešky scheduled to fork on 2025-10-01 08:48:00
- Sepolia scheduled to fork on 2025-10-14 07:36:00
- Hoodi scheduled to fork on 2025-10-28 18:53:12
Breaking Changes
Upcoming Breaking Changes
- Deprecated CLI options
--Xbonsai-parallel-tx-processing-enabledis deprecated since 25.7.0. Use--bonsai-parallel-tx-processing-enabledinstead.--Xsnapsync-server-enabledis deprecated since 25.7.0. Use--snapsync-server-enabledinstead.--Xsnapsync-synchronizer-pre-merge-headers-only-enabledis deprecated since 25.7.0. Use--snapsync-synchronizer-pre-checkpoint-headers-only-enabledinstead.--Xhistory-expiry-pruneis deprecated since 25.7.0. Use--history-expiry-pruneinstead.
- 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)
- Fast Sync
Additions and Improvements
- Update spring security framework (toml parsing) #9153
- Update grpc and guava #9150
- Implement optional sender balance checks in the layered txpool #9176
- Add
--cache-last-block-headersflag to cache the last n block headers persisted to the blockchain #9223 - Manage unexpected exceptions during block creation #9208
- Upgrade to execution-spec-tests v5.2.0 #9226, #9242
Bug fixes
- Fix eth_subscribe RPC failing to return a block response #9212
- Fix ethstats integration failing to provide block updates to ethstats server #9220
Full Changelog: 25.9.0...25.10.0-RC1
f0390f431612771485a68e4e9e2e177f35243aacc2eec91d4cc00e4f25cf5df1 besu-25.10.0-RC1.zip
9e62ffe9722ea1e20913d1428db0e4039c070298876857528b78e23e8ef1d7b6 besu-25.10.0-RC1.tar.gz