Added RichErrors to SafeMath
This commit is contained in:
parent
a0602c8863
commit
6e4b6929d2
47
contracts/utils/contracts/src/MixinSafeMathRichErrors.sol
Normal file
47
contracts/utils/contracts/src/MixinSafeMathRichErrors.sol
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
pragma solidity ^0.5.9;
|
||||||
|
|
||||||
|
import "./RichErrors.sol";
|
||||||
|
|
||||||
|
|
||||||
|
contract MixinSafeMathRichErrors is
|
||||||
|
RichErrors
|
||||||
|
{
|
||||||
|
// bytes4(keccak256("Uint256OverflowError(uint256,uint256)"))
|
||||||
|
bytes4 internal constant UINT256_OVERFLOW_ERROR =
|
||||||
|
0x55101607;
|
||||||
|
|
||||||
|
// bytes4(keccak256("Uint256UnderflowError(uint256,uint256)"))
|
||||||
|
bytes4 internal constant UINT256_UNDERFLOW_ERROR =
|
||||||
|
0x60ee612f;
|
||||||
|
|
||||||
|
// solhint-disable func-name-mixedcase
|
||||||
|
function Uint256OverflowError(
|
||||||
|
uint256 a,
|
||||||
|
uint256 b
|
||||||
|
)
|
||||||
|
internal
|
||||||
|
pure
|
||||||
|
returns (bytes memory)
|
||||||
|
{
|
||||||
|
return abi.encodeWithSelector(
|
||||||
|
UINT256_OVERFLOW_ERROR,
|
||||||
|
a,
|
||||||
|
b
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Uint256UnderflowError(
|
||||||
|
uint256 a,
|
||||||
|
uint256 b
|
||||||
|
)
|
||||||
|
internal
|
||||||
|
pure
|
||||||
|
returns (bytes memory)
|
||||||
|
{
|
||||||
|
return abi.encodeWithSelector(
|
||||||
|
UINT256_UNDERFLOW_ERROR,
|
||||||
|
a,
|
||||||
|
b
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,11 @@
|
|||||||
pragma solidity ^0.5.9;
|
pragma solidity ^0.5.9;
|
||||||
|
|
||||||
|
import "./MixinSafeMathRichErrors.sol";
|
||||||
|
|
||||||
contract SafeMath {
|
|
||||||
|
contract SafeMath is
|
||||||
|
MixinSafeMathRichErrors
|
||||||
|
{
|
||||||
|
|
||||||
function _safeMul(uint256 a, uint256 b)
|
function _safeMul(uint256 a, uint256 b)
|
||||||
internal
|
internal
|
||||||
@ -12,10 +16,12 @@ contract SafeMath {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
uint256 c = a * b;
|
uint256 c = a * b;
|
||||||
require(
|
if (c / a != b) {
|
||||||
c / a == b,
|
_rrevert(Uint256OverflowError(
|
||||||
"UINT256_OVERFLOW"
|
a,
|
||||||
);
|
b
|
||||||
|
));
|
||||||
|
}
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,10 +39,12 @@ contract SafeMath {
|
|||||||
pure
|
pure
|
||||||
returns (uint256)
|
returns (uint256)
|
||||||
{
|
{
|
||||||
require(
|
if (b > a) {
|
||||||
b <= a,
|
_rrevert(Uint256UnderflowError(
|
||||||
"UINT256_UNDERFLOW"
|
a,
|
||||||
);
|
b
|
||||||
|
));
|
||||||
|
}
|
||||||
return a - b;
|
return a - b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,10 +54,12 @@ contract SafeMath {
|
|||||||
returns (uint256)
|
returns (uint256)
|
||||||
{
|
{
|
||||||
uint256 c = a + b;
|
uint256 c = a + b;
|
||||||
require(
|
if (c < a) {
|
||||||
c >= a,
|
_rrevert(Uint256OverflowError(
|
||||||
"UINT256_OVERFLOW"
|
a,
|
||||||
);
|
b
|
||||||
|
));
|
||||||
|
}
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user