ETH Price: $1,592.41 (-1.95%)
Gas: 7 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Sponsored

Transaction Hash
Method
Block
From
To
Value
Update Distribut...145891162022-04-15 9:24:00524 days 20 hrs ago1650014640IN
Idle.finance: Distributor
0 ETH0.0019866529.36104411
Update Distribut...145632692022-04-11 8:14:11528 days 21 hrs ago1649664851IN
Idle.finance: Distributor
0 ETH0.001707426.32319118
Update Distribut...145205182022-04-04 16:13:31535 days 13 hrs ago1649088811IN
Idle.finance: Distributor
0 ETH0.0062552596.43792778
Update Distribut...145205162022-04-04 16:12:53535 days 13 hrs ago1649088773IN
Idle.finance: Distributor
0 ETH0.0070975783.7343878
Update Distribut...144291542022-03-21 10:30:01549 days 19 hrs ago1647858601IN
Idle.finance: Distributor
0 ETH0.0027541327.80186981
Transfer Ownersh...144032042022-03-17 9:27:29553 days 20 hrs ago1647509249IN
Idle.finance: Distributor
0 ETH0.0005556219.42329708
Set Distributor ...144031792022-03-17 9:20:29553 days 20 hrs ago1647508829IN
Idle.finance: Distributor
0 ETH0.0008595118.122926
0x60c06040144031462022-03-17 9:13:21553 days 20 hrs ago1647508401IN
 Create: Distributor
0 ETH0.013893316.04665849

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Distributor

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license
File 1 of 4 : Distributor.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

import {Ownable} from "Ownable.sol";
import {IERC20} from "IERC20.sol";

/// @title Distributor
/// @author dantop114
/// @notice Distribution contract that handles IDLE distribution for Idle Liquidity Gauges.
contract Distributor is Ownable {

    /*///////////////////////////////////////////////////////////////
                        IMMUTABLES AND CONSTANTS
    ///////////////////////////////////////////////////////////////*/

    /// @notice The treasury address (used in case of emergency withdraw).
    address immutable treasury;

    /// @notice The IDLE token (the token to distribute).
    IERC20 immutable idle;

    /// @notice One week in seconds.
    uint256 public constant ONE_WEEK = 86400 * 7;

    /// @notice Initial distribution rate (as per IIP-*).
    /// @dev 178_200 IDLEs in 6 months.
    uint256 public constant INITIAL_RATE = (178_200 * 10 ** 18) / (26 * ONE_WEEK);

    /// @notice Distribution epoch duration.
    /// @dev 1 week epoch duration.
    uint256 public constant EPOCH_DURATION = ONE_WEEK;

    /// @notice Initial distribution epoch delay.
    /// @dev This needs to be updated when deploying if 1 day is not enough.
    uint256 public constant INITIAL_DISTRIBUTION_DELAY = 86400;

    /*///////////////////////////////////////////////////////////////
                                STORAGE
    //////////////////////////////////////////////////////////////*/

    /// @notice Emergency admin.
    address public emergencyAdmin;

    /// @notice Distributed IDLEs so far.
    uint256 public distributed;

    /// @notice Running distribution epoch rate.
    uint256 public rate;

    /// @notice Running distribution epoch starting epoch time
    uint256 public startEpochTime = block.timestamp + INITIAL_DISTRIBUTION_DELAY - EPOCH_DURATION;

    /// @notice Total distributed IDLEs when current epoch starts
    uint256 public epochStartingDistributed;

    /// @notice Distribution rate pending for upcoming epoch
    uint256 public pendingRate = INITIAL_RATE;

    /// @notice The DistributorProxy contract
    address public distributorProxy;

    /// @notice The epoch number
    uint256 public epochNumber;

    /// @notice The mapping of rates for each epoch
    mapping(uint256 => uint256) public ratePerEpoch;

    /*///////////////////////////////////////////////////////////////
                                EVENTS
    //////////////////////////////////////////////////////////////*/

    /// @notice Event emitted when distributor proxy is updated.
    event UpdateDistributorProxy(address oldProxy, address newProxy);

    /// @notice Event emitted when distribution parameters are updated for upcoming distribution epoch.
    event UpdatePendingRate(uint256 rate);

    /// @notice Event emitted when distribution parameters are updated.
    event UpdateDistributionParameters(uint256 time, uint256 rate);

    /*///////////////////////////////////////////////////////////////
                            CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    /// @dev The constructor.
    /// @param _idle The IDLE token address.
    /// @param _treasury The emergency withdrawal address.
    constructor(IERC20 _idle, address _treasury, address _emergencyAdmin) {
        idle = _idle;
        treasury = _treasury;
        emergencyAdmin = _emergencyAdmin;
    }

    /// @notice Update the DistributorProxy contract
    /// @dev Only owner can call this method
    /// @param proxy New DistributorProxy contract
    function setDistributorProxy(address proxy) external onlyOwner {
        address distributorProxy_ = distributorProxy;
        distributorProxy = proxy;

        emit UpdateDistributorProxy(distributorProxy_, proxy);
    }

    /// @notice Update rate for next epoch
    /// @dev Only owner can call this method
    /// @param newRate Rate for upcoming epoch
    function setPendingRate(uint256 newRate) external onlyOwner {
        pendingRate = newRate;
        emit UpdatePendingRate(newRate);
    }

    /// @dev Updates internal state to match current epoch distribution parameters.
    function _updateDistributionParameters() internal {
        startEpochTime += EPOCH_DURATION; // set start epoch timestamp
        epochStartingDistributed += (rate * EPOCH_DURATION); // set initial distributed floor
        
        uint256 _pendingRate = pendingRate;
        uint256 _epochNumber = ++epochNumber;

        rate = _pendingRate; // set new rate
        ratePerEpoch[_epochNumber] = _pendingRate; // set rate for this epoch

        emit UpdateDistributionParameters(startEpochTime, rate);
    }

    /// @notice Updates distribution rate and start timestamp of the epoch.
    /// @dev Callable by anyone if pending epoch should start.
    function updateDistributionParameters() external {
        require(block.timestamp >= startEpochTime + EPOCH_DURATION, "epoch still running");
        _updateDistributionParameters();
    }

    /// @notice Get timestamp of the current distribution epoch start.
    /// @return _startEpochTime Timestamp of the current epoch start.
    function startEpochTimeWrite() external returns (uint256 _startEpochTime) {
        _startEpochTime = startEpochTime;

        if (block.timestamp >= _startEpochTime + EPOCH_DURATION) {
            _updateDistributionParameters();
            _startEpochTime = startEpochTime;
        }
    }

    /// @notice Get timestamp of the next distribution epoch start.
    /// @return _futureEpochTime Timestamp of the next epoch start.
    function futureEpochTimeWrite() external returns (uint256 _futureEpochTime) {
        _futureEpochTime = startEpochTime + EPOCH_DURATION;

        if (block.timestamp >= _futureEpochTime) {
            _updateDistributionParameters();
            _futureEpochTime = startEpochTime + EPOCH_DURATION;
        }
    }

    /// @dev Returns max available IDLEs to distribute.
    /// @dev This will revert until initial distribution begins.
    function _availableToDistribute() internal view returns (uint256) {
        return epochStartingDistributed + (block.timestamp - startEpochTime) * rate;
    }

    /// @notice Returns max available IDLEs for current distribution epoch.
    /// @return Available IDLEs to distribute.
    function availableToDistribute() external view returns (uint256) {
        return _availableToDistribute();
    }

    /// @notice Distribute `amount` IDLE to address `to`.
    /// @param to The account that will receive IDLEs.
    /// @param amount The amount of IDLEs to distribute.
    function distribute(address to, uint256 amount) external returns(bool) {
        require(msg.sender == distributorProxy, "not proxy");
        require(to != address(0), "address zero");

        if (block.timestamp >= startEpochTime + EPOCH_DURATION) {
            _updateDistributionParameters();
        }

        uint256 _distributed = distributed + amount;
        require(_distributed <= _availableToDistribute(), "amount too high");

        distributed = _distributed;
        return idle.transfer(to, amount);
    }

    function setEmergencyAdmin(address emergencyAdmin_) external onlyOwner {
        emergencyAdmin = emergencyAdmin_;
    }

    /// @notice Emergency method to withdraw funds.
    /// @param amount The amount of IDLEs to withdraw from contract.
    function emergencyWithdraw(uint256 amount) external {
        require(msg.sender == emergencyAdmin, "not emergency admin");
        idle.transfer(treasury, amount);
    }
}

File 2 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 4 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

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
{
  "evmVersion": "istanbul",
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "libraries": {
    "Distributor.sol": {}
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_idle","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_emergencyAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"}],"name":"UpdateDistributionParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldProxy","type":"address"},{"indexed":false,"internalType":"address","name":"newProxy","type":"address"}],"name":"UpdateDistributorProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"}],"name":"UpdatePendingRate","type":"event"},{"inputs":[],"name":"EPOCH_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_DISTRIBUTION_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ONE_WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableToDistribute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochStartingDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futureEpochTimeWrite","outputs":[{"internalType":"uint256","name":"_futureEpochTime","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ratePerEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxy","type":"address"}],"name":"setDistributorProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"emergencyAdmin_","type":"address"}],"name":"setEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setPendingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startEpochTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startEpochTimeWrite","outputs":[{"internalType":"uint256","name":"_startEpochTime","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateDistributionParameters","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405262093a806200001762015180426200011f565b6200002391906200013a565b6004556200003662093a80601a62000154565b6200004c906925bc3dc98fef9160000062000176565b6006553480156200005c57600080fd5b5060405162000f2238038062000f228339810160408190526200007f91620001b2565b6200008a33620000b9565b6001600160a01b0392831660a052908216608052600180546001600160a01b0319169190921617905562000206565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b6000821982111562000135576200013562000109565b500190565b6000828210156200014f576200014f62000109565b500390565b600081600019048311821515161562000171576200017162000109565b500290565b6000826200019457634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b0381168114620001af57600080fd5b50565b600080600060608486031215620001c857600080fd5b8351620001d58162000199565b6020850151909350620001e88162000199565b6040850151909250620001fb8162000199565b809150509250925092565b60805160a051610cef620002336000396000818161054b01526109ca0152600061051c0152610cef6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638da5cb5b116100ee578063ea2b4ca311610097578063f4145a8311610071578063f4145a83146102ea578063f84b903e146102f3578063f968b21e146102fc578063fb9321081461030557600080fd5b8063ea2b4ca3146102c6578063ecdd5ecd146102cf578063f2fde38b146102d757600080fd5b8063a70b9f0c116100c8578063a70b9f0c146102a2578063b315455b146102b4578063d0f2c8c1146102be57600080fd5b80638da5cb5b146102915780638e6f6b77146102a2578063a228bced146102ac57600080fd5b80634415dd8711610150578063568125841161012a578063568125841461026357806370905dce14610276578063715018a61461028957600080fd5b80634415dd871461021d5780634dbac733146102485780635312ea8e1461025057600080fd5b8063277dbafb11610181578063277dbafb146101f95780632c4e722e1461020157806335da33941461020a57600080fd5b806301527103146101a857806303f06551146101bd5780631814a5b1146101f0575b600080fd5b6101bb6101b6366004610b75565b610328565b005b6101dd6101cb366004610b75565b60096020526000908152604090205481565b6040519081526020015b60405180910390f35b6101dd60045481565b6101dd6103c2565b6101dd60035481565b6101bb610218366004610baa565b6103fd565b600754610230906001600160a01b031681565b6040516001600160a01b0390911681526020016101e7565b6101dd610486565b6101bb61025e366004610b75565b6104ab565b6101bb610271366004610baa565b6105bc565b600154610230906001600160a01b031681565b6101bb610685565b6000546001600160a01b0316610230565b6101dd62093a8081565b6101dd6106eb565b6101dd6201518081565b6101bb610710565b6101dd60065481565b6101dd610778565b6101bb6102e5366004610baa565b610782565b6101dd60085481565b6101dd60025481565b6101dd60055481565b610318610313366004610bcc565b610864565b60405190151581526020016101e7565b6000546001600160a01b031633146103875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60068190556040518181527fe422654a562d61016b65d25ce16d13aae391a275a2783c87da9a2d88594eb5c99060200160405180910390a150565b600062093a806004546103d59190610c0c565b90508042106103fa576103e6610a3f565b62093a806004546103f79190610c0c565b90505b90565b6000546001600160a01b031633146104575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61049462093a80601a610c24565b6104a8906925bc3dc98fef91600000610c43565b81565b6001546001600160a01b031633146105055760405162461bcd60e51b815260206004820152601360248201527f6e6f7420656d657267656e63792061646d696e00000000000000000000000000604482015260640161037e565b60405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190610c65565b5050565b6000546001600160a01b031633146106165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b600780546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f3a852e5a3b327938e4b55634152d243b2c53fb21d67a9e6483f052b4b42dcc5a91015b60405180910390a15050565b6000546001600160a01b031633146106df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b6106e96000610aee565b565b6004546106fb62093a8082610c0c565b42106103fa57610709610a3f565b5060045490565b62093a806004546107219190610c0c565b4210156107705760405162461bcd60e51b815260206004820152601360248201527f65706f6368207374696c6c2072756e6e696e6700000000000000000000000000604482015260640161037e565b6106e9610a3f565b60006103f7610b4b565b6000546001600160a01b031633146107dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b6001600160a01b0381166108585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161037e565b61086181610aee565b50565b6007546000906001600160a01b031633146108c15760405162461bcd60e51b815260206004820152600960248201527f6e6f742070726f78790000000000000000000000000000000000000000000000604482015260640161037e565b6001600160a01b0383166109175760405162461bcd60e51b815260206004820152600c60248201527f61646472657373207a65726f0000000000000000000000000000000000000000604482015260640161037e565b62093a806004546109289190610c0c565b421061093657610936610a3f565b6000826002546109469190610c0c565b9050610950610b4b565b81111561099f5760405162461bcd60e51b815260206004820152600f60248201527f616d6f756e7420746f6f20686967680000000000000000000000000000000000604482015260640161037e565b600281905560405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a379190610c65565b949350505050565b62093a8060046000828254610a549190610c0c565b9091555050600354610a6a9062093a8090610c24565b60056000828254610a7b9190610c0c565b909155505060065460088054600091908290610a9690610c87565b9182905550600383905560008181526009602090815260409182902085905560045482519081529081018590529192507fe046348aaf27fe0df1c74ff721b10bd42b0e0ebaaea5f2957dcd8940ae6d3b739101610679565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060035460045442610b5e9190610ca2565b610b689190610c24565b6005546103f79190610c0c565b600060208284031215610b8757600080fd5b5035919050565b80356001600160a01b0381168114610ba557600080fd5b919050565b600060208284031215610bbc57600080fd5b610bc582610b8e565b9392505050565b60008060408385031215610bdf57600080fd5b610be883610b8e565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610c1f57610c1f610bf6565b500190565b6000816000190483118215151615610c3e57610c3e610bf6565b500290565b600082610c6057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610c7757600080fd5b81518015158114610bc557600080fd5b6000600019821415610c9b57610c9b610bf6565b5060010190565b600082821015610cb457610cb4610bf6565b50039056fea26469706673582212208ad5d467e10528e254c4f68a9bf87f817061b788b7fb8a33ec433349876b43e464736f6c634300080b0033000000000000000000000000875773784af8135ea0ef43b5a374aad105c5d39e000000000000000000000000fb3bd022d5dacf95ee28a6b07825d4ff9c5b3814000000000000000000000000e8ea8bae250028a8709a3841e0ae1a44820d677b

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80638da5cb5b116100ee578063ea2b4ca311610097578063f4145a8311610071578063f4145a83146102ea578063f84b903e146102f3578063f968b21e146102fc578063fb9321081461030557600080fd5b8063ea2b4ca3146102c6578063ecdd5ecd146102cf578063f2fde38b146102d757600080fd5b8063a70b9f0c116100c8578063a70b9f0c146102a2578063b315455b146102b4578063d0f2c8c1146102be57600080fd5b80638da5cb5b146102915780638e6f6b77146102a2578063a228bced146102ac57600080fd5b80634415dd8711610150578063568125841161012a578063568125841461026357806370905dce14610276578063715018a61461028957600080fd5b80634415dd871461021d5780634dbac733146102485780635312ea8e1461025057600080fd5b8063277dbafb11610181578063277dbafb146101f95780632c4e722e1461020157806335da33941461020a57600080fd5b806301527103146101a857806303f06551146101bd5780631814a5b1146101f0575b600080fd5b6101bb6101b6366004610b75565b610328565b005b6101dd6101cb366004610b75565b60096020526000908152604090205481565b6040519081526020015b60405180910390f35b6101dd60045481565b6101dd6103c2565b6101dd60035481565b6101bb610218366004610baa565b6103fd565b600754610230906001600160a01b031681565b6040516001600160a01b0390911681526020016101e7565b6101dd610486565b6101bb61025e366004610b75565b6104ab565b6101bb610271366004610baa565b6105bc565b600154610230906001600160a01b031681565b6101bb610685565b6000546001600160a01b0316610230565b6101dd62093a8081565b6101dd6106eb565b6101dd6201518081565b6101bb610710565b6101dd60065481565b6101dd610778565b6101bb6102e5366004610baa565b610782565b6101dd60085481565b6101dd60025481565b6101dd60055481565b610318610313366004610bcc565b610864565b60405190151581526020016101e7565b6000546001600160a01b031633146103875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60068190556040518181527fe422654a562d61016b65d25ce16d13aae391a275a2783c87da9a2d88594eb5c99060200160405180910390a150565b600062093a806004546103d59190610c0c565b90508042106103fa576103e6610a3f565b62093a806004546103f79190610c0c565b90505b90565b6000546001600160a01b031633146104575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61049462093a80601a610c24565b6104a8906925bc3dc98fef91600000610c43565b81565b6001546001600160a01b031633146105055760405162461bcd60e51b815260206004820152601360248201527f6e6f7420656d657267656e63792061646d696e00000000000000000000000000604482015260640161037e565b60405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000fb3bd022d5dacf95ee28a6b07825d4ff9c5b381481166004830152602482018390527f000000000000000000000000875773784af8135ea0ef43b5a374aad105c5d39e169063a9059cbb906044016020604051808303816000875af1158015610594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b89190610c65565b5050565b6000546001600160a01b031633146106165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b600780546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f3a852e5a3b327938e4b55634152d243b2c53fb21d67a9e6483f052b4b42dcc5a91015b60405180910390a15050565b6000546001600160a01b031633146106df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b6106e96000610aee565b565b6004546106fb62093a8082610c0c565b42106103fa57610709610a3f565b5060045490565b62093a806004546107219190610c0c565b4210156107705760405162461bcd60e51b815260206004820152601360248201527f65706f6368207374696c6c2072756e6e696e6700000000000000000000000000604482015260640161037e565b6106e9610a3f565b60006103f7610b4b565b6000546001600160a01b031633146107dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161037e565b6001600160a01b0381166108585760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161037e565b61086181610aee565b50565b6007546000906001600160a01b031633146108c15760405162461bcd60e51b815260206004820152600960248201527f6e6f742070726f78790000000000000000000000000000000000000000000000604482015260640161037e565b6001600160a01b0383166109175760405162461bcd60e51b815260206004820152600c60248201527f61646472657373207a65726f0000000000000000000000000000000000000000604482015260640161037e565b62093a806004546109289190610c0c565b421061093657610936610a3f565b6000826002546109469190610c0c565b9050610950610b4b565b81111561099f5760405162461bcd60e51b815260206004820152600f60248201527f616d6f756e7420746f6f20686967680000000000000000000000000000000000604482015260640161037e565b600281905560405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f000000000000000000000000875773784af8135ea0ef43b5a374aad105c5d39e169063a9059cbb906044016020604051808303816000875af1158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a379190610c65565b949350505050565b62093a8060046000828254610a549190610c0c565b9091555050600354610a6a9062093a8090610c24565b60056000828254610a7b9190610c0c565b909155505060065460088054600091908290610a9690610c87565b9182905550600383905560008181526009602090815260409182902085905560045482519081529081018590529192507fe046348aaf27fe0df1c74ff721b10bd42b0e0ebaaea5f2957dcd8940ae6d3b739101610679565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060035460045442610b5e9190610ca2565b610b689190610c24565b6005546103f79190610c0c565b600060208284031215610b8757600080fd5b5035919050565b80356001600160a01b0381168114610ba557600080fd5b919050565b600060208284031215610bbc57600080fd5b610bc582610b8e565b9392505050565b60008060408385031215610bdf57600080fd5b610be883610b8e565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610c1f57610c1f610bf6565b500190565b6000816000190483118215151615610c3e57610c3e610bf6565b500290565b600082610c6057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610c7757600080fd5b81518015158114610bc557600080fd5b6000600019821415610c9b57610c9b610bf6565b5060010190565b600082821015610cb457610cb4610bf6565b50039056fea26469706673582212208ad5d467e10528e254c4f68a9bf87f817061b788b7fb8a33ec433349876b43e464736f6c634300080b0033

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

000000000000000000000000875773784af8135ea0ef43b5a374aad105c5d39e000000000000000000000000fb3bd022d5dacf95ee28a6b07825d4ff9c5b3814000000000000000000000000e8ea8bae250028a8709a3841e0ae1a44820d677b

-----Decoded View---------------
Arg [0] : _idle (address): 0x875773784Af8135eA0ef43b5a374AaD105c5D39e
Arg [1] : _treasury (address): 0xFb3bD022D5DAcF95eE28a6B07825D4Ff9C5b3814
Arg [2] : _emergencyAdmin (address): 0xe8eA8bAE250028a8709A3841E0Ae1a44820d677b

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000875773784af8135ea0ef43b5a374aad105c5d39e
Arg [1] : 000000000000000000000000fb3bd022d5dacf95ee28a6b07825d4ff9c5b3814
Arg [2] : 000000000000000000000000e8ea8bae250028a8709a3841e0ae1a44820d677b


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

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