# Ethereum-Blöcke

> Die Referenz-Arbeitslast von Apogee. Ein revm-Gastprogramm, das Ethereum-Blöcke innerhalb der VM ausführt, ein zustandsloser Validator, dessen Ergebnisse mit jedem Fall des zkEVM-Test-Release übereinstimmen, und was ein Beweis eines Blocks aussagt.

Apogee beweist beliebige RV32IMAC-Programme. Seine Referenz-Arbeitslast, an der es gemessen und abgestimmt wird, ist die schwierigste gängige: die Validierung eines Ethereum-Blocks innerhalb der VM mit revm, der EVM in Rust. Eine einzige Bibliothek, `revm_block`, wird sowohl für das Gastprogramm (Guest) als auch für den Host kompiliert, und zwei Binaries beweisen zwei verschiedene Aussagen.

## Zwei Binaries, zwei Aussagen

| Binary | Hilfsdaten (Advice) | Journal | Sagt aus |
| --- | --- | --- | --- |
| `revm-block` | ein `BlockWitness`: der Vorzustand, den die Transaktionen lesen | pro Transaktion ihr Status, ihr Gas und ihre Rückgabedaten; ein Commitment auf die Logs; eine Zusammenfassung des Nachzustands | irgendein kanonischer Witness bringt `revm_block::run` dazu, dieses Journal zu erzeugen: ein Beweis einer Ausführung, nicht der Gültigkeit eines Blocks |
| `revm-block-stateless` | die zustandslose Eingabe des zkEVM-Benchmark-Formats | 43 Byte: die Wurzel des Payloads, das Urteil, die Chain-ID, die Schema-ID | der Payload mit dieser Wurzel ist auf dieser Chain unter diesem Fork ein gültiger Block oder nicht |

Der **zustandslose Validator** ist derjenige, der Blöcke beweist. Er implementiert `verify_stateless_new_payload` aus den Execution Specifications von Ethereum: Er dekodiert die Anfrage, prüft die Vorfahren-Header und die Header-Regeln gegen den Elternblock, rekonstruiert jeden Absender, führt jede Transaktion gegen einen Vorzustand aus, der über Hashes an die Zustandswurzel des Elternblocks gebunden ist, wendet Withdrawals und Requests an und berechnet die Receipts-Wurzel, den Bloom-Filter, das Gas, den Requests-Hash, die Block Access List und die Wurzel des Nachzustands neu. Der Witness braucht keine eigene Bindung: Die veröffentlichte Wurzel legt den Payload fest, und der Witness ist über Hashes an sie gebunden; ein falscher Witness kann also keinen ungültigen Payload gültig machen. Ein Urteil `false` bedeutet nur, dass diese Eingabe die Validierung nicht bestanden hat.

## Forks und Konformität

Der Validator bestimmt den Fork anhand der Schema-ID der Eingabe, ohne einkompilierten Aktivierungsplan: Osaka, BPO1, BPO2 und Amsterdam. Alle **67.251** Paare des Release `tests-zkevm` v21.0.1 stimmen nativ überein, und die CI prüft die Bibliothek gegen eine eingecheckte Teilmenge von 34 Fällen, die jede Regel abdeckt, die das Release erreicht, in beiden Eingabe-Layouts.

## Delegationen in der Praxis

Beide Binaries deklarieren `KECCAK_F`, `SHA256_COMP`, `MOD_MUL` und `EC_ADD`. Keccak erreicht seinen Schaltkreis über den Native-Keccak-Hook von `alloy-primitives`. SHA-256, secp256k1 und BN254 erreichen ihre Schaltkreise über gepatchte Kopien von `revm-precompile`, `k256` und `ark-ff`, jeweils mit dem Upstream-Code als Fallback-Pfad. Jeder Absender wird im Gastprogramm nach den Regeln von EIP-2 rekonstruiert, mit `k256`-Arithmetik, die die Patches zu `MOD_MUL` und `EC_ADD` leiten.

Die Binaries werden mit `--release` gebaut und mit jeder Familie, deren Höhe wählbar ist, bei `2^20` bewiesen: Der `.text`-Abschnitt des zustandslosen Binarys ist etwa 1,96 MB groß, 96,6 % dessen, was eine `2^20`-Tabelle erreicht.

## Der gemessene Block

Block 257.510 von `glamsterdam-devnet-8`, über `revm-block-stateless`: 60 Transaktionen, 101,5 Mgas, 198 Millionen Zyklen, geschnitten in 207 Shards. Der Basisbeweis dauerte 2.481 s auf einer Maschine mit 32 vCPUs und 247,7 GiB und erreichte eine Spitze von 174 GiB, die Rekursion kam mit etwa 2.620 s hinzu, und der Contract akzeptierte das Ergebnis für 3.620.026 gas. [Performance](https://apogee.gweb3networks.com/docs/architecture/performance) schlüsselt jede Stufe auf.

## Was ein Blockbeweis nicht leistet

- **Der Validator bezieht seine Eingabe von einem externen Witness-Erzeuger.** `eth_getProof` liefert die Trie-Knoten auf dem Pfad jedes Schlüssels, aber eine Löschung, die einen Branch zusammenfallen lässt, braucht einen Geschwisterknoten, der auf dem Pfad keines geänderten Schlüssels liegt. Der Recorder des Repositorys kann deshalb keine zustandslosen Eingaben erzeugen; sie stammen aus einem Release von `tests-zkevm` oder aus den Datensätzen des zkEVM-Benchmarks.
- **Das Mini-Block-Binary beweist eine Ausführung über einem aufgezeichneten Vorzustand**, meist die der ersten paar Transaktionen eines Blocks, und stellt keine Behauptung über die Zustandswurzel auf. Sein Journal wächst um einen Datensatz pro Transaktion und wird größer als das öffentliche Fenster; deshalb laufen vollständige Blöcke über den zustandslosen Validator.

Die Spezifikation: [Ethereum-Blöcke](https://apogee.gweb3networks.com/docs/auditors/spec/ethereum).
