0Pricing
Blockchain Smart Contracts with Solidity · Ders

Revert/Require ile Hata İşleme

Sağlam sözleşme yürütme için `require()`, `revert()` ve `assert()` kullanarak etkili hata işleme stratejileri uygulayın.

Revert/Require ile Hata İşleme, CoddyKit'te ücretsiz bir Blockchain Smart Contracts with Solidity dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Blockchain Smart Contracts with Solidity öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

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 if statements 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, unlike require() and revert() 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!

Sıkça Sorulan Sorular

“Revert/Require ile Hata İşleme” dersi ücretsiz mi?

Evet — “Revert/Require ile Hata İşleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Blockchain Smart Contracts with Solidity kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.

“Revert/Require ile Hata İşleme” dersinde ne öğreneceğim?

Sağlam sözleşme yürütme için `require()`, `revert()` ve `assert()` kullanarak etkili hata işleme stratejileri uygulayın. Blockchain Smart Contracts with Solidity ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Blockchain Smart Contracts with Solidity öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Blockchain Smart Contracts with Solidity, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Revert/Require ile Hata İşleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Blockchain Smart Contracts with Solidity dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Blockchain Smart Contracts with Solidity dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Kalıtım ve Arayüzler
  2. Kitaplıklar ve Soyut Sözleşmeler
  3. Revert/Require ile Hata İşleme
  4. Değiştiriciler ve Kontroller-Etkiler-Etkileşimler Kalıbı
← Blockchain Smart Contracts with Solidity Sayfasına Dön