run-node.sh now actually sets the five post-4-September properties, and both it and RUN-A-NODE.md are generated from the live archive node

On 2026-09-05 the five properties a follower needs past blocks 17,047,600 and 17,225,968 were added to
RUN-A-NODE.md but not to run-node.sh, while the document already claimed the script set them. Our own
from-genesis import proof, built from the published revision, synced to block 17,047,400 and then
rejected every hybrid anchor 12,352 times: the v2 activation height stayed at Long.MAX_VALUE. Anyone
following this package could not pass 17,047,600.

Both blocks are now derived from the BESU_OPTS of the network's archive node, whose role is exactly a
follower's, with the two public reading nodes as witnesses that must agree on the anchor set; only the
signing keys are removed and the registry paths rewritten. Re-measured on the same node and database
after the fix: past 17,047,600 with zero rejections.
This commit is contained in:
Aere Network 2026-09-06 13:00:23 +03:00
parent 75be84f043
commit 54e256786e
2 changed files with 50 additions and 20 deletions

View File

@ -163,32 +163,51 @@ the network's reading nodes, and validates every hybrid anchor there, since 2026
The Aere fork reads its per-node configuration from JVM system properties passed through the The Aere fork reads its per-node configuration from JVM system properties passed through the
`BESU_OPTS` environment variable, not from the genesis file. `run-node.sh` sets these for you; this `BESU_OPTS` environment variable, not from the genesis file. `run-node.sh` sets these for you; this
is what it sets, and what a manual operator must export before the `besu` command below, or the node is what it sets, and what a manual operator must export before the `besu` command below, or the node
will refuse the first anchor at block 13,014,000. Revised 2026-09-05: the five properties added that will refuse the first anchor at block 13,014,000. Five of them are the ones without which a node stops
day are the ones without which a node stops at block 17,047,600 (the first hybrid, v2 certificate) or at at block 17,047,600 (the first hybrid, v2 certificate) or at the first anchor after 17,225,968 (the
the first anchor after 17,225,968 (the interval change): `anchorV2Block`, `schemeSchedule`, interval change): `anchorV2Block`, `schemeSchedule`, `hybridRegistry` (the SLH-DSA-SHA2-128s public
`hybridRegistry` (the SLH-DSA-SHA2-128s public keys, `registries/hibrid-1.properties`), keys, `registries/hibrid-1.properties`), `anchorIntervalSchedule`, and the two dated steps in
`anchorIntervalSchedule`, and the two dated steps in `anchorMinSeals` (see `anchor/README.md`, scope `anchorMinSeals` (see `anchor/README.md`, scope item 3).
item 3). The set below is the one the network's own public reading node runs with, measured that day.
> **Correction, 2026-09-06.** On 2026-09-05 those five properties were added to THIS DOCUMENT and not
> to `run-node.sh`, while the sentence above already claimed the script set them. It did not. A node
> started with the published script therefore ran the pre-hybrid configuration, and the v2 activation
> height stayed at `Long.MAX_VALUE`: our own from-genesis import proof, built from the published
> revision, synced honestly to block 17,047,400 and then rejected every hybrid anchor 12,352 times
> (`REJECTED - carries a v2 (scheme-tagged) certificate below the v2 activation height
> 9223372036854775807`). Anyone following this package could not pass block 17,047,600. Since
> 2026-09-06 the block below and the one inside `run-node.sh` are both GENERATED from the live
> `BESU_OPTS` of the network's archive node, which has exactly a follower's role, with the two public
> reading nodes as witnesses that must agree on the anchor set; a gate refuses any divergence between
> the chain, the script and this page. Re-measured after the fix on the same node and database: past
> 17,047,600 with zero rejections.
The set below is the one the network's own archive node runs with, minus the signing keys.
```bash ```bash
REG=/path/to/aere-node/registries REG=/path/to/aere-node/registries
export BESU_OPTS="\ export BESU_OPTS="\
-Daere.basefee.floor.forkBlock=10141734 \ -Daere.basefee.floor.forkBlock=10141734 \
-Daere.basefee.floor.value=1000000000 \ -Daere.basefee.floor.value=1000000000 \
-Daere.pq.chainId=2800 \ -Daere.falcon.anchor.address=0x5214F0e53899Dad805ef3AdF0624F5e49d2a5EB5 \
-Daere.falcon.anchor.block=13889290 \
-Daere.falcon.attachBlock=13889296 \
-Daere.falcon.attachInterval=32 \
-Daere.falcon.forkBlock=14050000 \
-Daere.falcon.manifest=$REG/manifest-13600000.json \
-Daere.falcon.minAttachFutureMargin=5 \
-Daere.falcon.registry.history=$REG/manifest-13014000.json,$REG/registru-2800-v2-13600000.properties \
-Daere.falcon.validatorCount=9 \
-Daere.pq.anchorBlock=13014000 \ -Daere.pq.anchorBlock=13014000 \
-Daere.pq.anchorInterval=32 \ -Daere.pq.anchorInterval=32 \
-Daere.pq.anchorIntervalSchedule=17225968:128 \ -Daere.pq.anchorIntervalSchedule=17225968:128 \
-Daere.pq.anchor.maxSeals=9 \ -Daere.pq.anchor.maxSeals=9 \
-Daere.pq.anchorMinSeals=13014000:0,13034000:3,14961456:6,17102384:0,17102416:6 \ -Daere.pq.anchorMinSeals=13014000:0,13034000:3,14961456:6,17102384:0,17102416:6 \
-Daere.pq.anchor.minSealsCeiling=1 \
-Daere.pq.anchorV2Block=17047600 \ -Daere.pq.anchorV2Block=17047600 \
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s \ -Daere.pq.chainId=2800 \
-Daere.pq.hybridRegistry=$REG/hibrid-1.properties \ -Daere.pq.hybridRegistry=$REG/hibrid-1.properties \
-Daere.falcon.anchor.address=0x5214F0e53899Dad805ef3AdF0624F5e49d2a5EB5 \ -Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s \
-Daere.falcon.anchor.block=13889290 \ -Daere.pq.anchor.minSealsCeiling=1"
-Daere.falcon.manifest=$REG/manifest-13600000.json \
-Daere.falcon.registry.history=$REG/manifest-13014000.json,$REG/registru-2800-v2-13600000.properties"
``` ```
### Why the seal-threshold ceiling, for a from-genesis node ### Why the seal-threshold ceiling, for a from-genesis node

View File

@ -244,19 +244,30 @@ mkdir -p "$DATA_PATH"
# proposes, does not set this. # proposes, does not set this.
ANCHOR_MIN_SEALS_CEILING="${AERE_ANCHOR_MIN_SEALS_CEILING:-1}" ANCHOR_MIN_SEALS_CEILING="${AERE_ANCHOR_MIN_SEALS_CEILING:-1}"
REG="$REG_DIR" REG="$REG_DIR"
# >>> OPTIUNI DERIVATE DIN LANTUL VIU (aduce-optiunile-urmaritorului.sh) - nu se scriu de mana
export BESU_OPTS="\ export BESU_OPTS="\
-Daere.basefee.floor.forkBlock=10141734 \ -Daere.basefee.floor.forkBlock=10141734 \
-Daere.basefee.floor.value=1000000000 \ -Daere.basefee.floor.value=1000000000 \
-Daere.pq.chainId=2800 \
-Daere.pq.anchorBlock=13014000 \
-Daere.pq.anchorInterval=32 \
-Daere.pq.anchor.maxSeals=9 \
-Daere.pq.anchorMinSeals=13014000:0,13034000:3,14961456:6 \
-Daere.pq.anchor.minSealsCeiling=$ANCHOR_MIN_SEALS_CEILING \
-Daere.falcon.anchor.address=0x5214F0e53899Dad805ef3AdF0624F5e49d2a5EB5 \ -Daere.falcon.anchor.address=0x5214F0e53899Dad805ef3AdF0624F5e49d2a5EB5 \
-Daere.falcon.anchor.block=13889290 \ -Daere.falcon.anchor.block=13889290 \
-Daere.falcon.attachBlock=13889296 \
-Daere.falcon.attachInterval=32 \
-Daere.falcon.forkBlock=14050000 \
-Daere.falcon.manifest=$REG/manifest-13600000.json \ -Daere.falcon.manifest=$REG/manifest-13600000.json \
-Daere.falcon.registry.history=$REG/manifest-13014000.json,$REG/registru-2800-v2-13600000.properties" -Daere.falcon.minAttachFutureMargin=5 \
-Daere.falcon.registry.history=$REG/manifest-13014000.json,$REG/registru-2800-v2-13600000.properties \
-Daere.falcon.validatorCount=9 \
-Daere.pq.anchorBlock=13014000 \
-Daere.pq.anchorInterval=32 \
-Daere.pq.anchorIntervalSchedule=17225968:128 \
-Daere.pq.anchor.maxSeals=9 \
-Daere.pq.anchorMinSeals=13014000:0,13034000:3,14961456:6,17102384:0,17102416:6 \
-Daere.pq.anchorV2Block=17047600 \
-Daere.pq.chainId=2800 \
-Daere.pq.hybridRegistry=$REG/hibrid-1.properties \
-Daere.pq.schemeSchedule=17047568:falcon-512+slh-dsa-sha2-128s \
-Daere.pq.anchor.minSealsCeiling=$ANCHOR_MIN_SEALS_CEILING"
# <<< OPTIUNI DERIVATE
note "BESU_OPTS (follower subset):" note "BESU_OPTS (follower subset):"
printf '%s\n' "$BESU_OPTS" | tr ' ' '\n' | sed 's/^/ /' printf '%s\n' "$BESU_OPTS" | tr ' ' '\n' | sed 's/^/ /'