本文档介绍了OpenZeppelin Contracts库中的Math模块,该模块提供了一系列与数学相关的实用工具,包括SafeMath、SignedSafeMath和Math库,用于执行安全算术运算,避免溢出和除零等错误。SafeMath库实现了无溢出的加减乘除模运算,SignedSafeMath库实现了有符号整数的安全算术运算,Math库则提供了一些标准数学实用函数,如最大值、最小值和平均值。
你当前阅读的不是此文档的最新版本。5.x 是当前版本。
在https://docs.openzeppelin.com/contracts/api/math查看此文档效果更佳 |
这些是与数学相关的实用程序。
SafeMath
带有溢出检查的 Solidity 算术运算的包装器。
Solidity 中的算术运算在溢出时会回绕。这很容易导致错误,因为程序员通常假设溢出会引发错误,这是高级编程语言中的标准行为。SafeMath
通过在操作溢出时恢复事务来恢复这种直觉。
使用此库而不是未检查的操作消除了整整一类的错误,因此建议始终使用它。
函数
tryAdd(uint256 a, uint256 b) → bool, uint256
internal返回两个无符号整数的加法,带有一个溢出标志。
自 v3.4 起可用。
trySub(uint256 a, uint256 b) → bool, uint256
internal返回两个无符号整数的减法,带有一个溢出标志。
自 v3.4 起可用。
tryMul(uint256 a, uint256 b) → bool, uint256
internal返回两个无符号整数的乘法,带有一个溢出标志。
自 v3.4 起可用。
tryDiv(uint256 a, uint256 b) → bool, uint256
internal返回两个无符号整数的除法,带有一个除零标志。
自 v3.4 起可用。
tryMod(uint256 a, uint256 b) → bool, uint256
internal返回两个无符号整数相除的余数,带有一个除零标志。
自 v3.4 起可用。
add(uint256 a, uint256 b) → uint256
internal返回两个无符号整数的加法,溢出时恢复。
对应于 Solidity 的 +
运算符。
要求:
sub(uint256 a, uint256 b) → uint256
internal返回两个无符号整数的减法,溢出时恢复(当结果为负数时)。
对应于 Solidity 的 -
运算符。
要求:
mul(uint256 a, uint256 b) → uint256
internal返回两个无符号整数的乘法,溢出时恢复。
对应于 Solidity 的 *
运算符。
要求:
div(uint256 a, uint256 b) → uint256
internal返回两个无符号整数的整数除法,除以零时恢复。结果向零舍入。
对应于 Solidity 的 /
运算符。注意:此函数使用 revert
操作码(保留剩余 gas 不变),而 Solidity 使用无效操作码来恢复(消耗所有剩余 gas)。
要求:
mod(uint256 a, uint256 b) → uint256
internal返回两个无符号整数相除的余数。(无符号整数模数),除以零时恢复。
对应于 Solidity 的 %
运算符。此函数使用 revert
操作码(保留剩余 gas 不变),而 Solidity 使用无效操作码来恢复(消耗所有剩余 gas)。
要求:
sub(uint256 a, uint256 b, string errorMessage) → uint256
internal返回两个无符号整数的减法,溢出时使用自定义消息恢复(当结果为负数时)。
此函数已弃用,因为它需要为错误消息不必要地分配内存。对于自定义恢复原因,请使用 trySub 。 |
对应于 Solidity 的 -
运算符。
要求:
div(uint256 a, uint256 b, string errorMessage) → uint256
internal返回两个无符号整数的整数除法,除以零时使用自定义消息恢复。结果向零舍入。
此函数已弃用,因为它需要为错误消息不必要地分配内存。对于自定义恢复原因,请使用 tryDiv 。 |
对应于 Solidity 的 /
运算符。注意:此函数使用 revert
操作码(保留剩余 gas 不变),而 Solidity 使用无效操作码来恢复(消耗所有剩余 gas)。
要求:
mod(uint256 a, uint256 b, string errorMessage) → uint256
internal返回两个无符号整数相除的余数。(无符号整数模数),除以零时使用自定义消息恢复。
此函数已弃用,因为它需要为错误消息不必要地分配内存。对于自定义恢复原因,请使用 tryMod 。 |
对应于 Solidity 的 %
运算符。此函数使用 revert
操作码(保留剩余 gas 不变),而 Solidity 使用无效操作码来恢复(消耗所有剩余 gas)。
要求:
SignedSafeMath
带符号的数学运算,带有安全检查,可在出错时恢复。
函数
mul(int256 a, int256 b) → int256
internal返回两个带符号整数的乘法,溢出时恢复。
对应于 Solidity 的 *
运算符。
要求:
div(int256 a, int256 b) → int256
internal返回两个带符号整数的整数除法。除以零时恢复。结果向零舍入。
对应于 Solidity 的 /
运算符。注意:此函数使用 revert
操作码(保留剩余 gas 不变),而 Solidity 使用无效操作码来恢复(消耗所有剩余 gas)。
要求:
sub(int256 a, int256 b) → int256
internal返回两个带符号整数的减法,溢出时恢复。
对应于 Solidity 的 -
运算符。
要求:
add(int256 a, int256 b) → int256
internal返回两个带符号整数的加法,溢出时恢复。
对应于 Solidity 的 +
运算符。
要求:
Math
Solidity 语言中缺少的标准数学实用程序。
函数
max(uint256 a, uint256 b) → uint256
internal返回两个数字中最大的一个。
min(uint256 a, uint256 b) → uint256
internal返回两个数字中最小的一个。
average(uint256 a, uint256 b) → uint256
internal返回两个数字的平均值。结果向零舍入。
- 原文链接: docs.openzeppelin.com/co...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!