1. 6 juillet 2022, un mercredi extrêmement ordinaire.
Le programmeur Xiaosan a finalement terminé le test final du contrat, s'est retourné sur la chaise artificielle et s'est allongé avec enthousiasme.
"D'accord, la prochaine tâche est aujourd'hui : construire et déployer un nœud de jalonnement Ethereum."
Deux mois plus tard, Ethereum est sur le point d'inaugurer la fusion. Xiaosan a 289 ETH dans son portefeuille et prévoit de les utiliser pour la gestion financière.
"Mais il semble y avoir un bug dans le portefeuille du grand livre aujourd'hui ? Oubliez ça, allons sur le compte sur lequel j'ai déployé le contrat. Quoi qu'il en soit, publier et tester le contrat consommera du gaz."
Après avoir tapé le script de transfert, le serveur est allé se préparer une tasse de café. Un café au lait ordinaire, comme un mercredi ordinaire.
Après être revenu de la préparation du café, Xiaosan a commencé à se rafraîchir sur Etherscan tout en buvant pour voir si la transaction qui venait d'être envoyée était confirmée. " Hein ? Il semble que le compte de paiement ne soit pas correct ? "
Soudain, le cœur de la maîtresse manqua un battement, le café dans sa main tomba par terre et une sensation de froid envahit ses mains et ses pieds :
"C'est fini ! J'ai envoyé 289 ETH sur le compte test Hardhat !"
2、
Hardhat est le framework de développement le plus courant et le plus couramment utilisé dans Ethereum. Il fournit une série d'outils et de fonctions pour aider les développeurs à développer, tester et déployer des contrats intelligents sur la plateforme Ethereum.
Pour les développeurs, l’une des fonctions les plus importantes de Hardhat est de créer ou de créer localement un environnement Ethereum pour tester localement les contrats.
Lorsque vous exécutez la commande npx hardhat node localement,
Hardhat créera un réseau simulé localement et générera 20 comptes EOA de test fixes et les clés privées correspondantes.
Dans le même temps, Hardhat initialisera également le solde de 10 000 ETH pour ces 20 comptes EOA afin de permettre aux développeurs d'utiliser ces comptes pour publier des contrats locaux à des fins de test.
(Ayant 20 comptes « valant des centaines de millions », je suis le roi de localhost !)
A noter que ce réseau de simulation local n'a rien à voir avec le réseau principal Ethereum, et le solde de 10 000 ETH sur ces 20 comptes EOA est uniquement local.
Cependant, étant donné que les 20 comptes générés sont fixes et que les clés privées sont publiques, n'importe qui sur le réseau principal Ethereum peut utiliser ces clés privées pour retirer les actifs de ces comptes.
Si un ingénieur oublie de changer d'environnement après avoir terminé les tests contractuels, traite l'environnement de test comme l'environnement réseau principal et envoie ETH à ces 20 comptes de test, alors une tragédie se produira...
3、
Comme décrit précédemment, le 6 juillet de l'année dernière, une somme de 289 ETH a été envoyée au compte test Hardhat par un ami threepvault.eth.
0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Pourquoi le compte 0xf39F est-il le premier compte de test généré par Hardhat, c'est donc le plus couramment utilisé.
On suppose donc que ce programmeur malchanceux a copié le premier compte de test pour terminer le test, mais a oublié de changer de configuration et a envoyé 289 ETH à l'adresse de ce compte de test sur le réseau principal.
Si on le calculait sur la base du prix de la monnaie à l'époque, 289 ETH valaient 340 000 dollars américains. Aujourd'hui, ils valent plus de 500 000 dollars américains, soit une tragédie de 3 millions de yuans.
Que s'est-il passé ensuite ? Jetons un coup d'œil aux données en chaîne :
Ce transfert erroné s’est produit dans le bloc 15086827, qui était encore l’ère POW d’Ethereum.
Ce bloc est un bloc Flashbots, et un chercheur MEV a heureusement saisi cette "opportunité" Backrun.
Ce transfert erroné a été inscrit dans un package MEV et la transaction d'arbitrage a suivi de près. Après avoir payé les frais de gaz de 4,8 ETH, les environ 284 ETH restants du compte test Hardhat 0xf39F ont été transférés sur le compte 0x043D.
De 100ETH à 10ETH à 1ETH, et finalement même pas 0,1ETH n'a été épargné :
À ce stade, cet actif d'une valeur de 2 à 3 millions de yuans devrait être considéré comme une cause perdue et ne reviendra jamais.
4、
Quarante minutes après le drame, notre victime s'est connectée.
Il a envoyé un NFT au pirate informatique. Ce NFT s'appelle Message In a Bottle, qui peut regrouper un morceau de texte dans une image et le transformer en NFT.
Dans ce NFT, il a décrit son parcours mental :
bonjour, j'essayais de mettre en jeu un nœud de validation
ce soir. J'ai dû envoyer eth vers un portefeuille chaud en raison d'un bug du grand livre.
Je pensais que je l'envoyais vers mon portefeuille de déployeur de contrat. Il s'avère qu'il s'agissait d'un compte de test de casque public.
Je suis généralement assez prudent (matériel de portefeuille, envoi de petites transactions tests) mais j'ai été négligent ce soir. Ça fait du mal, mec.
Si vous voyez cela, j'aimerais essayer de négocier une prime ou quelque chose de similaire. J'ai fait une erreur vraiment stupide
traduire:
Bonjour, je souhaite mettre en place un nœud de vérification ce soir. En raison d'un bug dans le grand livre, eth a dû être envoyé vers le hot wallet.
Je pensais l'envoyer vers mon portefeuille de déploiement de contrat. (Seulement une fois le transfert terminé), j'ai découvert qu'il s'agissait d'un compte de test public Hardhat.
Je suis généralement très prudent (portefeuille matériel, envoi de petites transactions tests, etc.) mais j'ai été imprudent ce soir. Se sentir mal.
Si vous voyez cela, j'aimerais essayer de négocier une prime ou quelque chose de similaire. J'ai fait une erreur très stupide
5、
Mais le pirate informatique a ignoré la victime.
Cinq heures après la tragédie, le propriétaire du compte 0x043D, le pirate informatique MEVSearcher, s'est connecté. Il a habilement commencé à transférer des actifs, à diviser les 284 ETH et à les transférer un par un vers Tornado.
6、
Cependant, l’histoire ne s’arrête pas là.
15 heures après le drame, notre victime s'est à nouveau connectée.
Après avoir perdu 289 ETH, je ne sais pas comment le propriétaire est arrivé ici au cours des 15 dernières heures.
Maintenant, il aurait dû accepter la réalité de perdre 289 ETH, mais il ne l’a pas pleinement accepté.
Le propriétaire a acheté un nom de domaine ENS appelé
je paierai 100 ETH si les fonds sont retournés à threepvault.eth (si vous restituez l'argent à threepvault, je vous paierai 100 ETH), et j'ai envoyé ce nom de domaine au pirate informatique et lui ai fait son offre.
Peut-être voulait-il transmettre le message de cette manière, en espérant que le pirate informatique le découvrirait en toute conscience ou ferait preuve de pitié et lui rendrait 189 ETH.
En mars 2023, plus de six mois se sont écoulés depuis la tragédie. Aucune mesure n'a été prise concernant l'adresse du pirate informatique, aucune transaction n'a été effectuée et le compte de la victime n'a reçu aucune entrée de Tornado. Je pense que cette histoire s'arrête ici et qu'il ne devrait y avoir aucune suite. C'est la forêt sombre, personne ne paiera pour vos erreurs, chacun ne peut croire qu'en lui-même.