Skip to content

BigMathVault ​

this is an optimized version mainly created by taking Fluid vault's codebase into consideration so it's use is limited for other cases.

MAX_MASK_DEBT_FACTOR ​

solidity
uint256 MAX_MASK_DEBT_FACTOR

PRECISION ​

solidity
uint256 PRECISION

TWO_POWER_64 ​

solidity
uint256 TWO_POWER_64

TWO_POWER_69_MINUS_1 ​

solidity
uint256 TWO_POWER_69_MINUS_1

mulDivNormal ​

solidity
function mulDivNormal(uint256 normal, uint256 bigNumber1, uint256 bigNumber2) internal pure returns (uint256)

multiplies a normal number with a bigNumber1 and then divides by bigNumber2. For vault's use case MUST always: - bigNumbers have exponent size 15 bits - bigNumbers have coefficient size 35 bits and have 35th bit always 1 (when exponent > 0 BigMath numbers have max precision) so coefficients must always be in range 17179869184 <= coefficient <= 34359738367. - bigNumber1 (debt factor) always have exponent >= 1 & <= 16384 - bigNumber2 (connection factor) always have exponent >= 1 & <= 32767 (15 bits) - bigNumber2 always >= bigNumber1 (connection factor can never be < base branch debt factor) - as a result of previous points, numbers must never be 0 - normal is positionRawDebt and is always within 10000 and type(int128).max

Return Values ​

NameTypeDescription
[0]uint256normal * bigNumber1 / bigNumber2

mulDivBigNumber ​

solidity
function mulDivBigNumber(uint256 bigNumber, uint256 number1) internal pure returns (uint256 result)

multiplies a bigNumber with normal number1 and then divides by TWO_POWER_64. For vault's use case (calculating new branch debt factor after liquidation): - number1 is debtFactor, intialized as TWO_POWER_64 and reduced from there, hence it's always <= TWO_POWER_64 and always > 0. - bigNumber is branch debt factor, which starts as ((X35 << 15) | (1 << 14)) and reduces from there. - bigNumber must have have exponent size 15 bits and be >= 1 & <= 16384 - bigNumber must have coefficient size 35 bits and have 35th bit always 1 (when exponent > 0 BigMath numbers have max precision) so coefficients must always be in range 17179869184 <= coefficient <= 34359738367.

Parameters ​

| Name | Type | Description | | --------- | ------- | -------------- | --------- | | bigNumber | uint256 | Coefficient | Exponent. | | number1 | uint256 | normal number. |

Return Values ​

NameTypeDescription
resultuint256bigNumber * number1 / TWO_POWER_64.

mulBigNumber ​

solidity
function mulBigNumber(uint256 bigNumber1, uint256 bigNumber2) internal pure returns (uint256)

multiplies a bigNumber1 with another bigNumber2. For vault's use case (calculating connection factor of merged branches userTickDebtFactor * connectionDebtFactor *... connectionDebtFactor): - bigNumbers must have have exponent size 15 bits and be >= 1 & <= 32767 - bigNumber must have coefficient size 35 bits and have 35th bit always 1 (when exponent > 0 BigMath numbers have max precision) so coefficients must always be in range 17179869184 <= coefficient <= 34359738367. sum of exponents from bigNumber1 bigNumber2 should be > 16384. e.g. res = bigNumber1 * bigNumber2 = [(coe1, exp1) * (coe2, exp2)] >> decimal = (coe1*coe2>>overflow, exp1+exp2+overflow-decimal)

Parameters ​

NameTypeDescription
bigNumber1uint256BigNumber format with coefficient and exponent.
bigNumber2uint256BigNumber format with coefficient and exponent.

Return Values ​

NameTypeDescription
[0]uint256BigNumber format with coefficient and exponent

divBigNumber ​

solidity
function divBigNumber(uint256 bigNumber1, uint256 bigNumber2) internal pure returns (uint256)

divides a bigNumber1 by bigNumber2. For vault's use case (calculating connectionFactor = baseBranchDebtFactor / currentBranchDebtFactor) bigNumbers MUST always: - have exponent size 15 bits and be >= 1 & <= 16384 - have coefficient size 35 bits and have 35th bit always 1 (when exponent > 0 BigMath numbers have max precision) so coefficients must always be in range 17179869184 <= coefficient <= 34359738367. - as a result of previous points, numbers must never be 0 e.g. res = bigNumber1 / bigNumber2 = [(coe1, exp1) / (coe2, exp2)] << decimal = ((coe1<<precision*)/coe2, exp1+decimal-exp2-precision*)_

Parameters ​

NameTypeDescription
bigNumber1uint256BigNumber format with coefficient and exponent
bigNumber2uint256BigNumber format with coefficient and exponent

Return Values ​

NameTypeDescription
[0]uint256BigNumber format with coefficient and exponent Returned connection factor can only ever be >= baseBranchDebtFactor (c = x*100/y with both x,y > 0 & x,y <= 100: c can only ever be >= x)