From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aere Network Date: Fri, 09 Oct 2026 11:10:10 +0000 Subject: [PATCH] Aere Network: the chain-2800 fleet distribution of 2026-10-02 (heard-seal judge, snap request cap) AERE patch 0009: the two changes the chain-2800 fleet has run since 2026-10-05 on top of patch 0008 Why this patch exists: since 2026-10-05 the Besu nodes of chain 2800 run a distribution built from the exact tree of patch 0008 plus two changes. Neither changes what a node accepts below the AIP-22 stage 4 height (aere.pq.finalityBlock, not set on chain 2800), so a node built from patches 0001 and 0003 to 0008 follows the chain today. This patch brings the recipe to the exact source tree of that distribution, so that the published recipe and the fleet are the same code again, and so that a node built from the recipe behaves as the fleet does on the day stage 4 is activated. What it changes, as one delta over the tree produced by patches 0001 and 0003 to 0008: - the heard-seal store (PqSealCache) and commit messages that arrive before the proposal (RoundState, with the new class AereD454PendingCommits). From the stage 4 height, a seal that does not verify never displaces one that does, a verified seal is never displaced, and a commit that arrives before the proposal waits in a bounded buffer and takes its author's place only after it has been validated against the proposal. Below that height, and on any node without aere.pq.finalityBlock, both paths execute exactly the code of patch 0008; - a cap on the snap-protocol requests a node serves concurrently, per peer (default 8) and in total (default 200), ported from upstream Besu (commit 683880baa6, advisory GHSA-pcv4-pxhv-99m7). A request over the cap receives an empty response with the same request id; 0 disables the cap; a missing snap configuration takes the default caps, never "no cap"; - the tests of both changes (AereD454SealCacheTest, AereD454RoundStateTest with its fixture AereD412Fixture, AereD434SnapCapTest) and the adjusted upstream test SnapProtocolManagerTest; - the licence notices of section 4(b) (see below): in files modified by patch 0008, fifteen notices named patch files that are not part of this package; they now name patch 0008, which carries those changes. One notice from patch 0001 named its own patch file with a doubled extension; it now names it exactly. Only the patch name on that line changes, so the compiled classes are unchanged. Nothing else is left out: patches 0001 and 0003 to 0009 applied on a pristine d2032017 checkout reproduce the fleet source tree file for file, apart from the in-file licence notices described below and the three lines that patch 0008 already describes. The upstream copyright header ("Copyright contributors to Besu" or the ConsenSys header) of every modified file is kept unchanged, per Apache License 2.0 section 4(c). Every upstream Java file this patch modifies for the first time receives, in this diff, the in-file modification notice that section 4(b) requires, naming this patch; files already modified by patches 0001 and 0003 to 0008 keep the notice naming the patch that first modified them. The changed files are also listed above the diff, which is the statement of modification that section 4(b) requires. --- app/src/main/java/org/hyperledger/besu/cli/options/SynchronizerOptions.java | 40 +++ .../main/java/org/hyperledger/besu/controller/BesuControllerBuilder.java | 9 +- .../main/java/org/hyperledger/besu/consensus/common/bft/PqSealCache.java | 281 ++++++++++++++++- .../besu/consensus/common/bft/blockcreation/BftBlockCreator.java | 2 +- .../besu/consensus/common/bft/blockcreation/BftMiningCoordinator.java | 2 +- .../hyperledger/besu/consensus/common/bft/messagewrappers/BftMessage.java | 2 +- .../org/hyperledger/besu/consensus/common/bft/AereD454SealCacheTest.java | 434 ++++++++++++++++++++++++++ .../org/hyperledger/besu/consensus/qbft/core/messagewrappers/Proposal.java | 2 +- .../hyperledger/besu/consensus/qbft/core/messagewrappers/RoundChange.java | 2 +- .../besu/consensus/qbft/core/statemachine/AereD454PendingCommits.java | 203 +++++++++++++ .../org/hyperledger/besu/consensus/qbft/core/statemachine/RoundState.java | 21 ++ .../besu/consensus/qbft/core/statemachine/AereD454RoundStateTest.java | 317 +++++++++++++++++++ .../hyperledger/besu/consensus/qbft/core/validation/AereD412Fixture.java | 590 ++++++++++++++++++++++++++++++++++++ .../java/org/hyperledger/besu/ethereum/api/query/BlockchainQueries.java | 2 +- .../org/hyperledger/besu/ethereum/mainnet/MainnetTransactionValidator.java | 2 +- .../java/org/hyperledger/besu/ethereum/mainnet/WithdrawalsValidator.java | 2 +- .../src/main/java/org/hyperledger/besu/ethereum/eth/manager/EthPeers.java | 2 +- .../org/hyperledger/besu/ethereum/eth/manager/snap/SnapProtocolManager.java | 149 ++++++++- .../java/org/hyperledger/besu/ethereum/eth/manager/snap/SnapServer.java | 18 +- .../hyperledger/besu/ethereum/eth/sync/snapsync/SnapSyncConfiguration.java | 33 ++ .../main/java/org/hyperledger/besu/ethereum/eth/sync/state/SyncState.java | 2 +- .../org/hyperledger/besu/ethereum/eth/manager/snap/AereD434SnapCapTest.java | 341 +++++++++++++++++++++ .../hyperledger/besu/ethereum/eth/manager/snap/SnapProtocolManagerTest.java | 9 +- .../java/org/hyperledger/besu/ethereum/eth/sync/state/SyncStateTest.java | 2 +- ethereum/rlp/src/main/java/org/hyperledger/besu/ethereum/rlp/RLPInput.java | 2 +- evm/src/main/java/org/hyperledger/besu/evm/frame/MessageFrame.java | 2 +- evm/src/main/java/org/hyperledger/besu/evm/frame/TxValues.java | 2 +- .../org/hyperledger/besu/evm/precompile/MainnetPrecompiledContracts.java | 2 +- .../org/hyperledger/besu/evm/precompile/P256VerifyPrecompiledContract.java | 2 +- 29 files changed, 2437 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/org/hyperledger/besu/cli/options/SynchronizerOptions.java b/app/src/main/java/org/hyperledger/besu/cli/options/SynchronizerOptions.java index d4a2eb048a..0d3f642e56 100644 --- a/app/src/main/java/org/hyperledger/besu/cli/options/SynchronizerOptions.java +++ b/app/src/main/java/org/hyperledger/besu/cli/options/SynchronizerOptions.java @@ -1,33 +1,39 @@ /* * Copyright ConsenSys AG. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * SPDX-License-Identifier: Apache-2.0 + * + * Modifications Copyright contributors to the Aere Network. + * + * This file was modified by contributors to the Aere Network, as required by section 4(b) of the + * Apache License 2.0. The copyright header above is the upstream one and is left exactly as it was + * found, as section 4(c) requires. The change itself is in patches/0009-aere-pq-seal-judge-snap-cap.patch. */ package org.hyperledger.besu.cli.options; import static org.hyperledger.besu.ethereum.eth.sync.snapsync.SnapSyncConfiguration.DEFAULT_SNAP_SYNC_SAVE_PRE_MERGE_HEADERS_ONLY_ENABLED; import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration; import org.hyperledger.besu.ethereum.eth.sync.snapsync.ImmutableSnapSyncConfiguration; import org.hyperledger.besu.ethereum.eth.sync.snapsync.SnapSyncConfiguration; import java.net.URI; import java.util.Arrays; import java.util.List; import com.google.common.collect.Range; import org.apache.tuweni.units.bigints.UInt256; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import picocli.CommandLine; /** The Synchronizer Cli options. */ @@ -80,40 +86,46 @@ public class SynchronizerOptions implements CLIOptions