ETH Price: $3,424.09 (-0.48%)
Gas: 3 Gwei

Contract

0xe546F8f17aff17C05dac9F9b4F9957f725fab087
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Release149662332022-06-15 7:09:58748 days ago1655276998IN
0xe546F8f1...725fab087
0 ETH0.0021552830.81141889
Release143998912022-03-16 20:59:21839 days ago1647464361IN
0xe546F8f1...725fab087
0 ETH0.0050845658.40909221
Release143710132022-03-12 8:59:41843 days ago1647075581IN
0xe546F8f1...725fab087
0 ETH0.0011393916.28854373
Get Rewards143648582022-03-11 10:00:34844 days ago1646992834IN
0xe546F8f1...725fab087
0 ETH0.0010884121.83245036
Get Rewards143190422022-03-04 7:21:00851 days ago1646378460IN
0xe546F8f1...725fab087
0 ETH0.0013309226.69704105
Release143136072022-03-03 10:55:36852 days ago1646304936IN
0xe546F8f1...725fab087
0 ETH0.0020085928.71430852
Release142781532022-02-25 23:08:14858 days ago1645830494IN
0xe546F8f1...725fab087
0 ETH0.0068041878.16316877
Release142227962022-02-17 9:18:44866 days ago1645089524IN
0xe546F8f1...725fab087
0 ETH0.0033870638.90901111
Release142160112022-02-16 8:16:40867 days ago1644999400IN
0xe546F8f1...725fab087
0 ETH0.0016452363.37579577
Release142160112022-02-16 8:16:40867 days ago1644999400IN
0xe546F8f1...725fab087
0 ETH0.004433263.37579577
Release141990982022-02-13 17:20:17870 days ago1644772817IN
0xe546F8f1...725fab087
0 ETH0.0039393856.31635594
Get Rewards141990922022-02-13 17:19:17870 days ago1644772757IN
0xe546F8f1...725fab087
0 ETH0.0032725165.64338985
Release141767542022-02-10 6:36:05873 days ago1644474965IN
0xe546F8f1...725fab087
0 ETH0.0050172457.63571234
Release141740512022-02-09 20:34:03874 days ago1644438843IN
0xe546F8f1...725fab087
0 ETH0.0085972122.90320046
Unlock Tokens141519352022-02-06 10:22:35877 days ago1644142955IN
0xe546F8f1...725fab087
0 ETH0.0026745.1417819
Release141461872022-02-05 13:05:04878 days ago1644066304IN
0xe546F8f1...725fab087
0 ETH0.0041608147.79749224
Release141452392022-02-05 9:42:01878 days ago1644054121IN
0xe546F8f1...725fab087
0 ETH0.0039866856.9925209
Release140605222022-01-23 7:26:59891 days ago1642922819IN
0xe546F8f1...725fab087
0 ETH0.006504674.72174744
Release140431242022-01-20 15:02:19894 days ago1642690939IN
0xe546F8f1...725fab087
0 ETH0.0068621298.09906221
Release140421272022-01-20 11:21:40894 days ago1642677700IN
0xe546F8f1...725fab087
0 ETH0.0060821669.86903047
Release140420962022-01-20 11:14:00894 days ago1642677240IN
0xe546F8f1...725fab087
0 ETH0.0070511381
Release140410772022-01-20 7:33:21894 days ago1642664001IN
0xe546F8f1...725fab087
0 ETH0.0064405792.07268573
Release140325552022-01-18 23:41:06896 days ago1642549266IN
0xe546F8f1...725fab087
0 ETH0.00982713112.88937903
Release140262102022-01-18 0:09:33897 days ago1642464573IN
0xe546F8f1...725fab087
0 ETH0.00913744130.62636075
Release140096032022-01-15 10:56:05899 days ago1642244165IN
0xe546F8f1...725fab087
0 ETH0.0076885109.91268219
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:
Staking

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, Audited
File 1 of 2 : Staking.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/// @notice Wording below needs to properly represent the legal terms so has to be reviewed
/// @notice Comments have been written by the development team and may not represent the actual terms of the contract correctly

/// @title Oiler Staking
/// @author oiler.network
/// @dev that staking contract is fully dependent on the provided reward token and the underlying LP token.
/**
 * @notice Staking contract assumes there is a Staking Program going on until a specified Staking Program End Date.
 * And there is an amount of Oiler tokens that is gonna be given away to incentivise participation in the Staking Program (called StakingFund).
 * 
 * During this Program - users commit to lock tokens for some period of time, earning RewardPoints (if they don't unlock prematurely).
 * RewardPoints multiplier grows linearly with the locking period length (see the formula in calculateStakingRewardPoints() function)
 * 
 * After the end of the Staking Program - the amount of RewardPoints earned by each user is relatively compared to the total RewardPoints
 * earned by all staking participants - and the OIL tokens from StakingFund are divided among them accordingly, by their RewardPoints proportions.
 */
contract Staking {

  /**
   * @dev Saving gas by using lower-bit variables to fit the Stake struct into 256bits
   *
   * LP Tokens are calculated by this formula:
   * LP Tokens = sqrt(tokenAmount * e18 * usdcAmount * e6) =
   *           = sqrt(100 000 000 * usdcAmount * e24) =          // here 100 000 000 is totalSupply of OIL
   *           = sqrt(usdcAmount * e32) =
   *           = sqrt(usdcAmount) * e16
   * 
   * Thus the maximum amount of USDC we can use to not overflow the maximum amount of uint72 (4722 e18) will be:
   *             sqrt(usdcAmount) * e16 < 4722 * e18
   *             sqrt(usdcAmount) < 472 200
   *             usdcAmount < 222 972 840 000
   * Which is over two hundred trillion dollars - the amount highly improbable at our Uniswap pool as for today
   *
   * tokenAmount is limited by LP tokens amount (4722e18 LPs for hundreds of trillions of dollars)   (Range: [0 - 4722 e18]          - uint72 (max 4722 e18))
   * lockingPeriodInBlocks is limited by Staking Program duration (around 700000 blocks)             (Range: [1 - 700000]            - uint24 (max 16 777 215))
   * startBlock is in a typical range of Mainnet, Testnets, local networks blocks range              (Range: [0 - 100 000 000]       - uint32 (max 4 294 967 295))
   * 
   * expectedStakingRewardPoints is limited by:
   * LP tokens amount * lockingPeriodInBlocks * lockingPeriodInBlocks
   * which is:
   * uint72 * uint24 * uint24 = which gives us max uint120, but we use uint128 anyway                (Range: [0 - 1.33 e36]           - uint128 (max 340 e36))
   */
    struct Stake {
        uint72 tokenAmount;                   // Amount of tokens locked in a stake                                                             
        uint24 lockingPeriodInBlocks;         // Arbitrary lock period that will give you a reward                                    
        uint32 startBlock;                    // Start of the locking                                                                            
        uint128 expectedStakingRewardPoints;  // The amount of RewardPoints the stake will earn if not unlocked prematurely    
    }
    
    /// @notice Active stakes for each user
    mapping (address => Stake) public stakes;

    /// @notice "Reward points" each user earned (would be relative to totalRewardPoints to get the percentage)
    mapping (address => uint256) public rewardPointsEarned;
    
    /// @notice Total "reward points" all users earned
    uint256 public totalRewardPoints;
    /// @notice Block when Staking Program ends          
    uint256 immutable public stakingProgramEndsBlock;
    /// @notice Amount of Staking Bonus Fund (500 000 OIL), Oiler funds must be here, approved and ready to be transferredFrom
    uint256 immutable public stakingFundAmount;
    
    /// @notice Uniswap pool that we accept LP tokens from
    IERC20 public poolToken;
    /// @notice Oiler token that will be given as a reward
    IERC20 immutable public oilerToken;
    
    /// @notice The amount of OIL tokens earned, granted to be released during vesting period 
    mapping (address => uint256) public grantedTokens;
    /// @notice The amount of OIL tokens that were already released during vesting period
    mapping (address => uint256) public releasedTokens;
    
    /// @dev In blocks - should be around 100 days
    uint256 immutable public vestingDuration;

    /// @dev Check if poolToken was initialized
    modifier poolTokenSet() {
        require(address(poolToken) != address(0x0), "poolToken not set");
        _;
    }

    /// @dev Owner is used only in setPoolToken()
    address immutable public owner;

    /// @dev Used only in setPoolToken()
    modifier onlyOwner() {
        require(msg.sender == owner, "Can only be called by owner");
        _;
    }

    /**
     * @dev before deploying the stakingFundAddress must have set allowances on behalf of that contract. The address can be predicted basing on the CREATE or CREATE2 opcode.
     * @param oilerToken_ - address of the token in which rewards will be payed off.
     * @param stakingDurationInBlocks_ - Number of blocks after which staking will end.
     * @param stakingFundAmount_ - Amount of tokens to be payed of as rewards.
     * @param vestingDuration_ - Number of blocks after which OIL tokens earned by staking will be released (duration of Vesting period).
     * @param owner_ - Owner of the contract (is used to initialize poolToken after it's available).
     */
    constructor(address oilerToken_, uint256 stakingDurationInBlocks_, uint256 stakingFundAmount_, uint256 vestingDuration_, address owner_) {
        require(owner_ != address(0x0), "Owner address cannot be zero");
        owner = owner_;

        require(oilerToken_ != address(0x0), "oilerToken address cannot be zero");
        oilerToken = IERC20(oilerToken_);
        
        stakingProgramEndsBlock = block.number + stakingDurationInBlocks_;
        vestingDuration = vestingDuration_;

        
        stakingFundAmount = stakingFundAmount_;
    }

    /// @notice Initialize poolToken when OIL<>USDC Uniswap pool is available
    function setPoolToken(address poolToken_, address stakingFundAddress_) public onlyOwner {
        require(address(poolToken) == address(0x0), "poolToken was already set");
        require(poolToken_ != address(0x0), "poolToken address cannot be zero");
        poolToken = IERC20(poolToken_);
        // Transfer the Staking Bonus Funds from stakingFundAddress here
        require(IERC20(oilerToken).balanceOf(stakingFundAddress_) >= stakingFundAmount, "StakingFund doesn't have enough OIL balance");
        require(IERC20(oilerToken).allowance(stakingFundAddress_, address(this)) >= stakingFundAmount, "StakingFund doesn't have enough allowance");
        require(IERC20(oilerToken).transferFrom(stakingFundAddress_, address(this), stakingFundAmount), "TransferFrom of OIL from StakingFund failed");
    }

    /**
     * @notice Calculates the RewardPoints user will earn for a given tokenAmount locked for a given period
     * @dev If any parameter is zero - it will fail, thus we save gas on "requires" by not checking in other places
     * @param tokenAmount_ - Amount of tokens to be stake.
     * @param lockingPeriodInBlocks_ - Lock duration defined in blocks.
     */
    function calculateStakingRewardPoints(uint72 tokenAmount_, uint24 lockingPeriodInBlocks_) public pure returns (uint128) {
        //
        //                         /                                   \
        //  stakingRewardPoints = ( tokenAmount * lockingPeriodInBlocks )  *  lockingPeriodInBlocks
        //                         \                                   /
        //

        uint256 stakingRewardPoints = uint256(tokenAmount_) * uint256(lockingPeriodInBlocks_) * uint256(lockingPeriodInBlocks_);
        require(stakingRewardPoints > 0, "Neither tokenAmount nor lockingPeriod couldn't be 0");
        return uint128(stakingRewardPoints);
    }

    /**
     * @notice Lock the LP tokens for a specified period of Blocks.
     * @notice Can only be called before Staking Program ends.
     * @notice And the locking period can't last longer than the end of Staking Program block.
     * @param tokenAmount_ - Amount of LP tokens to be locked.
     * @param lockingPeriodInBlocks_ - locking period duration defined in blocks.
     */
    function lockTokens(uint72 tokenAmount_, uint24 lockingPeriodInBlocks_) public poolTokenSet {
        // Here we don't check lockingPeriodInBlocks_ for being non-zero, cause its happening in calculateStakingRewardPoints() calculation
        require(block.number <= stakingProgramEndsBlock - lockingPeriodInBlocks_, "Your lock period exceeds Staking Program duration");
        require(stakes[msg.sender].tokenAmount == 0, "Already staking");

        // This is a locking reward - will be earned only after the full lock period is over - otherwise not applicable
        uint128 expectedStakingRewardPoints = calculateStakingRewardPoints(tokenAmount_, lockingPeriodInBlocks_);

        Stake memory stake = Stake(tokenAmount_, lockingPeriodInBlocks_, uint32(block.number), expectedStakingRewardPoints);
        stakes[msg.sender] = stake;
        
        // We add the rewards initially during locking of tokens, and subtract them later if unlocking is made prematurely
        // That prevents us from waiting for all users to unlock to distribute the rewards after Staking Program Ends
        totalRewardPoints += expectedStakingRewardPoints;
        rewardPointsEarned[msg.sender] += expectedStakingRewardPoints;
        
        // We transfer LP tokens from user to this contract, "locking" them
        // We don't check for allowances or balance cause it's done within the transferFrom() and would only raise gas costs
        require(poolToken.transferFrom(msg.sender, address(this), tokenAmount_), "TransferFrom of poolTokens failed");

        emit StakeLocked(msg.sender, tokenAmount_, lockingPeriodInBlocks_, expectedStakingRewardPoints);
    }

    /**
     * @notice Unlock the tokens and get the reward
     * @notice This can be called at any time, even after Staking Program end block
     */
    function unlockTokens() public poolTokenSet {
        Stake memory stake = stakes[msg.sender];

        uint256 stakeAmount = stake.tokenAmount;

        require(stakeAmount != 0, "You don't have a stake to unlock");

        require(block.number > stake.startBlock, "You can't withdraw the stake in the same block it was locked");

        // Check if the unlock is called prematurely - and subtract the reward if it is the case
        _punishEarlyWithdrawal(stake);

        // Zero the Stake - to protect from double-unlocking and to be able to stake again
        delete stakes[msg.sender];

        require(poolToken.transfer(msg.sender, stakeAmount), "Pool token transfer failed");
    }
    
    /**
     * @notice If the unlock is called prematurely - we subtract the bonus
     */
    function _punishEarlyWithdrawal(Stake memory stake_) internal {
        // As any of the locking periods can't be longer than Staking Program end block - this will automatically mean that if called after Staking Program end - all stakes locking periods are over
        // So no rewards can be manipulated after Staking Program ends
        if (block.number < (stake_.startBlock + stake_.lockingPeriodInBlocks)) { // lt - cause you can only withdraw at or after startBlock + lockPeriod
            rewardPointsEarned[msg.sender] -= stake_.expectedStakingRewardPoints;
            totalRewardPoints -= stake_.expectedStakingRewardPoints;
            emit StakeUnlockedPrematurely(msg.sender, stake_.tokenAmount, stake_.lockingPeriodInBlocks, block.number - stake_.startBlock);
        } else {
            emit StakeUnlocked(msg.sender, stake_.tokenAmount, stake_.lockingPeriodInBlocks, stake_.expectedStakingRewardPoints);
        }
    }
    
    /** 
     * @notice This can only be called after the Staking Program ended
     * @dev Which means that all stakes lock periods are already over, and totalRewardPoints value isn't changing anymore - so we can now calculate the percentages of rewards
     */
    function getRewards() public {
        require(block.number > stakingProgramEndsBlock, "You can only get Rewards after Staking Program ends");
        require(stakes[msg.sender].tokenAmount == 0, "You still have a stake locked - please unlock first, don't leave free money here");
        require(rewardPointsEarned[msg.sender] > 0, "You don't have any rewardPoints");
        
        // The amount earned is calculated as:
        //
        //                                  user RewardPoints earned during Staking Program
        // amountEarned = stakingFund * -------------------------------------------------------
        //                                 total RewardPoints earned by everyone participated
        //
        // Division always rounds towards zero in solidity.
        // And because of this rounding somebody always misses the fractional part of their earnings and gets only integer amount.
        // Thus the worst thing that can happen is amountEarned becomes 0, and we check for that in _grantTokens()
        uint256 amountEarned = stakingFundAmount * rewardPointsEarned[msg.sender] / totalRewardPoints;
        rewardPointsEarned[msg.sender] = 0; // Zero rewardPoints of a user - so this function can be called only once per user

        _grantTokens(msg.sender, amountEarned); // Grant OIL reward earned by user for future vesting during the Vesting period
    }
    
    //////////////////////////////////////////////////////
    //
    //     VESTING PART
    //
    //////////////////////////////////////////////////////
    

    /**
     * @param recipient_ - Recipient of granted tokens
     * @param amountEarned_ - Amount of tokens earned to be granted
     */
    function _grantTokens(address recipient_, uint256 amountEarned_) internal {
        require(amountEarned_ > 0, "You didn't earn any integer amount of wei");
        require(recipient_ != address(0), "TokenVesting: beneficiary is the zero address");
        grantedTokens[recipient_] = amountEarned_;
        emit RewardGranted(recipient_, amountEarned_);
    }
    
    /// @notice Releases granted tokens
    function release() public {
        uint256 releasable = _releasableAmount(msg.sender);
        require(releasable > 0, "Vesting release: no tokens are due");

        releasedTokens[msg.sender] += releasable;
        require(oilerToken.transfer(msg.sender, releasable), "Reward oilers transfer failed");

        emit grantedTokensReleased(msg.sender, releasable);
    }
    
    /// @notice Releasable amount is what is available at a given time minus what was already withdrawn
    function _releasableAmount(address recipient_) internal view returns (uint256) {
        return _vestedAmount(recipient_) - releasedTokens[recipient_];
    }
    
    /**
     * @notice The output of this function gradually changes from [0.. to ..grantedAmount] while the vesting is going
     * @param recipient_ - vested tokens recipient
     * @return vested amount
     */
    function _vestedAmount(address recipient_) internal view returns (uint256) {
        if (block.number >= stakingProgramEndsBlock + vestingDuration) {
            // Return the full granted amount if Vesting Period is over
            return grantedTokens[recipient_];
        } else {
            // Return the proportional amount if Vesting Period is still going
            return grantedTokens[recipient_] * (block.number - stakingProgramEndsBlock) / vestingDuration;
        }
    }
    
    event StakeLocked(address recipient, uint256 tokenAmount, uint256 lockingPeriodInBlocks, uint256 expectedStakingRewardPoints);
    event StakeUnlockedPrematurely(address recipient, uint256 tokenAmount, uint256 lockingPeriodInBlocks, uint256 actualLockingPeriodInBlocks);
    event StakeUnlocked(address recipient, uint256 tokenAmount, uint256 lockingPeriodInBlocks, uint256 rewardPoints);
    event RewardGranted(address recipient, uint256 amountEarned);
    event grantedTokensReleased(address recipient, uint256 amount);
}

File 2 of 2 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 999999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"oilerToken_","type":"address"},{"internalType":"uint256","name":"stakingDurationInBlocks_","type":"uint256"},{"internalType":"uint256","name":"stakingFundAmount_","type":"uint256"},{"internalType":"uint256","name":"vestingDuration_","type":"uint256"},{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountEarned","type":"uint256"}],"name":"RewardGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockingPeriodInBlocks","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expectedStakingRewardPoints","type":"uint256"}],"name":"StakeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockingPeriodInBlocks","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPoints","type":"uint256"}],"name":"StakeUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockingPeriodInBlocks","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"actualLockingPeriodInBlocks","type":"uint256"}],"name":"StakeUnlockedPrematurely","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"grantedTokensReleased","type":"event"},{"inputs":[{"internalType":"uint72","name":"tokenAmount_","type":"uint72"},{"internalType":"uint24","name":"lockingPeriodInBlocks_","type":"uint24"}],"name":"calculateStakingRewardPoints","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"grantedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"tokenAmount_","type":"uint72"},{"internalType":"uint24","name":"lockingPeriodInBlocks_","type":"uint24"}],"name":"lockTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oilerToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"releasedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardPointsEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"poolToken_","type":"address"},{"internalType":"address","name":"stakingFundAddress_","type":"address"}],"name":"setPoolToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakes","outputs":[{"internalType":"uint72","name":"tokenAmount","type":"uint72"},{"internalType":"uint24","name":"lockingPeriodInBlocks","type":"uint24"},{"internalType":"uint32","name":"startBlock","type":"uint32"},{"internalType":"uint128","name":"expectedStakingRewardPoints","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingFundAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingProgramEndsBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vestingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6101206040523480156200001257600080fd5b506040516200206c3803806200206c833981016040819052620000359162000154565b6001600160a01b038116620000915760405162461bcd60e51b815260206004820152601c60248201527f4f776e657220616464726573732063616e6e6f74206265207a65726f0000000060448201526064015b60405180910390fd5b6001600160601b0319606082901b16610100526001600160a01b038516620001065760405162461bcd60e51b815260206004820152602160248201527f6f696c6572546f6b656e20616464726573732063616e6e6f74206265207a65726044820152606f60f81b606482015260840162000088565b6001600160601b0319606086901b1660c052620001248443620001a8565b6080525060e05260a05250620001cd9050565b80516001600160a01b03811681146200014f57600080fd5b919050565b600080600080600060a086880312156200016c578081fd5b620001778662000137565b94506020860151935060408601519250606086015191506200019c6080870162000137565b90509295509295909350565b60008219821115620001c857634e487b7160e01b81526011600452602481fd5b500190565b60805160a05160c05160601c60e0516101005160601c611deb62000281600039600081816103150152610e0401526000818161012f01528181611ac70152611b3d0152600081816102c101528181610cb80152818161101f01528181611194015261130f015260008181610246015281816105f601528181610ffd0152818161117201526112e901526000818161033c015281816103e4015281816106ce01528181611ae80152611b610152611deb6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806386d1a69f116100b2578063c959360b11610081578063e0e4a72211610066578063e0e4a722146103a7578063f6ffab88146103c7578063f968f493146103da57600080fd5b8063c959360b14610367578063cbdf382c1461038757600080fd5b806386d1a69f146103085780638da5cb5b14610310578063bc0925ae14610337578063c2e8caf61461035e57600080fd5b806352946b04116100ee57806352946b041461024157806370ff852b14610268578063798633b91461028857806381e9207d146102bc57600080fd5b80630572b0cc146101205780631514617e1461012a57806316934fc414610164578063378592c81461022e575b600080fd5b6101286103e2565b005b6101517f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101e1610172366004611be9565b60006020819052908152604090205468ffffffffffffffffff8116906901000000000000000000810462ffffff16906c01000000000000000000000000810463ffffffff169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1684565b6040805168ffffffffffffffffff909516855262ffffff909316602085015263ffffffff909116918301919091526fffffffffffffffffffffffffffffffff16606082015260800161015b565b61012861023c366004611c6d565b610644565b6101517f000000000000000000000000000000000000000000000000000000000000000081565b610151610276366004611be9565b60056020526000908152604090205481565b61029b610296366004611c6d565b610b01565b6040516fffffffffffffffffffffffffffffffff909116815260200161015b565b6102e37f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015b565b610128610bc2565b6102e37f000000000000000000000000000000000000000000000000000000000000000081565b6101517f000000000000000000000000000000000000000000000000000000000000000081565b61015160025481565b610151610375366004611be9565b60016020526000908152604090205481565b6003546102e39073ffffffffffffffffffffffffffffffffffffffff1681565b6101516103b5366004611be9565b60046020526000908152604090205481565b6101286103d5366004611c03565b610dec565b61012861141b565b7f00000000000000000000000000000000000000000000000000000000000000004311610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f596f752063616e206f6e6c79206765742052657761726473206166746572205360448201527f74616b696e672050726f6772616d20656e64730000000000000000000000000060648201526084015b60405180910390fd5b3360009081526020819052604090205468ffffffffffffffffff1615610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f596f75207374696c6c20686176652061207374616b65206c6f636b6564202d2060448201527f706c6561736520756e6c6f636b2066697273742c20646f6e2774206c6561766560648201527f2066726565206d6f6e6579206865726500000000000000000000000000000000608482015260a40161048d565b336000908152600160205260409020546105da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f596f7520646f6e2774206861766520616e7920726577617264506f696e747300604482015260640161048d565b6002543360009081526001602052604081205490919061061a907f0000000000000000000000000000000000000000000000000000000000000000611d32565b6106249190611cf9565b336000818152600160205260408120559091506106419082611752565b50565b60035473ffffffffffffffffffffffffffffffffffffffff166106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f706f6f6c546f6b656e206e6f7420736574000000000000000000000000000000604482015260640161048d565b6106f262ffffff82167f0000000000000000000000000000000000000000000000000000000000000000611d6f565b431115610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f596f7572206c6f636b20706572696f642065786365656473205374616b696e6760448201527f2050726f6772616d206475726174696f6e000000000000000000000000000000606482015260840161048d565b3360009081526020819052604090205468ffffffffffffffffff1615610803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416c7265616479207374616b696e670000000000000000000000000000000000604482015260640161048d565b600061080f8383610b01565b6040805160808101825268ffffffffffffffffff868116825262ffffff86811660208085019182524363ffffffff9081168688019081526fffffffffffffffffffffffffffffffff898116606089018181523360009081529586905299852089518154975194519b5199167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009097169690961769010000000000000000009390971692909202959095176bffffffffffffffffffffffff166c0100000000000000000000000098909216979097028416177001000000000000000000000000000000009490931693909302919091179055600280549495509193610914908490611cb9565b909155505033600090815260016020526040812080546fffffffffffffffffffffffffffffffff8516929061094a908490611cb9565b90915550506003546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015268ffffffffffffffffff8616604482015273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd90606401602060405180830381600087803b1580156109d157600080fd5b505af11580156109e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a099190611c35565b610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5472616e7366657246726f6d206f6620706f6f6c546f6b656e73206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161048d565b6040805133815268ffffffffffffffffff8616602082015262ffffff8516818301526fffffffffffffffffffffffffffffffff8416606082015290517fe7dbea143058f90be7a1644e539342c25ddc5379868fe922bab596de99debf419181900360800190a150505050565b60008062ffffff8316610b1f8168ffffffffffffffffff8716611d32565b610b299190611d32565b905060008111610bbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4e65697468657220746f6b656e416d6f756e74206e6f72206c6f636b696e675060448201527f6572696f6420636f756c646e2774206265203000000000000000000000000000606482015260840161048d565b9392505050565b6000610bcd336118ea565b905060008111610c5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f56657374696e672072656c656173653a206e6f20746f6b656e7320617265206460448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161048d565b3360009081526005602052604081208054839290610c7e908490611cb9565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb90604401602060405180830381600087803b158015610d1157600080fd5b505af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611c35565b610daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f526577617264206f696c657273207472616e73666572206661696c6564000000604482015260640161048d565b60408051338152602081018390527f769d4212c4fbfaa012a896b49e0f3bb14d32dd0d60ce1a13d357ee6b69db77c291015b60405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c792062652063616c6c6564206279206f776e65720000000000604482015260640161048d565b60035473ffffffffffffffffffffffffffffffffffffffff1615610f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f706f6f6c546f6b656e2077617320616c72656164792073657400000000000000604482015260640161048d565b73ffffffffffffffffffffffffffffffffffffffff8216610f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f706f6f6c546f6b656e20616464726573732063616e6e6f74206265207a65726f604482015260640161048d565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff848116919091179091556040517f70a0823100000000000000000000000000000000000000000000000000000000815282821660048201527f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561106157600080fd5b505afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190611c55565b1015611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f5374616b696e6746756e6420646f65736e2774206861766520656e6f7567682060448201527f4f494c2062616c616e6365000000000000000000000000000000000000000000606482015260840161048d565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e9060440160206040518083038186803b1580156111d857600080fd5b505afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190611c55565b101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5374616b696e6746756e6420646f65736e2774206861766520656e6f7567682060448201527f616c6c6f77616e63650000000000000000000000000000000000000000000000606482015260840161048d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523060248301527f000000000000000000000000000000000000000000000000000000000000000060448301527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401602060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138b9190611c35565b611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f5472616e7366657246726f6d206f66204f494c2066726f6d205374616b696e6760448201527f46756e64206661696c6564000000000000000000000000000000000000000000606482015260840161048d565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1661149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f706f6f6c546f6b656e206e6f7420736574000000000000000000000000000000604482015260640161048d565b33600090815260208181526040918290208251608081018452905468ffffffffffffffffff81168083526901000000000000000000820462ffffff16938301939093526c01000000000000000000000000810463ffffffff16938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff1660608301528061158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f596f7520646f6e277420686176652061207374616b6520746f20756e6c6f636b604482015260640161048d565b816040015163ffffffff164311611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f596f752063616e277420776974686472617720746865207374616b6520696e2060448201527f7468652073616d6520626c6f636b20697420776173206c6f636b656400000000606482015260840161048d565b61162f82611929565b336000818152602081905260408082209190915560035490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101929092526024820183905273ffffffffffffffffffffffffffffffffffffffff169063a9059cbb90604401602060405180830381600087803b1580156116b457600080fd5b505af11580156116c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ec9190611c35565b611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f506f6f6c20746f6b656e207472616e73666572206661696c6564000000000000604482015260640161048d565b600081116117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f596f75206469646e2774206561726e20616e7920696e746567657220616d6f7560448201527f6e74206f66207765690000000000000000000000000000000000000000000000606482015260840161048d565b73ffffffffffffffffffffffffffffffffffffffff8216611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f546f6b656e56657374696e673a2062656e65666963696172792069732074686560448201527f207a65726f206164647265737300000000000000000000000000000000000000606482015260840161048d565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260046020908152604091829020849055815192835282018390527f6e1afd29522b0aaf986597bcc53f5fb4daae2af7cfd41d00c384ab1bdf912b23910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205461191983611ac0565b6119239190611d6f565b92915050565b806020015162ffffff1681604001516119429190611cd1565b63ffffffff16431015611a4957606081015133600090815260016020526040812080546fffffffffffffffffffffffffffffffff90931692909190611988908490611d6f565b9250508190555080606001516fffffffffffffffffffffffffffffffff16600260008282546119b79190611d6f565b90915550508051602082015160408301517f6c6f3c7d8c87976393011cc962da12841024bc1d62d2de21716a6306ab314ef392339290916119fe9063ffffffff1643611d6f565b6040805173ffffffffffffffffffffffffffffffffffffffff909516855268ffffffffffffffffff909316602085015262ffffff909116918301919091526060820152608001610de1565b80516020808301516060808501516040805133815268ffffffffffffffffff9096169486019490945262ffffff909216928401929092526fffffffffffffffffffffffffffffffff16908201527f391930ab48e95a9040c849cc86e1b2f63c711a1f59d6e324ce775dc9a005105690608001610de1565b6000611b0c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611cb9565b4310611b3b575073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b7f0000000000000000000000000000000000000000000000000000000000000000611b867f000000000000000000000000000000000000000000000000000000000000000043611d6f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040902054611bb69190611d32565b6119239190611cf9565b919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611bc057600080fd5b600060208284031215611bfa578081fd5b610bbb82611bc5565b60008060408385031215611c15578081fd5b611c1e83611bc5565b9150611c2c60208401611bc5565b90509250929050565b600060208284031215611c46578081fd5b81518015158114610bbb578182fd5b600060208284031215611c66578081fd5b5051919050565b60008060408385031215611c7f578182fd5b823568ffffffffffffffffff81168114611c97578283fd5b9150602083013562ffffff81168114611cae578182fd5b809150509250929050565b60008219821115611ccc57611ccc611d86565b500190565b600063ffffffff808316818516808303821115611cf057611cf0611d86565b01949350505050565b600082611d2d577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d6a57611d6a611d86565b500290565b600082821015611d8157611d81611d86565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212209f66dbf510b376427fca8720389e11278fd0dc3e23141d190dd4f4b4d69aa74e64736f6c634300080400330000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a500000000000000000000000000000000000000000000000000000000000a12200000000000000000000000000000000000000000000069e10de76676d080000000000000000000000000000000000000000000000000000000000000000a1220000000000000000000000000a94db69502920a657f8685978e62d3e3b9762adf

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061011b5760003560e01c806386d1a69f116100b2578063c959360b11610081578063e0e4a72211610066578063e0e4a722146103a7578063f6ffab88146103c7578063f968f493146103da57600080fd5b8063c959360b14610367578063cbdf382c1461038757600080fd5b806386d1a69f146103085780638da5cb5b14610310578063bc0925ae14610337578063c2e8caf61461035e57600080fd5b806352946b04116100ee57806352946b041461024157806370ff852b14610268578063798633b91461028857806381e9207d146102bc57600080fd5b80630572b0cc146101205780631514617e1461012a57806316934fc414610164578063378592c81461022e575b600080fd5b6101286103e2565b005b6101517f00000000000000000000000000000000000000000000000000000000000a122081565b6040519081526020015b60405180910390f35b6101e1610172366004611be9565b60006020819052908152604090205468ffffffffffffffffff8116906901000000000000000000810462ffffff16906c01000000000000000000000000810463ffffffff169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1684565b6040805168ffffffffffffffffff909516855262ffffff909316602085015263ffffffff909116918301919091526fffffffffffffffffffffffffffffffff16606082015260800161015b565b61012861023c366004611c6d565b610644565b6101517f0000000000000000000000000000000000000000000069e10de76676d080000081565b610151610276366004611be9565b60056020526000908152604090205481565b61029b610296366004611c6d565b610b01565b6040516fffffffffffffffffffffffffffffffff909116815260200161015b565b6102e37f0000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a581565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015b565b610128610bc2565b6102e37f000000000000000000000000a94db69502920a657f8685978e62d3e3b9762adf81565b6101517f0000000000000000000000000000000000000000000000000000000000c7693b81565b61015160025481565b610151610375366004611be9565b60016020526000908152604090205481565b6003546102e39073ffffffffffffffffffffffffffffffffffffffff1681565b6101516103b5366004611be9565b60046020526000908152604090205481565b6101286103d5366004611c03565b610dec565b61012861141b565b7f0000000000000000000000000000000000000000000000000000000000c7693b4311610496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f596f752063616e206f6e6c79206765742052657761726473206166746572205360448201527f74616b696e672050726f6772616d20656e64730000000000000000000000000060648201526084015b60405180910390fd5b3360009081526020819052604090205468ffffffffffffffffff1615610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f596f75207374696c6c20686176652061207374616b65206c6f636b6564202d2060448201527f706c6561736520756e6c6f636b2066697273742c20646f6e2774206c6561766560648201527f2066726565206d6f6e6579206865726500000000000000000000000000000000608482015260a40161048d565b336000908152600160205260409020546105da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f596f7520646f6e2774206861766520616e7920726577617264506f696e747300604482015260640161048d565b6002543360009081526001602052604081205490919061061a907f0000000000000000000000000000000000000000000069e10de76676d0800000611d32565b6106249190611cf9565b336000818152600160205260408120559091506106419082611752565b50565b60035473ffffffffffffffffffffffffffffffffffffffff166106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f706f6f6c546f6b656e206e6f7420736574000000000000000000000000000000604482015260640161048d565b6106f262ffffff82167f0000000000000000000000000000000000000000000000000000000000c7693b611d6f565b431115610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f596f7572206c6f636b20706572696f642065786365656473205374616b696e6760448201527f2050726f6772616d206475726174696f6e000000000000000000000000000000606482015260840161048d565b3360009081526020819052604090205468ffffffffffffffffff1615610803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416c7265616479207374616b696e670000000000000000000000000000000000604482015260640161048d565b600061080f8383610b01565b6040805160808101825268ffffffffffffffffff868116825262ffffff86811660208085019182524363ffffffff9081168688019081526fffffffffffffffffffffffffffffffff898116606089018181523360009081529586905299852089518154975194519b5199167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009097169690961769010000000000000000009390971692909202959095176bffffffffffffffffffffffff166c0100000000000000000000000098909216979097028416177001000000000000000000000000000000009490931693909302919091179055600280549495509193610914908490611cb9565b909155505033600090815260016020526040812080546fffffffffffffffffffffffffffffffff8516929061094a908490611cb9565b90915550506003546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015268ffffffffffffffffff8616604482015273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd90606401602060405180830381600087803b1580156109d157600080fd5b505af11580156109e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a099190611c35565b610a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5472616e7366657246726f6d206f6620706f6f6c546f6b656e73206661696c6560448201527f6400000000000000000000000000000000000000000000000000000000000000606482015260840161048d565b6040805133815268ffffffffffffffffff8616602082015262ffffff8516818301526fffffffffffffffffffffffffffffffff8416606082015290517fe7dbea143058f90be7a1644e539342c25ddc5379868fe922bab596de99debf419181900360800190a150505050565b60008062ffffff8316610b1f8168ffffffffffffffffff8716611d32565b610b299190611d32565b905060008111610bbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4e65697468657220746f6b656e416d6f756e74206e6f72206c6f636b696e675060448201527f6572696f6420636f756c646e2774206265203000000000000000000000000000606482015260840161048d565b9392505050565b6000610bcd336118ea565b905060008111610c5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f56657374696e672072656c656173653a206e6f20746f6b656e7320617265206460448201527f7565000000000000000000000000000000000000000000000000000000000000606482015260840161048d565b3360009081526005602052604081208054839290610c7e908490611cb9565b90915550506040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f0000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a573ffffffffffffffffffffffffffffffffffffffff169063a9059cbb90604401602060405180830381600087803b158015610d1157600080fd5b505af1158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d499190611c35565b610daf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f526577617264206f696c657273207472616e73666572206661696c6564000000604482015260640161048d565b60408051338152602081018390527f769d4212c4fbfaa012a896b49e0f3bb14d32dd0d60ce1a13d357ee6b69db77c291015b60405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000a94db69502920a657f8685978e62d3e3b9762adf1614610e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e206f6e6c792062652063616c6c6564206279206f776e65720000000000604482015260640161048d565b60035473ffffffffffffffffffffffffffffffffffffffff1615610f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f706f6f6c546f6b656e2077617320616c72656164792073657400000000000000604482015260640161048d565b73ffffffffffffffffffffffffffffffffffffffff8216610f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f706f6f6c546f6b656e20616464726573732063616e6e6f74206265207a65726f604482015260640161048d565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff848116919091179091556040517f70a0823100000000000000000000000000000000000000000000000000000000815282821660048201527f0000000000000000000000000000000000000000000069e10de76676d0800000917f0000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a516906370a082319060240160206040518083038186803b15801561106157600080fd5b505afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190611c55565b1015611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f5374616b696e6746756e6420646f65736e2774206861766520656e6f7567682060448201527f4f494c2062616c616e6365000000000000000000000000000000000000000000606482015260840161048d565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523060248301527f0000000000000000000000000000000000000000000069e10de76676d0800000917f0000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a59091169063dd62ed3e9060440160206040518083038186803b1580156111d857600080fd5b505afa1580156111ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112109190611c55565b101561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f5374616b696e6746756e6420646f65736e2774206861766520656e6f7567682060448201527f616c6c6f77616e63650000000000000000000000000000000000000000000000606482015260840161048d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523060248301527f0000000000000000000000000000000000000000000069e10de76676d080000060448301527f0000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a516906323b872dd90606401602060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138b9190611c35565b611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f5472616e7366657246726f6d206f66204f494c2066726f6d205374616b696e6760448201527f46756e64206661696c6564000000000000000000000000000000000000000000606482015260840161048d565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1661149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f706f6f6c546f6b656e206e6f7420736574000000000000000000000000000000604482015260640161048d565b33600090815260208181526040918290208251608081018452905468ffffffffffffffffff81168083526901000000000000000000820462ffffff16938301939093526c01000000000000000000000000810463ffffffff16938201939093527001000000000000000000000000000000009092046fffffffffffffffffffffffffffffffff1660608301528061158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f596f7520646f6e277420686176652061207374616b6520746f20756e6c6f636b604482015260640161048d565b816040015163ffffffff164311611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f596f752063616e277420776974686472617720746865207374616b6520696e2060448201527f7468652073616d6520626c6f636b20697420776173206c6f636b656400000000606482015260840161048d565b61162f82611929565b336000818152602081905260408082209190915560035490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101929092526024820183905273ffffffffffffffffffffffffffffffffffffffff169063a9059cbb90604401602060405180830381600087803b1580156116b457600080fd5b505af11580156116c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ec9190611c35565b611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f506f6f6c20746f6b656e207472616e73666572206661696c6564000000000000604482015260640161048d565b600081116117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f596f75206469646e2774206561726e20616e7920696e746567657220616d6f7560448201527f6e74206f66207765690000000000000000000000000000000000000000000000606482015260840161048d565b73ffffffffffffffffffffffffffffffffffffffff8216611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f546f6b656e56657374696e673a2062656e65666963696172792069732074686560448201527f207a65726f206164647265737300000000000000000000000000000000000000606482015260840161048d565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260046020908152604091829020849055815192835282018390527f6e1afd29522b0aaf986597bcc53f5fb4daae2af7cfd41d00c384ab1bdf912b23910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205461191983611ac0565b6119239190611d6f565b92915050565b806020015162ffffff1681604001516119429190611cd1565b63ffffffff16431015611a4957606081015133600090815260016020526040812080546fffffffffffffffffffffffffffffffff90931692909190611988908490611d6f565b9250508190555080606001516fffffffffffffffffffffffffffffffff16600260008282546119b79190611d6f565b90915550508051602082015160408301517f6c6f3c7d8c87976393011cc962da12841024bc1d62d2de21716a6306ab314ef392339290916119fe9063ffffffff1643611d6f565b6040805173ffffffffffffffffffffffffffffffffffffffff909516855268ffffffffffffffffff909316602085015262ffffff909116918301919091526060820152608001610de1565b80516020808301516060808501516040805133815268ffffffffffffffffff9096169486019490945262ffffff909216928401929092526fffffffffffffffffffffffffffffffff16908201527f391930ab48e95a9040c849cc86e1b2f63c711a1f59d6e324ce775dc9a005105690608001610de1565b6000611b0c7f00000000000000000000000000000000000000000000000000000000000a12207f0000000000000000000000000000000000000000000000000000000000c7693b611cb9565b4310611b3b575073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b7f00000000000000000000000000000000000000000000000000000000000a1220611b867f0000000000000000000000000000000000000000000000000000000000c7693b43611d6f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020526040902054611bb69190611d32565b6119239190611cf9565b919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611bc057600080fd5b600060208284031215611bfa578081fd5b610bbb82611bc5565b60008060408385031215611c15578081fd5b611c1e83611bc5565b9150611c2c60208401611bc5565b90509250929050565b600060208284031215611c46578081fd5b81518015158114610bbb578182fd5b600060208284031215611c66578081fd5b5051919050565b60008060408385031215611c7f578182fd5b823568ffffffffffffffffff81168114611c97578283fd5b9150602083013562ffffff81168114611cae578182fd5b809150509250929050565b60008219821115611ccc57611ccc611d86565b500190565b600063ffffffff808316818516808303821115611cf057611cf0611d86565b01949350505050565b600082611d2d577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d6a57611d6a611d86565b500290565b600082821015611d8157611d81611d86565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212209f66dbf510b376427fca8720389e11278fd0dc3e23141d190dd4f4b4d69aa74e64736f6c63430008040033

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

0000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a500000000000000000000000000000000000000000000000000000000000a12200000000000000000000000000000000000000000000069e10de76676d080000000000000000000000000000000000000000000000000000000000000000a1220000000000000000000000000a94db69502920a657f8685978e62d3e3b9762adf

-----Decoded View---------------
Arg [0] : oilerToken_ (address): 0x0275E1001e293C46CFe158B3702AADe0B99f88a5
Arg [1] : stakingDurationInBlocks_ (uint256): 660000
Arg [2] : stakingFundAmount_ (uint256): 500000000000000000000000
Arg [3] : vestingDuration_ (uint256): 660000
Arg [4] : owner_ (address): 0xA94db69502920A657F8685978e62D3E3B9762adf

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000275e1001e293c46cfe158b3702aade0b99f88a5
Arg [1] : 00000000000000000000000000000000000000000000000000000000000a1220
Arg [2] : 0000000000000000000000000000000000000000000069e10de76676d0800000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000a1220
Arg [4] : 000000000000000000000000a94db69502920a657f8685978e62d3e3b9762adf


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.