Correction 2026-08-19: the per-block Falcon quorum armed at 14,050,000 is retired in the shipped code; what is enforced is the anchor certificate (>=3 of 9 seals every 32nd block). Patches 0003/0004/0005 regenerated with Apache 4(b) notices and upstream headers visible; 0004 message now states the floor fork is active since 10,141,734
This commit is contained in:
parent
d0cb9ca298
commit
b7669355eb
25
README.md
25
README.md
@ -11,15 +11,24 @@ live chain without asking you to trust anything here.
|
||||
|
||||
## Scope boundary, stated first and not in a footnote
|
||||
|
||||
**These precompiles verify post-quantum signatures inside the EVM. Consensus on chain 2800 is
|
||||
classical secp256k1 ECDSA QBFT.**
|
||||
**These precompiles verify post-quantum signatures inside the EVM. They are not what makes
|
||||
consensus post-quantum, and nothing in the precompile patches touches consensus.**
|
||||
|
||||
Aere Network does not have post-quantum consensus. Block sealing, validator identity and the QBFT
|
||||
vote messages are all classical elliptic-curve cryptography today, and a cryptographically relevant
|
||||
quantum computer would break them exactly as it would break any other ECDSA chain. What is live and
|
||||
post-quantum is the *verification* capability exposed to the EVM: a contract or an account
|
||||
abstraction wallet on chain 2800 can verify a Falcon, ML-DSA or SLH-DSA signature natively, at
|
||||
precompile cost, today.
|
||||
Consensus on chain 2800 is **hybrid post-quantum in a precise and limited sense**, by a separate
|
||||
mechanism: the QBFT header anchor in `anchor/` and `patches/0003`. Since block 13,034,000 every
|
||||
32nd block (an anchor block) must carry, under its block hash, a certificate of at least three
|
||||
valid Falcon-512 validator seals (f+1 of nine; eight or nine are carried in practice), and a node
|
||||
does not finalize an anchor block without it. Classical secp256k1 ECDSA QBFT still finalizes every
|
||||
block; validator identity and QBFT message transport are classical. Correction 2026-08-19: the
|
||||
per-block Falcon quorum rule armed at block 14,050,000 (`aere.falcon.forkBlock`) is, in the shipped
|
||||
code, retired in favour of the anchor rules from block 13,014,000 and changed no enforcement, so
|
||||
the earlier statement that from that height every block required a 2f+1 Falcon quorum to finalize
|
||||
is withdrawn. None of this has been audited by a third party; the scope is stated in
|
||||
`anchor/README.md` and the proofs are stated as measured, not promised.
|
||||
|
||||
What this repository's precompiles add is the *verification* capability exposed to the EVM: a
|
||||
contract or an account abstraction wallet on chain 2800 can verify a Falcon, ML-DSA or SLH-DSA
|
||||
signature natively, at precompile cost, since block 9,189,161.
|
||||
|
||||
Two further boundaries in the same spirit:
|
||||
|
||||
|
||||
@ -61,8 +61,11 @@ running a configuration the chain does not.
|
||||
|
||||
Since block 13,014,000 every 32nd header of chain 2800 carries a sixth element in its QBFT
|
||||
`extraData`: a certificate of validator Falcon-512 seals, universal since block 13,889,296 and
|
||||
enforced at a minimum of three seals per anchor block since 2026-08-14. From block 14,050,000 the
|
||||
network refuses to finalize blocks without that post-quantum quorum.
|
||||
enforced at a minimum of three seals per anchor block (f+1 of nine) since block 13,034,000. A node
|
||||
rejects an anchor block whose certificate holds fewer than three valid seals. (Correction 2026-08-19:
|
||||
an earlier version of this paragraph said that from block 14,050,000 the network refuses to finalize
|
||||
any block without a post-quantum quorum; the per-block rule armed at that height is retired in the
|
||||
shipped code in favour of the anchor rules and changed no enforcement, so that sentence is withdrawn.)
|
||||
|
||||
The anchor ships in this repository both as source, under `anchor/`, and as
|
||||
`patches/0003-aere-pq-anchor.patch`. A node built without it has not been shown to import
|
||||
@ -86,7 +89,7 @@ the real chain found it in one afternoon.
|
||||
|
||||
**Measured 2026-08-16: the from-genesis sync reached the live tip.** A node built only from these
|
||||
packages imported chain 2800 from block 0 to height **14,088,211** and then followed the head,
|
||||
crossing the full-quantum activation at 14,050,000 with zero anchor rejections. Two more things
|
||||
crossing the 14,050,000 activation height (which, see above, changed no enforcement) with zero anchor rejections. Two more things
|
||||
had to be true for that, both now carried by the patches and both described with their measured
|
||||
boundaries in `IMPORT-PROOF-STARE-2026-08-15.md`: a historical window (anchor heights
|
||||
13,267,824 to 13,268,944) in which anchoring was deliberately disarmed fleet-wide, and a recovery
|
||||
|
||||
@ -10,13 +10,33 @@ demonstrable from these files is marked as not demonstrable from these files.
|
||||
|
||||
## Scope boundary, stated first and not in a footnote
|
||||
|
||||
**Consensus on Aere Network chain 2800 is classical secp256k1 ECDSA QBFT.** Block proposal, validator
|
||||
identity and the QBFT vote messages are all classical elliptic-curve cryptography. A cryptographically
|
||||
relevant quantum computer would break them exactly as it would break any other ECDSA chain.
|
||||
**Consensus on Aere Network chain 2800 is classical secp256k1 ECDSA QBFT with a post-quantum
|
||||
checkpoint enforced every 32 blocks.** This code is what adds the checkpoint, in two steps that
|
||||
should not be confused:
|
||||
|
||||
What this code adds is narrower and is the whole point: **the block hash commits to a Falcon
|
||||
certificate signed by the validators.** That is a binding, not a replacement. It does not make
|
||||
consensus post-quantum and is never described as such.
|
||||
1. **The binding.** From block 13,014,000 the block hash of every anchored header (every 32nd
|
||||
block) commits to a Falcon-512 certificate signed by the validators. That is a binding, not a
|
||||
replacement: a rewrite of anchored history must also forge the post-quantum signatures.
|
||||
2. **The enforced minimum.** From block 13,034,000 a node does not finalize an anchor block unless
|
||||
its certificate holds at least three valid Falcon-512 seals (f+1 of nine, the guarantee that at
|
||||
least one honest validator signed; eight or nine are carried in practice). Blocks between
|
||||
anchors carry no Falcon seals and are finalized by ECDSA alone, so the post-quantum guarantee
|
||||
is a checkpoint about every 16 seconds, not a per-block quorum.
|
||||
|
||||
Correction 2026-08-19: the fleet was also configured on 2026-08-15 with `aere.falcon.forkBlock`
|
||||
at 14,050,000, intended as a per-block blocking Falcon quorum. In the shipped code that rule
|
||||
(`FalconSealValidationRule`) is retired at `aere.pq.anchorBlock` (13,014,000) in favour of the
|
||||
anchor rules (`PqAnchorConfig.legacyFalconRuleRetirementBlock`), so at 14,050,000 it was already
|
||||
inert, and the chain itself confirms it: blocks between anchors carry no Falcon seals, which a
|
||||
per-block quorum rule would have rejected. The earlier statement in this repository that from
|
||||
14,050,000 every block required a 2f+1 Falcon quorum to finalize is withdrawn.
|
||||
|
||||
"Hybrid" is the honest word only in the checkpoint sense above, and "post-quantum consensus"
|
||||
without that qualification overstates: block proposal, validator identity and message transport
|
||||
are classical elliptic-curve cryptography, and a cryptographically relevant quantum computer would
|
||||
break those exactly as on any other ECDSA chain. What it cannot do is rewrite history past the
|
||||
last anchor without also forging Falcon-512 signatures. None of this has been audited by a third
|
||||
party.
|
||||
|
||||
The threat it addresses is not "harvest now, decrypt later". A signature is public; there is nothing
|
||||
to harvest. The threat is **retroactive rewriting**: validator keys recovered later can be used to
|
||||
|
||||
@ -1020,7 +1020,17 @@ diff --git a/consensus/common/build.gradle b/consensus/common/build.gradle
|
||||
index 499c974f1..a6f5276f2 100644
|
||||
--- a/consensus/common/build.gradle
|
||||
+++ b/consensus/common/build.gradle
|
||||
@@ -11,6 +11,12 @@
|
||||
@@ -1,16 +1,22 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
@ -16,8 +16,11 @@ floored block.
|
||||
Default forkBlock is Long.MAX_VALUE, so with no configuration the behaviour is
|
||||
identical to the unmodified file and pre-fork blocks validate unchanged.
|
||||
|
||||
NOT ACTIVE ON AERE NETWORK CHAIN 2800. No fork block has been set on mainnet.
|
||||
Arming it is a governance decision that has not been taken.
|
||||
ACTIVE ON AERE NETWORK CHAIN 2800 since block 10,141,734, with a floor of
|
||||
1,000,000,000 wei, delivered to every node as system properties
|
||||
(-Daere.basefee.floor.forkBlock=10141734 -Daere.basefee.floor.value=1000000000,
|
||||
see RUN-A-NODE.md). A node without this patch, or with the properties unset,
|
||||
computes a lower base fee from that height on and rejects every block.
|
||||
|
||||
Upstream-Status: Inappropriate [Aere Network specific consensus rule]
|
||||
|
||||
@ -46,7 +49,18 @@ diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/f
|
||||
index 0ee4f7409..83a639c1b 100644
|
||||
--- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/feemarket/LondonFeeMarket.java
|
||||
+++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/feemarket/LondonFeeMarket.java
|
||||
@@ -12,6 +12,24 @@
|
||||
@@ -1,17 +1,35 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
@ -18,9 +18,13 @@ both fixed here, both in MainnetProtocolSpecs.java:
|
||||
first activation block, which is exactly what was measured.
|
||||
|
||||
Modified upstream file: MainnetProtocolSpecs.java (plus one build.gradle line).
|
||||
The upstream copyright header is unchanged, per Apache License 2.0 section 4(c);
|
||||
the in-diff comments state exactly what changed, per section 4(b). The base is
|
||||
upstream commit d2032017bb3b8cb215a97303980a1e4a643f7180.
|
||||
The upstream copyright header ("Copyright contributors to Besu") is kept
|
||||
unchanged and is visible in the first hunk, per Apache License 2.0 section 4(c);
|
||||
directly below it this patch adds a "Modifications Copyright" block that states
|
||||
what was changed, which is the in-file notice required by section 4(b), and it
|
||||
travels inside the diff so the applied tree carries it. The holder is named in
|
||||
NOTICE, per section 4(d). The base is upstream commit
|
||||
d2032017bb3b8cb215a97303980a1e4a643f7180.
|
||||
|
||||
One deliberate omission: the fleet's own copy of this change also wires an optional
|
||||
Block-STM parallel block processor behind an environment gate. That wiring references
|
||||
@ -28,12 +32,48 @@ source files not published here, and with the gate unset it reproduces the defau
|
||||
builder exactly, so this patch carries the consensus-relevant part only: the Osaka
|
||||
isolation and EIP-2935. A build from this patch follows the chain; it does not enable
|
||||
parallel execution.
|
||||
---
|
||||
.../besu/ethereum/mainnet/MainnetProtocolSpecs.java | 34 +++++++++++-
|
||||
evm/build.gradle | 9 +++++++++
|
||||
2 files changed, 41 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java
|
||||
index 87f1a6b..545aeb2 100644
|
||||
--- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java
|
||||
+++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetProtocolSpecs.java
|
||||
@@ -1321,7 +1321,17 @@ public abstract class MainnetProtocolSpecs {
|
||||
@@ -1,17 +1,31 @@
|
||||
/*
|
||||
* Copyright contributors to Besu.
|
||||
*
|
||||
* 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 2026 Aere Network.
|
||||
+ *
|
||||
+ * This file was changed by Aere Network: the futureEips milestone is based on
|
||||
+ * osakaDefinition instead of amsterdamDefinition, so that the AERE activation at
|
||||
+ * block 9,189,161 keeps the Osaka block format, and EIP-2935 (historical block
|
||||
+ * hashes in the system contract) is enabled in that same milestone. Nothing
|
||||
+ * upstream was removed; the unmodified original is Hyperledger Besu commit
|
||||
+ * d2032017bb3b8cb215a97303980a1e4a643f7180, and the upstream copyright header
|
||||
+ * above is left exactly as it was found.
|
||||
+ *
|
||||
+ * This notice is required by Apache License 2.0 section 4(b).
|
||||
+ */
|
||||
package org.hyperledger.besu.ethereum.mainnet;
|
||||
|
||||
import static org.hyperledger.besu.datatypes.HardforkId.MainnetHardforkId.AMSTERDAM;
|
||||
@@ -1321,7 +1335,17 @@ public abstract class MainnetProtocolSpecs {
|
||||
final boolean isParallelTxProcessingEnabled,
|
||||
final BalConfiguration balConfiguration,
|
||||
final MetricsSystem metricsSystem) {
|
||||
@ -52,7 +92,7 @@ index 87f1a6b..545aeb2 100644
|
||||
chainId,
|
||||
enableRevertReason,
|
||||
genesisConfigOptions,
|
||||
@@ -1330,7 +1340,15 @@ public abstract class MainnetProtocolSpecs {
|
||||
@@ -1330,7 +1354,15 @@ public abstract class MainnetProtocolSpecs {
|
||||
isParallelTxProcessingEnabled,
|
||||
balConfiguration,
|
||||
metricsSystem)
|
||||
@ -72,7 +112,32 @@ diff --git a/evm/build.gradle b/evm/build.gradle
|
||||
index b416c99..9b4e0a5 100644
|
||||
--- a/evm/build.gradle
|
||||
+++ b/evm/build.gradle
|
||||
@@ -37,6 +37,7 @@ dependencies {
|
||||
@@ -1,16 +1,24 @@
|
||||
/*
|
||||
* Copyright contributors to Hyperledger Besu
|
||||
*
|
||||
* 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 2026 Aere Network.
|
||||
+ *
|
||||
+ * This file was changed by Aere Network: one dependency line was added
|
||||
+ * (org.bouncycastle:bcprov-jdk18on) for the EIP-2935 system-call wiring in
|
||||
+ * patches/0005-aere-eip2935-futureeips.patch. The upstream copyright header above
|
||||
+ * is left exactly as it was found, as Apache License 2.0 section 4(c) requires; this
|
||||
+ * notice is the one required by section 4(b).
|
||||
+ *
|
||||
*/
|
||||
|
||||
@@ -37,6 +45,7 @@ dependencies {
|
||||
annotationProcessor 'com.google.dagger:dagger-compiler'
|
||||
|
||||
implementation project(':crypto:algorithms')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user