Skip to content

Releases: besu-eth/besu

26.6.0

04 Jun 00:54
de8d3f0

Choose a tag to compare

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

26.5.0

12 May 18:04
9b674a5

Choose a tag to compare

Breaking Changes

  • Plugin API
    • Removed BesuConfiguration#getRpcHttpHost() and BesuConfiguration#getRpcHttpPort() which have been deprecated since 25.1.0. Use getConfiguredRpcHttpHost() and getConfiguredRpcHttpPort() instead. #10268
  • 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_call and 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-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)
  • Besu will require Java JDK 25 to build and run 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.

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 SyncDurationMetrics where the backing HashMap was mutated from multiple sync threads in parallel, causing missing or zero sync_duration samples. #10277
  • Fix CVE-2026-34480 and CVE-2026-34478 in log4j #10332
  • Reject Status messages whose declared protocolVersion field disagrees with the on-wire layout (eth/68 vs eth/69+). The decoder now throws RLPException directly so the peer is cleanly disconnected with SUBPROTOCOL_TRIGGERED_UNPARSABLE_STATUS. #10241
  • Fix updateForkChoice ignoring setNewHead failure: when world state cannot be rolled to the target block, return INVALID to the CL instead of silently returning VALID with inconsistent finalized/safe state. #10224
  • Fix DefaultPeerId comparator #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_hashes match 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 default latest..latest bounds, 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 flag xemptyblockperiodseconds will be removed in a future release. #10264
  • Release worker threads after engine API timeout to avoid blocking subsequent requests #10311
  • evmtool blocktest --verbose flag, 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 GetBlockBodies messages 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 / NodeData eth-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 slotNumber in payloadIdentifier generation #10242
  • Change Block Access List index encoding to uint32 #10279
  • Add limit support to debug opcode tracing to stop capture after N EVM steps (0 keeps 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_capabilities JSON-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-evm as an API dependency from plugin-api #10262
  • Update Gradle plugin for Besu plugin development to 0.2.0 #10263
  • Rename InvalidSystemCallAddressException to SystemCallNoCodeAtAddressException to 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

22 Apr 15:25
d203201

Choose a tag to compare

26.4.0

Repository Migration

  • The Besu repository has moved from hyperledger/besu to besu-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-ratio for 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 with BLOCK_FULL
  • 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_traceTransaction and debug_traceBlockByNumber: the error field in StructLog entries 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. #10117
  • debug_traceTransaction now returns a JSON-RPC error response (-32000: Transaction not found) instead of a success response with null result when the transaction hash is unknown #10150
  • debug_traceBlockByNumber now returns a JSON-RPC error response (-32000: genesis is not traceable) instead of a success response with null result when tracing the genesis block #10133
  • Removed deprecated Holesky network. --network holesky is 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_call and 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-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)
  • 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 RLPException when decoding proposals from pre-26.1.0 nodes that do not include the blockAccessList field #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 transactionReceipts subscription type to eth_subscribe that pushes all transaction receipts when a new block is added, with optional transactionHashes filter to receive receipts for specific transactions only #10190
  • Add enableMemory parameter to debug_traceTransaction and debug_traceBlockByNumber. Defaults to false; memory is only included in trace output when explicitly enabled. The existing disableMemory parameter continues to work for backwards compatibility #10169
  • --net-restrict now 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-transaction CLI option to configure the maximum number of blobs per transaction #9912
  • Add --max-blobs-per-block CLI 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 blockTimestamp to transaction RPC results #9887
  • Add txpool_status RPC method #10002
  • Add txpool_contentFrom JSON-RPC method #10111
  • Add txpool_content JSON-RPC method #10120
  • Add txpool_inspect JSON-RPC method #10121
  • Add maxUsedGas field to eth_simulateV1 results #10066
  • Add latestBlock field 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 -Pcases case 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-ipv6 CLI options enable a second UDP discovery socket; --p2p-ipv6-outbound-enabled controls 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...
Read more

26.2.0

05 Mar 03:39
e5e9ae2

Choose a tag to compare

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-state and x-restore-state are removed #9821
  • Omit totalDifficulty from post-merge blockResults #9836
  • Chain pruning CLI options have been redesigned with new behavior: #9637
    • --Xchain-pruning-enabled now 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-retained behavior changes:
      • In ALL mode: controls block retention (previously the only mode)
      • In BAL mode: has no effect as blocks are never pruned
      • Default value changed from 7200 to 113056 blocks (Weak Subjectivity Period: 3533 epochs × 32 slots)
    • New flag --Xchain-pruning-bals-retained sets the number of BALs to retain:
      • Defaults to the value of --Xchain-pruning-blocks-retained when not specified
      • Must be >= 113056 (configurable via --Xchain-pruning-retained-minimum)
      • In ALL mode: should typically be less than or equal to --Xchain-pruning-blocks-retained
      • In BAL mode: controls BAL retention independently
    • --Xchain-pruning-frequency now controls both block and BAL pruning operations (previously only controlled block pruning)
    • Renamed --Xchain-pruning-blocks-retained-limit to --Xchain-pruning-retained-minimum (applies to both blocks and BALs)
      • New default value: 113056 blocks (3533 epochs × 32 slots, based on Weak Subjectivity Period)
      • Previous default: 7200 blocks
  • 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_call and 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-name in block-test evmtool 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 4byteTracer in debug_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-ipv6 CLI options enable a second UDP discovery socket; --p2p-ipv6-outbound-enabled controls 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/udp6 fields: when --p2p-port=0 is 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 ENR seq is incremented #9888
  • Fix DiscV5 ENR tcp/tcp6 fields: 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 isAllowFutureNonce is true #9759

90b78a6739c37c6edffe362587231c51ce1b816b1f13c7aad94547e1a3a86e10 besu-26.2.0.zip
0b9535001e0081a5bd7c861a1c6444914ae7f0869355588e260d97ae5a59a914 besu-26.2.0.tar.gz

26.1.0

03 Feb 05:04
31eb48e

Choose a tag to compare

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 for debug_trace* methods.
  • RPC changes to enhance compatibility with other ELs
    • RPCs using filter parameter including eth_getLogs and trace_filter return an error if fromBlock is greater than toBlock, or if toBlock extends beyond chain head (previously returned an empty list) #9604
  • 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_call and 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-prune is 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_getBlobsV3 method #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 getBlobsV2 by 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

Full Changelog: 25.12.0...26.1.0

25.12.0

12 Dec 07:27
05b6c1a

Choose a tag to compare

25.12.0

Breaking Changes

  • Remove these deprecated CLI options #9385
    • Remove--Xbonsai-parallel-tx-processing-enabled deprecated since 25.7.0. Use --bonsai-parallel-tx-processing-enabled instead.
    • Remove --Xsnapsync-server-enabled deprecated since 25.7.0. Use --snapsync-server-enabled instead.
    • Remove --Xsnapsync-synchronizer-pre-merge-headers-only-enabled deprecated since 25.7.0. Use --snapsync-synchronizer-pre-checkpoint-headers-only-enabled instead.
    • Remove --Xhistory-expiry-prune deprecated since 25.7.0. Use --history-expiry-prune instead.
  • 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 opcodes optional parameter to RPC methods: debug_standardTraceBlockToFile, debug_standardTraceBadBlockToFile, debug_traceBlockByNumber, debug_traceBlockByHash, debug_traceTransaction, debug_traceBlock, debug_traceCall for tracing specified opcodes #9335
  • Use Eclipse Temurin OpenJDK JRE in Besu docker image #9392
  • Add Linea named networks for linea_mainnet and linea_sepolia #9436, #9518
  • Add eth_subscribe and eth_unsubscribe support to IPC service #9504
  • Add experimental callTracer tracer option to debug_trace* methods. Enabled using --Xenable-extra-debug-tracers=true option. Issue #8326 implemented via PR #8960 and #9072.

Performance

  • 5-6x faster toFastHex calculation for engine_getBlobsV2 #9426
  • Optimise engine_getPayload* methods and engine_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=true option #8908
  • Fix an issue where Besu does not support 0x80 as transaction type when decoding eth/69 receipts #9520

fa02fc7d9f7965036caea0b86efdcfdddb9e982416c8fb026b580815a1ee2de7 besu-25.12.0.zip
11a880ad19cbfa30edb71a0a990310c704d6f6625601e6125507092b07db51a5 besu-25.12.0.tar.gz

New Contributors

Full Changelog: 25.11.0...25.12.0

25.11.0

05 Nov 02:35

Choose a tag to compare

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-enabled is deprecated since 25.7.0. Use --bonsai-parallel-tx-processing-enabled instead.
    • --Xsnapsync-server-enabled is deprecated since 25.7.0. Use --snapsync-server-enabled instead.
    • --Xsnapsync-synchronizer-pre-merge-headers-only-enabled is deprecated since 25.7.0. Use --snapsync-synchronizer-pre-checkpoint-headers-only-enabled instead.
    • --Xhistory-expiry-prune is deprecated since 25.7.0. Use --history-expiry-prune instead.
  • 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_getBlockReceipts and eth_getTransactionReceipt results #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

16 Oct 08:30
7c3bc92

Choose a tag to compare

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-enabled is deprecated since 25.7.0. Use --bonsai-parallel-tx-processing-enabled instead.
    • --Xsnapsync-server-enabled is deprecated since 25.7.0. Use --snapsync-server-enabled instead.
    • --Xsnapsync-synchronizer-pre-merge-headers-only-enabled is deprecated since 25.7.0. Use --snapsync-synchronizer-pre-checkpoint-headers-only-enabled instead.
    • --Xhistory-expiry-prune is deprecated since 25.7.0. Use --history-expiry-prune instead.
  • 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-headers flag 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-enabled flag 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_getLogs result #9278
  • Add --ethstats-report-interval CLI 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 isCancelled method to TransactionEvaluationContext. 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

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

03 Oct 06:13
5505822

Choose a tag to compare

25.10.0-RC2 Pre-release
Pre-release

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-enabled is deprecated since 25.7.0. Use --bonsai-parallel-tx-processing-enabled instead.
    • --Xsnapsync-server-enabled is deprecated since 25.7.0. Use --snapsync-server-enabled instead.
    • --Xsnapsync-synchronizer-pre-merge-headers-only-enabled is deprecated since 25.7.0. Use --snapsync-synchronizer-pre-checkpoint-headers-only-enabled instead.
    • --Xhistory-expiry-prune is deprecated since 25.7.0. Use --history-expiry-prune instead.
  • 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

  • Performance improvements to EQ opcode #9229
  • Update jc-kzg dependency #9261

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

01 Oct 00:47
8e11bbb

Choose a tag to compare

25.10.0-RC1 Pre-release
Pre-release

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-enabled is deprecated since 25.7.0. Use --bonsai-parallel-tx-processing-enabled instead.
    • --Xsnapsync-server-enabled is deprecated since 25.7.0. Use --snapsync-server-enabled instead.
    • --Xsnapsync-synchronizer-pre-merge-headers-only-enabled is deprecated since 25.7.0. Use --snapsync-synchronizer-pre-checkpoint-headers-only-enabled instead.
    • --Xhistory-expiry-prune is deprecated since 25.7.0. Use --history-expiry-prune instead.
  • 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-headers flag 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