# Lancez votre application

> Le manuel du développeur pour Apogee VM. Comment un programme invité est écrit, compilé, exécuté, prouvé et réglé sur la chaîne, et les habitudes qui le gardent correct, prouvable et peu coûteux.

Un **programme invité** est le programme que prouve Apogee : un binaire Rust `no_std` compilé pour `riscv32imac-unknown-none-elf`, avec un point d’entrée, trois régions mémoire pour ses entrées et ses sorties, et rien d’autre. L’**hôte** est tout ce qui l’entoure : le code qui fournit l’entrée, demande une preuve à Apogee et remet cette preuve à quiconque la vérifie. Vous écrivez les deux. Apogee fournit la machine, les circuits et le vérificateur.

Cette section s’adresse à deux lecteurs à la fois : un ingénieur devant son clavier et le modèle avec lequel il travaille. Chaque page énonce ses règles sans détour, et le [Compagnon IA](https://apogee.gweb3networks.com/docs/launch/ai-companion) les condense toutes en un seul fichier que vous pouvez remettre à un assistant avant qu’il n’écrive une ligne.

## Le modèle

> Figure: Qui fait quoi. L’entrée et le journal sont liés par la preuve; les données auxiliaires (advice), en pointillés, ne le sont pas, et c’est pourquoi un programme invité les vérifie. Le vérificateur ne voit jamais le programme, seulement son identité.

Une preuve dit une seule chose : le programme de cette identité, lancé sur son image avec cette entrée publique et des données auxiliaires choisies par le prouveur, s’est exécuté jusqu’à `EXIT` avec ce statut, après avoir écrit ce journal. Tout ce que vous construisez repose sur cette phrase.

## Le flux de travail

| Étape | Ce que vous faites | Page |
| --- | --- | --- |
| 1 | N’installez rien à la main : le dépôt fixe la chaîne d’outils. Récupérez le fichier de cérémonie, nécessaire pour prouver | [Préparer l’environnement](https://apogee.gweb3networks.com/docs/launch/setup) |
| 2 | Écrivez le programme invité : un point d’entrée, les trois régions, du Rust ordinaire | [Écrire un programme invité](https://apogee.gweb3networks.com/docs/launch/write), [Entrées, données auxiliaires et journal](https://apogee.gweb3networks.com/docs/launch/io) |
| 3 | Recourez au hachage et à l’arithmétique de courbe délégués là où c’est rentable | [Délégations](https://apogee.gweb3networks.com/docs/launch/delegations) |
| 4 | Compilez-le pour la cible des programmes invités, puis inspectez l’image et son identité | [Compiler et inspecter](https://apogee.gweb3networks.com/docs/launch/build) |
| 5 | Exécutez-le dans l’émulateur et mesurez où vont les cycles | [Exécuter et profiler](https://apogee.gweb3networks.com/docs/launch/run) |
| 6 | Prouvez une exécution et vérifiez-la | [Prouver et vérifier](https://apogee.gweb3networks.com/docs/launch/prove) |
| 7 | Compressez la preuve par récursion et vérifiez-la sur Ethereum | [Régler sur la chaîne](https://apogee.gweb3networks.com/docs/launch/on-chain) |

Le [Démarrage rapide](https://apogee.gweb3networks.com/docs/launch/quickstart) parcourt une fois la boucle complète avec un programme invité de trois lignes.

## Les règles les plus importantes

Chacune est expliquée, avec ce qui tourne mal et ce qu’il faut faire à la place, dans le [guide de programmation des programmes invités](https://apogee.gweb3networks.com/docs/launch/guide).

- **`usize` et tous les pointeurs font 32 bits.** Un dépassement de `usize` provoque une panique dans le programme invité seulement, `x as usize` tronque sans rien signaler, et tout ce dont la disposition ou le hachage dépend d’une longueur diffère entre l’hôte et le programme invité.
- **L’allocateur ne libère jamais rien.** Il fait monter un pointeur à partir de `__heap_start`, si bien que ce qui épuise la mémoire d’un programme invité, c’est le total qu’il alloue au cours de l’exécution, et non son pic. Réutilisez les tampons et dimensionnez-les avec `with_capacity`.
- **Les opérations atomiques fonctionnent, et vous ne devriez pas en écrire.** La machine n’a qu’un seul hart : l’extension A est là pour la compatibilité avec le code qui l’utilise déjà. Le code d’un nouveau programme invité n’a rien à synchroniser.
- **Il n’y a pas de monde extérieur.** Ni fichiers, ni horloge, ni aléa, ni réseau. Un programme invité connaît son entrée publique, ses données auxiliaires et ce qu’il calcule.
- **Les données auxiliaires sont choisies par le prouveur.** Vérifiez-les par rapport à quelque chose que la preuve lie avant que quoi que ce soit qui en dérive n’atteigne le journal.
- **Le journal est petit.** 16 380 octets au plus. Publiez un condensé de tout ce qui grandit.
- **Les vérifications de dépassement restent actives en release.** Elles font partie de ce que calcule le programme, et le profil des programmes invités les impose donc.
- **Chaque instruction exécutée est une ligne prouvée.** Le coût de la preuve suit le nombre de cycles : compilez avec `--release` et comptez les cycles avant d’optimiser quoi que ce soit d’autre.

## Par où commencer

- [Démarrage rapide](https://apogee.gweb3networks.com/docs/launch/quickstart): Un programme invité, une compilation, une exécution et une preuve, en une seule séance.

- [Guide de programmation des programmes invités](https://apogee.gweb3networks.com/docs/launch/guide): Les pièges et les préférences, chacun avec sa raison.

- [Compagnon IA](https://apogee.gweb3networks.com/docs/launch/ai-companion): Un seul fichier qui breffe un assistant sur l’écriture de programmes invités.
