- 1
Conception et modélisation des menaces
Nous commençons par la conception du protocole : architecture des contrats, flux de tokens, acteurs et leurs incitations, et un modèle de menace explicite. Les décisions sur la chaîne et le L2, l'évolutivité et les dépendances aux oracles sont prises ici, avec les compromis consignés. Le livrable est un document de conception qu'un auditeur peut lire, et qui se rembourse dès le début de l'audit.
- 2
Développement avec les tests comme spécification
Les contrats sont développés en cycles courts, avec des tests unitaires, de fork, de fuzzing et d'invariants écrits en parallèle du code, en utilisant le forking du mainnet pour tester contre les protocoles réels déployés avec lesquels vous vous intégrez. Les benchmarks de gaz s'exécutent en CI, ce qui permet de détecter les régressions de coût à chaque commit. Vous voyez le dépôt et les rapports de tests en continu, jamais une boîte noire.
- 3
Cycle d'audit et durcissement
Avant qu'aucune valeur ne soit exposée, le code passe par une revue interne et une analyse statique, puis un audit par un tiers que nous cadrons, coordonnons et auquel nous répondons. Chaque constat est corrigé ou explicitement accepté avec justification, et les corrections sont retestées. En parallèle, nous répétons les déploiements sur des testnets avec les scripts exacts et les signataires multisig qui seront utilisés sur le mainnet.
- 4
Déploiement et exploitation en production
Le déploiement sur mainnet s'exécute à partir de scripts répétés, avec le code source vérifié sur Etherscan, la propriété transférée au multisig ou timelock convenu, et un monitoring en place pour les événements du contrat, les soldes et les activités anormales. Nous remettons des runbooks incluant un plan de réponse aux incidents, et pouvons rester impliqués pour l'itération, les mises à niveau et le travail continu sur le protocole.