Add library implementation of SafeMath
This commit is contained in:
83
contracts/utils/contracts/src/LibSafeMath.sol
Normal file
83
contracts/utils/contracts/src/LibSafeMath.sol
Normal file
@@ -0,0 +1,83 @@
|
||||
pragma solidity ^0.5.9;
|
||||
|
||||
import "./LibRichErrors.sol";
|
||||
import "./LibSafeMathRichErrors.sol";
|
||||
|
||||
|
||||
library LibSafeMath {
|
||||
|
||||
function safeMul(uint256 a, uint256 b)
|
||||
internal
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
if (a == 0) {
|
||||
return 0;
|
||||
}
|
||||
uint256 c = a * b;
|
||||
if (c / a != b) {
|
||||
LibRichErrors._rrevert(LibSafeMathRichErrors.SafeMathError(
|
||||
LibSafeMathRichErrors.SafeMathErrorCodes.UINT256_MULTIPLICATION_OVERFLOW,
|
||||
a,
|
||||
b
|
||||
));
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
function safeDiv(uint256 a, uint256 b)
|
||||
internal
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
uint256 c = a / b;
|
||||
return c;
|
||||
}
|
||||
|
||||
function safeSub(uint256 a, uint256 b)
|
||||
internal
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
if (b > a) {
|
||||
LibRichErrors._rrevert(LibSafeMathRichErrors.SafeMathError(
|
||||
LibSafeMathRichErrors.SafeMathErrorCodes.UINT256_SUBTRACTION_UNDERFLOW,
|
||||
a,
|
||||
b
|
||||
));
|
||||
}
|
||||
return a - b;
|
||||
}
|
||||
|
||||
function safeAdd(uint256 a, uint256 b)
|
||||
internal
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
uint256 c = a + b;
|
||||
if (c < a) {
|
||||
LibRichErrors._rrevert(LibSafeMathRichErrors.SafeMathError(
|
||||
LibSafeMathRichErrors.SafeMathErrorCodes.UINT256_ADDITION_OVERFLOW,
|
||||
a,
|
||||
b
|
||||
));
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
function max256(uint256 a, uint256 b)
|
||||
internal
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
return a >= b ? a : b;
|
||||
}
|
||||
|
||||
function min256(uint256 a, uint256 b)
|
||||
internal
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user