# Ihre App starten

> Das Entwicklerhandbuch für Apogee VM. Wie ein Gastprogramm geschrieben, gebaut, ausgeführt, bewiesen und on-chain abgewickelt wird, und die Gewohnheiten, die es korrekt, beweisbar und günstig halten.

Ein **Gastprogramm** (Guest) ist das Programm, das Apogee beweist: ein `no_std`-Rust-Binary, kompiliert für `riscv32imac-unknown-none-elf`, mit einem Einsprungpunkt, drei Speicherbereichen für seine Eingaben und Ausgaben und sonst nichts. Der **Host** ist alles darum herum: der Code, der die Eingabe liefert, Apogee um einen Beweis bittet und diesen Beweis an denjenigen weitergibt, der ihn prüft. Sie schreiben beides. Apogee liefert die Maschine, die Schaltkreise und den Verifier.

Dieser Abschnitt ist für zwei Leser zugleich geschrieben: einen Entwickler an der Tastatur und das Modell, mit dem er arbeitet. Jede Seite nennt ihre Regeln ohne Umschweife, und der [KI-Begleiter](https://apogee.gweb3networks.com/docs/launch/ai-companion) verdichtet sie alle in einer einzigen Datei, die Sie einem Assistenten übergeben können, bevor er eine Zeile schreibt.

## Das Modell

> Figure: Wer was tut. Die Eingabe und das Journal sind durch den Beweis gebunden; die Hilfsdaten (Advice), gestrichelt gezeichnet, sind es nicht, und deshalb prüft ein Gastprogramm sie. Der Verifier sieht nie das Programm, nur seine Identität.

Ein Beweis sagt genau eines aus: Das Programm mit dieser Identität, gestartet auf seinem Image mit dieser öffentlichen Eingabe und irgendwelchen vom Prover gewählten Hilfsdaten, ist bis `EXIT` mit diesem Status gelaufen und hat dabei dieses Journal geschrieben. Alles, was Sie bauen, ruht auf diesem Satz.

## Der Ablauf

| Schritt | Was Sie tun | Seite |
| --- | --- | --- |
| 1 | Installieren Sie nichts von Hand: Das Repository legt die Toolchain fest. Besorgen Sie die Zeremoniedatei für die Beweiserzeugung | [Umgebung einrichten](https://apogee.gweb3networks.com/docs/launch/setup) |
| 2 | Schreiben Sie das Gastprogramm: ein Einsprungpunkt, die drei Speicherbereiche und gewöhnliches Rust | [Ein Gastprogramm schreiben](https://apogee.gweb3networks.com/docs/launch/write), [Eingaben, Hilfsdaten und Journal](https://apogee.gweb3networks.com/docs/launch/io) |
| 3 | Greifen Sie dort, wo es sich lohnt, zu delegiertem Hashing und delegierter Kurvenarithmetik | [Delegationen](https://apogee.gweb3networks.com/docs/launch/delegations) |
| 4 | Bauen Sie es für das Target der Gastprogramme, dann inspizieren Sie das Image und seine Identität | [Bauen und inspizieren](https://apogee.gweb3networks.com/docs/launch/build) |
| 5 | Führen Sie es im Emulator aus und zählen Sie, wohin die Zyklen gehen | [Ausführen und profilieren](https://apogee.gweb3networks.com/docs/launch/run) |
| 6 | Beweisen Sie einen Lauf und verifizieren Sie ihn | [Beweisen und verifizieren](https://apogee.gweb3networks.com/docs/launch/prove) |
| 7 | Komprimieren Sie den Beweis per Rekursion und prüfen Sie ihn auf Ethereum | [On-Chain abwickeln](https://apogee.gweb3networks.com/docs/launch/on-chain) |

Der [Schnellstart](https://apogee.gweb3networks.com/docs/launch/quickstart) geht den gesamten Ablauf einmal mit einem Gastprogramm aus drei Zeilen durch.

## Die wichtigsten Regeln

Jede wird im [Programmierleitfaden für Gastprogramme](https://apogee.gweb3networks.com/docs/launch/guide) erklärt, mit dem, was schiefgeht, und dem, was stattdessen zu tun ist.

- **`usize` und jeder Zeiger sind 32 Bit breit.** Ein Überlauf von `usize` löst nur im Gastprogramm einen Panic aus, `x as usize` schneidet stillschweigend ab, und alles, dessen Layout oder Hash von einer Länge abhängt, unterscheidet sich zwischen Host und Gastprogramm.
- **Der Allokator gibt nie Speicher frei.** Er schiebt einen Zeiger ab `__heap_start` nach oben; was einem Gastprogramm den Speicher ausgehen lässt, ist also die Gesamtmenge dessen, was es über den Lauf alloziert, nicht sein Spitzenbedarf. Verwenden Sie Puffer wieder und dimensionieren Sie sie mit `with_capacity`.
- **Atomics funktionieren, und Sie sollten sie nicht schreiben.** Die Maschine hat einen einzigen Hart; die A-Erweiterung ist also für die Kompatibilität mit Code da, der sie bereits verwendet. Neuer Code in Gastprogrammen hat nichts zu synchronisieren.
- **Es gibt keine Außenwelt.** Keine Dateien, keine Uhr, kein Zufall, kein Netzwerk. Ein Gastprogramm kennt seine öffentliche Eingabe, seine Hilfsdaten und das, was es berechnet.
- **Hilfsdaten wählt der Prover.** Prüfen Sie sie gegen etwas, das der Beweis bindet, bevor irgendetwas daraus Abgeleitetes ins Journal gelangt.
- **Das Journal ist klein.** Höchstens 16.380 Byte. Veröffentlichen Sie einen Digest von allem, was wächst.
- **Überlaufprüfungen bleiben im Release-Build aktiv.** Sie sind Teil dessen, was das Programm berechnet; deshalb legt das Profil der Gastprogramme sie fest.
- **Jeder ausgeführte Befehl ist eine bewiesene Zeile.** Die Beweiskosten folgen der Zyklenzahl; bauen Sie also mit `--release` und zählen Sie Zyklen, bevor Sie irgendetwas anderes optimieren.

## Wo Sie beginnen

- [Schnellstart](https://apogee.gweb3networks.com/docs/launch/quickstart): Ein Gastprogramm, ein Build, ein Lauf und ein Beweis, in einer Sitzung.

- [Programmierleitfaden für Gastprogramme](https://apogee.gweb3networks.com/docs/launch/guide): Die Fallstricke und Präferenzen, jeweils mit ihrer Begründung.

- [KI-Begleiter](https://apogee.gweb3networks.com/docs/launch/ai-companion): Eine Datei, die einen Assistenten für das Schreiben von Gastprogrammen brieft.
