github besu-eth/besu 26.4.0

2 hours ago

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 can establish connections #9873
  • Add DiscV5 discovery metrics (discv5_live_nodes_current, discv5_total_nodes_current) to track node counts in the routing table #9692
  • Make DiscV5 discovery parameters externally configurable: --Xv5-discovery-interval-seconds (default: 1), --Xv5-discovery-timeout-seconds (default: 30), and --Xv5-minimum-peer-ratio (default: 0.8) allow tuning of the peer discovery cadence, per-round timeout, and peer saturation threshold without code changes #10127

Don't miss a new besu release

NewReleases is sending notifications on new releases.