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