Étudier les exploits de contrats intelligents passés est excellent pour devenir un meilleur développeur Solidity. J'ai passé un certain temps récemment à examiner de nombreux exploits qui se sont produits au cours des deux dernières années. Comprendre la cause profonde d'un hack est un excellent moyen d'apprendre à penser différemment en matière d'écriture de code. Cela vous donne également une meilleure intuition sur les composants les plus critiques lorsque vous examinez de nouvelles bases de code. Je recommande à quiconque souhaitant améliorer son niveau en Solidity de passer en revue les exploits passés sur @RektHQ ou de consulter la documentation de @phylaxsystems, où nous avons des analyses des hacks et comment des assertions auraient pu les prévenir. En étudiant ces hacks passés, j'ai réalisé que souvent les exploits sont possibles en raison de vérifications manquantes dans le code ou de calculs incorrects qui conduisent les protocoles à entrer dans des états dans lesquels ils ne sont pas censés être. Une fois l'exploit survenu, le bug semble souvent évident. Nous devons nous assurer que les protocoles ont plus de facilité à identifier ces problèmes. De nombreux protocoles bénéficieraient de passer du temps à définir des invariants et à s'assurer que ceux-ci ne peuvent pas être violés. Écrire des assertions est un excellent moyen de s'assurer que ces invariants ne peuvent jamais être violés. Le dernier exploit que j'ai examiné était l'exploit d'Abracadabra de mars 2025 où environ 13 millions de dollars ont été perdus : Le Bug : sendValueInCollateral() a extrait de vrais tokens mais a oublié de mettre à jour les variables comptables internes. L'Exploit : orderValueInCollateral() continuait de signaler la même valeur de garantie même après que des tokens aient été retirés. Résultat : L'attaquant a emprunté contre des "garanties fantômes" à plusieurs reprises jusqu'à ce que les fonds soient épuisés. Une assertion qui vérifie l'invariant simple que la "garantie signalée" correspond à la "garantie réelle" aurait pu prévenir le hack.
946