Contract Overview
Balance:
0 FTM
FTM Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x4f7fc82fe6beb29a9b4a530f81e376d375c8e35f4f023e156540c23d132bbe03 | 0x60806040 | 57881938 | 4 days 21 hrs ago | 0x1f61947cdf6801e55b864690bfbcdeacf152c071 | IN | Create: Manifestation | 0 FTM | 0.151440342064 |
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x4f7fc82fe6beb29a9b4a530f81e376d375c8e35f4f023e156540c23d132bbe03 | 57881938 | 4 days 21 hrs ago | 0x1f61947cdf6801e55b864690bfbcdeacf152c071 | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
Manifestation
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.9; import './lib/Libraries.sol'; import './lib/Security.sol'; contract Manifestation is IManifestation, ReentrancyGuard { using SafeERC20 for IERC20; address public creatorAddress; IManifester public Manifester; address public DAO; address public assetAddress; address public depositAddress; address public rewardAddress; IERC20 private DEPOSIT; IERC20 private ASSET; IERC20 private REWARD; string public override name; string public override symbol; string public override logoURI; uint public duraDays; uint public feeDays; uint public dailyReward; uint public totalRewards; uint public rewardPerSecond; uint public accRewardPerShare; uint public lastRewardTime; // tracks to ensure only +/- accounted for. uint public override totalDeposited; uint public override startTime; uint public override endTime; uint public override mID; bool public isNativePair; bool public isManifested; bool public isSetup; bool public isEmergency; bool public isActive; bool public isReclaimable; bool public isSettable; bool private isPendingDAO; address private pendingDAO; // user info struct Users { uint amount; // deposited amount. uint rewardDebt; // reward debt (see: pendingReward). uint withdrawTime; // (latest) withdrawal time. uint depositTime; // (first) deposit time. uint timeDelta; // seconds accounted for in fee calculation. uint deltaDays; // days accounted for in fee calculation } // user info mapping (address => Users) public userInfo; // controls: emergencyWithdrawals. modifier emergencyActive { require(isEmergency, 'emergency mode is not active.'); _; } // controls: reclaims. modifier whileReclaimable { require(isReclaimable, 'reclaimable mode is not active.'); require(isEmergency, 'activate emergency mode to enable emergency withdrawals.'); _; } modifier whilePendingDAO { require(isPendingDAO, 'only available while pending DAO transfer.'); _; } // proxy for pausing contract. modifier isDepositable(uint amount) { require(IERC20(Manifester.auraAddress()).balanceOf(msg.sender) >= Manifester.auraMinimum(), 'insufficient AURA.'); require(amount > 0, 'cannot deposit zero.'); require(block.timestamp <= endTime, 'reward period has ended.'); // recall: isActive is first activated upon setting start and end times. require(isActive, 'paused'); _; } // proxy for pausing contract. modifier isWithdrawable(uint amount) { require(amount > 0, 'cannot withdraw zero.'); require(block.timestamp >= startTime, 'rewards have not yet begun.'); // recall: isActive is first activated upon setting start and end times. require(isActive, 'paused'); _; } // [.√.] proxy for setting contract. modifier whileSettable { require(isSettable, 'not settable'); _; } // [.√.] designates: soul access (for (rare) overrides). modifier onlySOUL() { require(Manifester.soulDAO() == msg.sender, "onlySOUL"); _; } // [.√.] ensures: only the DAO address is the sender. modifier onlyDAO() { require(DAO == msg.sender, "onlyDAO"); _; } // [.√.] ensures: only the Manifester address is the sender. modifier onlyManifester() { require(address(Manifester) == msg.sender, "onlyManifester"); _; } event Harvested(address indexed user, uint amount, uint timestamp); event Deposited(address indexed user, uint amount, uint timestamp); event Withdrawn(address indexed user, uint amount, uint feeAmount, uint timestamp); event EmergencyWithdrawn(address indexed user, uint amount, uint timestamp); event Manifested(string name, string symbol, address creatorAddress, address assetAddress, address depositAddress, address rewardAddress, uint timestamp); event RewardsReclaimed(address msgSender, uint amount, uint timestamp); event UpdatedDAO(address DAO, uint timestamp); event ActiveToggled(bool enabled, address msgSender, uint timestamp); event RewardsSet(uint duraDays, uint feeDays, uint dailyReward, uint timestamp); event ReclaimableToggled(bool enabled, address msgSender, uint timestamp); event FeeDaysUpdated(uint feeDays, uint timestamp); // [.√.] sets the Manifester at creation // constructor() { Manifester = IManifester(msg.sender); } // [.√.] initializes: manifestation by the Manifester (at creation). function manifest( uint _id, address _creatorAddress, address _assetAddress, address _depositAddress, address _rewardAddress, string memory _logoURI ) external onlyManifester { require(!isManifested, 'init. once.'); creatorAddress = _creatorAddress; assetAddress = _assetAddress; depositAddress = _depositAddress; rewardAddress = _rewardAddress; // sets: key data. DAO = creatorAddress; logoURI = _logoURI; mID = _id; // sets: from input data. ASSET = IERC20(assetAddress); DEPOSIT = IERC20(depositAddress); REWARD = IERC20(rewardAddress); // sets: initial states. isManifested = true; isSettable = true; // sets: native pair if assetAddress is wnative. isNativePair = _assetAddress == Manifester.wnativeAddress(); // constructs: name that corresponds to the REWARD. name = string(abi.encodePacked('[', stringifyUint(_id), '] ', ERC20(rewardAddress).name(), ' Farm')); symbol = string(abi.encodePacked(ERC20(rewardAddress).symbol())); emit Manifested(name, symbol, creatorAddress, assetAddress, depositAddress, rewardAddress, block.timestamp); } // [.√.] sets: rewards (callable from Manifester) function setRewards(uint _duraDays, uint _feeDays, uint _dailyReward) external onlyManifester { // sets: key info. duraDays = _duraDays; feeDays = toWei(_feeDays); dailyReward = toWei(_dailyReward); rewardPerSecond = toWei(_dailyReward) / 1 days; totalRewards = duraDays * toWei(_dailyReward); // sets: setup state. isSetup = true; emit RewardsSet(_duraDays, _feeDays, _dailyReward, block.timestamp); } // [.√.] updates: rewards, so that they are accounted for. function update() public { if (block.timestamp <= lastRewardTime) { return; } // [if] first manifestation, [then] set `lastRewardTime` to meow. if (totalDeposited == 0) { lastRewardTime = block.timestamp; return; } // gets: multiplier from time elasped since pool began issuing rewards. uint multiplier = getMultiplier(lastRewardTime, block.timestamp); uint reward = multiplier * rewardPerSecond; accRewardPerShare += (reward * 1e12 / totalDeposited); lastRewardTime = block.timestamp; } /////////////////////////////// /*/ VIEW FUNCTIONS /*/ /////////////////////////////// // [.√.] returns: pending rewards for a specifed account. function getPendingRewards(address account) external view returns (uint pendingAmount) { // gets: pool and user data Users storage user = userInfo[account]; // gets: `accRewardPerShare` & `depositSupply` uint _accRewardPerShare = accRewardPerShare; // uses: local variable for reference use. // [if] holds deposits & rewards issued at least once. if (block.timestamp > lastRewardTime && totalDeposited != 0) { // gets: multiplier from the time since now and last time rewards issued (pool). uint multiplier = getMultiplier(lastRewardTime, block.timestamp); // get: reward as the product of the elapsed emissions and the share of rewards (pool). uint reward = multiplier * rewardPerSecond; // adds [+]: product [*] of reward and 1e12 _accRewardPerShare = accRewardPerShare + reward * 1e12 / totalDeposited; } // returns: rewardShare for user minus the amount paid out (user). pendingAmount = user.amount * _accRewardPerShare / 1e12 - user.rewardDebt; return pendingAmount; } // [.√.] returns: multiplier during a period. function getMultiplier(uint from, uint to) public pure returns (uint multiplier) { multiplier = to - from; return multiplier; } // [.√.] returns: user delta is the time since user either last withdrew OR first deposited OR 0. function getUserDelta(address account) public view returns (uint timeDelta) { // gets: stored `user` data. Users storage user = userInfo[account]; // [if] has never withdrawn & has deposited, [then] returns: `timeDelta` as the seconds since first `depositTime`. if (user.withdrawTime == 0 && user.depositTime > 0) { return timeDelta = block.timestamp - user.depositTime; } // [else if] `user` has withdrawn, [then] returns: `timeDelta` as the time since the last withdrawal. else if(user.withdrawTime > 0) { return timeDelta = block.timestamp - user.withdrawTime; } // [else] returns: `timeDelta` as 0, since the user has never deposited. else return timeDelta = 0; } // [.√.] gets: days based off a given timeDelta (seconds). function getDeltaDays(uint timeDelta) public pure returns (uint deltaDays) { deltaDays = timeDelta < 1 days ? 0 : timeDelta / 1 days; return deltaDays; } // [.√.] returns: feeRate and timeDelta. function getFeeRate(uint deltaDays) public view returns (uint feeRate) { // calculates: rateDecayed (converts to wei). uint rateDecayed = toWei(deltaDays); // [if] more time has elapsed than wait period if (rateDecayed >= feeDays) { // [then] set feeRate to 0. feeRate = 0; } else { // [else] reduce feeDays by the rateDecayed. feeRate = feeDays - rateDecayed; } return feeRate; } // [.√.] returns: feeAmount and with withdrawableAmount for a given amount function getWithdrawable(uint deltaDays, uint amount) public view returns (uint _feeAmount, uint _withdrawable) { // gets: feeRate uint feeRate = fromWei(getFeeRate(deltaDays)); // gets: feeAmount uint feeAmount = (amount * feeRate) / 100; // calculates: withdrawable amount uint withdrawable = amount - feeAmount; return (feeAmount, withdrawable); } // [.√.] returns: reward period (start, end). function getRewardPeriod() external view returns (uint start, uint end) { start = startTime; end = endTime; return (start, end); } ////////////////////////////////////// /*/ ACCOUNT (TX) FUNCTIONS /*/ ////////////////////////////////////// // [.√.] harvests: pending rewards. function harvest() external nonReentrant { Users storage user = userInfo[msg.sender]; // updates: calculations. update(); // gets: pendingRewards and requires pending reward. uint pendingReward = user.amount * accRewardPerShare / 1e12 - user.rewardDebt; require(pendingReward > 0, 'nothing to harvest.'); // ensures: only a full payout is made, else fails. require(REWARD.balanceOf(address(this)) >= pendingReward, 'insufficient payout balance.'); // transfers: reward token to user. REWARD.safeTransfer(msg.sender, pendingReward); // updates: reward debt (user). user.rewardDebt = user.amount * accRewardPerShare / 1e12; emit Harvested(msg.sender, pendingReward, block.timestamp); } // [.√.] deposit: tokens. function deposit(uint amount) external nonReentrant isDepositable(amount) { // gets: stored data for pool and user. Users storage user = userInfo[msg.sender]; // updates: calculations. update(); // [if] already deposited (user) if (user.amount > 0) { // [then] gets: pendingReward. uint pendingReward = user.amount * accRewardPerShare / 1e12 - user.rewardDebt; // [if] rewards pending, [then] transfer to user. if(pendingReward > 0) { // [then] ensures: only a full payout is made, else fails. require(REWARD.balanceOf(address(this)) >= pendingReward, 'insufficient payout balance.'); REWARD.safeTransfer(msg.sender, pendingReward); } } // transfers: DEPOSIT from user to contract. DEPOSIT.safeTransferFrom(address(msg.sender), address(this), amount); // updates (+): totalDeposited. totalDeposited += amount; // adds: deposit amount (for user). user.amount += amount; // updates: reward debt (user). user.rewardDebt = user.amount * accRewardPerShare / 1e12; // [if] first deposit if (user.depositTime == 0) { // [then] update depositTime user.depositTime = block.timestamp; } emit Deposited(msg.sender, amount, block.timestamp); } // [.√.] withdraws: deposited tokens. function withdraw(uint amount) external nonReentrant isWithdrawable(amount) { // gets: stored data for the account. Users storage user = userInfo[msg.sender]; require(user.amount >= amount, 'exceeds deposit.'); // helps: manage calculations. update(); // gets: pending rewards as determined by pendingSoul. uint pendingReward = user.amount * accRewardPerShare / 1e12 - user.rewardDebt; // [if] rewards are pending, [then] send rewards to user. if(pendingReward > 0) { // ensures: only a full payout is made, else fails. require(REWARD.balanceOf(address(this)) >= pendingReward, 'insufficient payout balance.'); REWARD.safeTransfer(msg.sender, pendingReward); } // gets: timeDelta as the time since last withdrawal. uint timeDelta = getUserDelta(msg.sender); // gets: deltaDays as days passed using timeDelta. uint deltaDays = getDeltaDays(timeDelta); // updates: deposit, timeDelta, & deltaDays (user) user.amount -= amount; user.timeDelta = timeDelta; user.deltaDays = deltaDays; // calculates: withdrawable amount (deltaDays, amount). (, uint withdrawableAmount) = getWithdrawable(deltaDays, amount); // calculates: `feeAmount` as the `amount` requested minus `withdrawableAmount`. uint feeAmount = amount - withdrawableAmount; // updates: rewardDebt and withdrawTime (user) user.rewardDebt = user.amount * accRewardPerShare / 1e12; user.withdrawTime = block.timestamp; // updates (-): totalDeposited totalDeposited -= amount; // transfers: `feeAmount` --> DAO. DEPOSIT.safeTransfer(DAO, feeAmount); // transfers: withdrawableAmount amount --> user. DEPOSIT.safeTransfer(address(msg.sender), withdrawableAmount); emit Withdrawn(msg.sender, amount, feeAmount, block.timestamp); } // [.√.] enables: withdrawal without caring about rewards (e.g. when rewards end). function emergencyWithdraw() external nonReentrant emergencyActive { // gets: pool & user data (to update later). Users storage user = userInfo[msg.sender]; uint withdrawAmount = user.amount; require(withdrawAmount > 0, 'nothing to withdraw.'); // helps: manage calculations. update(); // transfers: DEPOSIT to the user. DEPOSIT.safeTransfer(msg.sender, withdrawAmount); // eliminates: user deposit `amount` & `rewardDebt`. user.amount = 0; // since user.amount = 0 => rewardDebt = 0 * accRewardPerShare / 1e12 = 0; user.rewardDebt = 0; // updates: user `withdrawTime`. user.withdrawTime = block.timestamp; // updates (-): totalDeposited. totalDeposited -= withdrawAmount; emit EmergencyWithdrawn(msg.sender, user.amount, user.withdrawTime); } /////////////////////////////// /*/ VIEW FUNCTIONS /*/ /////////////////////////////// // [.√.] returns: key user info. function getUserInfo(address account) external view returns (uint amount, uint rewardDebt, uint withdrawTime, uint depositTime, uint timeDelta, uint deltaDays) { Users storage user = userInfo[account]; return(user.amount, user.rewardDebt, user.withdrawTime, user.depositTime, user.timeDelta, user.deltaDays); } //////////////////////////////// /*/ ADMIN FUNCTIONS /*/ //////////////////////////////// // [.√.] sets: startTime & endTime (onlyDAO) function setDelay(address requestor, uint delayDays) external onlyManifester { // checks: requestor is the DAO address. require(requestor == DAO, 'onlyDAO.'); // checks: startTime has not yet been set. require(startTime == 0, 'start set.'); // converts: delayDays into a unix timeDelay variable (in secs). uint timeDelay = delayDays * 1 days; // sets: duration. uint duration = duraDays * 1 days; // sets: startTime. startTime = block.timestamp + timeDelay; // sets: endTime. endTime = startTime + duration; // activates: deposits and withdrawals. isActive = true; } // [.√.] sets: DAO address (onlyDAO). function setDAO(address _pendingDAO) external onlyDAO whileSettable { require(_pendingDAO != DAO && _pendingDAO != address(0), 'no change || address(0).'); // updates: pendingDAO adddress. pendingDAO = _pendingDAO; // sets: isPending DAO to true. isPendingDAO = true; } // [.√.] sets: DAO address while preventing lockout (whilePendingDAO). function acceptDAO() external whilePendingDAO { // checks: sender is the pendingDAO. require(pendingDAO == msg.sender, 'only pending DAO may accept.'); // sets: isPendingDAO to false. isPendingDAO = false; // updates: DAO adddress. DAO = msg.sender; emit UpdatedDAO(DAO, block.timestamp); } // [.√.] sends: rewards to DAO (whileReclaimable, onlyDAO). function reclaimRewards() external whileReclaimable onlyDAO { uint balance = REWARD.balanceOf(address(this)); REWARD.safeTransfer(DAO, balance); emit RewardsReclaimed(msg.sender, balance, block.timestamp); } ////////////////////////////////////////// /*/ SOUL (OVERRIDE) FUNCTIONS /*/ ////////////////////////////////////////// // [.√.] prevents: funny business (onlySOUL). function toggleSettable(bool enabled) external onlySOUL { isSettable = enabled; } // [.√.] overrides: feeDays (onlySOUL) function setFeeDaysOverride(uint _feeDays) external onlySOUL { // gets: current fee days & ensures distinction (pool) require(feeDays != toWei(_feeDays), 'no change.'); // limits: feeDays by default maximum of 30 days. require(toWei(_feeDays) <= toWei(30), 'exceeds 30 days.'); // updates: fee days (pool) feeDays = toWei(_feeDays); emit FeeDaysUpdated(toWei(_feeDays), block.timestamp); } // [.√.] overrides: active state (onlySOUL). function toggleActiveOverride(bool enabled) public onlySOUL { // sets: active state, when enabled. isActive = enabled; // restricts: emergency exit, while active. isEmergency = !enabled; emit ActiveToggled(enabled, msg.sender, block.timestamp); } // [.√.] sets: reclaimable status. function setReclaimable(bool enabled) external onlySOUL { // [if] setting reclaimable, [then] ensure inactive deposits and active emergency withdrawals. if (enabled) { toggleActiveOverride(false); } // updates: reclaimable to desired state. isReclaimable = enabled; emit ReclaimableToggled(enabled, msg.sender, block.timestamp); } // [.√.] overrides: logoURI (onlySOUL). function updateLogoURI(string memory _logoURI) external onlySOUL { logoURI = _logoURI; } // [.√.] sets: native or stable (onlySOUL, when override is needed). function setNativePair(bool enabled) external onlySOUL { isNativePair = enabled; assetAddress = enabled ? Manifester.wnativeAddress() : Manifester.usdcAddress(); } // [.√.] updates: Manifester (onlySOUL) function updateManifester(address _manifesterAddress) external onlySOUL { Manifester = IManifester(_manifesterAddress); } /////////////////////////////// /*/ HELPER FUNCTIONS /*/ /////////////////////////////// // [.√.] converts: uint to string (used when creating name) function stringifyUint(uint _i) public pure returns (string memory _string) { if (_i == 0) { return "0"; } uint j = _i; uint length; while (j != 0) { length++; j /= 10; } bytes memory bstr = new bytes(length); uint k = length; j = _i; while (j != 0) { bstr[--k] = bytes1(uint8(48 + j % 10)); j /= 10; } _string = string(bstr); } function toWei(uint amount) public pure returns (uint) { return amount * 1E18; } function fromWei(uint amount) public pure returns (uint) { return amount / 1E18; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; // File: @openzeppelin/contracts/token/ERC20/IERC20.sol interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface IManifestation { function name() external returns (string memory); function symbol() external returns (string memory); function logoURI() external returns (string memory); function depositAddress() external returns (address); function rewardAddress() external returns (address); function startTime() external returns (uint); function endTime() external returns (uint); function mID() external returns (uint); function totalDeposited() external returns (uint); } interface IManifester { function soulDAO() external returns (address); function usdcAddress() external returns (address); function wnativeAddress() external returns (address); function auraAddress() external returns (address); function nativeSymbol() external returns (string memory); function auraMinimum() external returns (uint); } // File: contracts/interfaces/ISoulSwapFactory.sol interface ISoulSwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); event SetFeeTo(address indexed user, address indexed _feeTo); event SetMigrator(address indexed user, address indexed _migrator); event FeeToSetter(address indexed user, address indexed feeToSetter); function feeTo() external view returns (address _feeTo); function feeToSetter() external view returns (address _fee); function migrator() external view returns (address _migrator); function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); function setMigrator(address) external; function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: contracts/interfaces/ISoulSwapERC20.sol pragma solidity >=0.5.0; interface ISoulSwapERC20 { // event Approval(address indexed owner, address indexed spender, uint value); // event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; } interface ISoulSwapPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; // import './Utilities.sol'; // import './Interfaces.sol'; import './Tokens.sol'; // File: contracts/libraries/SafeERC20.sol library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/libraries/SafeMath.sol pragma solidity >=0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; // File: @openzeppelin/contracts/security/ReentrancyGuard.sol abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; import './Utilities.sol'; import './Interfaces.sol'; // File: contracts/libraries/ERC20.sol contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; // File: @openzeppelin/contracts/utils/Context.sol abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Address.sol library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
{ "remappings": [ "@openzeppelin/=node_modules/@openzeppelin/", "ds-test/=lib/forge-std/lib/ds-test/src/", "forge-std/=node_modules/forge-std/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"address","name":"msgSender","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ActiveToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"EmergencyWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feeDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"FeeDaysUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Harvested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address","name":"creatorAddress","type":"address"},{"indexed":false,"internalType":"address","name":"assetAddress","type":"address"},{"indexed":false,"internalType":"address","name":"depositAddress","type":"address"},{"indexed":false,"internalType":"address","name":"rewardAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Manifested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"address","name":"msgSender","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ReclaimableToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"msgSender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RewardsReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duraDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dailyReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RewardsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"DAO","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdatedDAO","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Manifester","outputs":[{"internalType":"contract IManifester","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accRewardPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptDAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assetAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"duraDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fromWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeDelta","type":"uint256"}],"name":"getDeltaDays","outputs":[{"internalType":"uint256","name":"deltaDays","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"deltaDays","type":"uint256"}],"name":"getFeeRate","outputs":[{"internalType":"uint256","name":"feeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"multiplier","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getPendingRewards","outputs":[{"internalType":"uint256","name":"pendingAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPeriod","outputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserDelta","outputs":[{"internalType":"uint256","name":"timeDelta","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"withdrawTime","type":"uint256"},{"internalType":"uint256","name":"depositTime","type":"uint256"},{"internalType":"uint256","name":"timeDelta","type":"uint256"},{"internalType":"uint256","name":"deltaDays","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deltaDays","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getWithdrawable","outputs":[{"internalType":"uint256","name":"_feeAmount","type":"uint256"},{"internalType":"uint256","name":"_withdrawable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isEmergency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isManifested","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNativePair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isReclaimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSettable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSetup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logoURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_creatorAddress","type":"address"},{"internalType":"address","name":"_assetAddress","type":"address"},{"internalType":"address","name":"_depositAddress","type":"address"},{"internalType":"address","name":"_rewardAddress","type":"address"},{"internalType":"string","name":"_logoURI","type":"string"}],"name":"manifest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reclaimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pendingDAO","type":"address"}],"name":"setDAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"requestor","type":"address"},{"internalType":"uint256","name":"delayDays","type":"uint256"}],"name":"setDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeDays","type":"uint256"}],"name":"setFeeDaysOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setNativePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setReclaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_duraDays","type":"uint256"},{"internalType":"uint256","name":"_feeDays","type":"uint256"},{"internalType":"uint256","name":"_dailyReward","type":"uint256"}],"name":"setRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_i","type":"uint256"}],"name":"stringifyUint","outputs":[{"internalType":"string","name":"_string","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"toWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleActiveOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSettable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_logoURI","type":"string"}],"name":"updateLogoURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manifesterAddress","type":"address"}],"name":"updateManifester","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"withdrawTime","type":"uint256"},{"internalType":"uint256","name":"depositTime","type":"uint256"},{"internalType":"uint256","name":"timeDelta","type":"uint256"},{"internalType":"uint256","name":"deltaDays","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506001600055600280546001600160a01b0319163317905561328c806100376000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c80637f731ba3116101de578063b6b55f251161010f578063e65d1522116100ad578063f13054a71161007c578063f13054a7146107b5578063f36d1e4e146107be578063f6ed2017146107d1578063ff50abdc146107e457600080fd5b8063e65d15221461076f578063e73a914c14610782578063e927fc5c14610795578063eed28a6d146107a857600080fd5b8063d1f66621116100e9578063d1f666211461072d578063d2aaef4e14610741578063db2e21bc14610754578063df0dd2781461075c57600080fd5b8063b6b55f2514610708578063bfa473801461071b578063c964ad451461072457600080fd5b8063939d62371161017c57806398fabd3a1161015657806398fabd3a146106cf57806399af94d7146106e2578063a2e62045146106f5578063adc89032146106fd57600080fd5b8063939d6237146106ab57806395aca473146106b457806395d89b41146106c757600080fd5b80638dbb1e3a116101b85780638dbb1e3a1461065e5780638f10369a1461067157806390fb575b1461067a5780639231cf74146106a257600080fd5b80637f731ba31461062257806384efe9bd146106385780638cf57cb91461064b57600080fd5b80634641257d116102b85780636850afbe1161025657806378600a4f1161023057806378600a4f146105eb57806378e97925146105fe5780637bd2d7db146106075780637c204f0e1461060f57600080fd5b80636850afbe146105bd5780636bb38b28146105d05780636d21e4e2146105d857600080fd5b806360240a5d1161029257806360240a5d146105435780636386c1c71461054c57806363879c0914610597578063669dafe8146105aa57600080fd5b80634641257d14610514578063591de3d91461051c5780635f9e8f821461052f57600080fd5b8063249556e01161032557806329223cdf116102ff57806329223cdf146104d25780632e1a7d4d146104e55780633197cbb6146104f857806340d3c9421461050157600080fd5b8063249556e01461049a57806327cb7515146104ac57806328f833b7146104bf57600080fd5b80631959a002116103615780631959a002146103c75780631ba46cfd146104375780631d4fc6bd1461046257806322f3e2d41461047557600080fd5b80630450e0fa1461038857806306fdde03146103925780630e15561a146103b0575b600080fd5b6103906107ed565b005b61039a61091b565b6040516103a79190612abb565b60405180910390f35b6103b960105481565b6040519081526020016103a7565b61040a6103d5366004612b06565b601960205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909186565b604080519687526020870195909552938501929092526060840152608083015260a082015260c0016103a7565b60045461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103a7565b610390610470366004612be8565b6109a9565b60185461048a90640100000000900460ff1681565b60405190151581526020016103a7565b60185461048a90610100900460ff1681565b60025461044a906001600160a01b031681565b60055461044a906001600160a01b031681565b6103906104e0366004612c86565b610d2a565b6103906104f3366004612ca3565b610eec565b6103b960165481565b6103b961050f366004612b06565b611250565b6103906112c1565b61039061052a366004612ca3565b611482565b60185461048a906301000000900460ff1681565b6103b9600e5481565b61040a61055a366004612b06565b6001600160a01b03166000908152601960205260409020805460018201546002830154600384015460048501546005909501549395929491939092565b6103906105a5366004612cbc565b611601565b6103b96105b8366004612ca3565b6116a6565b61039a6105cb366004612ca3565b6116c0565b61039a6117cc565b6103906105e6366004612cf1565b6117d9565b60185461048a9062010000900460ff1681565b6103b960155481565b6103906118e6565b61039061061d366004612b06565b611ad1565b60185461048a9065010000000000900460ff1681565b610390610646366004612c86565b611b88565b60065461044a906001600160a01b031681565b6103b961066c366004612d1d565b611c8a565b6103b960115481565b61068d610688366004612d1d565b611c96565b604080519283526020830191909152016103a7565b6103b960135481565b6103b960125481565b6103b96106c2366004612ca3565b611cdd565b61039a611d03565b60035461044a906001600160a01b031681565b6103906106f0366004612c86565b611d10565b610390611e15565b60155460165461068d565b610390610716366004612ca3565b611e8d565b6103b960175481565b6103b9600f5481565b60185461048a90600160301b900460ff1681565b6103b961074f366004612ca3565b6122f2565b610390612320565b61039061076a366004612c86565b61247d565b6103b961077d366004612ca3565b612533565b610390610790366004612b06565b612547565b60015461044a906001600160a01b031681565b60185461048a9060ff1681565b6103b9600d5481565b6103906107cc366004612d3f565b612685565b6103b96107df366004612b06565b61275c565b6103b960145481565b601854600160381b900460ff1661085e5760405162461bcd60e51b815260206004820152602a60248201527f6f6e6c7920617661696c61626c65207768696c652070656e64696e672044414f604482015269103a3930b739b332b91760b11b60648201526084015b60405180910390fd5b601854600160401b90046001600160a01b031633146108bf5760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c792070656e64696e672044414f206d6179206163636570742e000000006044820152606401610855565b6018805460ff60381b19169055600380546001600160a01b03191633908117909155604080519182524260208301527f4ce82c0a99eb6c22a0e375c21490b11f8884212e9f68354b35c22d9eefe5bf39910160405180910390a1565b600a805461092890612d6b565b80601f016020809104026020016040519081016040528092919081815260200182805461095490612d6b565b80156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b505050505081565b6002546001600160a01b031633146109d35760405162461bcd60e51b815260040161085590612d9f565b601854610100900460ff1615610a195760405162461bcd60e51b815260206004820152600b60248201526a34b734ba171037b731b29760a91b6044820152606401610855565b600180546001600160a01b03199081166001600160a01b0388811691821790935560048054831688851617905560058054831687851617905560068054831693861693909317909255600380549091169091179055600c610a7a8282612e15565b50601786905560048054600880546001600160a01b03199081166001600160a01b03938416179091556005546007805483169184169190911790556006546009805490921690831617905560188054660100000000010066ff00000000ff00199091161790556002546040805163e2a4ac2d60e01b81529051919092169263e2a4ac2d9280820192602092909182900301816000875af1158015610b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b469190612ed5565b6018805460ff19166001600160a01b03878116931692909214919091179055610b6e866116c0565b600660009054906101000a90046001600160a01b03166001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610be99190810190612ef2565b604051602001610bfa929190612f69565b604051602081830303815290604052600a9081610c179190612e15565b50600660009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c6b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c939190810190612ef2565b604051602001610ca39190612fc5565b604051602081830303815290604052600b9081610cc09190612e15565b506001546004546005546006546040517f5f521838a71b534a961d67d3d98752a59ee15f0f7371b7b821705886b10e7fa194610d1a94600a94600b946001600160a01b03938416949284169391821692911690429061305e565b60405180910390a1505050505050565b60025460408051632ddce67d60e01b8152905133926001600160a01b031691632ddce67d91600480830192602092919082900301816000875af1158015610d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d999190612ed5565b6001600160a01b031614610dbf5760405162461bcd60e51b8152600401610855906130b9565b6018805460ff191682151517905580610e5057600260009054906101000a90046001600160a01b03166001600160a01b03166302d454576040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b9190612ed5565b610ec9565b600260009054906101000a90046001600160a01b03166001600160a01b031663e2a4ac2d6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190612ed5565b600480546001600160a01b0319166001600160a01b039290921691909117905550565b600260005403610f0e5760405162461bcd60e51b8152600401610855906130db565b60026000558080610f595760405162461bcd60e51b815260206004820152601560248201527431b0b73737ba103bb4ba34323930bb903d32b9379760591b6044820152606401610855565b601554421015610fab5760405162461bcd60e51b815260206004820152601b60248201527f726577617264732068617665206e6f742079657420626567756e2e00000000006044820152606401610855565b601854640100000000900460ff16610fee5760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610855565b33600090815260196020526040902080548311156110415760405162461bcd60e51b815260206004820152601060248201526f32bc31b2b2b239903232b837b9b4ba1760811b6044820152606401610855565b611049611e15565b6000816001015464e8d4a5100060125484600001546110689190613128565b6110729190613155565b61107c9190613169565b90508015611125576009546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156110cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f0919061317c565b101561110e5760405162461bcd60e51b815260040161085590613195565b600954611125906001600160a01b03163383612814565b600061113033611250565b9050600061113d82611cdd565b9050858460000160008282546111539190613169565b9091555050600484018290556005840181905560006111728288611c96565b9150600090506111828289613169565b905064e8d4a51000601254876000015461119c9190613128565b6111a69190613155565b6001870155426002870155601480548991906000906111c6908490613169565b90915550506003546007546111e8916001600160a01b03918216911683612814565b6007546111ff906001600160a01b03163384612814565b60408051898152602081018390524281830152905133917f75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a21919081900360600190a250506001600055505050505050565b6001600160a01b0381166000908152601960205260408120600281015415801561127e575060008160030154115b156112995760038101546112929042613169565b9392505050565b6002810154156112b25760028101546112929042613169565b50600092915050565b50919050565b6002600054036112e35760405162461bcd60e51b8152600401610855906130db565b600260009081553381526019602052604090206112fe611e15565b6000816001015464e8d4a51000601254846000015461131d9190613128565b6113279190613155565b6113319190613169565b9050600081116113795760405162461bcd60e51b81526020600482015260136024820152723737ba3434b733903a37903430b93b32b9ba1760691b6044820152606401610855565b6009546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e5919061317c565b10156114035760405162461bcd60e51b815260040161085590613195565b60095461141a906001600160a01b03163383612814565b601254825464e8d4a510009161142f91613128565b6114399190613155565b60018301556040805182815242602082015233917f81ca9b2c230070eaa84787556b1aaf18bf1e2f07ea5d3dae4819db77a1a5b22491015b60405180910390a250506001600055565b60025460408051632ddce67d60e01b8152905133926001600160a01b031691632ddce67d91600480830192602092919082900301816000875af11580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f19190612ed5565b6001600160a01b0316146115175760405162461bcd60e51b8152600401610855906130b9565b611520816116a6565b600e540361155d5760405162461bcd60e51b815260206004820152600a60248201526937379031b430b733b29760b11b6044820152606401610855565b611567601e6116a6565b611570826116a6565b11156115b15760405162461bcd60e51b815260206004820152601060248201526f32bc31b2b2b239901998103230bcb99760811b6044820152606401610855565b6115ba816116a6565b600e557f11866c6bd0f6c9f4753a4891ab4d2e17484dbbdc2aa908db44e66a35c5c331dc6115e7826116a6565b60408051918252426020830152015b60405180910390a150565b60025460408051632ddce67d60e01b8152905133926001600160a01b031691632ddce67d91600480830192602092919082900301816000875af115801561164c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116709190612ed5565b6001600160a01b0316146116965760405162461bcd60e51b8152600401610855906130b9565b600c6116a28282612e15565b5050565b60006116ba82670de0b6b3a7640000613128565b92915050565b6060816000036116e75750506040805180820190915260018152600360fc1b602082015290565b8160005b811561171157806116fb816131cc565b915061170a9050600a83613155565b91506116eb565b60008167ffffffffffffffff81111561172c5761172c612b23565b6040519080825280601f01601f191660200182016040528015611756576020820181803683370190505b508593509050815b83156117c35761176f600a856131e5565b61177a9060306131f9565b60f81b826117878361320c565b9250828151811061179a5761179a613223565b60200101906001600160f81b031916908160001a9053506117bc600a85613155565b935061175e565b50949350505050565b600c805461092890612d6b565b6002546001600160a01b031633146118035760405162461bcd60e51b815260040161085590612d9f565b6003546001600160a01b0383811691161461184b5760405162461bcd60e51b815260206004820152600860248201526737b7363ca220a79760c11b6044820152606401610855565b601554156118885760405162461bcd60e51b815260206004820152600a60248201526939ba30b93a1039b2ba1760b11b6044820152606401610855565b60006118978262015180613128565b90506000600d54620151806118ac9190613128565b90506118b882426131f9565b60158190556118c89082906131f9565b60165550506018805464ff0000000019166401000000001790555050565b60185465010000000000900460ff166119415760405162461bcd60e51b815260206004820152601f60248201527f7265636c61696d61626c65206d6f6465206973206e6f74206163746976652e006044820152606401610855565b6018546301000000900460ff166119c05760405162461bcd60e51b815260206004820152603860248201527f616374697661746520656d657267656e6379206d6f646520746f20656e61626c60448201527f6520656d657267656e6379207769746864726177616c732e00000000000000006064820152608401610855565b6003546001600160a01b03163314611a045760405162461bcd60e51b81526020600482015260076024820152666f6e6c7944414f60c81b6044820152606401610855565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a71919061317c565b600354600954919250611a91916001600160a01b03908116911683612814565b604080513381526020810183905242918101919091527ffb0f113183a5cf57eb8ce835ce6dfab0f51c7ce5bbd299eee449f3c0b5a2ee6c906060016115f6565b60025460408051632ddce67d60e01b8152905133926001600160a01b031691632ddce67d91600480830192602092919082900301816000875af1158015611b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b409190612ed5565b6001600160a01b031614611b665760405162461bcd60e51b8152600401610855906130b9565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60025460408051632ddce67d60e01b8152905133926001600160a01b031691632ddce67d91600480830192602092919082900301816000875af1158015611bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf79190612ed5565b6001600160a01b031614611c1d5760405162461bcd60e51b8152600401610855906130b9565b8015611c2d57611c2d6000611d10565b6018805465ff0000000000191665010000000000831515908102919091179091556040805191825233602083015242908201527f18d8afe30f7adb4473ff955a38a305419b9e0d7af3132beb5ed05bf4d7be5a16906060016115f6565b60006112928383613169565b6000806000611ca761077d866122f2565b905060006064611cb78387613128565b611cc19190613155565b90506000611ccf8287613169565b919791965090945050505050565b6000620151808210611cfb57611cf66201518083613155565b6116ba565b600092915050565b600b805461092890612d6b565b60025460408051632ddce67d60e01b8152905133926001600160a01b031691632ddce67d91600480830192602092919082900301816000875af1158015611d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7f9190612ed5565b6001600160a01b031614611da55760405162461bcd60e51b8152600401610855906130b9565b6018805464ffff00000019166401000000008315801591820263ff000000191692909217630100000092909202919091179091556040805191825233602083015242908201527faa43f6a80da23b46b473aa014d5650541fd730bcd7b10b0fec3b352d1d2817ee906060016115f6565b6013544211611e2057565b601454600003611e305742601355565b6000611e3e60135442611c8a565b9050600060115482611e509190613128565b601454909150611e658264e8d4a51000613128565b611e6f9190613155565b60126000828254611e8091906131f9565b9091555050426013555050565b600260005403611eaf5760405162461bcd60e51b8152600401610855906130db565b600260008190555080600260009054906101000a90046001600160a01b03166001600160a01b03166313d89bc56040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f31919061317c565b600260009054906101000a90046001600160a01b03166001600160a01b0316639f23487a6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa9190612ed5565b6040516370a0823160e01b81523360048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611ff0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612014919061317c565b10156120575760405162461bcd60e51b815260206004820152601260248201527134b739bab33334b1b4b2b73a1020aaa9209760711b6044820152606401610855565b6000811161209e5760405162461bcd60e51b815260206004820152601460248201527331b0b73737ba103232b837b9b4ba103d32b9379760611b6044820152606401610855565b6016544211156120f05760405162461bcd60e51b815260206004820152601860248201527f72657761726420706572696f642068617320656e6465642e00000000000000006044820152606401610855565b601854640100000000900460ff166121335760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610855565b33600090815260196020526040902061214a611e15565b80541561222f576000816001015464e8d4a5100060125484600001546121709190613128565b61217a9190613155565b6121849190613169565b9050801561222d576009546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156121d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f8919061317c565b10156122165760405162461bcd60e51b815260040161085590613195565b60095461222d906001600160a01b03163383612814565b505b600754612247906001600160a01b031633308661287c565b826014600082825461225991906131f9565b90915550508054839082906000906122729084906131f9565b9091555050601254815464e8d4a510009161228c91613128565b6122969190613155565b600182015560038101546000036122ae574260038201555b6040805184815242602082015233917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a25050600160005550565b6000806122fe836116a6565b9050600e54811061231257600091506112bb565b80600e546112929190613169565b6002600054036123425760405162461bcd60e51b8152600401610855906130db565b60026000556018546301000000900460ff166123a05760405162461bcd60e51b815260206004820152601d60248201527f656d657267656e6379206d6f6465206973206e6f74206163746976652e0000006044820152606401610855565b3360009081526019602052604090208054806123f55760405162461bcd60e51b81526020600482015260146024820152733737ba3434b733903a37903bb4ba34323930bb9760611b6044820152606401610855565b6123fd611e15565b600754612414906001600160a01b03163383612814565b60008083556001830181905542600284015560148054839290612438908490613169565b90915550508154600283015460405133927fb47853100b79d8afa66237bdb4f7f09d96628ee23aa8aac8a8c21a901c67ddb29261147192918252602082015260400190565b60025460408051632ddce67d60e01b8152905133926001600160a01b031691632ddce67d91600480830192602092919082900301816000875af11580156124c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ec9190612ed5565b6001600160a01b0316146125125760405162461bcd60e51b8152600401610855906130b9565b60188054911515600160301b0266ff00000000000019909216919091179055565b60006116ba670de0b6b3a764000083613155565b6003546001600160a01b0316331461258b5760405162461bcd60e51b81526020600482015260076024820152666f6e6c7944414f60c81b6044820152606401610855565b601854600160301b900460ff166125d35760405162461bcd60e51b815260206004820152600c60248201526b6e6f74207365747461626c6560a01b6044820152606401610855565b6003546001600160a01b038281169116148015906125f957506001600160a01b03811615155b6126455760405162461bcd60e51b815260206004820152601860248201527f6e6f206368616e6765207c7c20616464726573732830292e00000000000000006044820152606401610855565b6018805460ff60381b196001600160a01b03909316600160401b0292909216670100000000000000600160e01b031990921691909117600160381b179055565b6002546001600160a01b031633146126af5760405162461bcd60e51b815260040161085590612d9f565b600d8390556126bd826116a6565b600e556126c9816116a6565b600f55620151806126d9826116a6565b6126e39190613155565b6011556126ef816116a6565b600d546126fc9190613128565b6010556018805462ff000019166201000017905560408051848152602081018490529081018290524260608201527fd68540b7eec575a012b697f147d27036a428e0632a24bd552dd46063840d65219060800160405180910390a1505050565b6001600160a01b038116600090815260196020526040812060125460135442118015612789575060145415155b156127df57600061279c60135442611c8a565b90506000601154826127ae9190613128565b6014549091506127c38264e8d4a51000613128565b6127cd9190613155565b6012546127da91906131f9565b925050505b6001820154825464e8d4a51000906127f8908490613128565b6128029190613155565b61280c9190613169565b949350505050565b6040516001600160a01b03831660248201526044810182905261287790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526128ba565b505050565b6040516001600160a01b03808516602483015283166044820152606481018290526128b49085906323b872dd60e01b90608401612840565b50505050565b600061290f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661298c9092919063ffffffff16565b805190915015612877578080602001905181019061292d9190613239565b6128775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610855565b606061280c848460008585843b6129e55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610855565b600080866001600160a01b03168587604051612a019190612fc5565b60006040518083038185875af1925050503d8060008114612a3e576040519150601f19603f3d011682016040523d82523d6000602084013e612a43565b606091505b5091509150612a53828286612a5e565b979650505050505050565b60608315612a6d575081611292565b825115612a7d5782518084602001fd5b8160405162461bcd60e51b81526004016108559190612abb565b60005b83811015612ab2578181015183820152602001612a9a565b50506000910152565b6020815260008251806020840152612ada816040850160208701612a97565b601f01601f19169190910160400192915050565b6001600160a01b0381168114612b0357600080fd5b50565b600060208284031215612b1857600080fd5b813561129281612aee565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6257612b62612b23565b604052919050565b600067ffffffffffffffff821115612b8457612b84612b23565b50601f01601f191660200190565b600082601f830112612ba357600080fd5b8135612bb6612bb182612b6a565b612b39565b818152846020838601011115612bcb57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215612c0157600080fd5b863595506020870135612c1381612aee565b94506040870135612c2381612aee565b93506060870135612c3381612aee565b92506080870135612c4381612aee565b915060a087013567ffffffffffffffff811115612c5f57600080fd5b612c6b89828a01612b92565b9150509295509295509295565b8015158114612b0357600080fd5b600060208284031215612c9857600080fd5b813561129281612c78565b600060208284031215612cb557600080fd5b5035919050565b600060208284031215612cce57600080fd5b813567ffffffffffffffff811115612ce557600080fd5b61280c84828501612b92565b60008060408385031215612d0457600080fd5b8235612d0f81612aee565b946020939093013593505050565b60008060408385031215612d3057600080fd5b50508035926020909101359150565b600080600060608486031215612d5457600080fd5b505081359360208301359350604090920135919050565b600181811c90821680612d7f57607f821691505b6020821081036112bb57634e487b7160e01b600052602260045260246000fd5b6020808252600e908201526d37b7363ca6b0b734b332b9ba32b960911b604082015260600190565b601f82111561287757600081815260208120601f850160051c81016020861015612dee5750805b601f850160051c820191505b81811015612e0d57828155600101612dfa565b505050505050565b815167ffffffffffffffff811115612e2f57612e2f612b23565b612e4381612e3d8454612d6b565b84612dc7565b602080601f831160018114612e785760008415612e605750858301515b600019600386901b1c1916600185901b178555612e0d565b600085815260208120601f198616915b82811015612ea757888601518255948401946001909101908401612e88565b5085821015612ec55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215612ee757600080fd5b815161129281612aee565b600060208284031215612f0457600080fd5b815167ffffffffffffffff811115612f1b57600080fd5b8201601f81018413612f2c57600080fd5b8051612f3a612bb182612b6a565b818152856020838501011115612f4f57600080fd5b612f60826020830160208601612a97565b95945050505050565b605b60f81b815260008351612f85816001850160208801612a97565b6102e960f51b6001918401918201528351612fa7816003840160208801612a97565b64204661726d60d81b60039290910191820152600801949350505050565b60008251612fd7818460208701612a97565b9190910192915050565b60008154612fee81612d6b565b80855260206001838116801561300b576001811461302557613053565b60ff1985168884015283151560051b880183019550613053565b866000528260002060005b8581101561304b5781548a8201860152908301908401613030565b890184019650505b505050505092915050565b60e08152600061307160e083018a612fe1565b8281036020840152613083818a612fe1565b6001600160a01b039889166040850152968816606084015250509285166080840152931660a082015260c0019190915292915050565b6020808252600890820152671bdb9b1e54d3d55360c21b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176116ba576116ba613112565b634e487b7160e01b600052601260045260246000fd5b6000826131645761316461313f565b500490565b818103818111156116ba576116ba613112565b60006020828403121561318e57600080fd5b5051919050565b6020808252601c908201527f696e73756666696369656e74207061796f75742062616c616e63652e00000000604082015260600190565b6000600182016131de576131de613112565b5060010190565b6000826131f4576131f461313f565b500690565b808201808211156116ba576116ba613112565b60008161321b5761321b613112565b506000190190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561324b57600080fd5b815161129281612c7856fea2646970667358221220ac16319c829e26560328a452b7cdeddd83167443822ace11593d91c0c483c28364736f6c63430008110033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.