ETH Price: $2,714.10 (+1.75%)

Contract

0x0FAa28da415ABdDA123233A00b7cc7F8c56445b1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove Beneficia...119342032021-02-26 17:27:401453 days ago1614360460IN
0x0FAa28da...8c56445b1
0 ETH0.01132666222
Remove Beneficia...119341632021-02-26 17:21:101453 days ago1614360070IN
0x0FAa28da...8c56445b1
0 ETH0.01130823222
Add Beneficiary119341562021-02-26 17:17:421453 days ago1614359862IN
0x0FAa28da...8c56445b1
0 ETH0.02338059222
Remove Beneficia...119341282021-02-26 17:08:581453 days ago1614359338IN
0x0FAa28da...8c56445b1
0 ETH0.01132666222
Add Beneficiary119341122021-02-26 17:05:161453 days ago1614359116IN
0x0FAa28da...8c56445b1
0 ETH0.02338326222
Remove Beneficia...119340872021-02-26 17:01:251453 days ago1614358885IN
0x0FAa28da...8c56445b1
0 ETH0.01132666222
Add Beneficiary119340612021-02-26 16:55:201453 days ago1614358520IN
0x0FAa28da...8c56445b1
0 ETH0.02337793222
Remove Beneficia...119339722021-02-26 16:38:191453 days ago1614357499IN
0x0FAa28da...8c56445b1
0 ETH0.0087042200
Remove Beneficia...119338422021-02-26 16:07:471453 days ago1614355667IN
0x0FAa28da...8c56445b1
0 ETH0.00799666222
Remove Beneficia...119338272021-02-26 16:05:141453 days ago1614355514IN
0x0FAa28da...8c56445b1
0 ETH0.01132666222
Release116836872021-01-19 4:57:001492 days ago1611032220IN
0x0FAa28da...8c56445b1
0 ETH0.0080061596.57142857
Release116604412021-01-15 15:13:141495 days ago1610723594IN
0x0FAa28da...8c56445b1
0 ETH0.0079587896.00000145
Add Beneficiary116599302021-01-15 13:23:451495 days ago1610717025IN
0x0FAa28da...8c56445b1
0 ETH0.01263528120
Add Beneficiary116599232021-01-15 13:22:131495 days ago1610716933IN
0x0FAa28da...8c56445b1
0 ETH0.00179775
Release116589552021-01-15 9:47:071495 days ago1610704027IN
0x0FAa28da...8c56445b1
0 ETH0.0031589640
Release116559962021-01-14 22:53:231496 days ago1610664803IN
0x0FAa28da...8c56445b1
0 ETH0.0018122837.005
Add Beneficiary112486952020-11-13 10:01:411558 days ago1605261701IN
0x0FAa28da...8c56445b1
0 ETH0.0054752852
Release109999802020-10-06 4:13:561597 days ago1601957636IN
0x0FAa28da...8c56445b1
0 ETH0.0015538462
Release107220362020-08-24 8:41:241639 days ago1598258484IN
0x0FAa28da...8c56445b1
0 ETH0.00959534121.5
Release107177792020-08-23 16:55:361640 days ago1598201736IN
0x0FAa28da...8c56445b1
0 ETH0.0062054797
Remove Beneficia...106792942020-08-17 19:00:291646 days ago1597690829IN
0x0FAa28da...8c56445b1
0 ETH0.00499251138.60000307
Release106788152020-08-17 17:12:101646 days ago1597684330IN
0x0FAa28da...8c56445b1
0 ETH0.00683187139.5
Release106770902020-08-17 10:41:411646 days ago1597660901IN
0x0FAa28da...8c56445b1
0 ETH0.01042456132
Release106317132020-08-10 10:40:331653 days ago1597056033IN
0x0FAa28da...8c56445b1
0 ETH0.00716508112
Release105582532020-07-30 2:14:441665 days ago1596075284IN
0x0FAa28da...8c56445b1
0 ETH0.0029877744
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:
Vesting

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 0 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-12-11
*/

pragma solidity 0.4.25;

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    uint256 c = a - b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
interface IERC20 {
  function totalSupply() external view returns (uint256);

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

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

  function transfer(address to, uint256 value) external returns (bool);

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

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

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

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

// File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {

  using SafeMath for uint256;

  function safeTransfer(
    IERC20 token,
    address to,
    uint256 value
  )
    internal
  {
    require(token.transfer(to, value));
  }

  function safeTransferFrom(
    IERC20 token,
    address from,
    address to,
    uint256 value
  )
    internal
  {
    require(token.transferFrom(from, to, value));
  }

  function safeApprove(
    IERC20 token,
    address spender,
    uint256 value
  )
    internal
  {
    // safeApprove should only be called when setting an initial allowance, 
    // or when resetting it to zero. To increase and decrease it, use 
    // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
    require((value == 0) || (token.allowance(msg.sender, spender) == 0));
    require(token.approve(spender, value));
  }

  function safeIncreaseAllowance(
    IERC20 token,
    address spender,
    uint256 value
  )
    internal
  {
    uint256 newAllowance = token.allowance(address(this), spender).add(value);
    require(token.approve(spender, newAllowance));
  }

  function safeDecreaseAllowance(
    IERC20 token,
    address spender,
    uint256 value
  )
    internal
  {
    uint256 newAllowance = token.allowance(address(this), spender).sub(value);
    require(token.approve(spender, newAllowance));
  }
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address private _owner;

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

  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() internal {
    _owner = msg.sender;
    emit OwnershipTransferred(address(0), _owner);
  }

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

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(isOwner());
    _;
  }

  /**
   * @return true if `msg.sender` is the owner of the contract.
   */
  function isOwner() public view returns(bool) {
    return msg.sender == _owner;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipTransferred(_owner, address(0));
    _owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0));
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

// File: contracts/Vesting.sol

/**
 * @title Vesting
 * @dev Vesting is a token holder contract that will allow a
 * beneficiary to extract the tokens after a given release time
 */
contract Vesting is Ownable {
    using SafeERC20 for IERC20;
    using SafeMath for uint256;

    // ERC20 basic token contract being held
    IERC20 private _token;

    // Info holds all the relevant information to calculate the right amount for `release`
    struct Info {
        bool    known;          // Logs whether or not the address is known and eligible to receive tokens
        uint256 totalAmount;    // Total amount of tokens to receive
        uint256 receivedAmount; // Amount of tokens already received
        uint256 startTime;      // Starting time of vesting
        uint256 releaseTime;    // End time of vesting
    }

    // Mapping of an address to it's information
    mapping(address => Info) private _info;

    constructor(
        IERC20 token
    )
        public
    {
        _token = token;
    }
    
    /**
     * @notice Add beneficiaries to the contract, allowing them to withdraw tokens.
     * @param beneficiary The address associated with the beneficiary.
     * @param releaseTime The timestamp at which 100% of their allocation is freed up.
     * @param amount The amount of tokens they can receive in total.
     */
    function addBeneficiary(
        address beneficiary,
        uint256 startTime,
        uint256 releaseTime,
        uint256 amount
    )
        external
        onlyOwner
    {
        Info storage info = _info[beneficiary];
        require(!info.known, "This address is already known to the contract.");
        require(releaseTime > startTime, "Release time must be later than the start time.");
        require(releaseTime > block.timestamp, "End of vesting period must be somewhere in the future.");

        info.startTime = startTime; // Set starting time
        info.totalAmount = amount; // Set amount
        info.releaseTime = releaseTime; // Set release time
        info.known = true; // Prevent overwriting of address data
    }

    /**
     * @notice Remove a beneficiary from the contract, preventing them from 
     * retrieving tokens in the future.
     * @param beneficiary The address associated with the beneficiary.
     */
    function removeBeneficiary(address beneficiary) external onlyOwner {
        Info storage info = _info[beneficiary];
        require(info.known, "The address you are trying to remove is unknown to the contract");

        _release(beneficiary); // Release leftover tokens before removing the investor
        info.known = false;
        info.totalAmount = 0;
        info.receivedAmount = 0;
        info.startTime = 0;
        info.releaseTime = 0;
    }

    /**
     * @notice Withdraw tokens from the contract. This function is strictly
     * for the owner, intended to take out any leftovers if needed.
     * @param amount The amount of tokens to take out.
     */
    function withdraw(uint256 amount) external onlyOwner {
        _token.safeTransfer(owner(), amount);
    }

    /**
     * @notice Transfers tokens held by timelock to beneficiary.
     * This function will check if a caller is eligible to receive tokens
     * and if so, will then call the internal `_release` function.
     */
    function release() external {
        require(_info[msg.sender].known, "You are not eligible to receive tokens from this contract.");
        _release(msg.sender);
    }

    /**
     * @notice Simple function to return vesting information for a caller.
     * Callers can then validate if their information has been properly stored,
     * instead of trusting the contract owner.
     */
    function check() external view returns (uint256, uint256, uint256, uint256) {
        return (
            _info[msg.sender].totalAmount, 
            _info[msg.sender].receivedAmount,
            _info[msg.sender].startTime, 
            _info[msg.sender].releaseTime
        );
    }

    /**
     * @notice Internal function to release tokens to a beneficiary.
     * This function has been extended from the `release` function included in
     * `TokenTimelock.sol` included in the OpenZeppelin-solidity library, to allow
     * for a 'second-by-second' token vesting schedule. Since block timestamps
     * is the closest Solidity can get to reading the current time, this
     * mechanism is used.
     */
    function _release(address beneficiary) internal {
        Info storage info = _info[beneficiary];
        if (block.timestamp >= info.releaseTime) {
            uint256 remainingTokens = info.totalAmount.sub(info.receivedAmount);
            require(remainingTokens > 0, "No tokens left to take out.");

            // Since `safeTransfer` will throw upon failure, we can modify the state beforehand.
            info.receivedAmount = info.totalAmount;
            _token.safeTransfer(beneficiary, remainingTokens);
        } else if (block.timestamp > info.startTime) {
            // Calculate allowance
            uint256 diff = info.releaseTime.sub(info.startTime);
            uint256 tokensPerTick = info.totalAmount.div(diff);
            uint256 ticks = block.timestamp.sub(info.startTime);
            uint256 tokens = tokensPerTick.mul(ticks);
            uint256 receivableTokens = tokens.sub(info.receivedAmount);
            require(receivableTokens > 0, "No tokens to take out right now.");

            // Since `safeTransfer` will throw upon failure, we can modify the state beforehand.
            info.receivedAmount = info.receivedAmount.add(receivableTokens);
            _token.safeTransfer(beneficiary, receivableTokens);
        } else {
            // We could let SafeMath revert release calls if vesting has not started yet.
            // However, in the interest of clarity to contract callers, this error
            // message is added instead.
            revert("This address is not eligible to receive tokens yet.");
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"removeBeneficiary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"release","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"check","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"startTime","type":"uint256"},{"name":"releaseTime","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"addBeneficiary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b506040516020806111c283398101806040528101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611082806101406000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461009e57806359633a1c146100cb578063715018a61461010e57806386d1a69f146101255780638da5cb5b1461013c5780638f32d59b14610193578063919840ad146101c2578063b095e12914610202578063f2fde38b14610263575b600080fd5b3480156100aa57600080fd5b506100c9600480360381019080803590602001909291905050506102a6565b005b3480156100d757600080fd5b5061010c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610310565b005b34801561011a57600080fd5b50610123610464565b005b34801561013157600080fd5b5061013a610536565b005b34801561014857600080fd5b5061015161062b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561019f57600080fd5b506101a8610654565b604051808215151515815260200191505060405180910390f35b3480156101ce57600080fd5b506101d76106ab565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561020e57600080fd5b50610261600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506107cb565b005b34801561026f57600080fd5b506102a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a47565b005b6102ae610654565b15156102b957600080fd5b61030d6102c461062b565b82600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a669092919063ffffffff16565b50565b600061031a610654565b151561032557600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900460ff161515610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001807f546865206164647265737320796f752061726520747279696e6720746f20726581526020017f6d6f766520697320756e6b6e6f776e20746f2074686520636f6e74726163740081525060400191505060405180910390fd5b61041b82610b54565b60008160000160006101000a81548160ff021916908315150217905550600081600101819055506000816002018190555060008160030181905550600081600401819055505050565b61046c610654565b151561047757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001807f596f7520617265206e6f7420656c696769626c6520746f20726563656976652081526020017f746f6b656e732066726f6d207468697320636f6e74726163742e00000000000081525060400191505060405180910390fd5b61062933610b54565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600080600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154935093509350935090919293565b60006107d5610654565b15156107e057600080fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900460ff161515156108ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f54686973206164647265737320697320616c7265616479206b6e6f776e20746f81526020017f2074686520636f6e74726163742e00000000000000000000000000000000000081525060400191505060405180910390fd5b838311151561096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f52656c656173652074696d65206d757374206265206c61746572207468616e2081526020017f7468652073746172742074696d652e000000000000000000000000000000000081525060400191505060405180910390fd5b4283111515610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f456e64206f662076657374696e6720706572696f64206d75737420626520736f81526020017f6d65776865726520696e20746865206675747572652e0000000000000000000081525060400191505060405180910390fd5b83816003018190555081816001018190555082816004018190555060018160000160006101000a81548160ff0219169083151502179055505050505050565b610a4f610654565b1515610a5a57600080fd5b610a6381610eb2565b50565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b505050506040513d6020811015610b3357600080fd5b81019080805190602001909291905050501515610b4f57600080fd5b505050565b6000806000806000806000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209650866004015442101515610ca157610bc887600201548860010154610fac90919063ffffffff16565b9550600086111515610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e6f20746f6b656e73206c65667420746f2074616b65206f75742e000000000081525060200191505060405180910390fd5b86600101548760020181905550610c9c8887600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a669092919063ffffffff16565b610ea8565b8660030154421115610e1357610cc887600301548860040154610fac90919063ffffffff16565b9450610ce1858860010154610fcd90919063ffffffff16565b9350610cfa876003015442610fac90919063ffffffff16565b9250610d0f8385610ff790919063ffffffff16565b9150610d28876002015483610fac90919063ffffffff16565b9050600081111515610da2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6f20746f6b656e7320746f2074616b65206f7574207269676874206e6f772e81525060200191505060405180910390fd5b610db981886002015461103590919063ffffffff16565b8760020181905550610e0e8882600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a669092919063ffffffff16565b610ea7565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001807f546869732061646472657373206973206e6f7420656c696769626c6520746f2081526020017f7265636569766520746f6b656e73207965742e0000000000000000000000000081525060400191505060405180910390fd5b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610eee57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080838311151515610fbe57600080fd5b82840390508091505092915050565b600080600083111515610fdf57600080fd5b8284811515610fea57fe5b0490508091505092915050565b600080600084141561100c576000915061102e565b828402905082848281151561101d57fe5b0414151561102a57600080fd5b8091505b5092915050565b600080828401905083811015151561104c57600080fd5b80915050929150505600a165627a7a72305820553ca159c085d491ff265ef371451fc6435747b2c746b5689ef5250a66f5856f0029000000000000000000000000940a2db1b7008b6c776d4faaca729d6d4a4aa551

Deployed Bytecode

0x608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461009e57806359633a1c146100cb578063715018a61461010e57806386d1a69f146101255780638da5cb5b1461013c5780638f32d59b14610193578063919840ad146101c2578063b095e12914610202578063f2fde38b14610263575b600080fd5b3480156100aa57600080fd5b506100c9600480360381019080803590602001909291905050506102a6565b005b3480156100d757600080fd5b5061010c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610310565b005b34801561011a57600080fd5b50610123610464565b005b34801561013157600080fd5b5061013a610536565b005b34801561014857600080fd5b5061015161062b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561019f57600080fd5b506101a8610654565b604051808215151515815260200191505060405180910390f35b3480156101ce57600080fd5b506101d76106ab565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561020e57600080fd5b50610261600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506107cb565b005b34801561026f57600080fd5b506102a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a47565b005b6102ae610654565b15156102b957600080fd5b61030d6102c461062b565b82600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a669092919063ffffffff16565b50565b600061031a610654565b151561032557600080fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900460ff161515610412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001807f546865206164647265737320796f752061726520747279696e6720746f20726581526020017f6d6f766520697320756e6b6e6f776e20746f2074686520636f6e74726163740081525060400191505060405180910390fd5b61041b82610b54565b60008160000160006101000a81548160ff021916908315150217905550600081600101819055506000816002018190555060008160030181905550600081600401819055505050565b61046c610654565b151561047757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff161515610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001807f596f7520617265206e6f7420656c696769626c6520746f20726563656976652081526020017f746f6b656e732066726f6d207468697320636f6e74726163742e00000000000081525060400191505060405180910390fd5b61062933610b54565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600080600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154935093509350935090919293565b60006107d5610654565b15156107e057600080fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000160009054906101000a900460ff161515156108ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f54686973206164647265737320697320616c7265616479206b6e6f776e20746f81526020017f2074686520636f6e74726163742e00000000000000000000000000000000000081525060400191505060405180910390fd5b838311151561096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f52656c656173652074696d65206d757374206265206c61746572207468616e2081526020017f7468652073746172742074696d652e000000000000000000000000000000000081525060400191505060405180910390fd5b4283111515610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f456e64206f662076657374696e6720706572696f64206d75737420626520736f81526020017f6d65776865726520696e20746865206675747572652e0000000000000000000081525060400191505060405180910390fd5b83816003018190555081816001018190555082816004018190555060018160000160006101000a81548160ff0219169083151502179055505050505050565b610a4f610654565b1515610a5a57600080fd5b610a6381610eb2565b50565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b0957600080fd5b505af1158015610b1d573d6000803e3d6000fd5b505050506040513d6020811015610b3357600080fd5b81019080805190602001909291905050501515610b4f57600080fd5b505050565b6000806000806000806000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209650866004015442101515610ca157610bc887600201548860010154610fac90919063ffffffff16565b9550600086111515610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e6f20746f6b656e73206c65667420746f2074616b65206f75742e000000000081525060200191505060405180910390fd5b86600101548760020181905550610c9c8887600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a669092919063ffffffff16565b610ea8565b8660030154421115610e1357610cc887600301548860040154610fac90919063ffffffff16565b9450610ce1858860010154610fcd90919063ffffffff16565b9350610cfa876003015442610fac90919063ffffffff16565b9250610d0f8385610ff790919063ffffffff16565b9150610d28876002015483610fac90919063ffffffff16565b9050600081111515610da2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6f20746f6b656e7320746f2074616b65206f7574207269676874206e6f772e81525060200191505060405180910390fd5b610db981886002015461103590919063ffffffff16565b8760020181905550610e0e8882600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a669092919063ffffffff16565b610ea7565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001807f546869732061646472657373206973206e6f7420656c696769626c6520746f2081526020017f7265636569766520746f6b656e73207965742e0000000000000000000000000081525060400191505060405180910390fd5b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610eee57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080838311151515610fbe57600080fd5b82840390508091505092915050565b600080600083111515610fdf57600080fd5b8284811515610fea57fe5b0490508091505092915050565b600080600084141561100c576000915061102e565b828402905082848281151561101d57fe5b0414151561102a57600080fd5b8091505b5092915050565b600080828401905083811015151561104c57600080fd5b80915050929150505600a165627a7a72305820553ca159c085d491ff265ef371451fc6435747b2c746b5689ef5250a66f5856f0029

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

000000000000000000000000940a2db1b7008b6c776d4faaca729d6d4a4aa551

-----Decoded View---------------
Arg [0] : token (address): 0x940a2dB1B7008B6C776d4faaCa729d6d4A4AA551

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000940a2db1b7008b6c776d4faaca729d6d4a4aa551


Swarm Source

bzzr://553ca159c085d491ff265ef371451fc6435747b2c746b5689ef5250a66f5856f

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.