ETH Price: $3,215.14 (-1.72%)

Contract

0x229443bf7F1297192394B7127427DB172a5bDe9E
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Get Reward180537072023-09-03 4:52:59504 days ago1693716779IN
0x229443bf...72a5bDe9E
0 ETH0.00102615
Get Reward173518602023-05-27 17:24:35603 days ago1685208275IN
0x229443bf...72a5bDe9E
0 ETH0.0020251831.67372675
Get Reward173505832023-05-27 13:07:35603 days ago1685192855IN
0x229443bf...72a5bDe9E
0 ETH0.0016269825.44594539
Get Reward171311492023-04-26 14:58:59634 days ago1682521139IN
0x229443bf...72a5bDe9E
0 ETH0.0016763935.79064868
Get Reward170778852023-04-19 3:06:23641 days ago1681873583IN
0x229443bf...72a5bDe9E
0 ETH0.0036224141.08912855
Get Reward170740202023-04-18 14:01:35642 days ago1681826495IN
0x229443bf...72a5bDe9E
0 ETH0.0072953360.24923109
Get Reward170552912023-04-15 22:17:59644 days ago1681597079IN
0x229443bf...72a5bDe9E
0 ETH0.0018513621
Get Reward170498002023-04-15 3:33:23645 days ago1681529603IN
0x229443bf...72a5bDe9E
0 ETH0.001927121.85915913
Get Reward170391722023-04-13 14:47:59647 days ago1681397279IN
0x229443bf...72a5bDe9E
0 ETH0.0023108536.14155801
Get Reward170384972023-04-13 12:17:35647 days ago1681388255IN
0x229443bf...72a5bDe9E
0 ETH0.0035960730.19731253
Get Reward168394232023-03-16 9:08:35675 days ago1678957715IN
0x229443bf...72a5bDe9E
0 ETH0.0023013218.4569825
Withdraw168197302023-03-13 14:42:11678 days ago1678718531IN
0x229443bf...72a5bDe9E
0 ETH0.0051456953.72471597
Get Reward168184442023-03-13 10:21:35678 days ago1678702895IN
0x229443bf...72a5bDe9E
0 ETH0.0025299420.33950527
Withdraw168184062023-03-13 10:13:59678 days ago1678702439IN
0x229443bf...72a5bDe9E
0 ETH0.0019543820.40518363
Get Reward168183622023-03-13 10:05:11678 days ago1678701911IN
0x229443bf...72a5bDe9E
0 ETH0.0021509223.68865152
Withdraw168183422023-03-13 10:01:11678 days ago1678701671IN
0x229443bf...72a5bDe9E
0 ETH0.004365927.33835439
Withdraw168183412023-03-13 10:00:59678 days ago1678701659IN
0x229443bf...72a5bDe9E
0 ETH0.0049789528.53726687
Get Reward168183302023-03-13 9:58:47678 days ago1678701527IN
0x229443bf...72a5bDe9E
0 ETH0.0022393824.66283317
Withdraw168183292023-03-13 9:58:35678 days ago1678701515IN
0x229443bf...72a5bDe9E
0 ETH0.0044700325.54478716
Withdraw168183032023-03-13 9:53:23678 days ago1678701203IN
0x229443bf...72a5bDe9E
0 ETH0.0046544426.6754864
Withdraw168183022023-03-13 9:53:11678 days ago1678701191IN
0x229443bf...72a5bDe9E
0 ETH0.0042043226.65686034
Get Reward168182812023-03-13 9:48:59678 days ago1678700939IN
0x229443bf...72a5bDe9E
0 ETH0.0033571526.98978629
Get Reward168182792023-03-13 9:48:35678 days ago1678700915IN
0x229443bf...72a5bDe9E
0 ETH0.0029881327.85200468
Withdraw168182742023-03-13 9:47:35678 days ago1678700855IN
0x229443bf...72a5bDe9E
0 ETH0.0045641228.57954456
Withdraw168182702023-03-13 9:46:47678 days ago1678700807IN
0x229443bf...72a5bDe9E
0 ETH0.005082729.03641327
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
180537072023-09-03 4:52:59504 days ago1693716779
0x229443bf...72a5bDe9E
0 ETH
170778852023-04-19 3:06:23641 days ago1681873583
0x229443bf...72a5bDe9E
0 ETH
170740202023-04-18 14:01:35642 days ago1681826495
0x229443bf...72a5bDe9E
0 ETH
170552912023-04-15 22:17:59644 days ago1681597079
0x229443bf...72a5bDe9E
0 ETH
170498002023-04-15 3:33:23645 days ago1681529603
0x229443bf...72a5bDe9E
0 ETH
170384972023-04-13 12:17:35647 days ago1681388255
0x229443bf...72a5bDe9E
0 ETH
170381512023-04-13 11:01:47647 days ago1681383707
0x229443bf...72a5bDe9E
0 ETH
170381512023-04-13 11:01:47647 days ago1681383707
0x229443bf...72a5bDe9E
0 ETH
168394232023-03-16 9:08:35675 days ago1678957715
0x229443bf...72a5bDe9E
0 ETH
168197302023-03-13 14:42:11678 days ago1678718531
0x229443bf...72a5bDe9E
0 ETH
168184442023-03-13 10:21:35678 days ago1678702895
0x229443bf...72a5bDe9E
0 ETH
168184062023-03-13 10:13:59678 days ago1678702439
0x229443bf...72a5bDe9E
0 ETH
168183622023-03-13 10:05:11678 days ago1678701911
0x229443bf...72a5bDe9E
0 ETH
168183452023-03-13 10:01:47678 days ago1678701707
0x229443bf...72a5bDe9E
0 ETH
168183452023-03-13 10:01:47678 days ago1678701707
0x229443bf...72a5bDe9E
0 ETH
168183422023-03-13 10:01:11678 days ago1678701671
0x229443bf...72a5bDe9E
0 ETH
168183412023-03-13 10:00:59678 days ago1678701659
0x229443bf...72a5bDe9E
0 ETH
168183302023-03-13 9:58:47678 days ago1678701527
0x229443bf...72a5bDe9E
0 ETH
168183292023-03-13 9:58:35678 days ago1678701515
0x229443bf...72a5bDe9E
0 ETH
168183212023-03-13 9:56:59678 days ago1678701419
0x229443bf...72a5bDe9E
0 ETH
168183212023-03-13 9:56:59678 days ago1678701419
0x229443bf...72a5bDe9E
0 ETH
168183032023-03-13 9:53:23678 days ago1678701203
0x229443bf...72a5bDe9E
0 ETH
168183022023-03-13 9:53:11678 days ago1678701191
0x229443bf...72a5bDe9E
0 ETH
168182872023-03-13 9:50:11678 days ago1678701011
0x229443bf...72a5bDe9E
0 ETH
168182872023-03-13 9:50:11678 days ago1678701011
0x229443bf...72a5bDe9E
0 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xE5aFE81e...8ce74D570
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
StakingRewards

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion
File 1 of 8 : StakingRewards.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// Inheritance
import "./interfaces/IStakingRewards.sol";
import "./RewardsDistributionRecipient.sol";
import "./vendor/ReentrancyGuard.sol";
import "./Pausable.sol";

// Internal references
import "./Utils.sol";

// Original contract can be found under the following link:
// https://github.com/Synthetixio/synthetix/blob/master/contracts/StakingRewards.sol
contract StakingRewards is IStakingRewards, RewardsDistributionRecipient, ReentrancyGuard, Pausable {
    /* ========== STATE VARIABLES ========== */
    
    address immutable public rewardsToken;
    address immutable public stakingToken;
    uint256 public periodFinish = 0;
    uint256 public rewardRate = 0;
    uint256 public rewardsDuration = 14 days;
    uint256 public lastUpdateTime;
    uint256 public rewardPerTokenStored;

    mapping(address => uint256) public userRewardPerTokenPaid;
    mapping(address => uint256) public rewards;

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    /* ========== CONSTRUCTOR ========== */

    constructor(
        address _owner,
        address _rewardsDistribution,
        address _rewardsToken,
        address _stakingToken
    ) Owned(_owner) {
        rewardsToken = _rewardsToken;
        stakingToken = _stakingToken;
        rewardsDistribution = _rewardsDistribution;
    }

    /* ========== VIEWS ========== */

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function lastTimeRewardApplicable() public view override returns (uint256) {
        return block.timestamp < periodFinish ? block.timestamp : periodFinish;
    }

    function rewardPerToken() public view override returns (uint256) {
        if (_totalSupply == 0) {
            return rewardPerTokenStored;
        }
        return rewardPerTokenStored + ((lastTimeRewardApplicable() - lastUpdateTime) * rewardRate * 1e18 / _totalSupply);
    }

    function earned(address account) public view override returns (uint256) {
        return (_balances[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18) + rewards[account];
    }

    function getRewardForDuration() external view override returns (uint256) {
        return rewardRate * rewardsDuration;
    }

    /* ========== MUTATIVE FUNCTIONS ========== */

    function stake(uint subAccountId, uint256 amount) public override nonReentrant notPaused updateReward(msg.sender) {
        require(amount > 0, "Cannot stake 0");

        address from = Utils.getSubAccount(msg.sender, subAccountId);
        _totalSupply = _totalSupply + amount;
        _balances[msg.sender] = _balances[msg.sender] + amount;
        
        Utils.safeTransferFrom(stakingToken, from, address(this), amount);
        emit Staked(msg.sender, amount);
    }

    function withdraw(uint subAccountId, uint256 amount) public override nonReentrant updateReward(msg.sender) {
        require(amount > 0, "Cannot withdraw 0");

        address to = Utils.getSubAccount(msg.sender, subAccountId);
        _totalSupply = _totalSupply - amount;
        _balances[msg.sender] = _balances[msg.sender] - amount;

        Utils.safeTransfer(stakingToken, to, amount);
        emit Withdrawn(msg.sender, amount);
    }

    function getReward() public override nonReentrant updateReward(msg.sender) {
        uint256 reward = rewards[msg.sender];
        if (reward > 0) {
            rewards[msg.sender] = 0;
            Utils.safeTransfer(rewardsToken, msg.sender, reward);
            emit RewardPaid(msg.sender, reward);
        }
    }

    function exit(uint subAccountId) public override {
        withdraw(subAccountId, _balances[msg.sender]);
        getReward();
    }

    function stake(uint256 amount) external override {
        stake(0, amount);
    }

    function withdraw(uint256 amount) public override {
        withdraw(0, amount);
    }

    function exit() external override {
        exit(0);
    }

    /* ========== RESTRICTED FUNCTIONS ========== */

    function notifyRewardAmount(uint256 reward) external override onlyRewardsDistribution updateReward(address(0)) {
        require(block.timestamp >= periodFinish, "Staking period not finished");

        // Ensure the provided reward amount is not more than the balance in the contract.
        // This keeps the reward rate in the right range, preventing overflows due to
        // very high values of rewardRate in the earned and rewardsPerToken functions;
        uint balance =  IERC20(rewardsToken).balanceOf(address(this));
        require(reward <= balance, "Provided reward too high");

        rewardRate = reward / rewardsDuration;
        lastUpdateTime = block.timestamp;
        periodFinish = block.timestamp + rewardsDuration;
        emit RewardAdded(reward);
    }

    // Added to support recovering LP Rewards from other systems such as BAL to be distributed to holders
    function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner {
        require(tokenAddress != address(stakingToken), "Cannot withdraw the staking token");
        Utils.safeTransfer(tokenAddress, owner, tokenAmount);
        emit Recovered(tokenAddress, tokenAmount);
    }

    function setRewardsDuration(uint256 _rewardsDuration) external onlyOwner {
        require(
            block.timestamp > periodFinish,
            "Previous rewards period must be complete before changing the duration for the new period"
        );
        rewardsDuration = _rewardsDuration;
        emit RewardsDurationUpdated(rewardsDuration);
    }

    /* ========== MODIFIERS ========== */

    modifier updateReward(address account) {
        rewardPerTokenStored = rewardPerToken();
        lastUpdateTime = lastTimeRewardApplicable();
        if (account != address(0)) {
            rewards[account] = earned(account);
            userRewardPerTokenPaid[account] = rewardPerTokenStored;
        }
        _;
    }

    /* ========== EVENTS ========== */

    event RewardAdded(uint256 reward);
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event RewardPaid(address indexed user, uint256 reward);
    event RewardsDurationUpdated(uint256 newDuration);
    event Recovered(address token, uint256 amount);
}

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

pragma solidity ^0.8.0;

// Inheritance
import "./Owned.sol";

// Original contract can be found under the following link:
// https://github.com/Synthetixio/synthetix/blob/master/contracts/RewardsDistributionRecipient.sol
abstract contract RewardsDistributionRecipient is Owned {
    address public rewardsDistribution;

    function notifyRewardAmount(uint256 reward) external virtual;

    modifier onlyRewardsDistribution() {
        require(msg.sender == rewardsDistribution, "Caller is not RewardsDistribution contract");
        _;
    }

    function setRewardsDistribution(address _rewardsDistribution) external onlyOwner {
        rewardsDistribution = _rewardsDistribution;
    }
}

File 3 of 8 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// Inheritance
import "./Owned.sol";

// Original contract can be found under the following link:
// https://github.com/Synthetixio/synthetix/blob/master/contracts/Pausable.sol
abstract contract Pausable is Owned {
    uint public lastPauseTime;
    bool public paused;

    constructor() {
        // This contract is abstract, and thus cannot be instantiated directly
        require(owner != address(0), "Owner must be set");
        // Paused will be false, and lastPauseTime will be 0 upon initialisation
    }

    /**
     * @notice Change the paused state of the contract
     * @dev Only the contract owner may call this.
     */
    function setPaused(bool _paused) external onlyOwner {
        // Ensure we're actually changing the state before we do anything
        if (_paused == paused) {
            return;
        }

        // Set our paused state.
        paused = _paused;

        // If applicable, set the last pause time.
        if (paused) {
            lastPauseTime = block.timestamp;
        }

        // Let everyone know that our pause state has changed.
        emit PauseChanged(paused);
    }

    event PauseChanged(bool isPaused);

    modifier notPaused {
        require(!paused, "This action cannot be performed while the contract is paused");
        _;
    }
}

File 4 of 8 : IStakingRewards.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// Original contract can be found under the following link:
// https://github.com/Synthetixio/synthetix/blob/master/contracts/interfaces/IStakingRewards.sol
interface IStakingRewards {
    // Views

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

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

    function getRewardForDuration() external view returns (uint256);

    function lastTimeRewardApplicable() external view returns (uint256);

    function rewardPerToken() external view returns (uint256);

    function totalSupply() external view returns (uint256);

    // Mutative

    function exit() external;
    function exit(uint subAccountId) external;

    function getReward() external;

    function stake(uint256 amount) external;
    function stake(uint subAccountId, uint256 amount) external;

    function withdraw(uint256 amount) external;
    function withdraw(uint subAccountId, uint256 amount) external;
}

File 5 of 8 : Utils.sol
// SPDX-License-Identifier: GPL-2.0-or-later

pragma solidity ^0.8.0;

import "./interfaces/IERC20.sol";

library Utils {
    function safeTransferFrom(address token, address from, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), string(data));
    }

    function safeTransfer(address token, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), string(data));
    }

    function safeApprove(address token, address to, uint value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), string(data));
    }

    function getSubAccount(address primary, uint subAccountId) internal pure returns (address) {
        require(subAccountId < 256, "Sub-account id too big");
        return address(uint160(primary) ^ uint160(subAccountId));
    }
}

File 6 of 8 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 7 of 8 : Owned.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// Original contract can be found under the following link:
// https://github.com/Synthetixio/synthetix/blob/master/contracts/Owned.sol
abstract contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    function nominateNewOwner(address _owner) external onlyOwner {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external {
        require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner {
        _onlyOwner();
        _;
    }

    function _onlyOwner() private view {
        require(msg.sender == owner, "Only the contract owner may perform this action");
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}

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

pragma solidity ^0.8.0;

// Original contract can be found under the following link:
// https://github.com/Synthetixio/synthetix/blob/master/contracts/interfaces/IERC20.sol
interface IERC20 {
    // ERC20 Optional Views
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    // Views
    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender) external view returns (uint);

    // Mutative functions
    function transfer(address to, uint value) external returns (bool);

    function approve(address spender, uint value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    // Events
    event Transfer(address indexed from, address indexed to, uint value);

    event Approval(address indexed owner, address indexed spender, uint value);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_rewardsDistribution","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subAccountId","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsDistribution","type":"address"}],"name":"setRewardsDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subAccountId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subAccountId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102255760003560e01c806379ba50971161012a57806391b4ded9116100bd578063cd3daf9d1161008c578063df136d6511610071578063df136d65146104dd578063e9fad8ee146104e6578063ebe2b12b146104ee57600080fd5b8063cd3daf9d146104ae578063d1af0c7d146104b657600080fd5b806391b4ded914610476578063a694fc3a1461047f578063c8f33c9114610492578063cc1a378f1461049b57600080fd5b806380faa57d116100f957806380faa57d1461041b5780638980f11f146104235780638b876347146104365780638da5cb5b1461045657600080fd5b806379ba5097146103e45780637b0472f0146103ec5780637b0a47ee146103ff5780637f8661a11461040857600080fd5b8063386a9525116101bd578063441a3e701161018c5780635c975abb116101715780635c975abb1461036a57806370a082311461038757806372f702f3146103bd57600080fd5b8063441a3e701461033757806353a47bb71461034a57600080fd5b8063386a9525146102ce5780633c6b16ab146102d75780633d18b912146102ea5780633fc6df6e146102f257600080fd5b806318160ddd116101f957806318160ddd1461029857806319762143146102a05780631c1f78eb146102b35780632e1a7d4d146102bb57600080fd5b80628cc2621461022a5780630700037d146102505780631627540c1461027057806316c38b3c14610285575b600080fd5b61023d610238366004611849565b6104f7565b6040519081526020015b60405180910390f35b61023d61025e366004611849565b600c6020526000908152604090205481565b61028361027e366004611849565b61058e565b005b610283610293366004611879565b610610565b600d5461023d565b6102836102ae366004611849565b6106a4565b61023d6106f3565b6102836102c9366004611896565b61070a565b61023d60085481565b6102836102e5366004611896565b610715565b610283610a1d565b6002546103129073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610247565b6102836103453660046118af565b610b95565b6001546103129073ffffffffffffffffffffffffffffffffffffffff1681565b6005546103779060ff1681565b6040519015158152602001610247565b61023d610395366004611849565b73ffffffffffffffffffffffffffffffffffffffff166000908152600e602052604090205490565b6103127f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d81565b610283610d9c565b6102836103fa3660046118af565b610ee7565b61023d60075481565b610283610416366004611896565b611173565b61023d611196565b6102836104313660046118d1565b6111ad565b61023d610444366004611849565b600b6020526000908152604090205481565b6000546103129073ffffffffffffffffffffffffffffffffffffffff1681565b61023d60045481565b61028361048d366004611896565b611309565b61023d60095481565b6102836104a9366004611896565b611314565b61023d611408565b6103127f000000000000000000000000d9fcd98c322942075a5c3860693e9f4f03aae07b81565b61023d600a5481565b61028361146a565b61023d60065481565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b909252822054670de0b6b3a76400009061053a611408565b610544919061192a565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600e60205260409020546105749190611941565b61057e919061197e565b61058891906119b9565b92915050565b610596611476565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906020015b60405180910390a150565b610618611476565b60055460ff161515811515141561062c5750565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682151590811790915560ff161561066857426004555b60055460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec590602001610605565b50565b6106ac611476565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006008546007546107059190611941565b905090565b6106a1600082610b95565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f43616c6c6572206973206e6f742052657761726473446973747269627574696f60448201527f6e20636f6e74726163740000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60006107cb611408565b600a556107d6611196565b60095573ffffffffffffffffffffffffffffffffffffffff811615610837576107fe816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b6006544210156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b696e6720706572696f64206e6f742066696e6973686564000000000060448201526064016107b8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000d9fcd98c322942075a5c3860693e9f4f03aae07b73ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610930573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095491906119d1565b9050808311156109c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50726f76696465642072657761726420746f6f2068696768000000000000000060448201526064016107b8565b6008546109cd908461197e565b6007554260098190556008546109e2916119b9565b6006556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b60026003541415610a8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107b8565b600260035533610a98611408565b600a55610aa3611196565b60095573ffffffffffffffffffffffffffffffffffffffff811615610b0457610acb816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b336000908152600c60205260409020548015610b8c57336000818152600c6020526040812055610b56907f000000000000000000000000d9fcd98c322942075a5c3860693e9f4f03aae07b908361151d565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04869060200160405180910390a25b50506001600355565b60026003541415610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107b8565b600260035533610c10611408565b600a55610c1b611196565b60095573ffffffffffffffffffffffffffffffffffffffff811615610c7c57610c43816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b60008211610ce6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f43616e6e6f74207769746864726177203000000000000000000000000000000060448201526064016107b8565b6000610cf23385611661565b905082600d54610d02919061192a565b600d55336000908152600e6020526040902054610d2090849061192a565b336000908152600e6020526040902055610d5b7f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d828561151d565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a2505060016003555050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e657273686970000000000000000000000060648201526084016107b8565b6000546001546040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60026003541415610f54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107b8565b600260035560055460ff1615610fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f5468697320616374696f6e2063616e6e6f7420626520706572666f726d65642060448201527f7768696c652074686520636f6e7472616374206973207061757365640000000060648201526084016107b8565b33610ff5611408565b600a55611000611196565b60095573ffffffffffffffffffffffffffffffffffffffff81161561106157611028816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b600082116110cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74207374616b65203000000000000000000000000000000000000060448201526064016107b8565b60006110d73385611661565b905082600d546110e791906119b9565b600d55336000908152600e60205260409020546111059084906119b9565b336000908152600e60205260409020556111417f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d8230866116d3565b60405183815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610d89565b336000908152600e602052604090205461118e908290610b95565b6106a1610a1d565b600060065442106111a8575060065490565b504290565b6111b5611476565b7f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f43616e6e6f7420776974686472617720746865207374616b696e6720746f6b6560448201527f6e0000000000000000000000000000000000000000000000000000000000000060648201526084016107b8565b6000546112b690839073ffffffffffffffffffffffffffffffffffffffff168361151d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b6106a1600082610ee7565b61131c611476565b60065442116113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726576696f7573207265776172647320706572696f64206d7573742062652060448201527f636f6d706c657465206265666f7265206368616e67696e67207468652064757260648201527f6174696f6e20666f7220746865206e657720706572696f640000000000000000608482015260a4016107b8565b60088190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610605565b6000600d546000141561141c5750600a5490565b600d5460075460095461142d611196565b611437919061192a565b6114419190611941565b61145390670de0b6b3a7640000611941565b61145d919061197e565b600a5461070591906119b9565b6114746000611173565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201527f6f726d207468697320616374696f6e000000000000000000000000000000000060648201526084016107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916115b49190611a1a565b6000604051808303816000865af19150503d80600081146115f1576040519150601f19603f3d011682016040523d82523d6000602084013e6115f6565b606091505b50915091508180156116205750805115806116205750808060200190518101906116209190611a36565b8190611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b89190611a53565b505050505050565b600061010082106116ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5375622d6163636f756e7420696420746f6f206269670000000000000000000060448201526064016107b8565b501890565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916117729190611a1a565b6000604051808303816000865af19150503d80600081146117af576040519150601f19603f3d011682016040523d82523d6000602084013e6117b4565b606091505b50915091508180156117de5750805115806117de5750808060200190518101906117de9190611a36565b8190611817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b89190611a53565b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461184457600080fd5b919050565b60006020828403121561185b57600080fd5b61186482611820565b9392505050565b80151581146106a157600080fd5b60006020828403121561188b57600080fd5b81356118648161186b565b6000602082840312156118a857600080fd5b5035919050565b600080604083850312156118c257600080fd5b50508035926020909101359150565b600080604083850312156118e457600080fd5b6118ed83611820565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561193c5761193c6118fb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611979576119796118fb565b500290565b6000826119b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119cc576119cc6118fb565b500190565b6000602082840312156119e357600080fd5b5051919050565b60005b83811015611a055781810151838201526020016119ed565b83811115611a14576000848401525b50505050565b60008251611a2c8184602087016119ea565b9190910192915050565b600060208284031215611a4857600080fd5b81516118648161186b565b6020815260008251806020840152611a728160408501602087016119ea565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220b51995688cdb3e0eed8e47dfba864ea5616e74d0bb51b3bcf3e4974553fe0f6e64736f6c634300080a0033

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.