BNB Price: $708.85 (-2.26%)
Gas: 1 GWei
 
Transaction Hash
Method
Block
From
To
Enable Anticipat...442649152024-11-23 15:25:1121 days ago1732375511IN
0x9Cab6138...E348CC050
0.00246664 BNB0.000374471
Enable Anticipat...440910442024-11-17 14:31:1627 days ago1731853876IN
0x9Cab6138...E348CC050
0.00245706 BNB0.000141423
Anticipate438028972024-11-07 14:23:0537 days ago1730989385IN
0x9Cab6138...E348CC050
0 BNB0.00102473
Anticipate392893282024-06-03 12:22:12194 days ago1717417332IN
0x9Cab6138...E348CC050
0 BNB0.001099833
Withdraw Deposit388238432024-05-18 7:26:52211 days ago1716017212IN
0x9Cab6138...E348CC050
0 BNB0.000275441
Withdraw Earning...388238382024-05-18 7:26:37211 days ago1716017197IN
0x9Cab6138...E348CC050
0 BNB0.000321581
Deposit377905052024-04-12 8:38:25246 days ago1712911105IN
0x9Cab6138...E348CC050
0.000367 BNB0.000418921
Deposit377141582024-04-09 16:53:42249 days ago1712681622IN
0x9Cab6138...E348CC050
0.005 BNB0.000406871
Enable Anticipat...377141292024-04-09 16:52:15249 days ago1712681535IN
0x9Cab6138...E348CC050
0.008963 BNB0.000374471
Enable Anticipat...377134612024-04-09 16:18:51249 days ago1712679531IN
0x9Cab6138...E348CC050
0.008847 BNB0.001123433
Anticipate375461922024-04-03 20:39:39255 days ago1712176779IN
0x9Cab6138...E348CC050
0 BNB0.000362211
Withdraw Deposit374957482024-04-02 2:32:15257 days ago1712025135IN
0x9Cab6138...E348CC050
0 BNB0.00031
Anticipate374957102024-04-02 2:30:21257 days ago1712025021IN
0x9Cab6138...E348CC050
0 BNB0.000347131
Deposit374956682024-04-02 2:28:15257 days ago1712024895IN
0x9Cab6138...E348CC050
0.02 BNB0.000436761
Withdraw Deposit369195892024-03-13 1:13:48277 days ago1710292428IN
0x9Cab6138...E348CC050
0 BNB0.000411283
Anticipate369195782024-03-13 1:13:15277 days ago1710292395IN
0x9Cab6138...E348CC050
0 BNB0.001021173
Deposit369194952024-03-13 1:09:06277 days ago1710292146IN
0x9Cab6138...E348CC050
0.02 BNB0.001227633
Anticipate365903202024-03-01 14:20:29288 days ago1709302829IN
0x9Cab6138...E348CC050
0 BNB0.001011033
Anticipate359095472024-02-06 21:54:47312 days ago1707256487IN
0x9Cab6138...E348CC050
0 BNB0.000997823
Anticipate350785332024-01-08 23:55:54341 days ago1704758154IN
0x9Cab6138...E348CC050
0 BNB0.001003853
Anticipate350785032024-01-08 23:54:24341 days ago1704758064IN
0x9Cab6138...E348CC050
0 BNB0.000210253
Anticipate342032502023-12-09 12:24:15371 days ago1702124655IN
0x9Cab6138...E348CC050
0 BNB0.001119563
Withdraw Deposit336988432023-11-21 22:50:13389 days ago1700607013IN
0x9Cab6138...E348CC050
0 BNB0.000339483
Deposit332471292023-11-06 4:57:44405 days ago1699246664IN
0x9Cab6138...E348CC050
0.0001 BNB0.001185613
Deposit332471202023-11-06 4:57:17405 days ago1699246637IN
0x9Cab6138...E348CC050
0.001 BNB0.001222563
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
444499092024-11-30 1:35:3815 days ago1732930538
0x9Cab6138...E348CC050
0.00050067 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00000257 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00000644 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00000644 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00000644 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00005157 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00000001 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.0000905 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.0000905 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.0000905 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00199104 BNB
444498752024-11-30 1:33:5615 days ago1732930436
0x9Cab6138...E348CC050
0.00006977 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00000276 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00000692 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00000692 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00000692 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00005537 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00004769 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00004769 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00004769 BNB
444498582024-11-30 1:33:0515 days ago1732930385
0x9Cab6138...E348CC050
0.00953901 BNB
444498282024-11-30 1:31:3515 days ago1732930295
0x9Cab6138...E348CC050
0.00004552 BNB
442649152024-11-23 15:25:1121 days ago1732375511
0x9Cab6138...E348CC050
0.00000797 BNB
442649152024-11-23 15:25:1121 days ago1732375511
0x9Cab6138...E348CC050
0.00001992 BNB
442649152024-11-23 15:25:1121 days ago1732375511
0x9Cab6138...E348CC050
0.00001992 BNB
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Employer

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 2000000 runs

Other Settings:
byzantium EvmVersion
File 1 of 2 : Employer.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ITimeToken.sol";

/**
 * @title TIME Token Employer contract
 * @dev Smart contract used to model the first Use Case for TIME Token - The Employer. It pays some interest over the native cryptocurrency deposited from investors
 **/
contract Employer {

    bool private _isOperationLocked;

    address public constant DEVELOPER_ADDRESS = 0x731591207791A93fB0Ec481186fb086E16A7d6D0;
    address public immutable TIME_TOKEN_ADDRESS;

    uint256 public constant D = 10**18;
    uint256 public constant FACTOR = 10**18;
    uint256 public immutable FIRST_BLOCK;
    uint256 public immutable ONE_YEAR;
    uint256 public availableNative;
    uint256 public currentDepositedNative;
    uint256 public totalAnticipatedTime;
    uint256 public totalBurnedTime;
    uint256 public totalDepositedNative;
    uint256 public totalDepositedTime;
    uint256 public totalEarnedNative;
    uint256 public totalTimeSaved;
    
    mapping (address => bool) public anticipationEnabled;

    mapping (address => uint256) public deposited;
    mapping (address => uint256) public earned;
    mapping (address => uint256) public lastBlock;
    mapping (address => uint256) public remainingTime;

    constructor(address timeTokenAddress_) {
        FIRST_BLOCK = block.number;
        TIME_TOKEN_ADDRESS = timeTokenAddress_;
        ONE_YEAR = ITimeToken(timeTokenAddress_).TIME_BASE_LIQUIDITY() * 52;
    }

    /**
     * @dev Implement security to avoid reentrancy attacks
     **/
    modifier nonReentrant() {
        require(!_isOperationLocked, "Operation is locked");
        _isOperationLocked = true;
        _;
        _isOperationLocked = false;
	}
    
    /**
     * @dev Update the blocks from caller (msg.sender), contract address, and burn TIME tokens accordingly. It also extracts ETH from TIME contract, compounds and transfer earnings to depositants
     **/
    modifier update(bool mustCompound) {
        if (lastBlock[address(this)] == 0 && block.number != 0)
            lastBlock[address(this)] = block.number;
        if ((lastBlock[msg.sender] == 0 && block.number != 0) || remainingTime[msg.sender] == 0)
            lastBlock[msg.sender] = block.number;
        uint256 timeToBurn = (block.number - lastBlock[address(this)]) * D;
        uint256 timeToBurnDepositant = (block.number - lastBlock[msg.sender]) * D;
        earned[msg.sender] += queryEarnings(msg.sender);
        _;
        if (mustCompound)
            _compoundDepositantEarnings(msg.sender);
        else
            _transferDepositantEarnings(msg.sender);
        ITimeToken timeToken = ITimeToken(TIME_TOKEN_ADDRESS);
        _earnInterestAndAllocate(timeToken);
        if (timeToBurn > remainingTime[address(this)])
            timeToBurn = remainingTime[address(this)];
        if (timeToBurnDepositant > remainingTime[msg.sender])
            timeToBurnDepositant = remainingTime[msg.sender];
        if (timeToBurn > 0)
            _burnTime(timeToken, address(this), timeToBurn);
        if (timeToBurnDepositant > 0)
            _burnTime(timeToken, msg.sender, timeToBurnDepositant);
        lastBlock[address(this)] = block.number;
        lastBlock[msg.sender] = block.number;
    }

    fallback() external payable {
        require(msg.data.length == 0);
    }

    receive() external payable {
        if (msg.sender != TIME_TOKEN_ADDRESS) {
            require(msg.value > 0, "Please deposit some amount");
            availableNative += msg.value;
        }
    }

    /**
     * @dev Common function to anticipate gains earned from investments from deposited amount
     * @param timeAmount TIME token amount used to anticipate the earnings in terms of blocks
     **/
    function _anticipateEarnings(uint256 timeAmount) private {
        earned[msg.sender] += queryAnticipatedEarnings(msg.sender, timeAmount);
        totalAnticipatedTime += timeAmount;
        remainingTime[address(this)] += timeAmount;
    }

    /**
     * @dev Burn TIME according to the amount set from selected depositant
     * @param timeToken The instance of TIME Token contract
     * @param depositant Address of depositant account
     * @param amount Amount to be burned
     **/
    function _burnTime(ITimeToken timeToken, address depositant, uint256 amount) private {
        if (amount > timeToken.balanceOf(address(this)))
            amount = timeToken.balanceOf(address(this));
        try timeToken.burn(amount) {
            totalBurnedTime += amount;
            remainingTime[depositant] -= amount;
        } catch {
            revert("Unable to burn TIME");
        }
    }

    /**
     * @dev Claim the withdrawable amount earned from the TIME Community Pool
     * @param timeToken The instance of TIME Token contract
     * @return earnings The amount earned from TIME Token Community Pool
     **/
    function _claimEarningsFromTime(ITimeToken timeToken) private returns (uint256 earnings) {
        uint256 currentBalance = address(this).balance;
        if (timeToken.withdrawableShareBalance(address(this)) > 0) {
            try timeToken.withdrawShare() {
                earnings = (address(this).balance - currentBalance);
                _payComission(earnings / 2);
                earnings /= 2;
                return earnings;
            } catch {
                return earnings;
            }
        } else {
            return earnings;
        }
    }

    /**
     * @dev Compound earned amount from selected depositant
     * @param depositant Address of depositant account
     **/
    function _compoundDepositantEarnings(address depositant) private {
        if (earned[depositant] > 0) {
            require(availableNative >= earned[depositant], "Not enough amount to transfer");
            availableNative -= earned[depositant];
            deposited[depositant] += earned[depositant];
            currentDepositedNative += earned[depositant];
            earned[depositant] = 0;
        }        
    }

    /**
     * @dev Claim earnings from TIME contract and buy 10% of them in TIME tokens 
     * @param timeToken The instance of TIME Token contract
     **/
    function _earnInterestAndAllocate(ITimeToken timeToken) private {
        uint256 earnedNative = _claimEarningsFromTime(timeToken);
        totalEarnedNative += earnedNative;
        _saveTime(timeToken, earnedNative / 10);
        availableNative += (earnedNative - (earnedNative / 10));
    }

    /**
     * @notice Called when need to pay comission for miner (block.coinbase) and developer
     * @param comissionAmount The total comission amount in ETH which will be paid
    **/
    function _payComission(uint256 comissionAmount) private {
        if (comissionAmount > 0) {
            uint256 share = comissionAmount / 4;
            _saveTime(ITimeToken(TIME_TOKEN_ADDRESS), share);
            payable(DEVELOPER_ADDRESS).transfer(share);
            availableNative += share;
            totalEarnedNative += share;
            if (block.coinbase == address(0))
                payable(DEVELOPER_ADDRESS).transfer(share);
            else
                payable(block.coinbase).transfer(share);
        }
    }

    /**
     * @dev Buy (save) TIME tokens from the TIME Token contract and update the amount to be burned
     * @param timeToken The instance of TIME Token contract
     * @param amountToSave Amount to be bought
     **/
    function _saveTime(ITimeToken timeToken, uint256 amountToSave) private {
        if (amountToSave > 0) {
            require(address(this).balance >= amountToSave, "Not enough amount to save TIME");
            uint256 currentTime = timeToken.balanceOf(address(this));
            try timeToken.saveTime{value: amountToSave}() {
                uint256 timeSaved = (timeToken.balanceOf(address(this)) - currentTime);
                remainingTime[address(this)] += timeSaved;
                totalTimeSaved += timeSaved;
            } catch { 
                revert("Not able to save TIME");
            }
        }
    }

    /**
     * @dev Withdraw all available earnings to the depositant address
     * @param depositant Address of depositant account
     **/
    function _transferDepositantEarnings(address depositant) private {
        if (earned[depositant] > 0) {
            require(availableNative >= earned[depositant], "Not enough amount to transfer");
            availableNative -= earned[depositant];
            payable(depositant).transfer(earned[depositant]);
            earned[depositant] = 0;
        }
    }

    /**
     * @dev Withdraw all deposited amount to the depositant address and transfer the deposited TIME from depositant to the Employer account
     **/
    function _withdraw() private {
        require(deposited[msg.sender] > 0, "Depositant does not have any amount to withdraw");
        require(currentDepositedNative >= deposited[msg.sender], "Not enough in contract to withdraw");
        remainingTime[address(this)] += remainingTime[msg.sender];
        remainingTime[msg.sender] = 0;
        currentDepositedNative -= deposited[msg.sender];
        payable(msg.sender).transfer(deposited[msg.sender]);
        deposited[msg.sender] = 0;       
    }

    /**
     * @dev Deposit only TIME in order to anticipate interest over previous deposited ETH
     * @notice Pre-condition: the depositant must have previous deposited ETH and also should approve (allow to spend) the TIME tokens to deposit. Anticipation is mandatory in this case
     * @param timeAmount The amount in TIME an investor should deposit to anticipate
     **/
    function anticipate(uint256 timeAmount) public payable nonReentrant update(false) {
        require(deposited[msg.sender] > 0, "Depositant does not have any amount to anticipate");
        require(timeAmount > 0, "Please deposit some TIME amount");
        ITimeToken timeToken = ITimeToken(TIME_TOKEN_ADDRESS);
        require(timeToken.allowance(msg.sender, address(this)) >= timeAmount, "Should allow TIME to be spent");
        try timeToken.transferFrom(msg.sender, address(this), timeAmount) {
            totalDepositedTime += timeAmount;
            _anticipateEarnings(timeAmount);
        } catch {
            revert("Problem when transferring TIME");
        }
    }      

    /**
     * @dev Calculate the anticipation fee an investor needs to pay in order to anticipate TIME Tokens in the Employer contract
     * @return fee The fee amount calculated
     **/
    function anticipationFee() public view returns (uint256) {
        return (ITimeToken(TIME_TOKEN_ADDRESS).fee() * 11);
    }

    /**
     * @dev Compound available earnings into the depositant account
     * @notice Pre-condition: the depositant should approve (allow to spend) the TIME tokens to deposit. Also, if they want to anticipate yield, they must enabled anticipation before the function call
     * @param timeAmount (Optional. Can be zero) The amount of TIME Tokens an investor wants to continue receiveing or anticipating earnings 
     * @param mustAnticipateTime Informs whether an investor wants to anticipate earnings to be compounded
     **/
    function compound(uint256 timeAmount, bool mustAnticipateTime) public nonReentrant update(true) {
        require(deposited[msg.sender] > 0, "Depositant does not have any amount to compound");
        if (mustAnticipateTime) 
            require(anticipationEnabled[msg.sender], "Depositant is not enabled to anticipate TIME");
        if (timeAmount > 0) {
            ITimeToken timeToken = ITimeToken(TIME_TOKEN_ADDRESS);
            require(timeToken.allowance(msg.sender, address(this)) >= timeAmount, "Should allow TIME to be spent");
            try timeToken.transferFrom(msg.sender, address(this), timeAmount) {
                totalDepositedTime += timeAmount;
                if (mustAnticipateTime) {
                    _anticipateEarnings(timeAmount);
                } else {
                    remainingTime[msg.sender] += timeAmount;               
                }
            } catch {
                revert("Problem when transferring TIME");
            }
        }
    }

    /**
     * @dev Deposit ETH and TIME in order to earn interest over them
     * @notice Pre-condition: the depositant should approve (allow to spend) the TIME tokens to deposit. Also, if they want to anticipate yield, they must enabled anticipation before the function call
     * @param timeAmount The amount in TIME an investor should deposit
     * @param mustAnticipateTime Informs if the depositant wants to anticipate the yield or not
     **/
    function deposit(uint256 timeAmount, bool mustAnticipateTime) public payable nonReentrant update(false) {
        require(msg.value > 0, "Please deposit some amount");
        require(timeAmount > 0, "Please deposit some TIME amount");
        if (mustAnticipateTime)
            require(anticipationEnabled[msg.sender], "Depositant is not enabled to anticipate TIME");
        ITimeToken timeToken = ITimeToken(TIME_TOKEN_ADDRESS);
        require(timeToken.allowance(msg.sender, address(this)) >= timeAmount, "Should allow TIME to be spent");

        uint256 comission = msg.value / 50;
        uint256 depositAmount = msg.value - comission;
        deposited[msg.sender] += depositAmount;
        currentDepositedNative += depositAmount;
        totalDepositedNative += msg.value;
        try timeToken.transferFrom(msg.sender, address(this), timeAmount) {
            totalDepositedTime += timeAmount;
            if (mustAnticipateTime) {
                _anticipateEarnings(timeAmount);
            } else {
                remainingTime[msg.sender] += timeAmount;               
            }
            _payComission(comission);
        } catch {
            revert("Problem when transferring TIME");
        }
    }

    /**
     * @dev Public call for earning interest for Employer (if it has any to receive)
     **/
    function earn() public nonReentrant {
        _earnInterestAndAllocate(ITimeToken(TIME_TOKEN_ADDRESS));
    }

    /**
     * @dev Enable an investor to anticipate yields using TIME tokens
     **/
    function enableAnticipation() public payable nonReentrant update(false) {
        require(!anticipationEnabled[msg.sender], "Address is already enabled for TIME anticipation");
        uint256 fee = ITimeToken(TIME_TOKEN_ADDRESS).fee() * 10;
        require(msg.value >= fee, "Please provide the enough fee amount to enable TIME anticipation");
        uint256 comission = fee / 5;
        _payComission(comission);
        totalEarnedNative += msg.value;
        availableNative += (msg.value - comission);
        anticipationEnabled[msg.sender] = true;
    }

    /**
     * @dev Inform the current Return Of Investment the Employer contract is giving
     * @return roi The current amount returned to investors
     **/
    function getCurrentROI() public view returns (uint256) {
        if (availableNative == 0)
            return 0;
        if (currentDepositedNative == 0)
            return 10**50;
        return ((availableNative * FACTOR) / currentDepositedNative);
    }

    /**
     * @dev Inform the current Return Of Investment per Block the Employer contract is giving
     * @return roi The current amount per block returned to investors
     **/
    function getCurrentROIPerBlock() public view returns (uint256) {
        return ((getCurrentROI() * FACTOR) / ONE_YEAR);
    }

    /**
     * @dev Inform the historical Return Of Investment the Employer contract is giving
     * @return roi The historical amount returned to investors
     **/
    function getROI() public view returns (uint256) {
        if (totalEarnedNative == 0)
            return 0;
        if (totalDepositedNative == 0)
            return 10**50;
        return ((totalEarnedNative * FACTOR) / totalDepositedNative); 
    }

    /**
     * @dev Inform the historical Return Of Investment per Block the Employer contract is giving
     * @return roi The historical amount per block returned to investors
     **/
    function getROIPerBlock() public view returns (uint256) {
        return ((getROI() * FACTOR) / ONE_YEAR);
    }

    /**
     * @dev Inform the earnings an investor can anticipate (without waiting for a given time) according to the informed TIME amount
     * @param depositant Address of the depositant account
     * @param anticipatedTime Amount of TIME informed by a depositant as anticipation
     * @return earnings Amount a depositant can anticipate
     **/
    function queryAnticipatedEarnings(address depositant, uint256 anticipatedTime) public view returns (uint256) {
        return ((availableNative * anticipatedTime * deposited[depositant]) / ((ONE_YEAR * currentDepositedNative) + 1));
    }

    /**
     * @dev Inform the earnings an investor can currently receive
     * @param depositant Address of the depositant account
     * @return earnings Amount a depositant can receive
     **/
    function queryEarnings(address depositant) public view returns (uint256) {
        uint256 numberOfBlocks = (block.number - lastBlock[depositant]) * D;
        if (numberOfBlocks <= remainingTime[depositant]) {       
            return ((availableNative * numberOfBlocks * deposited[depositant]) / ((ONE_YEAR * currentDepositedNative) + 1));
        } else {
            return ((availableNative * remainingTime[depositant] * deposited[depositant]) / ((ONE_YEAR * currentDepositedNative) + 1));
        }
    }

    /**
     * @dev Withdraw earnings (only) of a depositant (msg.sender)
     * @notice All functions are in modifiers. It only checks if the depositant has earning something
     **/
    function withdrawEarnings() public nonReentrant update(false) {
        require(earned[msg.sender] > 0, "Depositant does not have any earnings to withdraw");
    }

    /**
     * @dev Withdraw all deposited values of a depositant (msg.sender)
     **/
    function withdrawDeposit() public nonReentrant update(false) {
        _withdraw();
    }

    /**
     * @dev Withdraw all deposited values of a depositant (msg.sender) without any check for earnings (emergency)
     **/
    function withdrawDepositEmergency() public nonReentrant {
        _withdraw();
    }
}

File 2 of 2 : ITimeToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ITimeToken {
    function DEVELOPER_ADDRESS() external returns (address);
    function BASE_FEE() external returns (uint256);
    function COMISSION_RATE() external returns (uint256);
    function SHARE_RATE() external returns (uint256);
    function TIME_BASE_LIQUIDITY() external returns (uint256);
    function TIME_BASE_FEE() external returns (uint256);
    function TOLERANCE() external returns (uint256);
    function dividendPerToken() external returns (uint256);
    function firstBlock() external returns (uint256);
    function liquidityFactorNative() external returns (uint256);
    function liquidityFactorTime() external returns (uint256);
    function numberOfHolders() external returns (uint256);
    function numberOfMiners() external returns (uint256);
    function sharedBalance() external returns (uint256);
    function poolBalance() external returns (uint256);
    function totalMinted() external returns (uint256);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function burn(uint256 amount) external;
    function transfer(address to, uint256 amount) external returns (bool success);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool success);
    function averageMiningRate() external view returns (uint256);
    function donateEth() external payable;
    function enableMining() external payable;
    function enableMiningWithTimeToken() external;
    function fee() external view returns (uint256);
    function feeInTime() external view returns (uint256);
    function mining() external;
    function saveTime() external payable returns (bool success);
    function spendTime(uint256 timeAmount) external returns (bool success);
    function swapPriceNative(uint256 amountNative) external view returns (uint256);
    function swapPriceTimeInverse(uint256 amountTime) external view returns (uint256);
    function accountShareBalance(address account) external view returns (uint256);
    function withdrawableShareBalance(address account) external view returns (uint256);
    function withdrawShare() external;
}

Settings
{
  "evmVersion": "byzantium",
  "optimizer": {
    "enabled": true,
    "runs": 2000000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"timeTokenAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"D","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEVELOPER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIRST_BLOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_YEAR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeAmount","type":"uint256"}],"name":"anticipate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"anticipationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"anticipationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeAmount","type":"uint256"},{"internalType":"bool","name":"mustAnticipateTime","type":"bool"}],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentDepositedNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeAmount","type":"uint256"},{"internalType":"bool","name":"mustAnticipateTime","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAnticipation","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getCurrentROI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentROIPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getROI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getROIPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"depositant","type":"address"},{"internalType":"uint256","name":"anticipatedTime","type":"uint256"}],"name":"queryAnticipatedEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"depositant","type":"address"}],"name":"queryEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"remainingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAnticipatedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDepositedNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDepositedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEarnedNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTimeSaved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDepositEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b5060405162003963380380620039638339810160408190526200003491620000f9565b4360a052600160a060020a0381166c010000000000000000000000008102608052604080517fc3497b09000000000000000000000000000000000000000000000000000000008152905163c3497b09916004808201926020929091908290030181600087803b158015620000a757600080fd5b505af1158015620000bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e2919062000129565b620000ef90603462000142565b60c0525062000187565b6000602082840312156200010b578081fd5b8151600160a060020a038116811462000122578182fd5b9392505050565b6000602082840312156200013b578081fd5b5051919050565b600081600019048311821515161562000182577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b500290565b6080516c01000000000000000000000000900460a05160c05161372c62000237600039600081816108b701528181610aaf01528181610b3701528181610bc60152818161216b015261225d015260006108db015260008181610256015281816107cf0152818161096801528181610e3a01528181611078015281816113220152818161175b01528181611c2201528181611e600152818161206e015281816122080152612a8e015261372c6000f3fe608060405260043610610239576000357c0100000000000000000000000000000000000000000000000000000000900480638576ea3a1161013a578063b841a3e8116100cd578063cebca0601161009c578063d3bff50c11610081578063d3bff50c146105c5578063d90bb24c146105e5578063e6f2a029146105fa576102d8565b8063cebca0601461059b578063d389800f146105b0576102d8565b8063b841a3e81461053e578063bd94319c14610553578063bfde682c14610568578063cb13cddb1461057b576102d8565b80639a408321116101095780639a408321146104ec578063aa436105146104ff578063aefb79f914610514578063b73c6ce914610529576102d8565b80638576ea3a146104755780638d88f48d146104a257806393b8840e146104b7578063952ca92c146104cc576102d8565b806335815b95116101cd578063454e66c81161019c57806350a8242b1161018157806350a8242b1461042d578063561acaf01461044d5780637d523aad14610455576102d8565b8063454e66c8146103f6578063456ca60c14610418576102d8565b806335815b951461032e578063377d9088146103ac57806337de6e20146103c15780634306cc3f146103d6576102d8565b806316d3bfbb1161020957806316d3bfbb14610358578063249b16de1461036d578063269d7b051461038257806332f23fe114610397576102d8565b80628cc262146102e35780630d814d04146103195780630f529ba21461032e578063117df08814610343576102d8565b366102d8573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102d657600034116102be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613474565b60405180910390fd5b34600160008282546102d09190613614565b90915550505b005b36156102d657600080fd5b3480156102ef57600080fd5b506103036102fe366004612ff1565b61060f565b604051610310919061360b565b60405180910390f35b34801561032557600080fd5b50610303610621565b34801561033a57600080fd5b50610303610627565b34801561034f57600080fd5b506102d6610633565b34801561036457600080fd5b506103036108b5565b34801561037957600080fd5b506103036108d9565b34801561038e57600080fd5b506103036108fd565b3480156103a357600080fd5b5061030361095e565b3480156103b857600080fd5b50610303610964565b3480156103cd57600080fd5b50610303610a2b565b3480156103e257600080fd5b506103036103f1366004612ff1565b610a31565b34801561040257600080fd5b5061040b610baa565b60405161031091906130af565b34801561042457600080fd5b50610303610bc2565b34801561043957600080fd5b506102d6610448366004613080565b610c00565b6102d6611160565b34801561046157600080fd5b50610303610470366004612ff1565b6114ba565b34801561048157600080fd5b50610495610490366004612ff1565b6114cc565b6040516103109190613128565b3480156104ae57600080fd5b506103036114e1565b3480156104c357600080fd5b506103036114e7565b3480156104d857600080fd5b506103036104e7366004612ff1565b6114ed565b6102d66104fa366004613080565b6114ff565b34801561050b57600080fd5b50610303611a09565b34801561052057600080fd5b50610303611a0f565b34801561053557600080fd5b506102d6611a60565b34801561054a57600080fd5b50610303611c1a565b34801561055f57600080fd5b5061040b611c20565b6102d6610576366004613050565b611c44565b34801561058757600080fd5b50610303610596366004612ff1565b612155565b3480156105a757600080fd5b50610303612167565b3480156105bc57600080fd5b506102d661219b565b3480156105d157600080fd5b506103036105e036600461300b565b612256565b3480156105f157600080fd5b506103036122e0565b34801561060657600080fd5b506102d66122e6565b600b6020526000908152604090205481565b60065481565b670de0b6b3a764000081565b60005460ff1615610670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c60205260408120541580156106b457504315155b156106cc57306000908152600c602052604090204390555b336000908152600c60205260409020541580156106e857504315155b806107005750336000908152600d6020526040902054155b1561071857336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a76400009061073c90436136a2565b6107469190613665565b336000908152600c602052604081205491925090670de0b6b3a76400009061076e90436136a2565b6107789190613665565b905061078333610a31565b336000908152600b6020526040812080549091906107a2908490613614565b909155506107b09050612352565b82156107c4576107bf3361248f565b6107cd565b6107cd33612607565b7f00000000000000000000000000000000000000000000000000000000000000006107f781612746565b306000908152600d602052604090205483111561082157306000908152600d602052604090205492505b336000908152600d602052604090205482111561084b57336000908152600d602052604090205491505b821561085c5761085c8130856127ae565b811561086d5761086d8133846127ae565b5050306000908152600c602052604080822043908190553383529082205580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600754600014156109125750600061095b565b600554610935575074446c3b15f9926687d2c40534fdb56400000000000061095b565b600554670de0b6b3a764000060075461094e9190613665565b610958919061362c565b90505b90565b60025481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156109e857600080fd5b505afa1580156109fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a209190613068565b61095890600b613665565b60085481565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c60205260408120548190670de0b6b3a764000090610a6d90436136a2565b610a779190613665565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d60205260409020549091508111610b2e57600254610ad3907f0000000000000000000000000000000000000000000000000000000000000000613665565b610ade906001613614565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600a6020526040902054600154610b12908490613665565b610b1c9190613665565b610b26919061362c565b915050610ba5565b600254610b5b907f0000000000000000000000000000000000000000000000000000000000000000613665565b610b66906001613614565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600a6020908152604080832054600d90925290912054600154610b129190613665565b919050565b73731591207791a93fb0ec481186fb086e16a7d6d081565b60007f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610bf66108fd565b61094e9190613665565b60005460ff1615610c3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081178255308252600c602052604090912054158015610c8457504315155b15610c9c57306000908152600c602052604090204390555b336000908152600c6020526040902054158015610cb857504315155b80610cd05750336000908152600d6020526040902054155b15610ce857336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a764000090610d0c90436136a2565b610d169190613665565b336000908152600c602052604081205491925090670de0b6b3a764000090610d3e90436136a2565b610d489190613665565b9050610d5333610a31565b336000908152600b602052604081208054909190610d72908490613614565b9091555050336000908152600a6020526040902054610dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613326565b8315610e0c573360009081526009602052604090205460ff16610e0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906131c7565b8415611059576040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000090869073ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90610e8a90339030906004016130d0565b60206040518083038186803b158015610ea257600080fd5b505afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613068565b1015610f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132b8565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906323b872dd90610f6890339030908b906004016130f7565b602060405180830381600087803b158015610f8257600080fd5b505af1925050508015610fd0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610fcd91810190613034565b60015b611006576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613576565b5085600660008282546110199190613614565b909155505084156110325761102d86612a06565b611057565b336000908152600d602052604081208054889290611051908490613614565b90915550505b505b821561106d576110683361248f565b611076565b61107633612607565b7f00000000000000000000000000000000000000000000000000000000000000006110a081612746565b306000908152600d60205260409020548311156110ca57306000908152600d602052604090205492505b336000908152600d60205260409020548211156110f457336000908152600d602052604090205491505b8215611105576111058130856127ae565b8115611116576111168133846127ae565b5050306000908152600c602052604080822043908190553383529082205580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b60005460ff161561119d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c60205260408120541580156111e157504315155b156111f957306000908152600c602052604090204390555b336000908152600c602052604090205415801561121557504315155b8061122d5750336000908152600d6020526040902054155b1561124557336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a76400009061126990436136a2565b6112739190613665565b336000908152600c602052604081205491925090670de0b6b3a76400009061129b90436136a2565b6112a59190613665565b90506112b033610a31565b336000908152600b6020526040812080549091906112cf908490613614565b90915550503360009081526009602052604090205460ff161561131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906134ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190613068565b6113e590600a613665565b905080341015611421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906135ad565b600061142e60058361362c565b905061143981612a74565b346007600082825461144b9190613614565b9091555061145b905081346136a2565b6001600082825461146c9190613614565b909155505033600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505082156107c4576107bf3361248f565b600d6020526000908152604090205481565b60096020526000908152604090205460ff1681565b60075481565b60045481565b600c6020526000908152604090205481565b60005460ff161561153c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c602052604081205415801561158057504315155b1561159857306000908152600c602052604090204390555b336000908152600c60205260409020541580156115b457504315155b806115cc5750336000908152600d6020526040902054155b156115e457336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a76400009061160890436136a2565b6116129190613665565b336000908152600c602052604081205491925090670de0b6b3a76400009061163a90436136a2565b6116449190613665565b905061164f33610a31565b336000908152600b60205260408120805490919061166e908490613614565b9091555050346116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613474565b600085116116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613508565b8315611733573360009081526009602052604090205460ff16611733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906131c7565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000090869073ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e906117ab90339030906004016130d0565b60206040518083038186803b1580156117c357600080fd5b505afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190613068565b1015611833576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132b8565b600061184060323461362c565b9050600061184e82346136a2565b336000908152600a6020526040812080549293508392909190611872908490613614565b92505081905550806002600082825461188b9190613614565b9250508190555034600560008282546118a49190613614565b90915550506040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906118ff90339030908d906004016130f7565b602060405180830381600087803b15801561191957600080fd5b505af1925050508015611967575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261196491810190613034565b60015b61199d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613576565b5087600660008282546119b09190613614565b909155505086156119c9576119c488612a06565b6119ee565b336000908152600d6020526040812080548a92906119e8908490613614565b90915550505b6119f782612a74565b505050821561106d576110683361248f565b60035481565b600060015460001415611a245750600061095b565b600254611a47575074446c3b15f9926687d2c40534fdb56400000000000061095b565b600254670de0b6b3a764000060015461094e9190613665565b60005460ff1615611a9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c6020526040812054158015611ae157504315155b15611af957306000908152600c602052604090204390555b336000908152600c6020526040902054158015611b1557504315155b80611b2d5750336000908152600d6020526040902054155b15611b4557336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a764000090611b6990436136a2565b611b739190613665565b336000908152600c602052604081205491925090670de0b6b3a764000090611b9b90436136a2565b611ba59190613665565b9050611bb033610a31565b336000908152600b602052604081208054909190611bcf908490613614565b9091555050336000908152600b60205260409020546107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613383565b60015481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1615611c81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c6020526040812054158015611cc557504315155b15611cdd57306000908152600c602052604090204390555b336000908152600c6020526040902054158015611cf957504315155b80611d115750336000908152600d6020526040902054155b15611d2957336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a764000090611d4d90436136a2565b611d579190613665565b336000908152600c602052604081205491925090670de0b6b3a764000090611d7f90436136a2565b611d899190613665565b9050611d9433610a31565b336000908152600b602052604081208054909190611db3908490613614565b9091555050336000908152600a6020526040902054611dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b59061325b565b60008411611e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613508565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000090859073ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90611eb090339030906004016130d0565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f009190613068565b1015611f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132b8565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906323b872dd90611f8e90339030908a906004016130f7565b602060405180830381600087803b158015611fa857600080fd5b505af1925050508015611ff6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611ff391810190613034565b60015b61202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613576565b50846006600082825461203f9190613614565b9091555061204e905085612a06565b5082156120635761205e3361248f565b61206c565b61206c33612607565b7f000000000000000000000000000000000000000000000000000000000000000061209681612746565b306000908152600d60205260409020548311156120c057306000908152600d602052604090205492505b336000908152600d60205260409020548211156120ea57336000908152600d602052604090205491505b82156120fb576120fb8130856127ae565b811561210c5761210c8133846127ae565b5050306000908152600c602052604080822043908190553383529082205580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b600a6020526000908152604090205481565b60007f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610bf6611a0f565b60005460ff16156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561222c7f0000000000000000000000000000000000000000000000000000000000000000612746565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006002547f00000000000000000000000000000000000000000000000000000000000000006122869190613665565b612291906001613614565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600a60205260409020546001546122c5908590613665565b6122cf9190613665565b6122d9919061362c565b9392505050565b60055481565b60005460ff1615612323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561222c5b336000908152600a6020526040902054612398576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906133e0565b336000908152600a602052604090205460025410156123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613133565b336000908152600d60205260408082205430835290822080549192909161240b908490613614565b9091555050336000908152600d60209081526040808320839055600a90915281205460028054919290916124409084906136a2565b9091555050336000818152600a602052604080822054905181156108fc0292818181858888f1935050505015801561247c573d6000803e3d6000fd5b50336000908152600a6020526040812055565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902054156126045773ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902054600154101561251b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613190565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604081205460018054919290916125549084906136a2565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020908152604080832054600a909252822080549192909161259a908490613614565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604081205460028054919290916125d8908490613614565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b60205260408120555b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902054156126045773ffffffffffffffffffffffffffffffffffffffff81166000908152600b60205260409020546001541015612693576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613190565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604081205460018054919290916126cc9084906136a2565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000818152600b602052604080822054905181156108fc0292818181858888f1935050505015801561271e573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152600b6020526040812055565b600061275182612ba2565b905080600760008282546127659190613614565b9091555061277f90508261277a600a8461362c565b612d01565b61278a600a8261362c565b61279490826136a2565b600160008282546127a59190613614565b90915550505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a08231906128009030906004016130af565b60206040518083038186803b15801561281857600080fd5b505afa15801561282c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128509190613068565b8111156128fc576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a08231906128a99030906004016130af565b60206040518083038186803b1580156128c157600080fd5b505afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f99190613068565b90505b6040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906342966c689061294e90849060040161360b565b600060405180830381600087803b15801561296857600080fd5b505af1925050508015612979575060015b6129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b59061353f565b80600460008282546129c19190613614565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600d6020526040812080548392906129fb9084906136a2565b90915550505b505050565b612a103382612256565b336000908152600b602052604081208054909190612a2f908490613614565b925050819055508060036000828254612a489190613614565b9091555050306000908152600d602052604081208054839290612a6c908490613614565b909155505050565b8015612604576000612a8760048361362c565b9050612ab37f000000000000000000000000000000000000000000000000000000000000000082612d01565b60405173731591207791a93fb0ec481186fb086e16a7d6d09082156108fc029083906000818181858888f19350505050158015612af4573d6000803e3d6000fd5b508060016000828254612b079190613614565b925050819055508060076000828254612b209190613614565b909155505041612b715760405173731591207791a93fb0ec481186fb086e16a7d6d09082156108fc029083906000818181858888f19350505050158015612b6b573d6000803e3d6000fd5b50612b9e565b604051419082156108fc029083906000818181858888f19350505050158015612a01573d6000803e3d6000fd5b5050565b6040517f901362bd00000000000000000000000000000000000000000000000000000000815260009030803191839173ffffffffffffffffffffffffffffffffffffffff86169163901362bd91612bfb916004016130af565b60206040518083038186803b158015612c1357600080fd5b505afa158015612c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4b9190613068565b1115612cfb578273ffffffffffffffffffffffffffffffffffffffff1663243496716040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015612cb557600080fd5b505af1925050508015612cc6575060015b612cd05750610ba5565b612cdb8130316136a2565b9150612cf0612ceb60028461362c565b612a74565b610b2660028361362c565b50610ba5565b8015612b9e573031811115612d42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b59061343d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190612d979030906004016130af565b60206040518083038186803b158015612daf57600080fd5b505afa158015612dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de79190613068565b90508273ffffffffffffffffffffffffffffffffffffffff166310e7b9f2836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016020604051808303818588803b158015612e4d57600080fd5b505af193505050508015612e9c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612e9991810190613034565b60015b612ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132ef565b506000818473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f2b91906130af565b60206040518083038186803b158015612f4357600080fd5b505afa158015612f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7b9190613068565b612f8591906136a2565b306000908152600d6020526040812080549293508392909190612fa9908490613614565b925050819055508060086000828254612fc29190613614565b909155505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ba557600080fd5b600060208284031215613002578081fd5b6122d982612fcd565b6000806040838503121561301d578081fd5b61302683612fcd565b946020939093013593505050565b600060208284031215613045578081fd5b81516122d9816136e8565b600060208284031215613061578081fd5b5035919050565b600060208284031215613079578081fd5b5051919050565b60008060408385031215613092578182fd5b8235915060208301356130a4816136e8565b809150509250929050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b901515815260200190565b60208082526022908201527f4e6f7420656e6f75676820696e20636f6e747261637420746f2077697468647260408201527f6177000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e73666572000000604082015260600190565b6020808252602c908201527f4465706f736974616e74206973206e6f7420656e61626c656420746f20616e7460408201527f696369706174652054494d450000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f4f7065726174696f6e206973206c6f636b656400000000000000000000000000604082015260600190565b60208082526031908201527f4465706f736974616e7420646f6573206e6f74206861766520616e7920616d6f60408201527f756e7420746f20616e7469636970617465000000000000000000000000000000606082015260800190565b6020808252601d908201527f53686f756c6420616c6c6f772054494d4520746f206265207370656e74000000604082015260600190565b60208082526015908201527f4e6f742061626c6520746f20736176652054494d450000000000000000000000604082015260600190565b6020808252602f908201527f4465706f736974616e7420646f6573206e6f74206861766520616e7920616d6f60408201527f756e7420746f20636f6d706f756e640000000000000000000000000000000000606082015260800190565b60208082526031908201527f4465706f736974616e7420646f6573206e6f74206861766520616e792065617260408201527f6e696e677320746f207769746864726177000000000000000000000000000000606082015260800190565b6020808252602f908201527f4465706f736974616e7420646f6573206e6f74206861766520616e7920616d6f60408201527f756e7420746f2077697468647261770000000000000000000000000000000000606082015260800190565b6020808252601e908201527f4e6f7420656e6f75676820616d6f756e7420746f20736176652054494d450000604082015260600190565b6020808252601a908201527f506c65617365206465706f73697420736f6d6520616d6f756e74000000000000604082015260600190565b60208082526030908201527f4164647265737320697320616c726561647920656e61626c656420666f72205460408201527f494d4520616e74696369706174696f6e00000000000000000000000000000000606082015260800190565b6020808252601f908201527f506c65617365206465706f73697420736f6d652054494d4520616d6f756e7400604082015260600190565b60208082526013908201527f556e61626c6520746f206275726e2054494d4500000000000000000000000000604082015260600190565b6020808252601e908201527f50726f626c656d207768656e207472616e7366657272696e672054494d450000604082015260600190565b602080825260409082018190527f506c656173652070726f766964652074686520656e6f7567682066656520616d908201527f6f756e7420746f20656e61626c652054494d4520616e74696369706174696f6e606082015260800190565b90815260200190565b60008219821115613627576136276136b9565b500190565b600082613660577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561369d5761369d6136b9565b500290565b6000828210156136b4576136b46136b9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b801515811461260457600080fdfea26469706673582212206d2c1fac4629eff89ef72b9b8f9938e6f2c6313915e84dbb9e04f62b1161b4d464736f6c634300080000330000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b

Deployed Bytecode

0x608060405260043610610239576000357c0100000000000000000000000000000000000000000000000000000000900480638576ea3a1161013a578063b841a3e8116100cd578063cebca0601161009c578063d3bff50c11610081578063d3bff50c146105c5578063d90bb24c146105e5578063e6f2a029146105fa576102d8565b8063cebca0601461059b578063d389800f146105b0576102d8565b8063b841a3e81461053e578063bd94319c14610553578063bfde682c14610568578063cb13cddb1461057b576102d8565b80639a408321116101095780639a408321146104ec578063aa436105146104ff578063aefb79f914610514578063b73c6ce914610529576102d8565b80638576ea3a146104755780638d88f48d146104a257806393b8840e146104b7578063952ca92c146104cc576102d8565b806335815b95116101cd578063454e66c81161019c57806350a8242b1161018157806350a8242b1461042d578063561acaf01461044d5780637d523aad14610455576102d8565b8063454e66c8146103f6578063456ca60c14610418576102d8565b806335815b951461032e578063377d9088146103ac57806337de6e20146103c15780634306cc3f146103d6576102d8565b806316d3bfbb1161020957806316d3bfbb14610358578063249b16de1461036d578063269d7b051461038257806332f23fe114610397576102d8565b80628cc262146102e35780630d814d04146103195780630f529ba21461032e578063117df08814610343576102d8565b366102d8573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b16146102d657600034116102be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613474565b60405180910390fd5b34600160008282546102d09190613614565b90915550505b005b36156102d657600080fd5b3480156102ef57600080fd5b506103036102fe366004612ff1565b61060f565b604051610310919061360b565b60405180910390f35b34801561032557600080fd5b50610303610621565b34801561033a57600080fd5b50610303610627565b34801561034f57600080fd5b506102d6610633565b34801561036457600080fd5b506103036108b5565b34801561037957600080fd5b506103036108d9565b34801561038e57600080fd5b506103036108fd565b3480156103a357600080fd5b5061030361095e565b3480156103b857600080fd5b50610303610964565b3480156103cd57600080fd5b50610303610a2b565b3480156103e257600080fd5b506103036103f1366004612ff1565b610a31565b34801561040257600080fd5b5061040b610baa565b60405161031091906130af565b34801561042457600080fd5b50610303610bc2565b34801561043957600080fd5b506102d6610448366004613080565b610c00565b6102d6611160565b34801561046157600080fd5b50610303610470366004612ff1565b6114ba565b34801561048157600080fd5b50610495610490366004612ff1565b6114cc565b6040516103109190613128565b3480156104ae57600080fd5b506103036114e1565b3480156104c357600080fd5b506103036114e7565b3480156104d857600080fd5b506103036104e7366004612ff1565b6114ed565b6102d66104fa366004613080565b6114ff565b34801561050b57600080fd5b50610303611a09565b34801561052057600080fd5b50610303611a0f565b34801561053557600080fd5b506102d6611a60565b34801561054a57600080fd5b50610303611c1a565b34801561055f57600080fd5b5061040b611c20565b6102d6610576366004613050565b611c44565b34801561058757600080fd5b50610303610596366004612ff1565b612155565b3480156105a757600080fd5b50610303612167565b3480156105bc57600080fd5b506102d661219b565b3480156105d157600080fd5b506103036105e036600461300b565b612256565b3480156105f157600080fd5b506103036122e0565b34801561060657600080fd5b506102d66122e6565b600b6020526000908152604090205481565b60065481565b670de0b6b3a764000081565b60005460ff1615610670576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c60205260408120541580156106b457504315155b156106cc57306000908152600c602052604090204390555b336000908152600c60205260409020541580156106e857504315155b806107005750336000908152600d6020526040902054155b1561071857336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a76400009061073c90436136a2565b6107469190613665565b336000908152600c602052604081205491925090670de0b6b3a76400009061076e90436136a2565b6107789190613665565b905061078333610a31565b336000908152600b6020526040812080549091906107a2908490613614565b909155506107b09050612352565b82156107c4576107bf3361248f565b6107cd565b6107cd33612607565b7f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b6107f781612746565b306000908152600d602052604090205483111561082157306000908152600d602052604090205492505b336000908152600d602052604090205482111561084b57336000908152600d602052604090205491505b821561085c5761085c8130856127ae565b811561086d5761086d8133846127ae565b5050306000908152600c602052604080822043908190553383529082205580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b7f000000000000000000000000000000000000000000089a49213386742400000081565b7f0000000000000000000000000000000000000000000000000000000001a1044b81565b6000600754600014156109125750600061095b565b600554610935575074446c3b15f9926687d2c40534fdb56400000000000061095b565b600554670de0b6b3a764000060075461094e9190613665565b610958919061362c565b90505b90565b60025481565b60007f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b73ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156109e857600080fd5b505afa1580156109fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a209190613068565b61095890600b613665565b60085481565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c60205260408120548190670de0b6b3a764000090610a6d90436136a2565b610a779190613665565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600d60205260409020549091508111610b2e57600254610ad3907f000000000000000000000000000000000000000000089a492133867424000000613665565b610ade906001613614565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600a6020526040902054600154610b12908490613665565b610b1c9190613665565b610b26919061362c565b915050610ba5565b600254610b5b907f000000000000000000000000000000000000000000089a492133867424000000613665565b610b66906001613614565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600a6020908152604080832054600d90925290912054600154610b129190613665565b919050565b73731591207791a93fb0ec481186fb086e16a7d6d081565b60007f000000000000000000000000000000000000000000089a492133867424000000670de0b6b3a7640000610bf66108fd565b61094e9190613665565b60005460ff1615610c3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081178255308252600c602052604090912054158015610c8457504315155b15610c9c57306000908152600c602052604090204390555b336000908152600c6020526040902054158015610cb857504315155b80610cd05750336000908152600d6020526040902054155b15610ce857336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a764000090610d0c90436136a2565b610d169190613665565b336000908152600c602052604081205491925090670de0b6b3a764000090610d3e90436136a2565b610d489190613665565b9050610d5333610a31565b336000908152600b602052604081208054909190610d72908490613614565b9091555050336000908152600a6020526040902054610dbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613326565b8315610e0c573360009081526009602052604090205460ff16610e0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906131c7565b8415611059576040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b90869073ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90610e8a90339030906004016130d0565b60206040518083038186803b158015610ea257600080fd5b505afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190613068565b1015610f12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132b8565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906323b872dd90610f6890339030908b906004016130f7565b602060405180830381600087803b158015610f8257600080fd5b505af1925050508015610fd0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610fcd91810190613034565b60015b611006576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613576565b5085600660008282546110199190613614565b909155505084156110325761102d86612a06565b611057565b336000908152600d602052604081208054889290611051908490613614565b90915550505b505b821561106d576110683361248f565b611076565b61107633612607565b7f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b6110a081612746565b306000908152600d60205260409020548311156110ca57306000908152600d602052604090205492505b336000908152600d60205260409020548211156110f457336000908152600d602052604090205491505b8215611105576111058130856127ae565b8115611116576111168133846127ae565b5050306000908152600c602052604080822043908190553383529082205580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550505050565b60005460ff161561119d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c60205260408120541580156111e157504315155b156111f957306000908152600c602052604090204390555b336000908152600c602052604090205415801561121557504315155b8061122d5750336000908152600d6020526040902054155b1561124557336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a76400009061126990436136a2565b6112739190613665565b336000908152600c602052604081205491925090670de0b6b3a76400009061129b90436136a2565b6112a59190613665565b90506112b033610a31565b336000908152600b6020526040812080549091906112cf908490613614565b90915550503360009081526009602052604090205460ff161561131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906134ab565b60007f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b73ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113da9190613068565b6113e590600a613665565b905080341015611421576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906135ad565b600061142e60058361362c565b905061143981612a74565b346007600082825461144b9190613614565b9091555061145b905081346136a2565b6001600082825461146c9190613614565b909155505033600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505082156107c4576107bf3361248f565b600d6020526000908152604090205481565b60096020526000908152604090205460ff1681565b60075481565b60045481565b600c6020526000908152604090205481565b60005460ff161561153c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c602052604081205415801561158057504315155b1561159857306000908152600c602052604090204390555b336000908152600c60205260409020541580156115b457504315155b806115cc5750336000908152600d6020526040902054155b156115e457336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a76400009061160890436136a2565b6116129190613665565b336000908152600c602052604081205491925090670de0b6b3a76400009061163a90436136a2565b6116449190613665565b905061164f33610a31565b336000908152600b60205260408120805490919061166e908490613614565b9091555050346116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613474565b600085116116e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613508565b8315611733573360009081526009602052604090205460ff16611733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906131c7565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b90869073ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e906117ab90339030906004016130d0565b60206040518083038186803b1580156117c357600080fd5b505afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190613068565b1015611833576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132b8565b600061184060323461362c565b9050600061184e82346136a2565b336000908152600a6020526040812080549293508392909190611872908490613614565b92505081905550806002600082825461188b9190613614565b9250508190555034600560008282546118a49190613614565b90915550506040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906118ff90339030908d906004016130f7565b602060405180830381600087803b15801561191957600080fd5b505af1925050508015611967575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261196491810190613034565b60015b61199d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613576565b5087600660008282546119b09190613614565b909155505086156119c9576119c488612a06565b6119ee565b336000908152600d6020526040812080548a92906119e8908490613614565b90915550505b6119f782612a74565b505050821561106d576110683361248f565b60035481565b600060015460001415611a245750600061095b565b600254611a47575074446c3b15f9926687d2c40534fdb56400000000000061095b565b600254670de0b6b3a764000060015461094e9190613665565b60005460ff1615611a9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c6020526040812054158015611ae157504315155b15611af957306000908152600c602052604090204390555b336000908152600c6020526040902054158015611b1557504315155b80611b2d5750336000908152600d6020526040902054155b15611b4557336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a764000090611b6990436136a2565b611b739190613665565b336000908152600c602052604081205491925090670de0b6b3a764000090611b9b90436136a2565b611ba59190613665565b9050611bb033610a31565b336000908152600b602052604081208054909190611bcf908490613614565b9091555050336000908152600b60205260409020546107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613383565b60015481565b7f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b81565b60005460ff1615611c81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001178155308152600c6020526040812054158015611cc557504315155b15611cdd57306000908152600c602052604090204390555b336000908152600c6020526040902054158015611cf957504315155b80611d115750336000908152600d6020526040902054155b15611d2957336000908152600c602052604090204390555b306000908152600c6020526040812054670de0b6b3a764000090611d4d90436136a2565b611d579190613665565b336000908152600c602052604081205491925090670de0b6b3a764000090611d7f90436136a2565b611d899190613665565b9050611d9433610a31565b336000908152600b602052604081208054909190611db3908490613614565b9091555050336000908152600a6020526040902054611dfe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b59061325b565b60008411611e38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613508565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b90859073ffffffffffffffffffffffffffffffffffffffff83169063dd62ed3e90611eb090339030906004016130d0565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f009190613068565b1015611f38576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132b8565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906323b872dd90611f8e90339030908a906004016130f7565b602060405180830381600087803b158015611fa857600080fd5b505af1925050508015611ff6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611ff391810190613034565b60015b61202c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613576565b50846006600082825461203f9190613614565b9091555061204e905085612a06565b5082156120635761205e3361248f565b61206c565b61206c33612607565b7f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b61209681612746565b306000908152600d60205260409020548311156120c057306000908152600d602052604090205492505b336000908152600d60205260409020548211156120ea57336000908152600d602052604090205491505b82156120fb576120fb8130856127ae565b811561210c5761210c8133846127ae565b5050306000908152600c602052604080822043908190553383529082205580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055505050565b600a6020526000908152604090205481565b60007f000000000000000000000000000000000000000000089a492133867424000000670de0b6b3a7640000610bf6611a0f565b60005460ff16156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561222c7f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b612746565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60006002547f000000000000000000000000000000000000000000089a4921338674240000006122869190613665565b612291906001613614565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600a60205260409020546001546122c5908590613665565b6122cf9190613665565b6122d9919061362c565b9392505050565b60055481565b60005460ff1615612323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561222c5b336000908152600a6020526040902054612398576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906133e0565b336000908152600a602052604090205460025410156123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613133565b336000908152600d60205260408082205430835290822080549192909161240b908490613614565b9091555050336000908152600d60209081526040808320839055600a90915281205460028054919290916124409084906136a2565b9091555050336000818152600a602052604080822054905181156108fc0292818181858888f1935050505015801561247c573d6000803e3d6000fd5b50336000908152600a6020526040812055565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902054156126045773ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902054600154101561251b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613190565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604081205460018054919290916125549084906136a2565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020908152604080832054600a909252822080549192909161259a908490613614565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604081205460028054919290916125d8908490613614565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000908152600b60205260408120555b50565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b6020526040902054156126045773ffffffffffffffffffffffffffffffffffffffff81166000908152600b60205260409020546001541015612693576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b590613190565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602052604081205460018054919290916126cc9084906136a2565b909155505073ffffffffffffffffffffffffffffffffffffffff81166000818152600b602052604080822054905181156108fc0292818181858888f1935050505015801561271e573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152600b6020526040812055565b600061275182612ba2565b905080600760008282546127659190613614565b9091555061277f90508261277a600a8461362c565b612d01565b61278a600a8261362c565b61279490826136a2565b600160008282546127a59190613614565b90915550505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a08231906128009030906004016130af565b60206040518083038186803b15801561281857600080fd5b505afa15801561282c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128509190613068565b8111156128fc576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906370a08231906128a99030906004016130af565b60206040518083038186803b1580156128c157600080fd5b505afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f99190613068565b90505b6040517f42966c6800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906342966c689061294e90849060040161360b565b600060405180830381600087803b15801561296857600080fd5b505af1925050508015612979575060015b6129af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b59061353f565b80600460008282546129c19190613614565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600d6020526040812080548392906129fb9084906136a2565b90915550505b505050565b612a103382612256565b336000908152600b602052604081208054909190612a2f908490613614565b925050819055508060036000828254612a489190613614565b9091555050306000908152600d602052604081208054839290612a6c908490613614565b909155505050565b8015612604576000612a8760048361362c565b9050612ab37f0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b82612d01565b60405173731591207791a93fb0ec481186fb086e16a7d6d09082156108fc029083906000818181858888f19350505050158015612af4573d6000803e3d6000fd5b508060016000828254612b079190613614565b925050819055508060076000828254612b209190613614565b909155505041612b715760405173731591207791a93fb0ec481186fb086e16a7d6d09082156108fc029083906000818181858888f19350505050158015612b6b573d6000803e3d6000fd5b50612b9e565b604051419082156108fc029083906000818181858888f19350505050158015612a01573d6000803e3d6000fd5b5050565b6040517f901362bd00000000000000000000000000000000000000000000000000000000815260009030803191839173ffffffffffffffffffffffffffffffffffffffff86169163901362bd91612bfb916004016130af565b60206040518083038186803b158015612c1357600080fd5b505afa158015612c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4b9190613068565b1115612cfb578273ffffffffffffffffffffffffffffffffffffffff1663243496716040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015612cb557600080fd5b505af1925050508015612cc6575060015b612cd05750610ba5565b612cdb8130316136a2565b9150612cf0612ceb60028461362c565b612a74565b610b2660028361362c565b50610ba5565b8015612b9e573031811115612d42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b59061343d565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190612d979030906004016130af565b60206040518083038186803b158015612daf57600080fd5b505afa158015612dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de79190613068565b90508273ffffffffffffffffffffffffffffffffffffffff166310e7b9f2836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016020604051808303818588803b158015612e4d57600080fd5b505af193505050508015612e9c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612e9991810190613034565b60015b612ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b5906132ef565b506000818473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f2b91906130af565b60206040518083038186803b158015612f4357600080fd5b505afa158015612f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7b9190613068565b612f8591906136a2565b306000908152600d6020526040812080549293508392909190612fa9908490613614565b925050819055508060086000828254612fc29190613614565b909155505050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ba557600080fd5b600060208284031215613002578081fd5b6122d982612fcd565b6000806040838503121561301d578081fd5b61302683612fcd565b946020939093013593505050565b600060208284031215613045578081fd5b81516122d9816136e8565b600060208284031215613061578081fd5b5035919050565b600060208284031215613079578081fd5b5051919050565b60008060408385031215613092578182fd5b8235915060208301356130a4816136e8565b809150509250929050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b901515815260200190565b60208082526022908201527f4e6f7420656e6f75676820696e20636f6e747261637420746f2077697468647260408201527f6177000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f4e6f7420656e6f75676820616d6f756e7420746f207472616e73666572000000604082015260600190565b6020808252602c908201527f4465706f736974616e74206973206e6f7420656e61626c656420746f20616e7460408201527f696369706174652054494d450000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f4f7065726174696f6e206973206c6f636b656400000000000000000000000000604082015260600190565b60208082526031908201527f4465706f736974616e7420646f6573206e6f74206861766520616e7920616d6f60408201527f756e7420746f20616e7469636970617465000000000000000000000000000000606082015260800190565b6020808252601d908201527f53686f756c6420616c6c6f772054494d4520746f206265207370656e74000000604082015260600190565b60208082526015908201527f4e6f742061626c6520746f20736176652054494d450000000000000000000000604082015260600190565b6020808252602f908201527f4465706f736974616e7420646f6573206e6f74206861766520616e7920616d6f60408201527f756e7420746f20636f6d706f756e640000000000000000000000000000000000606082015260800190565b60208082526031908201527f4465706f736974616e7420646f6573206e6f74206861766520616e792065617260408201527f6e696e677320746f207769746864726177000000000000000000000000000000606082015260800190565b6020808252602f908201527f4465706f736974616e7420646f6573206e6f74206861766520616e7920616d6f60408201527f756e7420746f2077697468647261770000000000000000000000000000000000606082015260800190565b6020808252601e908201527f4e6f7420656e6f75676820616d6f756e7420746f20736176652054494d450000604082015260600190565b6020808252601a908201527f506c65617365206465706f73697420736f6d6520616d6f756e74000000000000604082015260600190565b60208082526030908201527f4164647265737320697320616c726561647920656e61626c656420666f72205460408201527f494d4520616e74696369706174696f6e00000000000000000000000000000000606082015260800190565b6020808252601f908201527f506c65617365206465706f73697420736f6d652054494d4520616d6f756e7400604082015260600190565b60208082526013908201527f556e61626c6520746f206275726e2054494d4500000000000000000000000000604082015260600190565b6020808252601e908201527f50726f626c656d207768656e207472616e7366657272696e672054494d450000604082015260600190565b602080825260409082018190527f506c656173652070726f766964652074686520656e6f7567682066656520616d908201527f6f756e7420746f20656e61626c652054494d4520616e74696369706174696f6e606082015260800190565b90815260200190565b60008219821115613627576136276136b9565b500190565b600082613660577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561369d5761369d6136b9565b500290565b6000828210156136b4576136b46136b9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b801515811461260457600080fdfea26469706673582212206d2c1fac4629eff89ef72b9b8f9938e6f2c6313915e84dbb9e04f62b1161b4d464736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b

-----Decoded View---------------
Arg [0] : timeTokenAddress_ (address): 0x0f8F39B92776D9136408280C7209BeBE4351123B

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f8f39b92776d9136408280c7209bebe4351123b


Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.