ETH Price: $2,466.98 (-1.67%)

Contract

0x3E587eb9E7843999c4BC67719c41B80425563aF8
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Exit Farm201661312024-06-25 3:52:1199 days ago1719287531IN
0x3E587eb9...425563aF8
0 ETH0.00033375.09538088
Exit Farm201661142024-06-25 3:48:4799 days ago1719287327IN
0x3E587eb9...425563aF8
0 ETH0.000633694.97508691
Farm Withdraw201621892024-06-24 14:38:23100 days ago1719239903IN
0x3E587eb9...425563aF8
0 ETH0.000706248.0883363
Exit Farm201619272024-06-24 13:45:59100 days ago1719236759IN
0x3E587eb9...425563aF8
0 ETH0.000995899.0311028
Claim Reward201496992024-06-22 20:42:59101 days ago1719088979IN
0x3E587eb9...425563aF8
0 ETH0.000197192.39674993
Exit Farm201479392024-06-22 14:47:59102 days ago1719067679IN
0x3E587eb9...425563aF8
0 ETH0.000852866.69572176
Exit Farm201346532024-06-20 18:13:35103 days ago1718907215IN
0x3E587eb9...425563aF8
0 ETH0.0011842310.93738617
Exit Farm201341272024-06-20 16:27:35103 days ago1718900855IN
0x3E587eb9...425563aF8
0 ETH0.0017130415.53444394
Farm Withdraw201338012024-06-20 15:21:35104 days ago1718896895IN
0x3E587eb9...425563aF8
0 ETH0.0009719111.13092315
Exit Farm201332002024-06-20 13:20:59104 days ago1718889659IN
0x3E587eb9...425563aF8
0 ETH0.0019933315.6494792
Farm Withdraw201329952024-06-20 12:39:35104 days ago1718887175IN
0x3E587eb9...425563aF8
0 ETH0.001563417.90744039
Claim Reward201329912024-06-20 12:38:47104 days ago1718887127IN
0x3E587eb9...425563aF8
0 ETH0.0011962917.57675983
Claim Reward201320192024-06-20 9:23:11104 days ago1718875391IN
0x3E587eb9...425563aF8
0 ETH0.00054878.68536677
Exit Farm201312322024-06-20 6:44:11104 days ago1718865851IN
0x3E587eb9...425563aF8
0 ETH0.0013779111.89152674
Farm Deposit201174842024-06-18 8:33:23106 days ago1718699603IN
0x3E587eb9...425563aF8
0 ETH0.000647016.76544083
Farm Deposit201128312024-06-17 16:54:47106 days ago1718643287IN
0x3E587eb9...425563aF8
0 ETH0.001434715
Farm Deposit201106322024-06-17 9:32:23107 days ago1718616743IN
0x3E587eb9...425563aF8
0 ETH0.0003173.41423972
Exit Farm201102882024-06-17 8:23:11107 days ago1718612591IN
0x3E587eb9...425563aF8
0 ETH0.000345412.9959632
Claim Reward201096012024-06-17 6:04:35107 days ago1718604275IN
0x3E587eb9...425563aF8
0 ETH0.000269323.72915518
Claim Reward201074522024-06-16 22:52:23107 days ago1718578343IN
0x3E587eb9...425563aF8
0 ETH0.000207712.87615783
Claim Reward201070532024-06-16 21:31:23107 days ago1718573483IN
0x3E587eb9...425563aF8
0 ETH0.000272143.76822365
Farm Deposit201070462024-06-16 21:29:59107 days ago1718573399IN
0x3E587eb9...425563aF8
0 ETH0.000367533.34286165
Claim Reward200993792024-06-15 19:47:35108 days ago1718480855IN
0x3E587eb9...425563aF8
0 ETH0.000316814.63338867
Farm Deposit200954692024-06-15 6:40:35109 days ago1718433635IN
0x3E587eb9...425563aF8
0 ETH0.000471854.93395151
Claim Reward200954132024-06-15 6:29:23109 days ago1718432963IN
0x3E587eb9...425563aF8
0 ETH0.000388475.37898198
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SimpleFarm

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 9999999 runs

Other Settings:
cancun EvmVersion
File 1 of 5 : SimpleFarm.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./TokenWrapper.sol";

contract SimpleFarm is TokenWrapper {

    IERC20 public immutable stakeToken;
    IERC20 public immutable rewardToken;

    uint256 public rewardRate;
    uint256 public periodFinished;
    uint256 public rewardDuration;
    uint256 public lastUpdateTime;
    uint256 public perTokenStored;

    uint256 constant PRECISION = 1E18;

    mapping(address => uint256) public userRewards;
    mapping(address => uint256) public perTokenPaid;

    address public ownerAddress;
    address public proposedOwner;
    address public managerAddress;

    modifier onlyOwner() {
        require(
            msg.sender == ownerAddress,
            "SimpleFarm: INVALID_OWNER"
        );
        _;
    }

    modifier onlyManager() {
        require(
            msg.sender == managerAddress,
            "SimpleFarm: INVALID_MANAGER"
        );
        _;
    }

    modifier updateFarm() {
        perTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        _;
    }

    modifier updateUser() {
        userRewards[msg.sender] = earned(msg.sender);
        perTokenPaid[msg.sender] = perTokenStored;
        _;
    }

    modifier updateSender(address _sender) {
        userRewards[_sender] = earned(_sender);
        perTokenPaid[_sender] = perTokenStored;
        _;
    }

    event Staked(
        address indexed user,
        uint256 tokenAmount
    );

    event Withdrawn(
        address indexed user,
        uint256 tokenAmount
    );

    event RewardAdded(
        uint256 rewardRate,
        uint256 tokenAmount
    );

    event RewardPaid(
        address indexed user,
        uint256 tokenAmount
    );

    event Recovered(
        IERC20 indexed token,
        uint256 tokenAmount
    );

    event RewardsDurationUpdated(
        uint256 newRewardDuration
    );

    event OwnerProposed(
        address proposedOwner
    );

    event OwnerChanged(
        address newOwner
    );

    event ManagerChanged(
        address newManager
    );

    constructor(
        IERC20 _stakeToken,
        IERC20 _rewardToken,
        uint256 _defaultDuration
    ) {
        require(
            _defaultDuration > 0,
            "SimpleFarm: INVALID_DURATION"
        );

        stakeToken = _stakeToken;
        rewardToken = _rewardToken;

        ownerAddress = msg.sender;
        managerAddress = msg.sender;

        rewardDuration = _defaultDuration;
    }

    /**
     * @dev Tracks timestamp for when reward was applied last time
     */
    function lastTimeRewardApplicable()
        public
        view
        returns (uint256 res)
    {
        res = block.timestamp < periodFinished
            ? block.timestamp
            : periodFinished;
    }

    /**
     * @dev Relative value on reward for single staked token
     */
    function rewardPerToken()
        public
        view
        returns (uint256)
    {
        if (_totalStaked == 0) {
            return perTokenStored;
        }

        uint256 timeFrame = lastTimeRewardApplicable()
            - lastUpdateTime;

        uint256 extraFund = timeFrame
            * rewardRate
            * PRECISION
            / _totalStaked;

        return perTokenStored
            + extraFund;
    }

    /**
     * @dev Reports earned amount by wallet address not yet collected
     */
    function earned(
        address _walletAddress
    )
        public
        view
        returns (uint256)
    {
        uint256 difference = rewardPerToken()
            - perTokenPaid[_walletAddress];

        return _balances[_walletAddress]
            * difference
            / PRECISION
            + userRewards[_walletAddress];
    }

    /**
     * @dev Performs deposit of staked token into the farm
     */
    function farmDeposit(
        uint256 _stakeAmount
    )
        external
        updateFarm()
        updateUser()
    {
        address senderAddress = msg.sender;

        _stake(
            _stakeAmount,
            senderAddress
        );

        safeTransferFrom(
            stakeToken,
            senderAddress,
            address(this),
            _stakeAmount
        );

        emit Staked(
            senderAddress,
            _stakeAmount
        );
    }

    /**
     * @dev Performs withdrawal of staked token from the farm
     */
    function farmWithdraw(
        uint256 _withdrawAmount
    )
        public
        updateFarm()
        updateUser()
    {
        if (block.timestamp < periodFinished) {
            require(
                _totalStaked > _withdrawAmount,
                "SimpleFarm: STILL_EARNING"
            );
        }

        address senderAddress = msg.sender;

        _withdraw(
            _withdrawAmount,
            senderAddress
        );

        safeTransfer(
            stakeToken,
            senderAddress,
            _withdrawAmount
        );

        emit Withdrawn(
            senderAddress,
            _withdrawAmount
        );
    }

    /**
     * @dev Allows to withdraw staked tokens and claim rewards
     */
    function exitFarm()
        external
    {
        uint256 withdrawAmount = _balances[
            msg.sender
        ];

        farmWithdraw(
            withdrawAmount
        );

        claimReward();
    }

    /**
     * @dev Allows to claim accumulated rewards up to date
     */
    function claimReward()
        public
        updateFarm()
        updateUser()
        returns (uint256 rewardAmount)
    {
        address senderAddress = msg.sender;

        rewardAmount = earned(
            senderAddress
        );

        require(
            rewardAmount > 0,
            "SimpleFarm: NOTHING_TO_CLAIM"
        );

        userRewards[senderAddress] = 0;

        safeTransfer(
            rewardToken,
            senderAddress,
            rewardAmount
        );

        emit RewardPaid(
            senderAddress,
            rewardAmount
        );
    }

    /**
     * @dev Allows to invoke owner-change procedure
     */
    function proposeNewOwner(
        address _newOwner
    )
        external
        onlyOwner
    {
        if (_newOwner == ZERO_ADDRESS) {
            revert("SimpleFarm: WRONG_ADDRESS");
        }

        proposedOwner = _newOwner;

        emit OwnerProposed(
            _newOwner
        );
    }

    /**
     * @dev Finalizes owner-change 2-step procedure
     */
    function claimOwnership()
        external
    {
        require(
            msg.sender == proposedOwner,
            "SimpleFarm: INVALID_CANDIDATE"
        );

        ownerAddress = proposedOwner;

        emit OwnerChanged(
            ownerAddress
        );
    }

    /**
     * @dev Allows to change manager of the farm
     */
    function changeManager(
        address _newManager
    )
        external
        onlyOwner
    {
        if (_newManager == ZERO_ADDRESS) {
            revert("SimpleFarm: WRONG_ADDRESS");
        }

        managerAddress = _newManager;

        emit ManagerChanged(
            _newManager
        );
    }

    /**
     * @dev Allows to recover accidentally sent tokens
     * into the farm except stake and reward tokens
     */
    function recoverToken(
        IERC20 tokenAddress,
        uint256 tokenAmount
    )
        external
    {
        if (tokenAddress == stakeToken) {
            revert("SimpleFarm: INVALID_TOKEN");
        }

        if (tokenAddress == rewardToken) {
            revert("SimpleFarm: INVALID_TOKEN");
        }

        safeTransfer(
            tokenAddress,
            ownerAddress,
            tokenAmount
        );

        emit Recovered(
            tokenAddress,
            tokenAmount
        );
    }

    /**
     * @dev Manager sets the cycle duration for distribution
     * in seconds and can't be changed during active cycle
     */
    function setRewardDuration(
        uint256 _rewardDuration
    )
        external
        onlyManager
    {
        require(
            _rewardDuration > 0,
            "SimpleFarm: INVALID_DURATION"
        );

        require(
            block.timestamp > periodFinished,
            "SimpleFarm: ONGOING_DISTRIBUTION"
        );

        rewardDuration = _rewardDuration;

        emit RewardsDurationUpdated(
            _rewardDuration
        );
    }

    /**
     * @dev Manager sets reward per second to be distributed
     * and invokes initial distribution to be started right away,
     * must have some tokens already staked before executing.
     */
    function setRewardRate(
        uint256 _newRewardRate
    )
        external
        onlyManager
        updateFarm()
    {
        require(
            _totalStaked > 0,
            "SimpleFarm: NO_STAKERS"
        );

        require(
            _newRewardRate > 0,
            "SimpleFarm: INVALID_RATE"
        );

        uint256 currentPeriodFinish = periodFinished;

        lastUpdateTime = block.timestamp;
        periodFinished = block.timestamp
            + rewardDuration;

        if (block.timestamp < currentPeriodFinish) {

            require(
                _newRewardRate >= rewardRate,
                "SimpleFarm: RATE_CANT_DECREASE"
            );

            uint256 remainingTime = currentPeriodFinish
                - block.timestamp;

            uint256 rewardRemains = remainingTime
                * rewardRate;

            safeTransfer(
                rewardToken,
                managerAddress,
                rewardRemains
            );
        }

        rewardRate = _newRewardRate;

        uint256 newRewardAmount = rewardDuration
            * _newRewardRate;

        safeTransferFrom(
            rewardToken,
            managerAddress,
            address(this),
            newRewardAmount
        );

        emit RewardAdded(
            _newRewardRate,
            newRewardAmount
        );
    }

    /**
     * @dev Allows to transfer receipt tokens
     */
    function transfer(
        address _recipient,
        uint256 _amount
    )
        external
        updateFarm()
        updateUser()
        updateSender(_recipient)
        returns (bool)
    {
        _transfer(
            msg.sender,
            _recipient,
            _amount
        );

        return true;
    }

    /**
     * @dev Allows to transfer receipt tokens on owner's behalf
     */
    function transferFrom(
        address _sender,
        address _recipient,
        uint256 _amount
    )
        external
        updateFarm()
        updateSender(_sender)
        updateSender(_recipient)
        returns (bool)
    {
        if (_allowances[_sender][msg.sender] != type(uint256).max) {
            _allowances[_sender][msg.sender] -= _amount;
        }

        _transfer(
            _sender,
            _recipient,
            _amount
        );

        return true;
    }
}

File 2 of 5 : TokenWrapper.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./SafeERC20.sol";
import "./Babylonian.sol";

contract TokenWrapper is SafeERC20 {

    using Babylonian for uint256;

    string public constant name = "VerseFarm";
    string public constant symbol = "VFARM";

    uint8 public constant decimals = 18;

    uint256 _totalStaked;
    uint256 _totalStakedSQRT;

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) _allowances;

    address constant ZERO_ADDRESS = address(0x0);

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 value
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    /**
     * @dev Returns total amount of staked tokens
     */
    function totalSupply()
        external
        view
        returns (uint256)
    {
        return _totalStaked;
    }

    /**
     * @dev Returns SQR tracker for total staked amount
     */
    function totalSupplySQR()
        external
        view
        returns (uint256)
    {
        return _totalStakedSQRT;
    }

    /**
     * @dev Returns staked amount by wallet address
     */
    function balanceOf(
        address _walletAddress
    )
        external
        view
        returns (uint256)
    {
        return _balances[_walletAddress];
    }

    /**
     * @dev Increases staked amount by wallet address
     */
    function _stake(
        uint256 _amount,
        address _address
    )
        internal
    {
        _totalStaked =
        _totalStaked + _amount;

        unchecked {
            _balances[_address] =
            _balances[_address] + _amount;
        }

        emit Transfer(
            ZERO_ADDRESS,
            _address,
            _amount
        );
    }

    /**
     * @dev Decreases total staked amount
    */
    function _withdraw(
        uint256 _amount,
        address _address
    )
        internal
    {
        _burn(
            _amount,
            _address
        );
    }

    /**
     * @dev Decreases total staked amount
     */
    function _burn(
        uint256 _amount,
        address _address
    )
        internal
    {
        unchecked {
            _totalStaked =
            _totalStaked - _amount;
        }

        _balances[_address] =
        _balances[_address] - _amount;

        emit Transfer(
            _address,
            ZERO_ADDRESS,
            _amount
        );
    }

    /**
     * @dev Updates balances during transfer
     */
    function _transfer(
        address _sender,
        address _recipient,
        uint256 _amount
    )
        internal
    {
        _balances[_sender] =
        _balances[_sender] - _amount;

        unchecked {
            _balances[_recipient] =
            _balances[_recipient] + _amount;
        }

        emit Transfer(
            _sender,
            _recipient,
            _amount
        );
    }

    /**
     * @dev Grants permission for receipt tokens transfer on owner's behalf
     */
    function approve(
        address _spender,
        uint256 _amount
    )
        external
        returns (bool)
    {
        _approve(
            msg.sender,
            _spender,
            _amount
        );

        return true;
    }

    /**
     * @dev Checks value for receipt tokens transfer on owner's behalf
     */
    function allowance(
        address _owner,
        address _spender
    )
        external
        view
        returns (uint256)
    {
        return _allowances[_owner][_spender];
    }

    /**
     * @dev Allowance update for receipt tokens transfer on owner's behalf
     */
    function _approve(
        address _owner,
        address _spender,
        uint256 _amount
    )
        internal
    {
        _allowances[_owner][_spender] = _amount;

        emit Approval(
            _owner,
            _spender,
            _amount
        );
    }

    /**
     * @dev Increases value for receipt tokens transfer on owner's behalf
     */
    function increaseAllowance(
        address _spender,
        uint256 _addedValue
    )
        external
        returns (bool)
    {
        _approve(
            msg.sender,
            _spender,
            _allowances[msg.sender][_spender] + _addedValue
        );

        return true;
    }

    /**
     * @dev Decreases value for receipt tokens transfer on owner's behalf
     */
    function decreaseAllowance(
        address _spender,
        uint256 _subtractedValue
    )
        external
        returns (bool)
    {
        _approve(
            msg.sender,
            _spender,
            _allowances[msg.sender][_spender] - _subtractedValue
        );

        return true;
    }
}

File 3 of 5 : SafeERC20.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

import "./IERC20.sol";

contract SafeERC20 {

    /**
     * @dev Allows to execute transfer for a token
     */
    function safeTransfer(
        IERC20 _token,
        address _to,
        uint256 _value
    )
        internal
    {
        callOptionalReturn(
            _token,
            abi.encodeWithSelector(
                _token.transfer.selector,
                _to,
                _value
            )
        );
    }

    /**
     * @dev Allows to execute transferFrom for a token
     */
    function safeTransferFrom(
        IERC20 _token,
        address _from,
        address _to,
        uint256 _value
    )
        internal
    {
        callOptionalReturn(
            _token,
            abi.encodeWithSelector(
                _token.transferFrom.selector,
                _from,
                _to,
                _value
            )
        );
    }

    function callOptionalReturn(
        IERC20 _token,
        bytes memory _data
    )
        private
    {
        (
            bool success,
            bytes memory returndata
        ) = address(_token).call(_data);

        require(
            success,
            "SafeERC20: CALL_FAILED"
        );

        if (returndata.length > 0) {
            require(
                abi.decode(
                    returndata,
                    (bool)
                ),
                "SafeERC20: OPERATION_FAILED"
            );
        }
    }
}

File 4 of 5 : Babylonian.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

library Babylonian {

    function sqrt(
        uint256 x
    )
        internal
        pure
        returns (uint256)
    {
        if (x == 0) return 0;

        uint256 xx = x;
        uint256 r = 1;
        if (xx >= 0x100000000000000000000000000000000) {
            xx >>= 128;
            r <<= 64;
        }
        if (xx >= 0x10000000000000000) {
            xx >>= 64;
            r <<= 32;
        }
        if (xx >= 0x100000000) {
            xx >>= 32;
            r <<= 16;
        }
        if (xx >= 0x10000) {
            xx >>= 16;
            r <<= 8;
        }
        if (xx >= 0x100) {
            xx >>= 8;
            r <<= 4;
        }
        if (xx >= 0x10) {
            xx >>= 4;
            r <<= 2;
        }
        if (xx >= 0x8) {
            r <<= 1;
        }
        r = (r + (x / r)) >> 1;
        r = (r + (x / r)) >> 1;
        r = (r + (x / r)) >> 1;
        r = (r + (x / r)) >> 1;
        r = (r + (x / r)) >> 1;
        r = (r + (x / r)) >> 1;
        r = (r + (x / r)) >> 1;

        uint256 r1 = x / r;
        return (r < r1 ? r : r1);
    }
}

File 5 of 5 : IERC20.sol
// SPDX-License-Identifier: -- BCOM --

pragma solidity =0.8.25;

interface IERC20 {

    /**
     * @dev Interface fo transfer function
     */
    function transfer(
        address recipient,
        uint256 amount
    )
        external
        returns (bool);

    /**
     * @dev Interface for transferFrom function
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    )
        external
        returns (bool);

    /**
     * @dev Interface for approve function
     */
    function approve(
        address spender,
        uint256 amount
    )
        external
        returns (bool);

    function balanceOf(
        address account
    )
        external
        view
        returns (uint256);

        function mint(
            address _user,
            uint256 _amount
        )
            external;
}

Settings
{
  "remappings": [
    "@chainlink/=node_modules/@chainlink/",
    "@ensdomains/=node_modules/@ensdomains/",
    "@eth-optimism/=node_modules/@eth-optimism/",
    "@openzeppelin/=node_modules/@openzeppelin/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "eth-gas-reporter/=node_modules/eth-gas-reporter/",
    "forge-std/=lib/forge-std/src/",
    "hardhat/=node_modules/hardhat/",
    "truffle/=node_modules/truffle/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 9999999
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_stakeToken","type":"address"},{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_defaultDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newManager","type":"address"}],"name":"ManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"proposedOwner","type":"address"}],"name":"OwnerProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRewardDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newManager","type":"address"}],"name":"changeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_walletAddress","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exitFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeAmount","type":"uint256"}],"name":"farmDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawAmount","type":"uint256"}],"name":"farmWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"res","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"perTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"proposeNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardDuration","type":"uint256"}],"name":"setRewardDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRewardRate","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplySQR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c060405234801561000f575f80fd5b50604051611fbe380380611fbe83398101604081905261002e916100d9565b5f81116100815760405162461bcd60e51b815260206004820152601c60248201527f53696d706c654661726d3a20494e56414c49445f4455524154494f4e00000000604482015260640160405180910390fd5b6001600160a01b03928316608052911660a052600b8054336001600160a01b03199182168117909255600d80549091169091179055600655610112565b80516001600160a01b03811681146100d4575f80fd5b919050565b5f805f606084860312156100eb575f80fd5b6100f4846100be565b9250610102602085016100be565b9150604084015190509250925092565b60805160a051611e5a6101645f395f81816105f401528181610d7301528181610dd3015281816112c801526114ca01525f818161038f015281816108c201528181610ae801526112130152611e5a5ff3fe608060405234801561000f575f80fd5b5060043610610268575f3560e01c80639e447fc611610157578063c0ed00c9116100d2578063d153b60c11610088578063ee6c0d571161006e578063ee6c0d57146105dd578063f520e7e5146105e6578063f7c618c1146105ef575f80fd5b8063d153b60c14610578578063dd62ed3e14610598575f80fd5b8063cd3daf9d116100b8578063cd3daf9d14610548578063cddaf35814610550578063cf73a1bc14610558575f80fd5b8063c0ed00c91461052c578063c8f33c911461053f575f80fd5b8063a9059cbb11610127578063b1f8100d1161010d578063b1f8100d146104fe578063b29a814014610511578063b88a802f14610524575f80fd5b8063a9059cbb146104e3578063aa33f0da146104f6575f80fd5b80639e447fc61461048b578063a3fbbaae1461049e578063a457c2d7146104b1578063a4c0ae6f146104c4575f80fd5b806339509351116101e75780637b0a47ee116101b75780638f84aa091161019d5780638f84aa091461041c57806390717dd31461043c57806395d89b411461044f575f80fd5b80637b0a47ee1461040b57806380faa57d14610414575f80fd5b8063395093511461036f5780634e71e0c81461038257806351ed6a301461038a57806370a08231146103d6575f80fd5b80630962c4f91161023c57806323b872dd1161022257806323b872dd1461032d5780632b8c8a6414610340578063313ce56714610355575f80fd5b80630962c4f91461031d57806318160ddd14610326575f80fd5b80628cc2621461026c5780630660f1e81461029257806306fdde03146102b1578063095ea7b3146102fa575b5f80fd5b61027f61027a366004611c29565b610616565b6040519081526020015b60405180910390f35b61027f6102a0366004611c29565b60096020525f908152604090205481565b6102ed6040518060400160405280600981526020017f56657273654661726d000000000000000000000000000000000000000000000081525081565b6040516102899190611c44565b61030d610308366004611c97565b6106b4565b6040519015158152602001610289565b61027f60055481565b5f5461027f565b61030d61033b366004611cc1565b6106ca565b61035361034e366004611cff565b6107f9565b005b61035d601281565b60405160ff9091168152602001610289565b61030d61037d366004611c97565b61093c565b610353610984565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610289565b61027f6103e4366004611c29565b73ffffffffffffffffffffffffffffffffffffffff165f9081526002602052604090205490565b61027f60045481565b61027f610a80565b600b546103b19073ffffffffffffffffffffffffffffffffffffffff1681565b61035361044a366004611cff565b610a96565b6102ed6040518060400160405280600581526020017f564641524d00000000000000000000000000000000000000000000000000000081525081565b610353610499366004611cff565b610b57565b6103536104ac366004611c29565b610e4e565b61030d6104bf366004611c97565b610fc6565b61027f6104d2366004611c29565b600a6020525f908152604090205481565b61030d6104f1366004611c97565b611009565b60015461027f565b61035361050c366004611c29565b6110a0565b61035361051f366004611c97565b611211565b61027f6113e8565b61035361053a366004611cff565b611544565b61027f60075481565b61027f6116ce565b61035361173b565b600d546103b19073ffffffffffffffffffffffffffffffffffffffff1681565b600c546103b19073ffffffffffffffffffffffffffffffffffffffff1681565b61027f6105a6366004611d16565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260036020908152604080832093909416825291909152205490565b61027f60085481565b61027f60065481565b6103b17f000000000000000000000000000000000000000000000000000000000000000081565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600a602052604081205481906106456116ce565b61064f9190611d7a565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526009602090815260408083205460029092529091205491925090670de0b6b3a764000090610699908490611d8d565b6106a39190611da4565b6106ad9190611ddc565b9392505050565b5f6106c033848461175f565b5060015b92915050565b5f6106d36116ce565b6008556106de610a80565b600755836106eb81610616565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260096020908152604080832093909355600854600a909152919020558361072c81610616565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260096020908152604080832094909455600854600a82528483205591891681526003825282812033825290915220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107e25773ffffffffffffffffffffffffffffffffffffffff86165f908152600360209081526040808320338452909152812080548692906107dc908490611d7a565b90915550505b6107ed8686866117cd565b50600195945050505050565b6108016116ce565b60085561080c610a80565b60075561081833610616565b335f90815260096020908152604080832093909355600854600a909152919020556005544210156108b257805f54116108b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a205354494c4c5f4541524e494e470000000000000060448201526064015b60405180910390fd5b336108bd8282611868565b6108e87f00000000000000000000000000000000000000000000000000000000000000008284611872565b8073ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58360405161093091815260200190565b60405180910390a25050565b335f81815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106c091859061097f908690611ddc565b61175f565b600c5473ffffffffffffffffffffffffffffffffffffffff163314610a05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f53696d706c654661726d3a20494e56414c49445f43414e44494441544500000060448201526064016108a9565b600c54600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369060200160405180910390a1565b5f6005544210610a91575060055490565b504290565b610a9e6116ce565b600855610aa9610a80565b600755610ab533610616565b335f81815260096020908152604080832094909455600854600a90915292902091909155610ae3828261194b565b610b0f7f00000000000000000000000000000000000000000000000000000000000000008230856119bf565b8073ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8360405161093091815260200190565b600d5473ffffffffffffffffffffffffffffffffffffffff163314610bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53696d706c654661726d3a20494e56414c49445f4d414e41474552000000000060448201526064016108a9565b610be06116ce565b600855610beb610a80565b6007555f54610c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53696d706c654661726d3a204e4f5f5354414b4552530000000000000000000060448201526064016108a9565b5f8111610cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53696d706c654661726d3a20494e56414c49445f52415445000000000000000060448201526064016108a9565b600554426007819055600654610cd491611ddc565b60055542811115610db257600454821015610d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53696d706c654661726d3a20524154455f43414e545f4445435245415345000060448201526064016108a9565b5f610d564283611d7a565b90505f60045482610d679190611d8d565b600d54909150610daf907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff1683611872565b50505b60048290556006545f90610dc7908490611d8d565b600d54909150610e10907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff1630846119bf565b60408051848152602081018390527f6c07ee05dcf262f13abf9d87b846ee789d2f90fe991d495acd7d7fc109ee1f55910160405180910390a1505050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314610ecf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f4f574e45520000000000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff8116610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a2057524f4e475f414444524553530000000000000060448201526064016108a9565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b906020015b60405180910390a150565b335f81815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106c091859061097f908690611d7a565b5f6110126116ce565b60085561101d610a80565b60075561102933610616565b335f90815260096020908152604080832093909355600854600a909152919020558261105481610616565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260096020908152604080832093909355600854600a909152919020556110963385856117cd565b5060019392505050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f4f574e45520000000000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff811661119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a2057524f4e475f414444524553530000000000000060448201526064016108a9565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f35b5da26a401fdbef2e1cfabeec2c10a6121d56f136be501a393c284cdd1af5890602001610fbb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f544f4b454e0000000000000060448201526064016108a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f544f4b454e0000000000000060448201526064016108a9565b600b546113a090839073ffffffffffffffffffffffffffffffffffffffff1683611872565b8173ffffffffffffffffffffffffffffffffffffffff167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288260405161093091815260200190565b5f6113f16116ce565b6008556113fc610a80565b60075561140833610616565b335f81815260096020908152604080832094909455600854600a9091529290209190915561143581610616565b91505f82116114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f53696d706c654661726d3a204e4f5448494e475f544f5f434c41494d0000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600960205260408120556114f07f00000000000000000000000000000000000000000000000000000000000000008284611872565b8073ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868360405161153891815260200190565b60405180910390a25090565b600d5473ffffffffffffffffffffffffffffffffffffffff1633146115c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53696d706c654661726d3a20494e56414c49445f4d414e41474552000000000060448201526064016108a9565b5f811161162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f53696d706c654661726d3a20494e56414c49445f4455524154494f4e0000000060448201526064016108a9565b6005544211611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53696d706c654661726d3a204f4e474f494e475f444953545249425554494f4e60448201526064016108a9565b60068190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610fbb565b5f80545f036116de575060085490565b5f6007546116ea610a80565b6116f49190611d7a565b90505f8054670de0b6b3a7640000600454846117109190611d8d565b61171a9190611d8d565b6117249190611da4565b9050806008546117349190611ddc565b9250505090565b335f90815260026020526040902054611753816107f9565b61175b6113e8565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600260205260409020546117fd908290611d7a565b73ffffffffffffffffffffffffffffffffffffffff8481165f8181526002602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016117c0565b61175b8282611a23565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526119469084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611ab3565b505050565b815f546119589190611ddc565b5f90815573ffffffffffffffffffffffffffffffffffffffff8216808252600260209081526040808420805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611a1d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016118c4565b50505050565b5f8054839003815573ffffffffffffffffffffffffffffffffffffffff8216815260026020526040902054611a59908390611d7a565b73ffffffffffffffffffffffffffffffffffffffff82165f818152600260205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119b39086815260200190565b5f808373ffffffffffffffffffffffffffffffffffffffff1683604051611ada9190611def565b5f604051808303815f865af19150503d805f8114611b13576040519150601f19603f3d011682016040523d82523d5f602084013e611b18565b606091505b509150915081611b84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5361666545524332303a2043414c4c5f4641494c45440000000000000000000060448201526064016108a9565b805115611a1d5780806020019051810190611b9f9190611e05565b611a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5361666545524332303a204f5045524154494f4e5f4641494c4544000000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff81168114611c26575f80fd5b50565b5f60208284031215611c39575f80fd5b81356106ad81611c05565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611ca8575f80fd5b8235611cb381611c05565b946020939093013593505050565b5f805f60608486031215611cd3575f80fd5b8335611cde81611c05565b92506020840135611cee81611c05565b929592945050506040919091013590565b5f60208284031215611d0f575f80fd5b5035919050565b5f8060408385031215611d27575f80fd5b8235611d3281611c05565b91506020830135611d4281611c05565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156106c4576106c4611d4d565b80820281158282048414176106c4576106c4611d4d565b5f82611dd7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156106c4576106c4611d4d565b5f82518060208501845e5f920191825250919050565b5f60208284031215611e15575f80fd5b815180151581146106ad575f80fdfea264697066735822122053372e6ebc0aea98f58852132d12ef27d906c239a076d0ff4f973e2f4063e00764736f6c63430008190033000000000000000000000000294fff8fbfe37da6ffd410b4ca370b92ae853a9b000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d780000000000000000000000000000000000000000000000000000000000278d00

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610268575f3560e01c80639e447fc611610157578063c0ed00c9116100d2578063d153b60c11610088578063ee6c0d571161006e578063ee6c0d57146105dd578063f520e7e5146105e6578063f7c618c1146105ef575f80fd5b8063d153b60c14610578578063dd62ed3e14610598575f80fd5b8063cd3daf9d116100b8578063cd3daf9d14610548578063cddaf35814610550578063cf73a1bc14610558575f80fd5b8063c0ed00c91461052c578063c8f33c911461053f575f80fd5b8063a9059cbb11610127578063b1f8100d1161010d578063b1f8100d146104fe578063b29a814014610511578063b88a802f14610524575f80fd5b8063a9059cbb146104e3578063aa33f0da146104f6575f80fd5b80639e447fc61461048b578063a3fbbaae1461049e578063a457c2d7146104b1578063a4c0ae6f146104c4575f80fd5b806339509351116101e75780637b0a47ee116101b75780638f84aa091161019d5780638f84aa091461041c57806390717dd31461043c57806395d89b411461044f575f80fd5b80637b0a47ee1461040b57806380faa57d14610414575f80fd5b8063395093511461036f5780634e71e0c81461038257806351ed6a301461038a57806370a08231146103d6575f80fd5b80630962c4f91161023c57806323b872dd1161022257806323b872dd1461032d5780632b8c8a6414610340578063313ce56714610355575f80fd5b80630962c4f91461031d57806318160ddd14610326575f80fd5b80628cc2621461026c5780630660f1e81461029257806306fdde03146102b1578063095ea7b3146102fa575b5f80fd5b61027f61027a366004611c29565b610616565b6040519081526020015b60405180910390f35b61027f6102a0366004611c29565b60096020525f908152604090205481565b6102ed6040518060400160405280600981526020017f56657273654661726d000000000000000000000000000000000000000000000081525081565b6040516102899190611c44565b61030d610308366004611c97565b6106b4565b6040519015158152602001610289565b61027f60055481565b5f5461027f565b61030d61033b366004611cc1565b6106ca565b61035361034e366004611cff565b6107f9565b005b61035d601281565b60405160ff9091168152602001610289565b61030d61037d366004611c97565b61093c565b610353610984565b6103b17f000000000000000000000000294fff8fbfe37da6ffd410b4ca370b92ae853a9b81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610289565b61027f6103e4366004611c29565b73ffffffffffffffffffffffffffffffffffffffff165f9081526002602052604090205490565b61027f60045481565b61027f610a80565b600b546103b19073ffffffffffffffffffffffffffffffffffffffff1681565b61035361044a366004611cff565b610a96565b6102ed6040518060400160405280600581526020017f564641524d00000000000000000000000000000000000000000000000000000081525081565b610353610499366004611cff565b610b57565b6103536104ac366004611c29565b610e4e565b61030d6104bf366004611c97565b610fc6565b61027f6104d2366004611c29565b600a6020525f908152604090205481565b61030d6104f1366004611c97565b611009565b60015461027f565b61035361050c366004611c29565b6110a0565b61035361051f366004611c97565b611211565b61027f6113e8565b61035361053a366004611cff565b611544565b61027f60075481565b61027f6116ce565b61035361173b565b600d546103b19073ffffffffffffffffffffffffffffffffffffffff1681565b600c546103b19073ffffffffffffffffffffffffffffffffffffffff1681565b61027f6105a6366004611d16565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260036020908152604080832093909416825291909152205490565b61027f60085481565b61027f60065481565b6103b17f000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d7881565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600a602052604081205481906106456116ce565b61064f9190611d7a565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526009602090815260408083205460029092529091205491925090670de0b6b3a764000090610699908490611d8d565b6106a39190611da4565b6106ad9190611ddc565b9392505050565b5f6106c033848461175f565b5060015b92915050565b5f6106d36116ce565b6008556106de610a80565b600755836106eb81610616565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260096020908152604080832093909355600854600a909152919020558361072c81610616565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260096020908152604080832094909455600854600a82528483205591891681526003825282812033825290915220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107e25773ffffffffffffffffffffffffffffffffffffffff86165f908152600360209081526040808320338452909152812080548692906107dc908490611d7a565b90915550505b6107ed8686866117cd565b50600195945050505050565b6108016116ce565b60085561080c610a80565b60075561081833610616565b335f90815260096020908152604080832093909355600854600a909152919020556005544210156108b257805f54116108b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a205354494c4c5f4541524e494e470000000000000060448201526064015b60405180910390fd5b336108bd8282611868565b6108e87f000000000000000000000000294fff8fbfe37da6ffd410b4ca370b92ae853a9b8284611872565b8073ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58360405161093091815260200190565b60405180910390a25050565b335f81815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106c091859061097f908690611ddc565b61175f565b600c5473ffffffffffffffffffffffffffffffffffffffff163314610a05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f53696d706c654661726d3a20494e56414c49445f43414e44494441544500000060448201526064016108a9565b600c54600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369060200160405180910390a1565b5f6005544210610a91575060055490565b504290565b610a9e6116ce565b600855610aa9610a80565b600755610ab533610616565b335f81815260096020908152604080832094909455600854600a90915292902091909155610ae3828261194b565b610b0f7f000000000000000000000000294fff8fbfe37da6ffd410b4ca370b92ae853a9b8230856119bf565b8073ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8360405161093091815260200190565b600d5473ffffffffffffffffffffffffffffffffffffffff163314610bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53696d706c654661726d3a20494e56414c49445f4d414e41474552000000000060448201526064016108a9565b610be06116ce565b600855610beb610a80565b6007555f54610c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f53696d706c654661726d3a204e4f5f5354414b4552530000000000000000000060448201526064016108a9565b5f8111610cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f53696d706c654661726d3a20494e56414c49445f52415445000000000000000060448201526064016108a9565b600554426007819055600654610cd491611ddc565b60055542811115610db257600454821015610d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53696d706c654661726d3a20524154455f43414e545f4445435245415345000060448201526064016108a9565b5f610d564283611d7a565b90505f60045482610d679190611d8d565b600d54909150610daf907f000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d789073ffffffffffffffffffffffffffffffffffffffff1683611872565b50505b60048290556006545f90610dc7908490611d8d565b600d54909150610e10907f000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d789073ffffffffffffffffffffffffffffffffffffffff1630846119bf565b60408051848152602081018390527f6c07ee05dcf262f13abf9d87b846ee789d2f90fe991d495acd7d7fc109ee1f55910160405180910390a1505050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314610ecf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f4f574e45520000000000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff8116610f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a2057524f4e475f414444524553530000000000000060448201526064016108a9565b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b906020015b60405180910390a150565b335f81815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916106c091859061097f908690611d7a565b5f6110126116ce565b60085561101d610a80565b60075561102933610616565b335f90815260096020908152604080832093909355600854600a909152919020558261105481610616565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260096020908152604080832093909355600854600a909152919020556110963385856117cd565b5060019392505050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314611121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f4f574e45520000000000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff811661119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a2057524f4e475f414444524553530000000000000060448201526064016108a9565b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f35b5da26a401fdbef2e1cfabeec2c10a6121d56f136be501a393c284cdd1af5890602001610fbb565b7f000000000000000000000000294fff8fbfe37da6ffd410b4ca370b92ae853a9b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f544f4b454e0000000000000060448201526064016108a9565b7f000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d7873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f53696d706c654661726d3a20494e56414c49445f544f4b454e0000000000000060448201526064016108a9565b600b546113a090839073ffffffffffffffffffffffffffffffffffffffff1683611872565b8173ffffffffffffffffffffffffffffffffffffffff167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288260405161093091815260200190565b5f6113f16116ce565b6008556113fc610a80565b60075561140833610616565b335f81815260096020908152604080832094909455600854600a9091529290209190915561143581610616565b91505f82116114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f53696d706c654661726d3a204e4f5448494e475f544f5f434c41494d0000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600960205260408120556114f07f000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d788284611872565b8073ffffffffffffffffffffffffffffffffffffffff167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868360405161153891815260200190565b60405180910390a25090565b600d5473ffffffffffffffffffffffffffffffffffffffff1633146115c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f53696d706c654661726d3a20494e56414c49445f4d414e41474552000000000060448201526064016108a9565b5f811161162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f53696d706c654661726d3a20494e56414c49445f4455524154494f4e0000000060448201526064016108a9565b6005544211611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53696d706c654661726d3a204f4e474f494e475f444953545249425554494f4e60448201526064016108a9565b60068190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610fbb565b5f80545f036116de575060085490565b5f6007546116ea610a80565b6116f49190611d7a565b90505f8054670de0b6b3a7640000600454846117109190611d8d565b61171a9190611d8d565b6117249190611da4565b9050806008546117349190611ddc565b9250505090565b335f90815260026020526040902054611753816107f9565b61175b6113e8565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600260205260409020546117fd908290611d7a565b73ffffffffffffffffffffffffffffffffffffffff8481165f8181526002602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016117c0565b61175b8282611a23565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526119469084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611ab3565b505050565b815f546119589190611ddc565b5f90815573ffffffffffffffffffffffffffffffffffffffff8216808252600260209081526040808420805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611a1d9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016118c4565b50505050565b5f8054839003815573ffffffffffffffffffffffffffffffffffffffff8216815260026020526040902054611a59908390611d7a565b73ffffffffffffffffffffffffffffffffffffffff82165f818152600260205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119b39086815260200190565b5f808373ffffffffffffffffffffffffffffffffffffffff1683604051611ada9190611def565b5f604051808303815f865af19150503d805f8114611b13576040519150601f19603f3d011682016040523d82523d5f602084013e611b18565b606091505b509150915081611b84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5361666545524332303a2043414c4c5f4641494c45440000000000000000000060448201526064016108a9565b805115611a1d5780806020019051810190611b9f9190611e05565b611a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5361666545524332303a204f5045524154494f4e5f4641494c4544000000000060448201526064016108a9565b73ffffffffffffffffffffffffffffffffffffffff81168114611c26575f80fd5b50565b5f60208284031215611c39575f80fd5b81356106ad81611c05565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060408385031215611ca8575f80fd5b8235611cb381611c05565b946020939093013593505050565b5f805f60608486031215611cd3575f80fd5b8335611cde81611c05565b92506020840135611cee81611c05565b929592945050506040919091013590565b5f60208284031215611d0f575f80fd5b5035919050565b5f8060408385031215611d27575f80fd5b8235611d3281611c05565b91506020830135611d4281611c05565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156106c4576106c4611d4d565b80820281158282048414176106c4576106c4611d4d565b5f82611dd7577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b808201808211156106c4576106c4611d4d565b5f82518060208501845e5f920191825250919050565b5f60208284031215611e15575f80fd5b815180151581146106ad575f80fdfea264697066735822122053372e6ebc0aea98f58852132d12ef27d906c239a076d0ff4f973e2f4063e00764736f6c63430008190033

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

000000000000000000000000294fff8fbfe37da6ffd410b4ca370b92ae853a9b000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d780000000000000000000000000000000000000000000000000000000000278d00

-----Decoded View---------------
Arg [0] : _stakeToken (address): 0x294fff8FbfE37dA6FFD410b4cA370b92AE853a9B
Arg [1] : _rewardToken (address): 0xdb85f6685950E285b1E611037BEBe5B34e2B7d78
Arg [2] : _defaultDuration (uint256): 2592000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000294fff8fbfe37da6ffd410b4ca370b92ae853a9b
Arg [1] : 000000000000000000000000db85f6685950e285b1e611037bebe5b34e2b7d78
Arg [2] : 0000000000000000000000000000000000000000000000000000000000278d00


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.