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.
This commit is contained in:
Liviu 2026-08-12 02:08:38 +03:00
parent 56a02656aa
commit 50290b47c8
3 changed files with 25220 additions and 2 deletions

View File

@ -78,10 +78,18 @@ 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/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` |
Between them they touch eight files: two upstream files modified (`Address.java` for the address
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.
Verified 2026-08-11 on a pristine `d2032017` checkout: `git apply --check` and `git apply` both
returned 0, the resulting files are byte-identical to the sources in `anchor/`, and
`:consensus:common:test` plus `:consensus:qbft:test` returned 605 tests with 0 failures, the same
count class by class as the same tree without it.
Patches 0001 and 0002 between them touch eight files: two upstream files modified (`Address.java` for the address
constants, `MainnetPrecompiledContracts.java` for the registry wiring) and six new precompile
classes plus one shared Falcon helper. **No build file changes are required.** Bouncy Castle
classes plus one shared Falcon helper. **Those two require no build file changes.** Bouncy Castle
`bcprov-jdk18on` 1.83 is already on the `evm` module's compile classpath as an `api` dependency of
`crypto:algorithms`, and `jakarta.validation-api` is a global subproject dependency.

View File

@ -67,6 +67,12 @@ now pinned: change one byte of it and the digest no longer matches, and the head
- tests — including the negative controls. A test that cannot fail is not a test, and several of
these exist specifically to prove the guards can fail.
The same code is also delivered as `../patches/0003-aere-pq-anchor.patch`, generated against
that commit. Applying the patch produces files byte-identical to the ones in this directory, which
was checked rather than assumed: 75 files compared, 0 differences. Use the patch to build; read the
files here to review. Whole files are convenient to read and dangerous to apply, and `BASE.txt`
explains why.
`BASE.txt` names the upstream commit. Applying these files to any other tree overwrites whatever
upstream added since, silently. That is stated there in more detail because it is a real hazard.

File diff suppressed because it is too large Load Diff