-
Bitcoin
$118200
0.07% -
Ethereum
$3621
2.33% -
XRP
$3.449
-0.27% -
Tether USDt
$1.000
-0.03% -
BNB
$737.5
1.89% -
Solana
$179.6
1.98% -
USDC
$0.9999
-0.01% -
Dogecoin
$0.2551
5.11% -
TRON
$0.3183
-1.84% -
Cardano
$0.8368
2.51% -
Hyperliquid
$44.95
0.20% -
Stellar
$0.4657
0.64% -
Sui
$3.880
3.70% -
Chainlink
$18.53
3.81% -
Hedera
$0.2689
2.79% -
Avalanche
$24.60
5.60% -
Bitcoin Cash
$520.9
1.48% -
Shiba Inu
$0.00001516
3.54% -
Litecoin
$113.0
11.81% -
UNUS SED LEO
$9.003
0.30% -
Toncoin
$3.192
0.80% -
Polkadot
$4.411
5.10% -
Uniswap
$10.32
3.99% -
Monero
$326.3
2.21% -
Ethena USDe
$1.001
-0.03% -
Bitget Token
$4.967
1.49% -
Pepe
$0.00001369
5.96% -
Dai
$1.000
0.01% -
Aave
$321.9
0.32% -
Bittensor
$418.3
2.11%
Comment gérer les erreurs de solidité? (exiger, retourner, affirmer)
Solidity fournit des `` requises '', `` revertir 'et «affirmer» pour la gestion des erreurs, assurer une exécution de contrat intelligente sécurisée et prévisible.
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 :
require
etrevert
à ne consommer que du gaz jusqu'au point de l'erreur, tandis queassert
consomme tous les gaz fournis. - Cas d'utilisation :
require
est le meilleur pour la validation des entrées,revert
les conditions personnalisées etassert
les vérifications de la logique interne. - Messages d'erreur : les deux
require
etrevert
les messages d'erreur personnalisés;assert
ne 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);
Fonction se retirer (montant uint) public {
error FundsLocked(uint releaseTime, uint currentTime);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
$1.0
44.70%
-
DIA
$0.5373
22.10%
-
FTT
$1.1
19.10%
-
WONUS
$0.8182
19.00%
-
BB
$0.1217
15.85%
-
CFG
$0.2396
15.34%
- Le trading de jetons WLFI approuvé: des liens de Trump aux votes communautaires
- 2025-07-20 09:10:12
- Broisée de sécurité de 44,2 millions de dollars de COINDCX: un réveil pour les échanges de cryptographie
- 2025-07-20 08:30:13
- Trump, WLFI et Sortie de jetons: une minute de New York sur Crypto
- 2025-07-20 08:30:13
- RLUSD de Ripple: Le Bluechip Stablecoin est prévu pour perturber le marché?
- 2025-07-20 08:50:11
- Bitcoin Prix Action: L'affaiblissement de la demande à l'horizon?
- 2025-07-20 08:50:11
- RLUSD de Ripple: stablecoin de premier plan agitant le marché
- 2025-07-20 08:55:12
Connaissances connexes

Qu'est-ce qu'un fabricant contre des frais de preneur?
Jul 19,2025 at 01:14am
Comprendre les bases des frais d'échange de crypto-monnaie Dans le monde du trading des crypto-monnaies, les frais de fabricant vs preneur sont un...

Comment analyser les données à terme Bitcoin de CME?
Jul 19,2025 at 05:22pm
Comprendre Bitcoin Futures sur CME Bitcoin Les contrats à terme sur le groupe CME (Chicago Mercantile Exchange) représentent un instrument financier r...

Comment comprendre le prix de liquidation?
Jul 19,2025 at 10:00pm
Qu'est-ce qu'un prix de liquidation dans le trading des crypto-monnaies? Dans le domaine des contrats à terme sur la crypto-monnaie et le trad...

Qu'est-ce que le temps en force (GTC, IOC, FOK)?
Jul 19,2025 at 08:57am
Comprendre le temps en vigueur dans le trading des crypto-monnaies Dans le monde du trading des crypto-monnaies , le temps de force (TIF) est un param...

Qu'est-ce qu'une liquidation partielle?
Jul 19,2025 at 01:49am
Comprendre les bases de la liquidation partielle Dans le monde du trading des crypto-monnaies, en particulier dans les positions à effet de levier, la...

Comment trouver de bons points d'entrée et de sortie pour les futurs Bitcoin?
Jul 19,2025 at 05:14pm
Comprendre les futurs Bitcoin et leurs caractéristiques uniques Bitcoin Les contrats à terme sont des contrats dérivés qui permettent aux traders de s...

Qu'est-ce qu'un fabricant contre des frais de preneur?
Jul 19,2025 at 01:14am
Comprendre les bases des frais d'échange de crypto-monnaie Dans le monde du trading des crypto-monnaies, les frais de fabricant vs preneur sont un...

Comment analyser les données à terme Bitcoin de CME?
Jul 19,2025 at 05:22pm
Comprendre Bitcoin Futures sur CME Bitcoin Les contrats à terme sur le groupe CME (Chicago Mercantile Exchange) représentent un instrument financier r...

Comment comprendre le prix de liquidation?
Jul 19,2025 at 10:00pm
Qu'est-ce qu'un prix de liquidation dans le trading des crypto-monnaies? Dans le domaine des contrats à terme sur la crypto-monnaie et le trad...

Qu'est-ce que le temps en force (GTC, IOC, FOK)?
Jul 19,2025 at 08:57am
Comprendre le temps en vigueur dans le trading des crypto-monnaies Dans le monde du trading des crypto-monnaies , le temps de force (TIF) est un param...

Qu'est-ce qu'une liquidation partielle?
Jul 19,2025 at 01:49am
Comprendre les bases de la liquidation partielle Dans le monde du trading des crypto-monnaies, en particulier dans les positions à effet de levier, la...

Comment trouver de bons points d'entrée et de sortie pour les futurs Bitcoin?
Jul 19,2025 at 05:14pm
Comprendre les futurs Bitcoin et leurs caractéristiques uniques Bitcoin Les contrats à terme sont des contrats dérivés qui permettent aux traders de s...
Voir tous les articles
