Commit Graph

8 Commits

Author SHA1 Message Date
Aere Network
bc8dc80946 patches 0001/0003/0004 regenerated from the production tree over the same file sets (section 4(b) notices); measured: a build from this recipe reproduces the fleet's consensus jars class by class 2026-09-10 22:08:27 +03:00
Aere Network
3d51da9747 Follower configuration and anchor patch at the live revision: registries/hibrid-1.properties (SLH-DSA public keys), the five properties a follower needs past blocks 17,047,600 and 17,225,968, 0003 regenerated from the staged overlay on d2032017 (169 files; applies with 0001/0004/0005 in run-node order, tree equals anchor/); the from-genesis import proof is stated as not yet repeated 2026-09-05 08:07:54 +03:00
Aere Network
b7669355eb 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 2026-08-19 14:14:57 +03:00
Aere Network
94438cd8f1 A package-built node has now imported chain 2800 from block 0 to the live tip, with zero anchor rejections
Reaching the tip needed two historical facts encoded, and the second one was
not in the original hypothesis.

First, the disarmed window: 36 anchor heights (13,267,824 to 13,268,944) whose
blocks carry an attached certificate but no digest, and whose signer indices are
not strictly increasing, produced while anchoring was disarmed fleet-wide to
unblock the chain after an incident. Encoded as a named list of historical
windows with fixed bounds in code, after the precedent of the base-fee lapse
windows: inside, the header is accepted as written; outside, nothing changes.

Second, the recovery, found by measuring rather than guessing. After the
emergency re-arm the fleet ran for a stretch with a lowered seal threshold, so
proposers legitimately wrote shorter certificates. Its extent was measured by
reading 25,252 anchor heights one at a time, with NO binary search, because the
property is not monotone: only about 15 percent of heights are affected and the
largest gap between two affected heights is 44, so a binary search would have
returned an answer that looks exactly like a good one. Result: 13,268,976 to
13,890,544, thresholds measured at 1 or 2, never 0.

The second window relaxes the seal COUNT only. Digest binding and index
ordering stay enforced and every seal is still verified. Widening the disarmed
window to cover both would have been easier and would have thrown away
certificate binding on 19,425 anchor heights, which is the one property the
anchor exists for.

Negative control in four directions, because an exception can fail both ways:
the window predicate forced always-false turns 10 tests red; forced always-true
turns 39 red, of which 22 are pre-existing strictness tests, making the
exception swallowing the chain visible; the historical threshold emptied turns 7
red; pinned at 1 turns 8 red. Restored: 641 tests, 0 failures, counted from XML.

Patch verified on a pristine upstream checkout, alone and in series, and the
resulting tree compiles.
2026-08-16 02:00:01 +03:00
Aere Network
67e3c26e1c Patch 0003 regenerated with the schedule-boundary fix: a package-built node now crosses the first real anchor
The published patch carried a one-block boundary defect: the seal rule asks the
index-to-address map at the parent height (H-1) while the registry schedule
binds inclusively from H, so at the very first anchor the schedule was empty and
the lookup fell back to a head map that is empty on a node synced from genesis.
A valid certificate was rejected. Fixed in both lookup paths: when the schedule
has an entry at exactly blockNumber+1, answer from that entry's verified bound
registry. The boundary stays exactly one block.

Proven by import, not by assertion: the package-built node was stuck at
13,013,999 with 6,646 rejections; with the fix it crossed 13,014,000 in 42
seconds and imported 253,729 further blocks through the anchor era with zero
rejections. Tests: new PqParentHeightAlignmentTest 3/3, consensus:common 391/0,
consensus:qbft 217/0. Negative control measured: disarm the condition and the
measuring test goes red; restore it and it is green.

Patch verified to apply cleanly on a pristine upstream checkout, alone and in
series with 0001/0004/0005; file list is the previous 75 plus the new test, and
every untouched section is byte-identical to the old patch. The anchor/ source
copy in this package was brought to the same state so the two cannot diverge.

Honest limit, recorded in IMPORT-PROOF-STARE: further along, at 13,267,729, the
node stops again for a DIFFERENT reason. Blocks in a band there carry an
attached certificate whose vanityData is the ordinary client string rather than
the digest, at heights a single static interval treats as anchor heights. The
best-supported reading is that the fleet ran a different anchoring configuration
in that window (these values are not consensus-bound), so the package needs a
HISTORICAL anchoring schedule, not one value. Stated rather than implied.
2026-08-16 00:03:20 +03:00
Aere Network
35911fb5c7 The three patches apply again with plain git apply, proven on a pristine checkout
The licence-note edits had normalized whitespace inside hunks, so the recipe
this repository tells its reader to run failed at step one with 'patch does
not apply'; only --ignore-whitespace passed, and the README nowhere says to
use it. Each patch was re-applied to pristine d2032017 with whitespace
tolerance, then regenerated from the resulting tree with its prose header
kept, and the full sequence 0001, 0003, 0004 was applied with PLAIN git
apply on a fresh pristine checkout before this commit was made.
2026-08-15 13:26:35 +03:00
Liviu
820ae134f7 Carry the Apache 4(b) and 4(d) notices the anchor was missing
Caught by our own licence gate the minute the anchor went up, which is the only
reason this is a same-day correction rather than something a reader finds first.

Two separate requirements, both real:

- section 4(b): the twenty upstream files this overlay modifies must carry a
  prominent notice that we changed them. They did not. They do now, placed after
  the upstream copyright header rather than over it, because 4(c) requires that
  header to survive untouched. It does: eighteen still read "Copyright ConsenSys
  AG.", two "Copyright contributors to Besu."

- section 4(d): NOTICE must carry the attribution notices of the work this
  derives from. It named Hyperledger Besu only, while the files themselves carry
  three distinct notices. All three are now reproduced. Naming one of three was a
  smaller truth than the files tell.

The patch is regenerated from the corrected files and re-verified end to end, not
assumed: git apply --check and git apply both 0 on a pristine d2032017 checkout,
the resulting tree byte-identical to anchor/ (75 files compared, 0 differences),
and 605 tests with 0 failures across consensus:common and consensus:qbft.
2026-08-12 02:28:48 +03:00
Liviu
50290b47c8 Deliver the anchor as a patch as well as files
This repository argues, in its own README, that a patch against a named upstream
commit is the honest way to publish a contribution to a million-line project: the
diff is the contribution, the reader fetches the rest from upstream, and a patch
fails loudly when upstream moves while a whole file overwrites in silence.

The anchor was published as whole files only, which contradicted that argument.
It is now both: patches/0003 to apply, anchor/ to read.

Verified on a pristine d2032017 checkout rather than assumed:
- git apply --check and git apply both returned 0
- the resulting tree is byte-identical to anchor/: 75 files compared, 0 differences
- :consensus:common:test and :consensus:qbft:test returned 605 tests, 0 failures,
  the same count class by class as the same tree built from the files

The README also said "no build file changes are required" in a place that now
reads as if it covered all three patches. It covered the first two. Patch 0003
changes one build file by one line, and that line is named.
2026-08-12 02:08:38 +03:00