@0x/contracts-utils
: LibMath._safeDiv()
now throws a rich revert when dividing by zero.
This commit is contained in:
parent
5a088690b2
commit
d03f13a729
@ -10,7 +10,8 @@ library LibSafeMathRichErrors {
|
||||
enum SafeMathErrorCodes {
|
||||
UINT256_ADDITION_OVERFLOW,
|
||||
UINT256_MULTIPLICATION_OVERFLOW,
|
||||
UINT256_SUBTRACTION_UNDERFLOW
|
||||
UINT256_SUBTRACTION_UNDERFLOW,
|
||||
UINT256_DIVISION_BY_ZERO
|
||||
}
|
||||
|
||||
// solhint-disable func-name-mixedcase
|
||||
|
@ -30,6 +30,13 @@ contract SafeMath {
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
if (b == 0) {
|
||||
LibRichErrors._rrevert(LibSafeMathRichErrors.SafeMathError(
|
||||
LibSafeMathRichErrors.SafeMathErrorCodes.UINT256_DIVISION_BY_ZERO,
|
||||
a,
|
||||
b
|
||||
));
|
||||
}
|
||||
uint256 c = a / b;
|
||||
return c;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { AnyRevertError, BigNumber, SafeMathRevertErrors } from '@0x/utils';
|
||||
import { BigNumber, SafeMathRevertErrors } from '@0x/utils';
|
||||
|
||||
const MAX_UINT256 = new BigNumber(2).pow(256).minus(1);
|
||||
|
||||
@ -29,16 +29,22 @@ export function safeSub(a: BigNumber, b: BigNumber): BigNumber {
|
||||
export function safeMul(a: BigNumber, b: BigNumber): BigNumber {
|
||||
const r = a.times(b);
|
||||
if (r.isGreaterThan(MAX_UINT256)) {
|
||||
// Solidity implementation does not throw a reason.
|
||||
throw new AnyRevertError();
|
||||
throw new SafeMathRevertErrors.SafeMathError(
|
||||
SafeMathRevertErrors.SafeMathErrorCodes.Uint256MultiplicationOverflow,
|
||||
a,
|
||||
b,
|
||||
);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
export function safeDiv(a: BigNumber, b: BigNumber): BigNumber {
|
||||
if (b.isEqualTo(0)) {
|
||||
// Solidity implementation does not throw a reason.
|
||||
throw new AnyRevertError();
|
||||
throw new SafeMathRevertErrors.SafeMathError(
|
||||
SafeMathRevertErrors.SafeMathErrorCodes.Uint256DivisionByZero,
|
||||
a,
|
||||
b,
|
||||
);
|
||||
}
|
||||
return a.dividedToIntegerBy(b);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user