Cheia era AereGovernanceStaked cu eticheta [@status CANONICAL] si o nota de patru
randuri deasupra. Nota spunea adevarul, dar eticheta citibila de masina spunea
contrariul, si numele nu oprea pe nimeni.
Masurat 2026-08-02 la blocul 11.967.896, cu eth_getProof, nu cu nonce-ul:
balance 0x0, codeHash 0x421a87e3...84e6, storageHash 0x269fcdee...8f496,
6.687 octeti, keccak(cod) == codeHash. owner() == Fundatia 0x0243A4...f3C3,
proposalCount() == 0.
Dovada POZITIVA din bytecode-ul desfasurat, nu dedusa dintr-o revenire goala:
mergand pe cei 6.687 de octeti ca instructiuni exista exact UN CALL, la pc 4507,
si exact UN opcode ADDRESS, la pc 4505, chiar in slotul de destinatie al acelui
CALL, cu GAS la pc 4506. In rest cinci STATICCALL si ZERO DELEGATECALL, CALLCODE,
CREATE, CREATE2, SELFDESTRUCT. Deci singurul apel care schimba stare pe care il
poate emite e address(this).call(...) catre el insusi, si nu poate exercita
niciodata onlyOwner pe ceva ce ar ajunge sa detina.
Gasit pe drum si scris in nota: staking() == 0xAbDb01d9...0DEc, adica
AereStaking_v1_DEPRECATED, nu AereStakingV2 0x1D95eF6D...55FC, si campul e
immutable, deci sursa puterii de vot nu se mai poate muta niciodata.
Retragerea e purtata in NUMELE cheii, nu doar intr-un @deprecated: TypeScript nu
face din @deprecated o eroare de tip, e doar un diagnostic de sugestie, deci o
constructie in CI ar fi ramas verde. Redenumirea e partea impusa de compilator.
Verificat: tsc --noEmit iese 0 si --listFiles arata ca addresses.ts chiar e
type-checked.
AerePasskeyAccountFactory -> AerePasskeyAccountFactory_v1_DEPRECATED
AerePasskeyAccountFactoryV2 -> AerePasskeyAccountFactoryV2_DEPRECATED_FLAWED
Redenumirea cheii, nu doar o nota in comentariu: asa un consumator care inca
citeste numele vechi NU mai compileaza, in loc sa desfasoare in tacere un
portofel falsificabil. Plus @deprecated in JSDoc, ca editorul si typescript-eslint
no-deprecated sa il taie cu linie.
Constatarea 63 e despre fabrica V2 0x5FFa9a...4fdA, cea ale carei conturi accept
un cuvant de proprietar address(0) si o semnatura care recupereaza adresa zero.
Intrarea V1 0xfB0e...0739 era marcata CANONICAL si, mai rau, trimitea explicit
portofelele noi catre exact fabrica defecta. Ambele reparate.
MASURAT 2026-08-02, dovada pozitiva din bytecode, prin plimbarea codului viu ca
instructiuni si strangerea selectorilor PUSH4, niciodata dintr-o revenire goala:
0xfB0e...0739 5.547 octeti, 17 selectori, createAccount(uint256,uint256,uint256)
0x4c1ed7f5 PREZENT
0x5FFa9a...4fdA 9.722 octeti, 35 selectori, createAccount(bytes[],uint256)
0x3ffba36f PREZENT
Control negativ pe acelasi drum: un selector inventat iese absent pe toate trei.
CE NU S-A FACUT, spus ca sa nu fie confundat cu verde: niciuna dintre cele doua
fabrici nu are proprietar sau pauza, deci NU pot fi oprite pe lant. Retragerea
de aici e o poarta de documentatie, atat. Nu s-a trimis nicio tranzactie.
tsc --noEmit iese 0 dupa redenumire; nimic din sdk nu mai citea cheile vechi,
codul de portofel folosea deja AerePasskeyAccountFactoryV2Fixed.
NOTA DE ONESTITATE: fisierul asta astepta necomis din 2026-06-01 si ajunsese la
mine purtand deja 400 si ceva de linii de lucru al altor sesiuni pe cartea de
adrese. Acest commit le duce si pe acelea. Ale mele sunt strict cele doua intrari
passkey.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Paznicul StateWindowReader exista din 2026-08-01 si are 12 teste. Testele
ruleaza pe un nod fals. Un nod fals dovedeste ca acel cod face ce a crezut
autorul; nu dovedeste ca punctul public se mai poarta cum a masurat autorul.
state-window-live.ts inchide golul. Nu e in `npm test`, fiindca o suita care
cade cand pica internetul invata oamenii sa ignore rosul. Ruleaza asa:
npm run test:live
npm run test:live -- https://rpc2.aere.network
Ordinea conteaza si e deliberata:
PASUL 1 ESEC PLANTAT. Apelul brut chiar intoarce zeroul fals.
PASUL 2 CONTROL NEGATIV. Cu paznicii opriti, cititorul da zeroul mai departe.
PASUL 3 PAZNICUL. Cu paznicii porniti, refuza.
PASUL 4 MASOARA. Cauta marginea in loc sa creada constanta.
Adevarul e ancorat intr-un CORP de bloc, nu in stare, deci proba nu depinde de
lucrul pe care il testeaza: blocul 8.236.382 spune ca 0xbeb33d20 a semnat cu
nonce 123.063.
MASURAT azi pe ambele puncte, iesire 0:
rpc.aere.network 511 raspunde, 512 refuzat, nonce brut la adancime "0x0"
rpc2.aere.network 511 raspunde, 512 refuzat, nonce brut la adancime "0x0"
Si paznicul a fost dovedit ca poate sa cada. Cu cei trei paznici inlocuiti cu
cioturi care accepta tot, in dist, 5 din 12 teste trec pe rosu si suita iese cu
1. Reconstruit dupa, dist/state-window.js identic octet cu octet cu inainte.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Measured by the licence gate on 2026-08-11. Three separate defects, all real:
- the two patches modify files that are the work of Hyperledger Besu and did not
say so. Section 4(b) of the Apache License requires modified files to carry a
prominent notice. The notice now travels in the patch message, above the ---,
so git am puts it in the tree.
- precompiles/Address.java and precompiles/MainnetPrecompiledContracts.java are
copies of upstream files that the patches change. They kept the upstream
copyright header, which 4(c) requires, but carried no notice that we changed
them. They do now.
- grants had no LICENSE at all, and sdk-js had one that was never pushed. A
public repository with no licence grants a reader nothing.
package.json declares "license": "MIT" and three published pages call the SDK
"MIT licensed", but the public repository carried no LICENSE file at all. The
file existed locally and was simply never pushed, so anyone who checked the
claim found nothing behind it.
Measured 2026-08-11: LICENSE returned HTTP 404 on the public repository while
the claim was live on the site. This adds the file that was always meant to be
there rather than removing the claim.
Two new typed clients for the Week-1 flywheel contracts, dependency-light
(no viem/ethers import required — accepts any EIP-1193-style provider).
src/sink/AereSinkClient.ts
- readConfig(): all 8 immutable parameters in one batched eth_call sequence
(AERE token, BURN_VAULT, SAERE_VAULT, DEX_ROUTER, 4 bps values, slippage cap).
- readSplitPercentages(): convenience that returns burn/buyback/staker
as human-readable percentages.
- encodeFlush(token, amount): calldata for the integrator-side flush call.
- encodeSweepDust(token): calldata for the permissionless dust-sweep.
src/saere/sAEREClient.ts
- readVaultState(): live snapshot — underlying address, totalAssets,
totalSupply, pricePerShare, decimals.
- balanceOf(user): per-user sAERE share balance.
- convertToAssets / convertToShares: round-trip conversion helpers.
- encodeDeposit / encodeWithdraw / encodeRedeem: ERC-4626 write calldata.
Both clients precompute 4-byte function selectors at module load so the
SDK doesn't depend on a keccak helper. ABI-encoded address and uint
arguments built manually so consumers can use this with either a
high-level library (viem, ethers) or raw fetch against rpc.aere.network.
Re-exported from src/index.ts under 'export * from sink/saere' so the
SDK keeps a single import path.