Starknet est un rollup sur Ethereum qui prouve la validité de ses transactions par des preuves STARK. Ses smart contracts sont écrits en Cairo, un langage conçu pour le calcul prouvable, et non en Solidity. Pour un projet, cela implique une pile technique distincte et un vivier de spécialistes plus restreint, avec un audit centré sur les spécificités du langage et la messagerie entre couches.
Développer sur Starknet
Le type de base de Cairo est l'élément de corps fini (felt252), sur lequel reposent les types entiers de plus haut niveau. Les contrats sont déclarés sous forme de classes puis déployés en instances, et un contrat peut remplacer sa propre classe pour évoluer. Chaque compte est un smart contract (abstraction de compte native), et les messages entre Ethereum et Starknet passent par un contrat central sur Ethereum et par des fonctions L1 handler dédiées sur Starknet.
- Langage : Cairo
- Outils : Scarb pour la compilation et les dépendances, Starknet Foundry pour les tests
- Non compatible EVM
Ce que regardent les auditeurs
- L'arithmétique des felts : les opérations sur des éléments de corps bruts bouclent modulo un nombre premier, d'où l'usage de types entiers vérifiés lorsque le dépassement compte
- La messagerie entre L1 et L2 : validation de l'expéditeur dans les L1 handlers, annulation des messages, gestion des échecs
- L'abstraction de compte : validation des signatures, hypothèses sur l'appelant, protection contre le rejeu
- Les mises à jour par remplacement de classe : qui peut les déclencher et comment le stockage est préservé
- L'organisation du stockage, le contrôle d'accès et la manipulation des adresses Ethereum, dont la taille diffère de celle des adresses Starknet
Avant de demander des devis
- Indiquez les versions de Cairo et de Scarb utilisées et les bibliothèques externes
- Décrivez chaque flux entre couches et les contrats des deux côtés
- Fournissez des tests Starknet Foundry, y compris les cas d'échec et le traitement des messages
- Expliquez le mécanisme de mise à jour et qui le contrôle