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相关推荐

  1. NFT合约解析(4)——Counters.sol——2021.5.19

    NFT合约解析(4)--Counters.sol 一丶配置需求: 1.环境需求:WeBASE-Front 2.合约语言:Solidity >=0.6.0 <0.8.0 二丶Counters ...

  2. NFT合约解析(2)——Ownable.sol——2021.5.10

    NFT合约解析(2)--Ownable.sol 一丶配置需求: 1.环境需求:WeBASE-Front 2.合约语言:Solidity 0.6.10 二丶Ownable.sol合约 三丶解析合约 (1 ...

  3. 以太坊加密猫Crypto Kitty合约解析

    以太坊加密猫Crypto Kitty合约源码深度解析 1. 加密猫核心合约概述 Crypto Kitty 核心业务合约总共有四个:KittyAdmin.KittyContract.KittyFacto ...

  4. NFT合约分析:ERC721A

    概述 读者可前往我的博客获得更好的阅读体验. 本文主要介绍标准NFT实现的一个变体,即ERC721A合约实现的相关细节.ERC721A是由著名NFT系列Azuki提出,该系列NFT是著名的蓝筹NFT. ...

  5. NFT合约 从入门到精通

    在<区块链杀手级应用落地畅想(上)>中我们提到,2021年被称为NFT"元年".在短时间内,NFT已不再局限于加密世界的投机价值,其释放的潜力吸引了越来越多的国际品牌, ...

  6. ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦

    ERC721:全生命周期精析,妈妈再也不用担心我不会玩NFT合约啦 由于篇幅有限,本博客将围绕ERC721核心展开介绍,文章内容尽量做到通俗易懂,但其中不可避免地可能涉及一些新手不友好的概念,您可以查 ...

  7. [2021.1.17多校省选模拟4]T1(莫比乌斯反演/组合数学/枚举倍数)

    [2021.1.17多校省选模拟4]T1 一般人都会想着去枚举直线的斜率,但是枚举斜率之后就会产生多条直线,并且这些直线的长度不一,难以快速求解,所以我们考虑换一种方法枚举. 枚举最远点对的横纵坐标之 ...

  8. 2021.03.17 pokémon小游戏开发记录与周总结

    2021.03.17 pokémon小游戏开发记录与周总结 此篇仅包含部分项目代码,只是个人的学习总结. 文章目录 2021.03.17 pokémon小游戏开发记录与周总结 前言 一.前期准备 二. ...

  9. AWD平台搭建(Cardinal 从零开始) 2021/11/17

    #Time 2021/11/17 因为之后要在校内组织AWD比赛,所以在github上找了一会,试了试最多star的,虽然说好用但是没有好康的界面,全是一堆代码感觉很枯燥,于是最终还是选择了使用Car ...

最新文章

  1. AI推理与Compiler
  2. BCH与BCE共享比特币之名
  3. MVC3中的tempdata,viewdata,viewbag总结
  4. 江苏python工资一般多少_会计行业一般工资多少?
  5. SecureCRT 配置文件中 找密码
  6. 入门 | 机器学习第一课:决策树学习概述与实现
  7. 《WCF全面解析》(下册)- 目录
  8. epoll在ET和LT模式下读写
  9. SQL 两张结构一样的表合并查询
  10. win7 下 java 环境变量配置
  11. 小白刷LeeCode(算法篇)3
  12. bp是什么意思贷款利率,lpr+bp利率是什么意思
  13. 菜鸟教程,css小白入门
  14. “甜野男孩”——丁真
  15. thinkadmin
  16. winform框架:winform老矣,尚能饭否
  17. C语言应用笔记(一):运算符优先级和使用问题
  18. SDNUOJ——1121.小树林2
  19. 新手体验 kaggle上的电影评论情感分析
  20. win10常用电脑快捷操作;gif工具推荐

热门文章

  1. echars 饼图环形图组件修改 自定义图例 重新渲染 显示对应颜色对应区域
  2. 原来微信里有这么多好玩的3D小游戏了
  3. elasticsearch-head浏览器插件安装使用
  4. 什么是次世代游戏?零基础学习次时代游戏场景设计,打造真实场景
  5. python读取pdf内容转word_Python实现PDF转Word
  6. slider控件制作
  7. 【Three.js基础】创建场景、渲染场景、创建轨道控制器(一)
  8. 2022年清华班组长培训自测答案(通用必修)
  9. 最详细的 Android Toolbar 开发实践总结(转)
  10. c语言编程题没有sln,使用CMake生成sln项目和VS工程遇到的问题