Skip to content

26.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 19 Aug 22:49
· 59 commits to main since this release
f2557d7

Upcoming Breaking Changes

  • --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
  • --Xsnapsync-synchronizer-pivot-block-distance-before-caching is deprecated and will be removed in a future release; the flag is now a silent no-op.
  • --snapsync-synchronizer-pre-checkpoint-headers-only-enabled is deprecated and will be removed in a future release; the flag is now a silent no-op.
  • --rpc-tx-feecap will treat a value of 0 as limiting fees to 0. Today it treats 0 as "do not cap fees". To achieve similar behaviour set it to a suitably large value to effectively prevent any fee capping.

Breaking Changes

  • The experimental --Xv5-discovery-enabled flag is removed; discovery now defaults to --discovery-mode=V4. Use --discovery-mode=BOTH or --discovery-mode=V5 to enable DiscV5.
    • NOTE: KNOWN ISSUE with --discovery-mode=BOTH (increased CPU) - this will be patched in the NEXT release #11027
  • The genesis file v5Bootnodes key is removed; ENR bootnodes must now be listed in the unified bootnodes array alongside enode URLs. Besu's bundled network genesis files were migrated automatically - this only affects custom/downstream genesis files that still use the old v5Bootnodes key, whose ENR entries will otherwise be silently dropped.
  • Removed the legacy PANTHEON_ environment variable prefix for configuration options, everyone should already use the BESU_ prefix at this time.

Additions and Improvements

  • Add --checkpoint=<hash>:<number>:<totalDifficulty> CLI option to anchor sync to a trusted checkpoint, overriding any checkpoint configured in the genesis file. The option is only used by snap sync and is ignored (with a warning) in FULL sync-mode.
  • Add server-side cap on EVM steps captured per debug_trace*/trace_call request
  • Extract the Plugin API core module: the plugin lifecycle, service lookup and shared block/transaction data views now live in a new besu-plugin-api-core artifact, re-exported by besu-plugin-api so existing consumers are unaffected. Also adds a minimal org.hyperledger.besu.plugin.CoreConfiguration service exposing the node data path. #10875
  • Extract the Plugin API metrics module. The metrics contracts (MetricsSystem, metric categories and instruments) now live in a new besu-plugin-api-metrics artifact, re-exported by besu-plugin-api so existing consumers are unaffected. #10903
  • Extract the Plugin API permissioning module. The permissioning contracts (PermissioningService and the node connection, node message and transaction permissioning providers) now live in a new besu-plugin-api-permissioning artifact, re-exported by besu-plugin-api so existing consumers are unaffected. #10919
  • Extract the Plugin API security module. The security module contracts (SecurityModuleService, the SecurityModule signer SPI, its PublicKey and Signature data interfaces and SecurityModuleException) now live in a new besu-plugin-api-security artifact, re-exported by besu-plugin-api so existing consumers are unaffected. #10941
  • Add --logging-format CLI option to select structured JSON console logging (ECS, GCP, LOGSTASH, GELF) in addition to the default PLAIN pattern output, without requiring a custom LOG4J_CONFIGURATION_FILE. Each format is a bundled Log4j2 configuration file selected at startup. #9626
  • Add a japicmp compatibility check (:plugin-api:checkAPICompatibility) that fails the build if the Plugin API changes in any way that is not a pure addition against the last released version #10823
  • Remove the Plugin API source-hash check (:plugin-api:checkAPIChanges), which fired on any source edit without saying anything about actual compatibility. The japicmp check is now the compatibility gate for the Plugin API #10879
  • Remove the unused ethereum:verkletrie module and the ipa-multipoint native dependency it pulled in. Verkle trie support had already been fully removed from the storage/worldstate layers in earlier work; this removes the last remaining vestige (standalone Bandersnatch curve arithmetic with no callers).
  • Apply rpc-max-logs-range to eth_getFilterLogs and eth_newFilter
  • Improve logging for malformed discv4 UDP packets
  • DiscV4 now supports IPv6 dual-stack RLPx: a node running --discovery-mode=V4 with --p2p-interface-ipv6/--p2p-host-ipv6 set now binds a second IPv6 RLPx TCP socket and advertises IPv6 ENR/enode fields, instead of those options being ignored with a warning. #10800
  • Dual-stack discovery and RLPx now support binding the same port number for both --p2p-port and --p2p-port-ipv6, using a single dual-stack socket instead of two independent per-family sockets - simplifying firewall rules for operators. Previously this configuration could fail to start with a port-conflict error. #10800
  • Add discovery/RLPx observability metrics for the shared DiscV4/DiscV5 transport and outbound RLPx connections - see the PR description for the full list of new metrics. #10837
  • Add --p2p-tx-feecap CLI option, the P2P equivalent of --rpc-tx-feecap, capping the maximum transaction fees (in Wei) accepted for transactions received from peers. The default is no cap, leaving existing behaviour unchanged. #10819

Bug fixes

  • Bound the DiscV4 inbound packet pipeline to 256 in-flight packets, dropping excess datagrams at ingress instead of queueing without limit, preventing discovery-port flood from exhausting memory. Drops are counted by discovery_packets_dropped_total.
  • Cap the number of snap/1-2 GET_* requests concurrently scheduled for processing on a snap-serving node, both per-peer (--Xsnapsync-server-max-concurrent-requests-per-peer, default 8) and globally (--Xsnapsync-server-max-concurrent-requests, default 200, 0 for no limit), closing an unbounded native-thread fan-out path where a flood of inbound snap requests could exhaust the EthScheduler services pool. The global default is sized as --max-peers (default 25) times the per-peer default, so legitimate traffic from a fully-peered node is never globally throttled. Requests rejected by either cap get an empty response instead of being silently dropped, so the requesting peer doesn't time out waiting for a reply.
  • EIP-1459 DNS discovery now rejoins TXT records split across multiple <character-string>s. Records longer than 255 bytes were truncated, so Besu silently discarded most of every tree, resolving 832 of 3000 nodes from the mainnet tree. #10985
  • Queue backward-sync targets received before peer readiness and retry when a peer connects. #10843
  • Return BLOCK_NOT_FOUND for unknown block hashes and GENESIS_BLOCK_NOT_TRACEABLE for genesis blocks from debug_traceBlockByHash. #10701
  • Added a configurable range cap (--graphql-max-blocks-range, default 5000) for GraphQL queries.
  • Bonsai world state rolling failures are now logged at WARN instead of INFO, and a missing block header or trie log during a roll reports which block hash or trie log was missing. #10859
  • Log malformed peer messages at DEBUG instead of ERROR in ApiHandler, since they indicate peer misbehavior rather than a Besu fault. #10858
  • Fix a deadlock where FullSyncTargetManager's (and checkpoint sync's) retry loop could hang forever waiting for a new peer to connect, even though the already-connected peer just needed its outstanding-request budget to free back up. The same fix was applied to snap/fast sync's pivot block selection. #10864
  • Peers disconnected for permanent incompatibilities (mismatched network ID, mismatched genesis hash, null/unexpected node ID, or self-connection) are now added to the denylist and will not be reconnected. Previously only BREACH_OF_PROTOCOL and INCOMPATIBLE_P2P_PROTOCOL_VERSION triggered denylisting. #10827
  • Fix prestateTracer (including diffMode) failing with an internal error on debug_traceTransaction, caused by the pre-transaction parent world state updater being unavailable on the single-transaction trace path. #10798
  • Raise the default DiscV5 discovery round timeout (--Xv5-discovery-timeout-seconds) from 30 to 60 seconds to avoid spurious round failures on networks with many unreachable candidates #10800
  • Fix QBFT/IBFT mining continuing to seal blocks after the merge terminal total difficulty (TTD) is reached #10733
  • Fix the IBFT2 mining coordinator restarting alongside QBFT after a node restart on IBFT2->QBFT migration networks, which produced competing blocks and endless Failed to import block errors. Sync events no longer start the IBFT2 coordinator directly; lifecycle control stays with the migrating coordinator. #10680
  • Fix ibft_* and qbft_* JSON-RPC methods returning Method not enabled on IBFT2->QBFT migration networks (genesis containing both ibft2 and qbft sections). #10679
  • Fix admin_nodeInfo reporting wrong RLPx/discovery ephemeral ports under --nat-method=DOCKER, due to a swapped NAT port mapping and a stale pre-bind snapshot. #10860
  • Recover from restart during flatDB heal sync step #10883
  • Cap pre-STATUS RLPx connections and close them on eviction.
  • Fix txpool incorrectly evicting authority pending transactions when EIP-7702 delegation tuples are skipped during block execution
  • Reject RLP-wrapped typed transactions during block-body decoding, so a block built from the wrapped encoding cannot hash identically to one built from the canonical encoding.

d19de7996560d522016927dbe232cbc68ab479f1ab064eecec2ee363c86a7c10 besu-26.8.0.zip
4f80f17b129ac970135263f3aa8a5c290366aec50c50bbcdadda0af127dd5540 besu-26.8.0.tar.gz