Fehlerbehandlung mit Revert/Require
Implementieren Sie effektive Strategien zur Fehlerbehandlung mit `require()`, `revert()` und `assert()` für eine robuste Contract-Ausführung.
Fehlerbehandlung mit Revert/Require ist eine kostenlose Blockchain Smart Contracts with Solidity-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Blockchain Smart Contracts with Solidity-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Blockchain Smart Contracts with Solidity-Kurs umfasst insgesamt 4 Lektionen.
Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.
Robust Contracts: Error Handling
Welcome to error handling in Solidity! Writing smart contracts requires extreme care, as they often manage valuable assets and are immutable once deployed.
Effective error handling is crucial for creating robust and secure decentralized applications (dApps). It helps prevent unexpected behavior and protects users.
`require()`: Validating Inputs
The require() function is your primary tool for validating conditions that must be true before a function executes.
- It checks pre-conditions and user inputs.
- If the condition is false, it reverts all state changes made in the current transaction.
- It refunds any remaining gas to the caller, effectively canceling the transaction.
Use require() for external conditions and user-provided data checks.
`require()` in Action
Let's see require() in a simple contract. This function only allows users older than 18 to register.
pragma solidity ^0.8.0;
contract UserRegistration {
uint public minAge = 18;
address[] public registeredUsers;
function registerUser(uint _age) public {
// Validate user input: age must be at least minAge
require(_age >= minAge, "Must be 18 or older to register.");
registeredUsers.push(msg.sender);
}
}`revert()`: Flexible Error Handling
The revert() statement offers more flexibility than require(), especially when you need to handle complex error logic or integrate with custom error types.
- Like
require(), it reverts all state changes and refunds gas. - It's often used inside
ifstatements for more intricate conditional checks. - It can be called directly or with a string message, similar to
require().
Custom Errors with `revert()`
Solidity 0.8.4+ introduced Custom Errors. These are more gas-efficient than string messages and provide better clarity for off-chain applications.
You define custom errors at the contract or file level, then use them with revert(). They help reduce transaction costs and improve contract readability.
Custom Error Demo
Here's how to define and use a custom error with revert(). Notice the error keyword.
pragma solidity ^0.8.4;
contract Wallet {
address public owner;
uint public balance;
// Define a custom error
error InsufficientFunds(uint requested, uint available);
constructor() {
owner = msg.sender;
}
function deposit() public payable {
balance += msg.value;
}
function withdraw(uint _amount) public {
require(msg.sender == owner, "Only owner can withdraw.");
// Use revert() with the custom error
if (_amount > balance) {
revert InsufficientFunds(_amount, balance);
}
balance -= _amount;
payable(owner).transfer(_amount);
}
}`assert()`: Internal Invariants
The assert() function is used for a very specific purpose: checking internal invariants.
- It verifies conditions that should never be false if your code is working correctly.
- If an
assert()fails, it indicates a bug in your contract logic. - Crucially, a failed
assert()consumes all remaining gas, unlikerequire()andrevert()which refund gas.
Use assert() for post-conditions or internal consistency checks, not for user input validation.
When to Use Which?
Choosing the right error handler is key:
require(): For validating user inputs, external conditions, or state changes before execution. Refunds gas.revert(): For more complex error logic, often with custom errors. Also refunds gas.assert(): For internal consistency checks and invariants. Indicates a bug if it fails and consumes all gas.
Prioritize require() and revert() for expected errors, and reserve assert() for unexpected, internal errors.
Error Handling Check
You're building a function that transfers tokens. Before sending, you need to ensure the sender has enough balance. If not, the transaction should fail and refund any unused gas.
Recap: Error Handling
You've learned how to make your Solidity contracts robust with proper error handling:
require()is for validating external conditions and user inputs.revert()offers flexibility, often used with gas-efficient custom errors.assert()is for internal invariants, signaling a bug if it fails.
Mastering these ensures your smart contracts are secure and predictable. Great job!
Häufig gestellte Fragen
Ist die Lektion „Fehlerbehandlung mit Revert/Require“ kostenlos?
Ja — der vollständige Text von „Fehlerbehandlung mit Revert/Require“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Blockchain Smart Contracts with Solidity-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Blockchain Smart Contracts with Solidity-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Fehlerbehandlung mit Revert/Require“?
Implementieren Sie effektive Strategien zur Fehlerbehandlung mit `require()`, `revert()` und `assert()` für eine robuste Contract-Ausführung. Du übst Blockchain Smart Contracts with Solidity mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Blockchain Smart Contracts with Solidity zu starten?
Keine Vorkenntnisse erforderlich. Blockchain Smart Contracts with Solidity auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Fehlerbehandlung mit Revert/Require“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Blockchain Smart Contracts with Solidity-Lektion Code schreiben und ausführen?
Ja. Jede Blockchain Smart Contracts with Solidity-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Vererbung und Interfaces
- Libraries und abstrakte Contracts
- Fehlerbehandlung mit Revert/Require
- Modifier und das Checks-Effects-Interactions-Pattern