Exponential.sol
View Source: contracts/Exponential.sol
↗ Extends: ErrorReporter, CarefulMath ↘ Derived Contracts: AlkemiEarnPublic, AlkemiEarnVerified, AlkemiRateModel, ExchangeRateModel, PriceOracle
Structs
Exp
struct Exp {
uint256 mantissa
}Contract Members
Constants & Variables
uint256 internal constant expScale;
uint256 internal constant halfExpScale;
uint256 internal constant mantissaOne;
uint256 internal constant mantissaOneTenth;Functions
getExp(uint256 num, uint256 denom)
addExp(struct Exponential.Exp a, struct Exponential.Exp b)
subExp(struct Exponential.Exp a, struct Exponential.Exp b)
mulScalar(struct Exponential.Exp a, uint256 scalar)
divScalar(struct Exponential.Exp a, uint256 scalar)
divScalarByExp(uint256 scalar, struct Exponential.Exp divisor)
mulExp(struct Exponential.Exp a, struct Exponential.Exp b)
divExp(struct Exponential.Exp a, struct Exponential.Exp b)
truncate(struct Exponential.Exp exp)
lessThanExp(struct Exponential.Exp left, struct Exponential.Exp right)
lessThanOrEqualExp(struct Exponential.Exp left, struct Exponential.Exp right)
greaterThanExp(struct Exponential.Exp left, struct Exponential.Exp right)
isZeroExp(struct Exponential.Exp value)
getExp
Creates an exponential from numerator and denominator values. Note: Returns an error if (num * 10e18) > MAX_INT, or if denom is zero.
function getExp(uint256 num, uint256 denom) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
num
uint256
denom
uint256
addExp
Adds two exponentials, returning a new exponential.
function addExp(struct Exponential.Exp a, struct Exponential.Exp b) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
a
struct Exponential.Exp
b
struct Exponential.Exp
subExp
Subtracts two exponentials, returning a new exponential.
function subExp(struct Exponential.Exp a, struct Exponential.Exp b) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
a
struct Exponential.Exp
b
struct Exponential.Exp
mulScalar
Multiply an Exp by a scalar, returning a new Exp.
function mulScalar(struct Exponential.Exp a, uint256 scalar) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
a
struct Exponential.Exp
scalar
uint256
divScalar
Divide an Exp by a scalar, returning a new Exp.
function divScalar(struct Exponential.Exp a, uint256 scalar) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
a
struct Exponential.Exp
scalar
uint256
divScalarByExp
Divide a scalar by an Exp, returning a new Exp.
function divScalarByExp(uint256 scalar, struct Exponential.Exp divisor) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
scalar
uint256
divisor
struct Exponential.Exp
mulExp
Multiplies two exponentials, returning a new exponential.
function mulExp(struct Exponential.Exp a, struct Exponential.Exp b) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
a
struct Exponential.Exp
b
struct Exponential.Exp
divExp
Divides two exponentials, returning a new exponential. (a/scale) / (b/scale) = (a/scale) * (scale/b) = a/b, which we can scale as an Exp by calling getExp(a.mantissa, b.mantissa)
function divExp(struct Exponential.Exp a, struct Exponential.Exp b) internal pure
returns(enum ErrorReporter.Error, struct Exponential.Exp)Arguments
Name
Type
Description
a
struct Exponential.Exp
b
struct Exponential.Exp
truncate
Truncates the given exp to a whole number value. For example, truncate(Exp{mantissa: 15 (10*18)}) = 15
function truncate(struct Exponential.Exp exp) internal pure
returns(uint256)Arguments
Name
Type
Description
exp
struct Exponential.Exp
lessThanExp
Checks if first Exp is less than second Exp.
function lessThanExp(struct Exponential.Exp left, struct Exponential.Exp right) internal pure
returns(bool)Arguments
Name
Type
Description
left
struct Exponential.Exp
right
struct Exponential.Exp
lessThanOrEqualExp
Checks if left Exp <= right Exp.
function lessThanOrEqualExp(struct Exponential.Exp left, struct Exponential.Exp right) internal pure
returns(bool)Arguments
Name
Type
Description
left
struct Exponential.Exp
right
struct Exponential.Exp
greaterThanExp
Checks if first Exp is greater than second Exp.
function greaterThanExp(struct Exponential.Exp left, struct Exponential.Exp right) internal pure
returns(bool)Arguments
Name
Type
Description
left
struct Exponential.Exp
right
struct Exponential.Exp
isZeroExp
returns true if Exp is exactly zero
function isZeroExp(struct Exponential.Exp value) internal pure
returns(bool)Arguments
Name
Type
Description
value
struct Exponential.Exp
Last updated
Was this helpful?