Custom Errors trong Solidity

Custom errors là một tính năng mạnh mẽ trong Solidity giúp bạn viết mã nguồn hiệu quả hơn và tiết kiệm gas. Bằng cách sử dụng custom errors, bạn có thể cung cấp thông tin chi tiết về lỗi mà không cần sử dụng chuỗi thông báo lỗi dài dòng, giúp mã nguồn của bạn dễ đọc và bảo trì hơn.

Lợi Ích của Custom Errors

  • Tiết Kiệm Gas: Custom errors tiết kiệm gas hơn so với việc sử dụng chuỗi thông báo lỗi vì chúng không lưu trữ chuỗi trong nhật ký giao dịch.
  • Cải Thiện Độ Rõ Ràng: Custom errors giúp mã nguồn dễ đọc hơn và dễ bảo trì hơn.

Cách Định Nghĩa và Sử Dụng Custom Errors

Định Nghĩa Custom Error

Bạn có thể định nghĩa một custom error bằng cách sử dụng từ khóa error, theo sau là tên lỗi và danh sách các tham số (nếu có).

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
 
contract Example {
    // Định nghĩa custom error
    error InsufficientBalance(uint256 available, uint256 required);
 
    mapping(address => uint256) private balances;
 
    // Hàm rút tiền
    function withdraw(uint256 amount) public {
        uint256 balance = balances[msg.sender];
        if (balance < amount) {
            // Sử dụng custom error
            revert InsufficientBalance(balance, amount);
        }
        balances[msg.sender] -= amount;
        payable(msg.sender).transfer(amount);
    }
 
    // Hàm nạp tiền
    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }
}

Sử Dụng Custom Error

Trong ví dụ trên, custom error InsufficientBalance được sử dụng trong hàm withdraw để kiểm tra xem người dùng có đủ số dư để rút tiền hay không. Nếu không đủ, hàm sẽ revert với custom error, cung cấp thông tin chi tiết về số dư hiện tại và số tiền yêu cầu.