NFT合约解析(3)——SafeMath.sol——2021.5.17
NFT合约解析(3)——SafeMath.sol
- 一丶配置需求:
- 1.环境需求:WeBASE-Front
- 2.合约语言:Solidity >=0.6.0 <0.8.0
- 二丶SafeMath.sol合约
- 三丶解析合约
- (1)创建库合约
- (2)Try加减乘除取余
- (3)加减乘除取余操作
- (3)重载减,除,取余方法(返回错误值)
- 四丶上一篇:NFT合约解析(2)——Ownable.sol
- 五丶下一篇:NFT合约解析(4)——Counters.sol
- 六丶参考相关文章
一丶配置需求:
1.环境需求:WeBASE-Front
2.合约语言:Solidity >=0.6.0 <0.8.0
二丶SafeMath.sol合约
pragma solidity >=0.6.0 <0.8.0;library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {uint256 c = a + b;if (c < a) return (false, 0);return (true, c);}function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (b > a) return (false, 0);return (true, a - b);}function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (a == 0) return (true, 0);uint256 c = a * b;if (c / a != b) return (false, 0);return (true, c);}function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (b == 0) return (false, 0);return (true, a / b);}function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (b == 0) return (false, 0);return (true, a % b);}function add(uint256 a, uint256 b) internal pure returns (uint256) {uint256 c = a + b;require(c >= a, "SafeMath: addition overflow");return c;}function sub(uint256 a, uint256 b) internal pure returns (uint256) {require(b <= a, "SafeMath: subtraction overflow");return a - b;}function mul(uint256 a, uint256 b) internal pure returns (uint256) {if (a == 0) return 0;uint256 c = a * b;require(c / a == b, "SafeMath: multiplication overflow");return c;}function div(uint256 a, uint256 b) internal pure returns (uint256) {require(b > 0, "SafeMath: division by zero");return a / b;}function mod(uint256 a, uint256 b) internal pure returns (uint256) {require(b > 0, "SafeMath: modulo by zero");return a % b;}function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b <= a, errorMessage);return a - b;}function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b > 0, errorMessage);return a / b;}function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b > 0, errorMessage);return a % b;}
}
三丶解析合约
(1)创建库合约
pragma solidity >=0.6.0 <0.8.0;library SafeMath {
申明solidity版本在0.6-0.8之间编译
library关键字创建SafeMath库合约
(2)Try加减乘除取余
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {uint256 c = a + b;if (c < a) return (false, 0);return (true, c);}function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (b > a) return (false, 0);return (true, a - b);}function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (a == 0) return (true, 0);uint256 c = a * b;if (c / a != b) return (false, 0);return (true, c);}function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (b == 0) return (false, 0);return (true, a / b);}function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {if (b == 0) return (false, 0);return (true, a % b);}
参数:uint256 a b进行加减乘除取余操作
返回值:布尔,uint256的结果
正常四则运算判断,符合条件返回true和正确的结果,反之false和0
(3)加减乘除取余操作
function add(uint256 a, uint256 b) internal pure returns (uint256) {uint256 c = a + b;require(c >= a, "SafeMath: addition overflow");return c;}function sub(uint256 a, uint256 b) internal pure returns (uint256) {require(b <= a, "SafeMath: subtraction overflow");return a - b;}function mul(uint256 a, uint256 b) internal pure returns (uint256) {if (a == 0) return 0;uint256 c = a * b;require(c / a == b, "SafeMath: multiplication overflow");return c;}function div(uint256 a, uint256 b) internal pure returns (uint256) {require(b > 0, "SafeMath: division by zero");return a / b;}function mod(uint256 a, uint256 b) internal pure returns (uint256) {require(b > 0, "SafeMath: modulo by zero");return a % b;}
满足try之后,返回true可进行此方法调用
(3)重载减,除,取余方法(返回错误值)
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b <= a, errorMessage);return a - b;}function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b > 0, errorMessage);return a / b;}function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b > 0, errorMessage);return a % b;}
try为false之后,可调用此方法
四丶上一篇:NFT合约解析(2)——Ownable.sol
NFT合约解析(2)——Ownable.sol
五丶下一篇:NFT合约解析(4)——Counters.sol
NFT合约解析(4)——Counters.sol
六丶参考相关文章
solidity笔记(1)——第一篇
solidity笔记(2)——第二篇
solidity笔记(3)——abstract用法
solidity笔记(4)——冻结和交易属性
solidity笔记(5)——event用法
solidity笔记(6)——modifier用法
solidity笔记(7)——存储区域memory storage stack
solidity笔记(8)——pure用法
solidity笔记(9)——library用法
NFT合约解析(3)——SafeMath.sol——2021.5.17相关推荐
- NFT合约解析(4)——Counters.sol——2021.5.19
NFT合约解析(4)--Counters.sol 一丶配置需求: 1.环境需求:WeBASE-Front 2.合约语言:Solidity >=0.6.0 <0.8.0 二丶Counters ...
- NFT合约解析(2)——Ownable.sol——2021.5.10
NFT合约解析(2)--Ownable.sol 一丶配置需求: 1.环境需求:WeBASE-Front 2.合约语言:Solidity 0.6.10 二丶Ownable.sol合约 三丶解析合约 (1 ...
- 以太坊加密猫Crypto Kitty合约解析
以太坊加密猫Crypto Kitty合约源码深度解析 1. 加密猫核心合约概述 Crypto Kitty 核心业务合约总共有四个:KittyAdmin.KittyContract.KittyFacto ...
- NFT合约分析:ERC721A
概述 读者可前往我的博客获得更好的阅读体验. 本文主要介绍标准NFT实现的一个变体,即ERC721A合约实现的相关细节.ERC721A是由著名NFT系列Azuki提出,该系列NFT是著名的蓝筹NFT. ...
- NFT合约 从入门到精通
在<区块链杀手级应用落地畅想(上)>中我们提到,2021年被称为NFT"元年".在短时间内,NFT已不再局限于加密世界的投机价值,其释放的潜力吸引了越来越多的国际品牌, ...
- ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦
ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦 由于篇幅有限,本博客将围绕ERC721核心展开介绍,文章内容尽量做到通俗易懂,但其中不可避免地可能涉及一些新手不友好的概念,您可以查 ...
- [2021.1.17多校省选模拟4]T1(莫比乌斯反演/组合数学/枚举倍数)
[2021.1.17多校省选模拟4]T1 一般人都会想着去枚举直线的斜率,但是枚举斜率之后就会产生多条直线,并且这些直线的长度不一,难以快速求解,所以我们考虑换一种方法枚举. 枚举最远点对的横纵坐标之 ...
- 2021.03.17 pokémon小游戏开发记录与周总结
2021.03.17 pokémon小游戏开发记录与周总结 此篇仅包含部分项目代码,只是个人的学习总结. 文章目录 2021.03.17 pokémon小游戏开发记录与周总结 前言 一.前期准备 二. ...
- AWD平台搭建(Cardinal 从零开始) 2021/11/17
#Time 2021/11/17 因为之后要在校内组织AWD比赛,所以在github上找了一会,试了试最多star的,虽然说好用但是没有好康的界面,全是一堆代码感觉很枯燥,于是最终还是选择了使用Car ...
最新文章
- AI推理与Compiler
- BCH与BCE共享比特币之名
- MVC3中的tempdata,viewdata,viewbag总结
- 江苏python工资一般多少_会计行业一般工资多少?
- SecureCRT 配置文件中 找密码
- 入门 | 机器学习第一课:决策树学习概述与实现
- 《WCF全面解析》(下册)- 目录
- epoll在ET和LT模式下读写
- SQL 两张结构一样的表合并查询
- win7 下 java 环境变量配置
- 小白刷LeeCode(算法篇)3
- bp是什么意思贷款利率,lpr+bp利率是什么意思
- 菜鸟教程,css小白入门
- “甜野男孩”——丁真
- thinkadmin
- winform框架:winform老矣,尚能饭否
- C语言应用笔记(一):运算符优先级和使用问题
- SDNUOJ——1121.小树林2
- 新手体验 kaggle上的电影评论情感分析
- win10常用电脑快捷操作;gif工具推荐
热门文章
- echars 饼图环形图组件修改 自定义图例 重新渲染 显示对应颜色对应区域
- 原来微信里有这么多好玩的3D小游戏了
- elasticsearch-head浏览器插件安装使用
- 什么是次世代游戏?零基础学习次时代游戏场景设计,打造真实场景
- python读取pdf内容转word_Python实现PDF转Word
- slider控件制作
- 【Three.js基础】创建场景、渲染场景、创建轨道控制器(一)
- 2022年清华班组长培训自测答案(通用必修)
- 最详细的 Android Toolbar 开发实践总结(转)
- c语言编程题没有sln,使用CMake生成sln项目和VS工程遇到的问题