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