solidity学习-15异常

异常

异常的作用:用于程序debug
主要有三种抛出异常的方法:

error
require
assert

本章的学习目的:
1了解三种异常的使用。
2区分三种异常的gas fee消耗

手写代码如下

在这里插入图片描述

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

// 定义一个错误
error TransferNotOwner();

contract Errors{
    
    
    // 定义一个映射 从256的一个id映射一个地址
    mapping (uint256 => address) private _owners;

    
    function transferowner(uint256 tokenid,address newOwner) public {
    
    
        // 如果消息的调用者和该id对应的地址不一样
        // 就抛出一个异常
        if (_owners[tokenid] != msg.sender){
    
    
            revert TransferNotOwner();
        }
        // 如果是一样的就可以修改这个id对应的地址
        _owners[tokenid] = newOwner;
    }

    function transferowner2(uint256 tokenid, address newOwner) public {
    
    
        require(_owners[tokenid] == msg.sender,"transfer not error");
        _owners[tokenid] = newOwner;
    }

    
    function transferowner3(uint256 tokenid, address newOwner) public {
    
    
        assert(_owners[tokenid] == msg.sender);
        _owners[tokenid] = newOwner;
    }
}

教材给出的是error < assert<require
实际标明的是error<require<assert

编译之后部署该合约
在这里插入图片描述
获取到合约地址。
在这里插入图片描述
error提供的错误是这样的,从revert出现的。
在这里插入图片描述
require可以手动写一个错误信息。
在这里插入图片描述
表示error会产生某些错误信息:
// 定义一个错误
error TransferNotOwner(“出现某些错误”);
但是这样去定义也没有其他信息出现,等待下一个样例学习使用吧。