Patch 0008: AIP-22 stages 1 to 3 and the rest of the chain-2800 fleet distribution of 2026-09-29; run-node.sh applies it, passes the stage-3 properties, ships the registry v3 epoch and rebuilds when the patch set changes
This commit is contained in:
parent
ea4ebcda5d
commit
063424c490
@ -99,6 +99,14 @@ Both patches target upstream commit `d2032017bb3b8cb215a97303980a1e4a643f7180`,
|
|||||||
| `patches/0001-aere-pqc-precompiles-mainnet.patch` | `0x0AE1` to `0x0AE5`, the five live on mainnet | pristine upstream `d2032017` |
|
| `patches/0001-aere-pqc-precompiles-mainnet.patch` | `0x0AE1` to `0x0AE5`, the five live on mainnet | pristine upstream `d2032017` |
|
||||||
| `patches/0002-aere-pqc-precompiles-testnet.patch` | `0x0AE6` and `0x0AE7`, testnet only | the tree after 0001 |
|
| `patches/0002-aere-pqc-precompiles-testnet.patch` | `0x0AE6` and `0x0AE7`, testnet only | the tree after 0001 |
|
||||||
| `patches/0003-aere-pq-anchor.patch` | the post-quantum certificate anchor for QBFT | pristine upstream `d2032017` |
|
| `patches/0003-aere-pq-anchor.patch` | the post-quantum certificate anchor for QBFT | pristine upstream `d2032017` |
|
||||||
|
| `patches/0004-aere-basefee-floor.patch` | the 1 Gwei base-fee floor live from block 10,141,734 | the tree after 0001 and 0003 |
|
||||||
|
| `patches/0005-aere-eip2935-futureeips.patch` | EIP-2935 in the futureEips milestone, Osaka block format kept | the tree after 0004 |
|
||||||
|
| `patches/0006-aere-pq-transactions.patch` | AIP-20, transaction type `0x50` authorized by ML-DSA | the tree after 0005 |
|
||||||
|
| `patches/0007-aere-pq-finality.patch` | AIP-21, `aere_getPqFinality` and the on-disk seal window | the tree after 0006 |
|
||||||
|
| `patches/0008-aere-pq-aip22.patch` | AIP-22 stages 1 to 3 (post-quantum validator ids from block 20,836,228) and the rest of the fleet distribution of 2026-09-29 | the tree after 0007 |
|
||||||
|
|
||||||
|
`run-node.sh` applies 0001 and 0003 to 0008, in that order; 0002 is for the testnet only. A node
|
||||||
|
built without 0008 stops at block 20,836,227.
|
||||||
|
|
||||||
Patch 0003 is a different kind of thing from the first two and is described in `anchor/README.md`.
|
Patch 0003 is a different kind of thing from the first two and is described in `anchor/README.md`.
|
||||||
It changes twenty upstream files and adds fifty-five, and it changes one build file by one line.
|
It changes twenty upstream files and adds fifty-five, and it changes one build file by one line.
|
||||||
|
|||||||
@ -232,6 +232,37 @@ patch message; the in-file "Modifications Copyright" blocks for those files are
|
|||||||
the delta (it is exact to the fleet sources) and enter the production sources with the next fleet
|
the delta (it is exact to the fleet sources) and enter the production sources with the next fleet
|
||||||
distribution.
|
distribution.
|
||||||
|
|
||||||
|
## Patch 0008: AIP-22 stages 1 to 3 (2026-10-01)
|
||||||
|
|
||||||
|
**A node built from patches 0001 and 0003 to 0007 stops at block 20,836,227.** From block
|
||||||
|
20,836,228 (AIP-22 stage 3, 2026-09-30) the header of every chain-2800 block names the validators by
|
||||||
|
post-quantum ids from the registry v3 epoch, and such a node refuses the block with
|
||||||
|
`Invalid block header: Incorrect validators`. Measured: a follower built from patches 0001 and 0003
|
||||||
|
to 0007 refuses block 20,836,228 with exactly that message.
|
||||||
|
|
||||||
|
`patches/0008-aere-pq-aip22.patch` brings the recipe to the exact source tree of the chain-2800 fleet
|
||||||
|
distribution of 2026-09-29: AIP-22 stages 1 to 3 (and the code of stages 4 and 5, inactive unless
|
||||||
|
their own activation properties are set, which `run-node.sh` does not do), and the rest of what the
|
||||||
|
fleet runs (see the patch message). `run-node.sh` applies it, passes the four stage-3 properties
|
||||||
|
(`aere.pq.identityBlock`, `aere.pq.registryV3`, `aere.pq.registryV3.hashes`,
|
||||||
|
`aere.pq.registryV3.keysFrom`) and verifies the registry v3 epoch file in `registries/` against
|
||||||
|
`SHA256SUMS`. **If you built a node before, `run-node.sh` now rebuilds it**: the patch set is
|
||||||
|
fingerprinted, and a binary built from another patch set is no longer reused.
|
||||||
|
|
||||||
|
Measured 2026-10-01: patches 0001 and 0003 to 0008 applied with plain `git apply` on a pristine
|
||||||
|
`d2032017` checkout reproduce the patch generator's tree with zero differences; the build has the
|
||||||
|
same 3,554 classes as the fleet distribution, none only on one side, and **no class with different
|
||||||
|
code** (`javap -p -c` on the 45 pairs whose bytes differ: they differ only in the line-number table,
|
||||||
|
because of the in-file licence notices). The same comparison on the build without 0008 finds 51
|
||||||
|
classes missing and 56 with different code, so the comparison can tell them apart. A follower built
|
||||||
|
from this recipe, started on a database that ended at block 20,836,227, imported block 20,836,228 and
|
||||||
|
went on with ten peers and no refusal (20,840,327 within two minutes).
|
||||||
|
|
||||||
|
A follower started with `run-node.sh` logs `AERE-PQC-EMG-CEILING-01` at ERROR level while it
|
||||||
|
imports: that is the emergency seal-count ceiling the script sets for followers (see the comment
|
||||||
|
above `ANCHOR_MIN_SEALS_CEILING` in the script), not a refusal. A refusal names the block and the
|
||||||
|
rule that refused it.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Sizing the JVM heap: bigger is not faster
|
## Sizing the JVM heap: bigger is not faster
|
||||||
@ -324,6 +355,10 @@ export BESU_OPTS="\
|
|||||||
-Daere.pq.anchorV2Block=17047600 \
|
-Daere.pq.anchorV2Block=17047600 \
|
||||||
-Daere.pq.chainId=2800 \
|
-Daere.pq.chainId=2800 \
|
||||||
-Daere.pq.hybridRegistry=$REG/hibrid-10.properties \
|
-Daere.pq.hybridRegistry=$REG/hibrid-10.properties \
|
||||||
|
-Daere.pq.identityBlock=20836228 \
|
||||||
|
-Daere.pq.registryV3.hashes=20836228:0x5c6f09a44f1b6cc0e2264c9beaf4496e5fdd5bf8ee0dc6571fb5616c80a2e900 \
|
||||||
|
-Daere.pq.registryV3.keysFrom=20836228 \
|
||||||
|
-Daere.pq.registryV3=$REG/epoca-v3-2800-20836228.json \
|
||||||
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s,20746736:falcon-512/32+slh-dsa-sha2-128s/128 \
|
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s,20746736:falcon-512/32+slh-dsa-sha2-128s/128 \
|
||||||
-Daere.pqtx.forkBlock=19900000 \
|
-Daere.pqtx.forkBlock=19900000 \
|
||||||
-Daere.pq.anchor.minSealsCeiling=1"
|
-Daere.pq.anchor.minSealsCeiling=1"
|
||||||
|
|||||||
4
SPEC.md
4
SPEC.md
@ -494,6 +494,10 @@ passes"):
|
|||||||
-Daere.pq.anchorV2Block=17047600
|
-Daere.pq.anchorV2Block=17047600
|
||||||
-Daere.pq.chainId=2800
|
-Daere.pq.chainId=2800
|
||||||
-Daere.pq.hybridRegistry=<registries>/hibrid-10.properties
|
-Daere.pq.hybridRegistry=<registries>/hibrid-10.properties
|
||||||
|
-Daere.pq.identityBlock=20836228
|
||||||
|
-Daere.pq.registryV3.hashes=20836228:0x5c6f09a44f1b6cc0e2264c9beaf4496e5fdd5bf8ee0dc6571fb5616c80a2e900
|
||||||
|
-Daere.pq.registryV3.keysFrom=20836228
|
||||||
|
-Daere.pq.registryV3=<registries>/epoca-v3-2800-20836228.json
|
||||||
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s,20746736:falcon-512/32+slh-dsa-sha2-128s/128
|
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s,20746736:falcon-512/32+slh-dsa-sha2-128s/128
|
||||||
-Daere.pqtx.forkBlock=19900000
|
-Daere.pqtx.forkBlock=19900000
|
||||||
-Daere.pq.anchor.minSealsCeiling=1
|
-Daere.pq.anchor.minSealsCeiling=1
|
||||||
|
|||||||
22825
patches/0008-aere-pq-aip22.patch
Normal file
22825
patches/0008-aere-pq-aip22.patch
Normal file
File diff suppressed because one or more lines are too long
@ -4,3 +4,4 @@ c9a215d294e106f69fb2f16e3af21f9787523969e4b7260a3098f4b2cf458059 *registru-2800-
|
|||||||
f155bd46958cd533e710f79aac4fd96549d7b6ca54df17df71a4e5d876012c59 *hibrid-1.properties
|
f155bd46958cd533e710f79aac4fd96549d7b6ca54df17df71a4e5d876012c59 *hibrid-1.properties
|
||||||
c6601ae5159875a090066946991517c9a38e5d6206da76b018c0917e1ca6f12f *manifest-18082816.json
|
c6601ae5159875a090066946991517c9a38e5d6206da76b018c0917e1ca6f12f *manifest-18082816.json
|
||||||
35d69f60e357d405aff39fd33858de901dfb21327b0c4aeb18be17ffdaa115d6 *hibrid-10.properties
|
35d69f60e357d405aff39fd33858de901dfb21327b0c4aeb18be17ffdaa115d6 *hibrid-10.properties
|
||||||
|
0212d8ff9e857f1c756b0004929e9ad4c7988341af4837d947e7b5263fb8c581 *epoca-v3-2800-20836228.json
|
||||||
|
|||||||
187
registries/epoca-v3-2800-20836228.json
Normal file
187
registries/epoca-v3-2800-20836228.json
Normal file
File diff suppressed because one or more lines are too long
17
run-node.sh
17
run-node.sh
@ -49,6 +49,7 @@ PATCHES=(
|
|||||||
"0005-aere-eip2935-futureeips.patch"
|
"0005-aere-eip2935-futureeips.patch"
|
||||||
"0006-aere-pq-transactions.patch"
|
"0006-aere-pq-transactions.patch"
|
||||||
"0007-aere-pq-finality.patch"
|
"0007-aere-pq-finality.patch"
|
||||||
|
"0008-aere-pq-aip22.patch"
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- locate self -------------------------------------------------------------------------------
|
# --- locate self -------------------------------------------------------------------------------
|
||||||
@ -143,7 +144,7 @@ if [ -f "$REG_DIR/SHA256SUMS" ]; then
|
|||||||
if command -v sha256sum >/dev/null 2>&1; then sha256sum -c SHA256SUMS >/dev/null
|
if command -v sha256sum >/dev/null 2>&1; then sha256sum -c SHA256SUMS >/dev/null
|
||||||
else shasum -a 256 -c SHA256SUMS >/dev/null; fi ) \
|
else shasum -a 256 -c SHA256SUMS >/dev/null; fi ) \
|
||||||
|| die "registries failed their SHA256SUMS check. Refusing to run with tampered registries."
|
|| die "registries failed their SHA256SUMS check. Refusing to run with tampered registries."
|
||||||
ok "registries verified against SHA256SUMS (7 keys @ 13,014,000; 9 keys @ 13,600,000)"
|
ok "registries verified against SHA256SUMS ($(grep -c . "$REG_DIR/SHA256SUMS") files, see registries/README.md)"
|
||||||
else
|
else
|
||||||
note "WARNING: registries/SHA256SUMS not found; skipping registry integrity check"
|
note "WARNING: registries/SHA256SUMS not found; skipping registry integrity check"
|
||||||
fi
|
fi
|
||||||
@ -191,12 +192,18 @@ for p in "${PATCHES[@]}"; do apply_patch "$p"; done
|
|||||||
# --- 5. build ----------------------------------------------------------------------------------
|
# --- 5. build ----------------------------------------------------------------------------------
|
||||||
say "5/6 Building the node (gradlew installDist)"
|
say "5/6 Building the node (gradlew installDist)"
|
||||||
BESU_BIN="$BUILD_DIR/build/install/besu/bin/besu"
|
BESU_BIN="$BUILD_DIR/build/install/besu/bin/besu"
|
||||||
if [ -x "$BESU_BIN" ] && [ "$REBUILD" -eq 0 ]; then
|
# A binary built from an older patch set must not be reused: a node built from 0001-0007 stops at block 20,836,227
|
||||||
ok "built node already present: $BESU_BIN (use --rebuild to force)"
|
# (AIP-22 stage 3). The patch set is fingerprinted and a change forces a rebuild.
|
||||||
|
PATCHSET="$(for p in "${PATCHES[@]}"; do printf '%s %s\n' "$(sha256_of "$SCRIPT_DIR/patches/$p")" "$p"; done)"
|
||||||
|
BUILT_FROM="$(cat "$BUILD_DIR/.aere-patchset" 2>/dev/null || true)"
|
||||||
|
if [ -x "$BESU_BIN" ] && [ "$REBUILD" -eq 0 ] && [ "$BUILT_FROM" = "$PATCHSET" ]; then
|
||||||
|
ok "built node already present, from this exact patch set: $BESU_BIN (use --rebuild to force)"
|
||||||
else
|
else
|
||||||
|
[ -x "$BESU_BIN" ] && [ "$BUILT_FROM" != "$PATCHSET" ] && note "the existing build is from another patch set; rebuilding"
|
||||||
note "this compiles Besu from source and can take many minutes on the first run"
|
note "this compiles Besu from source and can take many minutes on the first run"
|
||||||
( cd "$BUILD_DIR" && ./gradlew --no-daemon installDist -x spotlessJavaCheck -x test )
|
( cd "$BUILD_DIR" && ./gradlew --no-daemon installDist -x spotlessJavaCheck -x test )
|
||||||
[ -x "$BESU_BIN" ] || die "build finished but $BESU_BIN is missing"
|
[ -x "$BESU_BIN" ] || die "build finished but $BESU_BIN is missing"
|
||||||
|
printf '%s\n' "$PATCHSET" > "$BUILD_DIR/.aere-patchset"
|
||||||
ok "built: $BESU_BIN"
|
ok "built: $BESU_BIN"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -270,6 +277,10 @@ export BESU_OPTS="\
|
|||||||
-Daere.pq.anchorV2Block=17047600 \
|
-Daere.pq.anchorV2Block=17047600 \
|
||||||
-Daere.pq.chainId=2800 \
|
-Daere.pq.chainId=2800 \
|
||||||
-Daere.pq.hybridRegistry=$REG/hibrid-10.properties \
|
-Daere.pq.hybridRegistry=$REG/hibrid-10.properties \
|
||||||
|
-Daere.pq.identityBlock=20836228 \
|
||||||
|
-Daere.pq.registryV3.hashes=20836228:0x5c6f09a44f1b6cc0e2264c9beaf4496e5fdd5bf8ee0dc6571fb5616c80a2e900 \
|
||||||
|
-Daere.pq.registryV3.keysFrom=20836228 \
|
||||||
|
-Daere.pq.registryV3=$REG/epoca-v3-2800-20836228.json \
|
||||||
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s,20746736:falcon-512/32+slh-dsa-sha2-128s/128 \
|
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s,20746736:falcon-512/32+slh-dsa-sha2-128s/128 \
|
||||||
-Daere.pqtx.forkBlock=19900000 \
|
-Daere.pqtx.forkBlock=19900000 \
|
||||||
-Daere.pq.anchor.minSealsCeiling=$ANCHOR_MIN_SEALS_CEILING"
|
-Daere.pq.anchor.minSealsCeiling=$ANCHOR_MIN_SEALS_CEILING"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user