-
bitcoin $81131.293825 USD
4.61% -
ethereum $2629.223982 USD
5.70% -
tether $0.999644 USD
0.06% -
bnb $762.001372 USD
0.94% -
xrp $1.419903 USD
7.09% -
usd-coin $0.999900 USD
0.01% -
solana $111.987892 USD
5.89% -
tron $0.337691 USD
0.55% -
zcash $1568.013373 USD
5.10% -
hyperliquid $93.260937 USD
6.24% -
dogecoin $0.087155 USD
3.41% -
monero $565.955936 USD
6.55% -
chainlink $12.346409 USD
4.60% -
cardano $0.223297 USD
4.51% -
unus-sed-leo $8.875656 USD
-0.19%
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.
-
XTZ Échangez maintenant$0.3658
38.55%
-
PIEVERSE Échangez maintenant$1.55
28.99%
-
INJ Échangez maintenant$7.55
24.98%
-
MORPHO Échangez maintenant$2.74
15.51%
-
SKY Échangez maintenant$0.07108
14.97%
-
VET Échangez maintenant$0.008435
12.47%
- Egrag Crypto dévoile les tendances XRP : naviguer dans les fluctuations à court terme pour des gains à long terme
- 2026-09-19 16:40:02
- Un ancien banquier de Hong Kong emprisonné pendant quatre ans pour des pots-de-vin de 470 000 $ en crypto-monnaie
- 2026-09-19 16:35:01
- Prédiction des prix XRP : naviguer dans la volatilité et découvrir les niveaux clés au milieu des marées changeantes du marché
- 2026-09-19 12:45:01
- Nouvelle cotation de Binance, banques SWIFT 17 et entrée Pepeto 100x : la prochaine vague de crypto-finance
- 2026-09-19 09:00:02
- Lagarde, Binance et le Gambit grec : une impasse réglementaire européenne aux enjeux élevés
- 2026-09-19 08:55:01
- Examen de la prévente de MemeToro Crypto : le code public vise la confiance, mais l'exécution est la clé du jeton $MT
- 2026-09-19 08:35:01
Connaissances connexes
Comment vérifier le volume des contrats à terme SOL et les intérêts ouverts ?
Sep 14,2026 at 12:40am
Accéder aux données du marché à terme SOL 1. Accédez à la plateforme d'échange officielle où sont répertoriés les contrats à terme perpétuels ou t...
Comment vérifier le volume des contrats à terme XRP et les intérêts ouverts ?
Sep 15,2026 at 05:00am
Accès aux données à terme XRP en temps réel 1. Visitez les principales bourses de produits dérivés qui répertorient les contrats à terme perpétuels et...
Comment vérifier DOGE le volume des contrats à terme et l'intérêt ouvert ?
Sep 12,2026 at 08:39am
Comprendre le volume des contrats à terme DOGE 1. Le volume des contrats à terme fait référence au nombre total de DOGE contrats à terme négociés au c...
Comment vérifier le volume des contrats à terme ETH et les intérêts ouverts ?
Sep 16,2026 at 07:00pm
Accès aux données sur les contrats à terme ETH en temps réel 1. Les principales bourses centralisées telles que Binance, Bybit et OKX fournissent des ...
Comment vérifier le volume des contrats à terme BTC et les intérêts ouverts ?
Sep 12,2026 at 03:19pm
Sources de données pour les mesures des contrats à terme BTC 1. CoinGlass API v4 fournit des taux de financement en temps réel, des cartes thermiques ...
Comment lire le graphique des contrats perpétuels SOLUSDT ?
Sep 19,2026 at 02:19pm
Comprendre la structure des prix SOLUSDT 1. Le graphique des contrats perpétuels SOLUSDT affiche l'évolution des prix en temps réel du jeton natif...
Comment vérifier le volume des contrats à terme SOL et les intérêts ouverts ?
Sep 14,2026 at 12:40am
Accéder aux données du marché à terme SOL 1. Accédez à la plateforme d'échange officielle où sont répertoriés les contrats à terme perpétuels ou t...
Comment vérifier le volume des contrats à terme XRP et les intérêts ouverts ?
Sep 15,2026 at 05:00am
Accès aux données à terme XRP en temps réel 1. Visitez les principales bourses de produits dérivés qui répertorient les contrats à terme perpétuels et...
Comment vérifier DOGE le volume des contrats à terme et l'intérêt ouvert ?
Sep 12,2026 at 08:39am
Comprendre le volume des contrats à terme DOGE 1. Le volume des contrats à terme fait référence au nombre total de DOGE contrats à terme négociés au c...
Comment vérifier le volume des contrats à terme ETH et les intérêts ouverts ?
Sep 16,2026 at 07:00pm
Accès aux données sur les contrats à terme ETH en temps réel 1. Les principales bourses centralisées telles que Binance, Bybit et OKX fournissent des ...
Comment vérifier le volume des contrats à terme BTC et les intérêts ouverts ?
Sep 12,2026 at 03:19pm
Sources de données pour les mesures des contrats à terme BTC 1. CoinGlass API v4 fournit des taux de financement en temps réel, des cartes thermiques ...
Comment lire le graphique des contrats perpétuels SOLUSDT ?
Sep 19,2026 at 02:19pm
Comprendre la structure des prix SOLUSDT 1. Le graphique des contrats perpétuels SOLUSDT affiche l'évolution des prix en temps réel du jeton natif...
Voir tous les articles














