Tratamento de erros com Revert/Require
Implemente estratégias eficazes de tratamento de erros usando `require()`, `revert()` e `assert()` para obter uma execução robusta dos contratos.
Tratamento de erros com Revert/Require é uma aula grátis de Blockchain Smart Contracts with Solidity no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Blockchain Smart Contracts with Solidity, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Blockchain Smart Contracts with Solidity inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
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!
Perguntas Frequentes
A aula “Tratamento de erros com Revert/Require” é grátis?
Sim — o texto completo de “Tratamento de erros com Revert/Require” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Blockchain Smart Contracts with Solidity, atualize para CoddyKit PRO. O curso de Blockchain Smart Contracts with Solidity inclui 4 aulas no total.
O que vou aprender em “Tratamento de erros com Revert/Require”?
Implemente estratégias eficazes de tratamento de erros usando `require()`, `revert()` e `assert()` para obter uma execução robusta dos contratos. Você pratica Blockchain Smart Contracts with Solidity com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Blockchain Smart Contracts with Solidity?
Nenhuma experiência prévia é necessária. Blockchain Smart Contracts with Solidity no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Tratamento de erros com Revert/Require”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Blockchain Smart Contracts with Solidity?
Sim. Cada aula de Blockchain Smart Contracts with Solidity inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Herança e interfaces
- Bibliotecas e contratos abstratos
- Tratamento de erros com Revert/Require
- Modificadores e o Padrão Verificações-Efeitos-Interações