New staking mechanics: delay on entry opposed to exit

This commit is contained in:
Greg Hysen
2019-08-26 11:04:28 -07:00
parent 88e56356c4
commit eb6ad7d29d
39 changed files with 1392 additions and 1509 deletions

View File

@@ -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;
}
}