-
bitcoin $87959.907984 USD
1.34% -
ethereum $2920.497338 USD
3.04% -
tether $0.999775 USD
0.00% -
xrp $2.237324 USD
8.12% -
bnb $860.243768 USD
0.90% -
solana $138.089498 USD
5.43% -
usd-coin $0.999807 USD
0.01% -
tron $0.272801 USD
-1.53% -
dogecoin $0.150904 USD
2.96% -
cardano $0.421635 USD
1.97% -
hyperliquid $32.152445 USD
2.23% -
bitcoin-cash $533.301069 USD
-1.94% -
chainlink $12.953417 USD
2.68% -
unus-sed-leo $9.535951 USD
0.73% -
zcash $521.483386 USD
-2.87%
Comment gérer les erreurs de solidité? (exiger, retourner, affirmer)
Solidity provides `require`, `revert`, and `assert` for error handling, ensuring secure and predictable smart contract execution.
Jul 20, 2025 at 05:00 am
Comprendre la gestion des erreurs dans la solidité
Solidity, le langage de programmation principal pour les contrats intelligents Ethereum, fournit plusieurs mécanismes de gestion des erreurs . Ces mécanismes sont cruciaux pour garantir que les contrats se comportent de manière prévisible et en toute sécurité lorsque des conditions inattendues ou non valides se produisent. Les principaux outils disponibles pour la gestion des erreurs dans Solidity sont require , revert et assert . Chacune de ces fonctions sert un objectif différent et doit être utilisée de manière appropriée en fonction de la situation.
Utilisation require pour la validation d'entrée
La fonction require est principalement utilisée pour valider les entrées et les conditions avant d'exécuter la logique de base d'une fonction. Si la condition fournie pour require est évaluée à false , la transaction est retenue et toutes les modifications apportées à l'État sont annulées. De plus, require que les développeurs permettent aux développeurs de fournir un message d'erreur personnalisé.
Exemple:
function transfer(address to, uint amount) public {require(amount > 0, 'Amount must be greater than zero'); require(balance[msg.sender] >= amount, 'Insufficient balance'); balance[msg.sender] -= amount; balance[to] += amount;
}
Dans cet exemple, require garantit que l'expéditeur a un solde suffisant et que le montant transféré est valide. Si l'une ou l'autre condition échoue, la transaction revient avec un message d'erreur clair.
Utilisation revert pour les conditions d'erreur personnalisées
La fonction revert offre plus de flexibilité que require en permettant aux développeurs de réintégrer l'exécution à tout moment d'une fonction. Il est particulièrement utile lorsqu'il s'agit d' une logique complexe ou de plusieurs conditions qui peuvent ne pas être facilement gérées par une seule instruction require .
Exemple:
function withdraw(uint amount) public {if (amount > balance[msg.sender]) { revert('Insufficient funds for withdrawal'); } if (block.timestamp < lockTime[msg.sender]) { revert('Funds are locked until a later time'); } balance[msg.sender] -= amount; payable(msg.sender).transfer(amount);
}
Dans ce scénario, revert est utilisé pour gérer deux conditions distinctes qui pourraient empêcher un retrait. Chaque condition est évaluée séparément et un message spécifique est renvoyé lorsque la condition échoue.
Utilisation assert pour la détection des erreurs internes
La fonction assert est destinée à vérifier les invariants et à attraper des erreurs internes qui ne devraient jamais se produire dans des circonstances normales. Contrairement à require et revert , l'utilisation assert consomme tout le gaz fourni dans la transaction lorsqu'il est déclenché. Par conséquent, il doit être réservé aux situations où un bug critique est suspecté.
Exemple:
function calculateSum(uint a, uint b) internal pure returns (uint) {uint sum = a + b; assert(sum >= a); return sum;
}
Dans cette fonction, assert garantit que l'opération d'addition n'entraîne pas un sous-écoulement ou un débordement. Si une telle anomalie se produit, la transaction revient, indiquant un bogue potentiel dans le code.
Différences entre require , revert et assert
La compréhension des distinctions entre require , revert et assert est essentielle pour une gestion efficace des erreurs dans la solidité:
- Consommation de gaz :
requireetrevertà ne consommer que du gaz jusqu'au point de l'erreur, tandis queassertconsomme tous les gaz fournis. - Cas d'utilisation :
requireest le meilleur pour la validation des entrées,revertles conditions personnalisées etassertles vérifications de la logique interne. - Messages d'erreur : les deux
requireetrevertles messages d'erreur personnalisés;assertne fournit pas de moyen de retourner des messages personnalisés dans les anciennes versions de la solidité (avant 0,8.0).
Le choix de la méthode de gestion des erreurs appropriée garantit que vos contrats intelligents sont à la fois sécurisés et efficaces .
Erreurs personnalisées dans la solidité
À partir de Solidity 0.8.0 , les développeurs peuvent définir des types d'erreur personnalisés , qui sont plus économes en gaz et lisibles que les messages d'erreur basés sur des chaînes. Les erreurs personnalisées sont définies à l'aide du mot clé error et peuvent être utilisées en conjonction avec revert .
Exemple:
error InsufficientBalance(uint requested, uint available); error FundsLocked(uint releaseTime, uint currentTime);Fonction se retirer (montant uint) public {if (amount > balance[msg.sender]) { revert InsufficientBalance(amount, balance[msg.sender]); } if (block.timestamp < lockTime[msg.sender]) { revert FundsLocked(lockTime[msg.sender], block.timestamp); } balance[msg.sender] -= amount; payable(msg.sender).transfer(amount);}
En utilisant des erreurs personnalisées , les développeurs peuvent fournir des informations d'erreur structurées qui sont à la fois faciles à comprendre et efficaces en termes d'utilisation du gaz.
Questions fréquemment posées
Q: Puis-je utiliser assert pour la validation d'entrée? R: Non, assert ne doit pas être utilisée pour la validation d'entrée. Il est conçu pour les contrôles internes et ne doit être utilisé que pour détecter le code inaccessible ou les bogues critiques .
Q: Comment les erreurs personnalisées économisent-elles le gaz par rapport aux messages de chaîne? R: Les erreurs personnalisées sont codées sous forme de sélecteurs de quatre octets , similaires aux signatures de fonction, qui sont beaucoup plus courtes et moins chères que les messages de chaîne complets. Il en résulte une baisse des coûts de gaz lorsqu'une erreur est déclenchée.
Q: Que se passe-t-il si je ne gère pas les erreurs dans mon contrat? R: Si les erreurs ne sont pas correctement gérées, des conditions non valides ou inattendues peuvent entraîner des changements d'état incorrects , une perte de fonds ou des vulnérabilités qui peuvent être exploitées par les attaquants.
Q: Puis-je combiner require et revert dans la même fonction? R: Oui, require et revert peuvent être utilisées ensemble dans la même fonction. require est généralement utilisée pour des vérifications de condition simples, tandis que revert est utilisé pour des renversés plus complexes ou conditionnels plus tard dans la fonction.
Clause de non-responsabilité:info@kdj.com
Les informations fournies ne constituent pas des conseils commerciaux. kdj.com n’assume aucune responsabilité pour les investissements effectués sur la base des informations fournies dans cet article. Les crypto-monnaies sont très volatiles et il est fortement recommandé d’investir avec prudence après une recherche approfondie!
Si vous pensez que le contenu utilisé sur ce site Web porte atteinte à vos droits d’auteur, veuillez nous contacter immédiatement (info@kdj.com) et nous le supprimerons dans les plus brefs délais.
-
RAIN Échangez maintenant$0.007852
113.00%
-
PIPPIN Échangez maintenant$0.06097
51.96%
-
PARTI Échangez maintenant$0.1396
42.04%
-
WAVES Échangez maintenant$0.9141
41.69%
-
ARC Échangez maintenant$0.04302
35.73%
-
HONEY Échangez maintenant$0.01029
21.80%
- Paiements adaptatifs, commerce numérique, infrastructure de paiement : de nouveaux systèmes remodèlent les paysages transactionnels
- 2026-02-11 18:45:01
- L'épée à double tranchant de Bitcoin : naviguer dans le FOMO, les opportunités et le piège
- 2026-02-11 15:55:01
- Prédiction de prix ASTER : un rallye est possible à mesure que la dynamique haussière se développe, mais le fantôme de Gotham se cache
- 2026-02-11 15:50:01
- Les ordonnances électroniques révolutionnent les soins de santé : newsGP adopte la tendance de la prescription électronique
- 2026-02-11 15:50:01
- Neo N3 libère la puissance des développeurs : un nouveau compilateur Solidity relie les talents d'Ethereum à sa blockchain
- 2026-02-11 15:45:02
- Maximiser les récompenses du minage de cryptomonnaie : le rôle crucial des logiciels en 2026
- 2026-02-11 13:15:01
Connaissances connexes
Comment maximiser l’effet de levier en toute sécurité pour le Day Trading Crypto ?
Feb 08,2026 at 01:19am
Comprendre les mécanismes de levier dans les dérivés cryptographiques 1. L’effet de levier multiplie à la fois les gains et les pertes potentiels en p...
Comment configurer une interface de trading « en un clic » pour le scalping ?
Feb 09,2026 at 10:59pm
Exigences de l'architecture de base 1. Une connexion WebSocket à faible latence doit être établie directement avec le flux du carnet d'ordres ...
Comment échanger des contrats à terme sur Ethereum avant et après des mises à niveau majeures ?
Feb 08,2026 at 09:40am
Comprendre la mécanique des contrats à terme d'Ethereum 1. Les contrats à terme Ethereum sont des accords standardisés pour acheter ou vendre des ...
Comment trouver des paires à haute liquidité pour les transactions sous contrat importantes ?
Feb 08,2026 at 06:20pm
Trouver des paires à haute liquidité pour les transactions contractuelles importantes Les traders qui exécutent des ordres contractuels importants doi...
Comment utiliser le « prix de référence » par rapport au « dernier prix » pour empêcher la liquidation ?
Feb 07,2026 at 05:39pm
Comprendre la mécanique des prix de marque 1. Le prix mark est une valeur composite dérivée de plusieurs indices de change au comptant et d'ajuste...
Comment calculer le « retour sur capitaux propres » (ROE) dans le trading avec effet de levier ?
Feb 08,2026 at 04:39am
Comprendre le retour sur capitaux propres dans le trading avec effet de levier 1. Le rendement des capitaux propres (ROE) dans le trading à effet de l...
Comment maximiser l’effet de levier en toute sécurité pour le Day Trading Crypto ?
Feb 08,2026 at 01:19am
Comprendre les mécanismes de levier dans les dérivés cryptographiques 1. L’effet de levier multiplie à la fois les gains et les pertes potentiels en p...
Comment configurer une interface de trading « en un clic » pour le scalping ?
Feb 09,2026 at 10:59pm
Exigences de l'architecture de base 1. Une connexion WebSocket à faible latence doit être établie directement avec le flux du carnet d'ordres ...
Comment échanger des contrats à terme sur Ethereum avant et après des mises à niveau majeures ?
Feb 08,2026 at 09:40am
Comprendre la mécanique des contrats à terme d'Ethereum 1. Les contrats à terme Ethereum sont des accords standardisés pour acheter ou vendre des ...
Comment trouver des paires à haute liquidité pour les transactions sous contrat importantes ?
Feb 08,2026 at 06:20pm
Trouver des paires à haute liquidité pour les transactions contractuelles importantes Les traders qui exécutent des ordres contractuels importants doi...
Comment utiliser le « prix de référence » par rapport au « dernier prix » pour empêcher la liquidation ?
Feb 07,2026 at 05:39pm
Comprendre la mécanique des prix de marque 1. Le prix mark est une valeur composite dérivée de plusieurs indices de change au comptant et d'ajuste...
Comment calculer le « retour sur capitaux propres » (ROE) dans le trading avec effet de levier ?
Feb 08,2026 at 04:39am
Comprendre le retour sur capitaux propres dans le trading avec effet de levier 1. Le rendement des capitaux propres (ROE) dans le trading à effet de l...
Voir tous les articles














