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(“出现某些错误”);
但是这样去定义也没有其他信息出现,等待下一个样例学习使用吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值