Address
0x1dfdb0fb85402dc7f8d72d92ada8fbbb3ffc8633Current Holdings
$0.00
TXs sent
not counted
First Active
2024-03-24
block 19,939,890
Last Active
906 days ago
block 19,939,890
Funded By
not identified
Net worth historyi
No net-worth snapshots recorded yet
exact matchStakingPoolsolc 0.6.12+commit.27d51765runtime exact · creation exact
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;
import "openzeppelin-solidity/contracts/math/SafeMath.sol";
library AttoDecimal {
using SafeMath for uint256;
struct Instance {
uint256 mantissa;
}
uint256 internal constant BASE = 10;
uint256 internal constant EXPONENTIATION = 18;
uint256 internal constant ONE_MANTISSA = BASE**EXPONENTIATION;
uint256 internal constant ONE_TENTH_MANTISSA = ONE_MANTISSA / 10;
uint256 internal constant HALF_MANTISSA = ONE_MANTISSA / 2;
uint256 internal constant SQUARED_ONE_MANTISSA = ONE_MANTISSA * ONE_MANTISSA;
uint256 internal constant MAX_INTEGER = uint256(-1) / ONE_MANTISSA;
function maximum() internal pure returns (Instance memory) {
return Instance({mantissa: uint256(-1)});
}
function zero() internal pure returns (Instance memory) {
return Instance({mantissa: 0});
}
function one() internal pure returns (Instance memory) {
return Instance({mantissa: ONE_MANTISSA});
}
function convert(uint256 integer) internal pure returns (Instance memory) {
return Instance({mantissa: integer.mul(ONE_MANTISSA)});
}
function compare(Instance memory a, Instance memory b) internal pure returns (int8) {
if (a.mantissa < b.mantissa) return -1;
return int8(a.mantissa > b.mantissa ? 1 : 0);
}
function compare(Instance memory a, uint256 b) internal pure returns (int8) {
return compare(a, convert(b));
}
function add(Instance memory a, Instance memory b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.add(b.mantissa)});
}
function add(Instance memory a, uint256 b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.add(b.mul(ONE_MANTISSA))});
}
function sub(Instance memory a, Instance memory b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.sub(b.mantissa)});
}
function sub(Instance memory a, uint256 b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.sub(b.mul(ONE_MANTISSA))});
}
function sub(uint256 a, Instance memory b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mul(ONE_MANTISSA).sub(b.mantissa)});
}
function mul(Instance memory a, Instance memory b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.mul(b.mantissa) / ONE_MANTISSA});
}
function mul(Instance memory a, uint256 b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.mul(b)});
}
function div(Instance memory a, Instance memory b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.mul(ONE_MANTISSA).div(b.mantissa)});
}
function div(Instance memory a, uint256 b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.mul(ONE_MANTISSA).div(b)});
}
function div(uint256 a, Instance memory b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mul(SQUARED_ONE_MANTISSA).div(b.mantissa)});
}
function div(uint256 a, uint256 b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mul(ONE_MANTISSA).div(b)});
}
function idiv(Instance memory a, Instance memory b) internal pure returns (uint256) {
return a.mantissa.div(b.mantissa);
}
function idiv(Instance memory a, uint256 b) internal pure returns (uint256) {
return a.mantissa.div(b.mul(ONE_MANTISSA));
}
function idiv(uint256 a, Instance memory b) internal pure returns (uint256) {
return a.mul(ONE_MANTISSA).div(b.mantissa);
}
function mod(Instance memory a, Instance memory b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.mod(b.mantissa)});
}
function mod(Instance memory a, uint256 b) internal pure returns (Instance memory) {
return Instance({mantissa: a.mantissa.mod(b.mul(ONE_MANTISSA))});
}
function mod(uint256 a, Instance memory b) internal pure returns (Instance memory) {
if (a > MAX_INTEGER) return Instance({mantissa: a.mod(b.mantissa).mul(ONE_MANTISSA) % b.mantissa});
return Instance({mantissa: a.mul(ONE_MANTISSA).mod(b.mantissa)});
}
function floor(Instance memory a) internal pure returns (uint256) {
return a.mantissa / ONE_MANTISSA;
}
function ceil(Instance memory a) internal pure returns (uint256) {
return (a.mantissa / ONE_MANTISSA) + (a.mantissa % ONE_MANTISSA > 0 ? 1 : 0);
}
function round(Instance memory a) internal pure returns (uint256) {
return (a.mantissa / ONE_MANTISSA) + ((a.mantissa / ONE_TENTH_MANTISSA) % 10 >= 5 ? 1 : 0);
}
function eq(Instance memory a, Instance memory b) internal pure returns (bool) {
return a.mantissa == b.mantissa;
}
function eq(Instance memory a, uint256 b) internal pure returns (bool) {
if (b > MAX_INTEGER) return false;
return a.mantissa == b * ONE_MANTISSA;
}
function gt(Instance memory a, Instance memory b) internal pure returns (bool) {
return a.mantissa > b.mantissa;
}
function gt(Instance memory a, uint256 b) internal pure returns (bool) {
if (b > MAX_INTEGER) return false;
return a.mantissa > b * ONE_MANTISSA;
}
function gte(Instance memory a, Instance memory b) internal pure returns (bool) {
return a.mantissa >= b.mantissa;
}
function gte(Instance memory a, uint256 b) internal pure returns (bool) {
if (b > MAX_INTEGER) return false;
return a.mantissa >= b * ONE_MANTISSA;
}
function lt(Instance memory a, Instance memory b) internal pure returns (bool) {
return a.mantissa < b.mantissa;
}
function lt(Instance memory a, uint256 b) internal pure returns (bool) {
if (b > MAX_INTEGER) return true;
return a.mantissa < b * ONE_MANTISSA;
}
function lte(Instance memory a, Instance memory b) internal pure returns (bool) {
return a.mantissa <= b.mantissa;
}
function lte(Instance memory a, uint256 b) internal pure returns (bool) {
if (b > MAX_INTEGER) return true;
return a.mantissa <= b * ONE_MANTISSA;
}
function isInteger(Instance memory a) internal pure returns (bool) {
return a.mantissa % ONE_MANTISSA == 0;
}
function isPositive(Instance memory a) internal pure returns (bool) {
return a.mantissa > 0;
}
function isZero(Instance memory a) internal pure returns (bool) {
return a.mantissa == 0;
}
function sum(Instance[] memory array) internal pure returns (Instance memory result) {
uint256 length = array.length;
for (uint256 index = 0; index < length; index++) result = add(result, array[index]);
}
function toTuple(Instance memory a)
internal
pure
returns (
uint256 mantissa,
uint256 base,
uint256 exponentiation
)
{
return (a.mantissa, BASE, EXPONENTIATION);
}
}