New staking mechanics: delay on entry opposed to exit
This commit is contained in:
@@ -87,4 +87,62 @@ library LibSafeMath {
|
||||
{
|
||||
return a < b ? a : b;
|
||||
}
|
||||
|
||||
/// @dev Safely adds two fractions `n1/d1 + n2/d2`
|
||||
/// @param n1 numerator of `1`
|
||||
/// @param d1 denominator of `1`
|
||||
/// @param n2 numerator of `2`
|
||||
/// @param d2 denominator of `2`
|
||||
/// @return numerator of sum
|
||||
/// @return denominator of sum
|
||||
function addFractions(
|
||||
uint256 n1,
|
||||
uint256 d1,
|
||||
uint256 n2,
|
||||
uint256 d2
|
||||
)
|
||||
internal
|
||||
pure
|
||||
returns (
|
||||
uint256 numerator,
|
||||
uint256 denominator
|
||||
)
|
||||
{
|
||||
numerator = safeAdd(
|
||||
safeMul(n1, d2),
|
||||
safeMul(n2, d1)
|
||||
);
|
||||
denominator = safeMul(d1, d2);
|
||||
return (numerator, denominator);
|
||||
}
|
||||
|
||||
/// @dev Safely scales the difference two fractions.
|
||||
/// @param n1 numerator of `1`
|
||||
/// @param d1 denominator of `1`
|
||||
/// @param n2 numerator of `2`
|
||||
/// @param d2 denominator of `2`
|
||||
/// @param s scalar to multiply by difference.
|
||||
/// @return result = `s * (n1/d1 - n2/d2)`.
|
||||
function scaleFractionalDifference(
|
||||
uint256 n1,
|
||||
uint256 d1,
|
||||
uint256 n2,
|
||||
uint256 d2,
|
||||
uint256 s
|
||||
)
|
||||
internal
|
||||
pure
|
||||
returns (uint256)
|
||||
{
|
||||
uint256 numerator = safeSub(
|
||||
safeMul(n1, d2),
|
||||
safeMul(n2, d1)
|
||||
);
|
||||
uint256 tmp = safeDiv(numerator, d2);
|
||||
uint256 result = safeDiv(
|
||||
safeMul(s, tmp),
|
||||
d1
|
||||
);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user