Futures
Accédez à des centaines de contrats perpétuels
CFD
Or
Une plateforme pour les actifs mondiaux
Options
Hot
Tradez des options classiques de style européen
Compte unifié
Maximiser l'efficacité de votre capital
Trading démo
Introduction au trading futures
Préparez-vous à trader des contrats futurs
Événements futures
Participez aux événements et gagnez
Demo Trading
Utiliser des fonds virtuels pour faire l'expérience du trading sans risque
Lancer
CandyDrop
Collecte des candies pour obtenir des airdrops
Launchpool
Staking rapide, Gagnez de potentiels nouveaux jetons
HODLer Airdrop
Conservez des GT et recevez d'énormes airdrops gratuitement
Pre-IPOs
Accédez à l'intégralité des introductions en bourse mondiales
Points Alpha
Tradez on-chain et gagnez des airdrops
Points Futures
Gagnez des points Futures et réclamez vos récompenses d’airdrop.
Investissement
Simple Earn
Gagner des intérêts avec des jetons inutilisés
Investissement automatique
Auto-invest régulier
Double investissement
Profitez de la volatilité du marché
Staking souple
Gagnez des récompenses grâce au staking flexible
Prêt Crypto
0 Fees
Mettre en gage un crypto pour en emprunter une autre
Centre de prêts
Centre de prêts intégré
Promotions
Centre d'activités
Participez et gagnez des récompenses
Parrainage
20 USDT
Invitez des amis et gagnez des récompenses
Programme d'affiliation
Obtenez des commissions exclusives
Gate Booster
Développez votre influence et gagnez des airdrops
Annoncement
Mises à jour en temps réel
Blog Gate
Articles sur le secteur de la crypto
AI
Gate AI
Votre assistant IA polyvalent pour toutes vos conversations
Gate AI Bot
Utilisez Gate AI directement dans votre application sociale
GateClaw
Gate Blue Lobster, prêt à l’emploi
Gate for AI Agent
Infrastructure IA, Gate MCP, Skills et CLI
Gate Skills Hub
+10K compétences
De la bureautique au trading, une bibliothèque de compétences tout-en-un pour exploiter pleinement l’IA
GateRouter
Choisissez intelligemment parmi plus de 40 modèles d’IA, avec 0 % de frais supplémentaires
Je souhaite partager quelque chose d'assez important que vous ne comprenez peut-être pas encore bien — c’est la vulnérabilité de reentrancy dans les contrats intelligents. Si vous développez des dapps ou travaillez avec la blockchain, c’est une connaissance indispensable.
Quel est le problème fondamental de la reentrancy ? Il survient lorsqu’un contrat intelligent appelle un autre contrat, et que ce dernier peut rappeler le contrat d’origine pendant qu’il est encore en exécution. Un attaquant peut exploiter ce laps de temps pour voler de l’argent.
Imaginez que ContractA possède 10 Ether et que ContractB y a déjà envoyé 1 Ether. Lorsqu’il appelle la fonction de retrait, ContractA vérifie si le solde est supérieur à 0, et si c’est le cas, il envoie l’Ether en retour. Mais voici le problème — ContractA ne met à jour le solde qu’après avoir envoyé l’argent. Donc, pendant l’envoi, si ContractB a une fonction fallback, il peut rappeler la fonction de retrait de ContractA. Comme le solde n’a pas encore été mis à jour, la vérification réussira à nouveau, et il recevra encore 1 Ether. Cette boucle continue jusqu’à ce que ContractA n’ait plus d’argent.
Je vais vous présenter trois méthodes pour protéger le contrat contre cette attaque de reentrancy.
La première méthode consiste à utiliser le modificateur nonReentrant. L’idée est très simple — vous verrouillez le contrat pendant l’exécution d’une fonction. Si quelqu’un tente de rappeler cette fonction, la requête sera rejetée car le contrat est verrouillé. Vous devez terminer l’exécution du code, puis déverrouiller, et à ce moment-là, la vérification échouera si une tentative de réappel est faite.
La deuxième méthode consiste à utiliser le modèle Checks-Effects-Interactions. Au lieu de mettre à jour le solde après l’envoi, vous le mettez à jour immédiatement après la vérification, mais avant l’envoi. De cette façon, même si un autre contrat rappelle la fonction, le solde sera déjà à 0, et la vérification échouera. C’est pourquoi l’ordre est crucial — vérifier d’abord, puis appliquer les effets, et enfin interagir avec d’autres contrats.
La troisième méthode consiste à créer un GlobalReentrancyGuard séparé, particulièrement utile si vous avez plusieurs contrats qui interagissent. Au lieu de protéger chaque fonction individuellement, vous créez un contrat de garde commun, qui stocke l’état de verrouillage à un endroit central. Lorsqu’un contrat tente d’appeler une fonction protégée, il vérifie avec ce garde. Si le garde indique que le contrat est verrouillé, la transaction est rejetée. Cette approche est très puissante car elle empêche la reentrancy non seulement dans un seul contrat, mais aussi entre plusieurs contrats.
Je vous recommande d’appliquer ces trois techniques selon la situation. Pour les fonctions de retrait ou de transfert d’actifs, utilisez toujours nonReentrant ou Checks-Effects-Interactions. Et si votre projet comporte un système de contrats complexes, envisagez d’utiliser le GlobalReentrancyGuard comme couche de protection supplémentaire.
C’est l’une des vulnérabilités les plus courantes qui causent de grosses pertes, donc comprendre la reentrancy est crucial si vous souhaitez écrire des contrats intelligents sécurisés.