- Solidity 教程
- Solidity - 主页
- Solidity - 概述
- Solidity - 环境设置
- Solidity - 基本语法
- Solidity - 首次应用
- Solidity - 评论
- 坚固性 - 类型
- Solidity - 变量
- Solidity - 可变范围
- Solidity - 运算符
- 坚固性 - 循环
- Solidity - 决策
- 坚固性 - 弦乐
- Solidity - 数组
- Solidity - 枚举
- Solidity - 结构
- Solidity - 映射
- 坚固性 - 转换
- Solidity - 以太币单位
- Solidity - 特殊变量
- Solidity - 风格指南
- 实体函数
- Solidity - 函数
- Solidity - 函数修饰符
- Solidity - 查看函数
- Solidity - 纯函数
- Solidity - 后备函数
- 函数重载
- 数学函数
- 加密函数
- Solidity 常见模式
- Solidity - 提款模式
- Solidity - 限制访问
- 坚固进阶
- Solidity - 合约
- 坚固性——继承
- Solidity - 构造函数
- Solidity - 抽象合约
- Solidity - 接口
- Solidity - 库
- 坚固性 - 装配
- Solidity - 活动
- Solidity - 错误处理
- Solidity 有用资源
- Solidity - 快速指南
- Solidity - 有用的资源
- 坚固性 - 讨论
Solidity - 错误处理
Solidity 提供了各种错误处理函数。一般来说,当发生错误时,状态会恢复到原来的状态。其他检查是为了防止未经授权的代码访问。以下是错误处理中使用的一些重要方法 -
assert(bool condition) - 如果不满足条件,此方法调用会导致无效的操作码,并且对状态所做的任何更改都会被恢复。此方法用于内部错误。
require(bool condition) - 如果不满足条件,此方法调用将恢复到原始状态。- 此方法用于输入或外部组件中的错误。
require(bool condition, string memory message) - 如果不满足条件,此方法调用将恢复到原始状态。- 此方法用于输入或外部组件中的错误。它提供了一个选项来提供自定义消息。
revert() - 此方法中止执行并恢复对状态所做的任何更改。
revert(string memory Reason) - 此方法中止执行并恢复对状态所做的任何更改。它提供了一个选项来提供自定义消息。
例子
尝试以下代码来了解 Solidity 中错误处理的工作原理。
pragma solidity ^0.5.0; contract Vendor { address public seller; modifier onlySeller() { require( msg.sender == seller, "Only seller can call this." ); _; } function sell(uint amount) public payable onlySeller { if (amount > msg.value / 2 ether) revert("Not enough Ether provided."); // Perform the sell operation. } }
当调用revert时,它将返回如下的十六进制数据。
输出
0x08c379a0 // Function selector for Error(string) 0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset 0x000000000000000000000000000000000000000000000000000000000000001a // String length 0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data