Solidity 练习:错误处理

2022-12-29 Web3 Solidity

# 一、题目说明

Solidity 有 3 种方法来抛出错误:require,revert 和 assert。

  • require 用于在执行之前和之后验证输入并检查条件。
  • revert 就像 require 一样,但是当要检查的条件嵌套在几个 if 语句中时更方便。
  • assert 用于检查不变量,代码永远不应该是 false。断言失败可能意味着存在错误。

出现错误将回退交易过程中产生的所有更改。

# 二、任务列表

  • 函数 div 输入 x 和 y,返回商。
  • 除以 0 是无效的。
  • 通过检查 y 是否大于 0 来完成函数 div。
  • 如果 y 为 0,则抛出错误消息 “div by 0”。

# 三、解答代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract ErrorHandling {
    function testRequire(uint _i) external pure {
        // Require should be used to validate conditions such as:
        // - inputs
        // - conditions before execution
        // - return values from calls to other functions
        require(_i <= 10, "i > 10");
    }

    function testRevert(uint _i) external pure {
        // Revert is useful when the condition to check is complex.
        // This code does the exact same thing as the example above
        if (_i > 10) {
            revert("i > 10");
        }
    }

    uint num;

    function testAssert() external view {
        // Assert should only be used to test for internal errors,
        // and to check invariants.

        // Here we assert that num is always equal to 0
        // since it is impossible to update the value of num
        assert(num == 0);
    }

    function div(uint x, uint y) external pure returns (uint) {
        require(y > 0, "div by 0");
        return x / y;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 四、参考资料

Last Updated: 2023-01-28 4:31:25