第143篇 solidity 中的 error-revert

Posted wonderBlock

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第143篇 solidity 中的 error-revert相关的知识,希望对你有一定的参考价值。

Error:error 是 solidity 0.8.4 版本新加的内容,方便且高效(省gas)地向用户解释操作失败的原因。人们可以在contract之外定义异常。

一、合约示例1

自定义 error 实例通常比使用字符串描述要便宜得多,因为可以使用错误的名称来描述它,它只编码为四个字节。

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;

contract VendingMachine 
    address owner;
    error Unauthorized();

    function buy(uint amount) public payable 
        if (amount > msg.value / 2 ether)
            revert("Not enough Ether provided.");

        // Alternative way to do it:
        require(
            amount <= msg.value / 2 ether,
            "Not enough Ether provided."
        );
        // Perform the purchase.
    

    function withdraw() public 
        if (msg.sender != owner)
            revert Unauthorized();

        payable(msg.sender).transfer(address(this).balance);
    

二、合约示例2

自定义 errors 允许为故障情况定义描述性名称和数据。errors 可以用于 revert 语句中。与字符串描述相比

以上是关于第143篇 solidity 中的 error-revert的主要内容,如果未能解决你的问题,请参考以下文章

第125篇 笔记-solidity中的编码与解码

第140篇 solidity 中的异常

第151篇 Solidity 中的数组(Array)

第138篇 solidity 中的初始值

第135篇 solidity 中的控制流与排序

第135篇 solidity 中的控制流与排序