Témoin de l'histoire aujourd'hui. Le célèbre protocole DEX CurveFinance a été attaqué et les liquidités de plusieurs pools ont été drainées. L'enquête préliminaire a révélé que c'était la faute du compilateur de contrats intelligents Vyper. C'était tellement scandaleux que les gens ne pouvaient s'empêcher de le qualifier de bon gars. Les statistiques préliminaires montrent que la perte a dépassé 50 millions de dollars américains et que le prix instantané du token de la plateforme CRV était proche de zéro !

Pour expliquer brièvement à des amis qui ne sont pas techniciens, lorsque nous utilisons la blockchain, nous avons souvent affaire à des codes fonctionnant sur la blockchain. Ces codes sont appelés « contrats intelligents ».

Pour une chaîne publique comme Ethereum qui se concentre sur les contrats intelligents, elle dispose d'un ensemble de codes standard pour les contrats intelligents pour ceux qui y développent des applications (également appelées dApp, application décentralisée) pour écrire et exécuter des applications. Par exemple, Uniswap et Curve sont toutes des applications dApp exécutées sur Ethereum.

Étant donné que l'ordinateur doit être facile à exécuter et économiser de l'espace de stockage, le code standard stocké sur la chaîne est un nombre binaire très compact proche du langage machine, qui n'est pas pratique à lire et à écrire directement pour les humains.

Afin de rendre l'ouverture des applications plus pratique, de nombreux « langages de haut niveau » faciles à lire et à écrire pour les humains ont été inventés pour écrire des programmes. Il y avait trois types sur Ethereum. La même syntaxe est similaire au langage LISP et n'est pas devenue populaire. Une syntaxe est similaire au langage Python car elle a été promue par Vitalik (le fondateur d'Ethereum), appelé Vyper. la syntaxe est similaire au langage Javascript, appelé Solidity.

Une fois que les programmeurs ont écrit des programmes de contrats intelligents dans ces langages de haut niveau, ils doivent utiliser un outil appelé « compilateur » pour les « traduire » en « langage machine » pouvant s'exécuter sur la blockchain Ethereum, c'est-à-dire en code standard.

Évidemment, différents langages de haut niveau ont des compilateurs différents. C'est facile à comprendre. La traduction japonaise et la traduction anglaise sont définitivement différentes. La faute réside dans le compilateur/traducteur.

Cette fois, Curve a été attaqué à cause d'une faille dans une version spécifique du compilateur Vyper utilisée par certains pools Curve (soupçonnée, toujours sous enquête). C'est comme dire "Je veux boire" en japonais et le traducteur le traduit en Chinois Quand il a été traduit par "Je veux manger des crabes". c'est scandaleux

Heureusement, la popularité de Vyper n’est pas élevée. Actuellement, Solidity est le plus utilisé dans Ethereum et les chaînes compatibles. Le traducteur anglais est plus clair et il n'y a pas d'erreurs de traduction, Dieu merci

Au tout début d'Uniswap, le leader de DEX, le fondateur Hayden utilisait le langage Vyper pour écrire du code. Heureusement, Hayden a ensuite embauché un CTO professionnel et a modifié le code en Solidity. Donc cette fois-ci autour du problème du compilateur Vyper, Uniswap est sain et sauf. Curve Finance, qui utilise largement le langage Vyper, a souffert.

Le problème causé par ce défaut est le classique « problème de réentrée ». En repensant à cette année-là, en 2015, l'incident de DAO a directement conduit au hard fork d'Ethereum, se scindant en ETH et ETC. Ce problème de réentrée est en réalité une malédiction de l'histoire !

Mais le problème de réentrée du DAO s'est produit au niveau linguistique de haut niveau. C'est-à-dire que vous parliez incorrectement l'anglais, mais que vous vouliez plutôt manger des crabes. la traduction.

Quant à cet incident Curve, ce qui est effrayant, c'est que vous avez bien compris, mais le traducteur s'est trompé et vous n'avez pas pu le comprendre (la société d'audit ne vérifiera pas le code binaire compilé), donc il a été introduit sans personne remarquer. BUG fatal! Cela a également sonné un signal d’alarme pour l’ensemble de l’industrie DeFi d’aujourd’hui et même pour l’ensemble de l’industrie de la blockchain !

Aujourd’hui, tout le monde, des rédacteurs de code aux réviseurs de code en passant par les auditeurs tiers, ne regardera pas le code binaire compilé. Tout le monde suppose qu’il n’y aura aucun problème avec le compilateur. Tant qu’ils voient que le langage de haut niveau est écrit correctement, ils pensent qu’il n’y aura pas de problème.

Pourquoi Satoshi Nakamoto n’a-t-il pas ajouté des fonctions de contrat intelligent trop puissantes au script BTC ? Il s’agit d’éviter des erreurs impardonnables causées par une complexité accrue. Certains reprochent au BTC d’être conservateur, mais face à des actifs valant des millions, des dizaines, voire des milliards de dollars, la prudence et le conservatisme ne sont jamais de trop. La plupart des gens sont encore des gens ordinaires. Une perte de dizaines ou de millions de dollars sera un coup fatal à celui qui en souffrira.

Cela met également en évidence l'avertissement de la loi de Murphy : tout lien qui peut mal tourner le sera certainement tant que suffisamment de temps s'écoule. Cette fois, c'était Vyper, qui a eu beaucoup de chance. Qu'en est-il de l'avenir ? Et s'il y avait une vulnérabilité fatale dans Solidity ? L'ensemble de la DeFi, avec des milliers de protocoles, des dizaines de milliards d'actifs et des bâtiments brillants, a été construit sur des sables mouvants. En un instant, le fond du chaudron a été vidé. et ils se sont tous effondrés. N'est-ce pas terrible ?

Pourquoi est-il difficile de parcourir les cycles ? Avant de poursuivre tel ou tel objectif de rêve, vous devez d'abord examiner si vous pouvez « vivre jusqu'à ce jour ». Souvent, survivre est le vainqueur et les restes sont rois.