ETH Price: $2,029.03 (+2.69%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake161453182022-12-09 6:18:591179 days ago1670566739IN
0xEf64c6B4...5FC509884
0 ETH0.0007582212.67533736
Stake159701142022-11-14 18:37:351204 days ago1668451055IN
0xEf64c6B4...5FC509884
0 ETH0.0028220619.99123864
Stake128289932021-07-15 3:05:151691 days ago1626318315IN
0xEf64c6B4...5FC509884
0 ETH0.0052390840
Stake123070442021-04-25 3:44:031772 days ago1619322243IN
0xEf64c6B4...5FC509884
0 ETH0.0052390840
Unstake98830392020-04-16 10:43:142146 days ago1587033794IN
0xEf64c6B4...5FC509884
0 ETH0.0005609510
Unstake95977832020-03-03 11:03:522190 days ago1583233432IN
0xEf64c6B4...5FC509884
0 ETH0.000123353
Unstake95868952020-03-01 18:53:252192 days ago1583088805IN
0xEf64c6B4...5FC509884
0 ETH0.000082212
Unstake95866052020-03-01 17:50:322192 days ago1583085032IN
0xEf64c6B4...5FC509884
0 ETH0.000112212
Unstake95842542020-03-01 9:06:232192 days ago1583053583IN
0xEf64c6B4...5FC509884
0 ETH0.000056111
Unstake94512482020-02-09 22:19:102212 days ago1581286750IN
0xEf64c6B4...5FC509884
0 ETH0.00004111
Stake93891932020-01-31 9:17:412222 days ago1580462261IN
0xEf64c6B4...5FC509884
0 ETH0.0037517640
Stake93891822020-01-31 9:16:082222 days ago1580462168IN
0xEf64c6B4...5FC509884
0 ETH0.0037517640
Stake93891682020-01-31 9:12:292222 days ago1580461949IN
0xEf64c6B4...5FC509884
0 ETH0.0043522440
Stake93602162020-01-26 22:37:302226 days ago1580078250IN
0xEf64c6B4...5FC509884
0 ETH0.0037517640
Unstake93059302020-01-18 14:59:392235 days ago1579359579IN
0xEf64c6B4...5FC509884
0 ETH0.000041111
Unstake93059212020-01-18 14:58:082235 days ago1579359488IN
0xEf64c6B4...5FC509884
0 ETH0.000168353
Unstake92863432020-01-15 14:49:152238 days ago1579099755IN
0xEf64c6B4...5FC509884
0 ETH0.000056111
Stake90859892019-12-11 0:35:402273 days ago1576024540IN
0xEf64c6B4...5FC509884
0 ETH0.000128441.01
Stake90172732019-11-28 20:12:552285 days ago1574971975IN
0xEf64c6B4...5FC509884
0 ETH0.0036237640
Stake89981412019-11-25 11:06:072289 days ago1574679967IN
0xEf64c6B4...5FC509884
0 ETH0.0036237640
Stake89918892019-11-24 10:23:022290 days ago1574590982IN
0xEf64c6B4...5FC509884
0 ETH0.0042237640
Stake89040672019-11-09 19:17:512304 days ago1573327071IN
0xEf64c6B4...5FC509884
0 ETH0.003621240
Stake88692442019-11-04 4:13:532310 days ago1572840833IN
0xEf64c6B4...5FC509884
0 ETH0.003621240
Stake88691852019-11-04 4:00:232310 days ago1572840023IN
0xEf64c6B4...5FC509884
0 ETH0.003621240
Stake88691742019-11-04 3:57:402310 days ago1572839860IN
0xEf64c6B4...5FC509884
0 ETH0.0036237640
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TimeLockedStaking

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

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

pragma solidity ^0.5.0;

/// https://eips.ethereum.org/EIPS/eip-165
interface ERC165 {
  /// @notice Query if a contract implements an interface
  /// @param interfaceID The interface identifier, as specified in ERC-165
  /// @dev Interface identification is specified in ERC-165. This function
  ///  uses less than 30,000 gas.
  /// @return `true` if the contract implements `interfaceID` and
  ///  `interfaceID` is not 0xffffffff, `false` otherwise
  function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

/// https://eips.ethereum.org/EIPS/eip-900
/// @notice Interface with external methods
interface ISimpleStaking {

  event Staked(address indexed user, uint256 amount, uint256 total, bytes data);
  event Unstaked(address indexed user, uint256 amount, uint256 total, bytes data);

  function stake(uint256 amount, bytes calldata data) external;
  function stakeFor(address user, uint256 amount, bytes calldata data) external;
  function unstake(uint256 amount, bytes calldata data) external;
  function totalStakedFor(address addr) external view returns (uint256);
  function totalStaked() external view returns (uint256);
  function token() external view returns (address);
  function supportsHistory() external pure returns (bool);

  // optional. Commented out until we have valid reason to implement these methods
  // function lastStakedFor(address addr) public view returns (uint256);
  // function totalStakedForAt(address addr, uint256 blockNumber) public view returns (uint256);
  // function totalStakedAt(uint256 blockNumber) public view returns (uint256);
}

/**
 * @title SafeMath
 * Courtesy of https://github.com/OpenZeppelin/openzeppelin-solidity/blob/9be0f100c48e4726bee73829fbb10f7d85b6ef54/contracts/math/SafeMath.sol
 * @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;
  }
}

contract ERC20 {

  /// @return The total amount of tokens
  function totalSupply() public view returns (uint256 supply);

  /// @param _owner The address from which the balance will be retrieved
  /// @return The balance
  function balanceOf(address _owner) public view returns (uint256 balance);

  /// @notice send `_value` token to `_to` from `msg.sender`
  /// @param _to The address of the recipient
  /// @param _value The amount of token to be transferred
  /// @return Whether the transfer was successful or not
  function transfer(address _to, uint256 _value) public returns (bool success);

  /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
  /// @param _from The address of the sender
  /// @param _to The address of the recipient
  /// @param _value The amount of token to be transferred
  /// @return Whether the transfer was successful or not
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

  /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
  /// @param _spender The address of the account able to transfer the tokens
  /// @param _value The amount of tokens to be approved for transfer
  /// @return Whether the approval was successful or not
  function approve(address _spender, uint256 _value) public returns (bool success);

  /// @param _owner The address of the account owning tokens
  /// @param _spender The address of the account able to transfer the tokens
  /// @return Amount of remaining tokens allowed to spent
  function allowance(address _owner, address _spender) public view returns (uint256 remaining);

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


/**
* Smart contract to stake ERC20 and optionally lock it in for a period of time.
* Users can add stake any time as long as the emergency status is false
* Maximum locked-in time is 365 days from now.
*
* It also keeps track of the effective start time which is recorded on the very
* first stake. Think of it as the "member since" attribute.
* If user unstakes (full or partial) at any point, the effective start time is reset.
*
*/
contract TimeLockedStaking is ERC165, ISimpleStaking {
  using SafeMath for uint256;

  struct StakeRecord {
    uint256 amount;
    uint256 unlockedAt;
  }

  struct StakeInfo {
    /// total tokens this user stakes.
    uint256 totalAmount;
    /// "member since" in unix timestamp. Reset when user unstakes.
    uint256 effectiveAt;
    /// storing staking data for unstaking later.
    /// recordId i.e. key of mapping is the keccak256 of the 'data' parameter in the stake method.
    mapping (bytes32 => StakeRecord) stakeRecords;
  }

  /// @dev When emergency is true,
  /// block staking action and
  /// allow to unstake without verifying the record.unlockedAt
  bool public emergency;

  /// @dev Owner of this contract, who can activate the emergency.
  address public owner;

  /// @dev Address of the ERC20 token contract used for staking.
  ERC20 internal erc20Token;

  /// @dev https://solidity.readthedocs.io/en/v0.4.25/style-guide.html#avoiding-naming-collisions
  uint256 internal totalStaked_ = 0;

  /// Keep track of all stakers
  mapping (address => StakeInfo) public stakers;

  modifier greaterThanZero(uint256 num) {
    require(num > 0, "Must be greater than 0.");
    _;
  }

  /// @dev Better to manually validate these params after deployment.
  /// @param token_ ERC0 token's address. Required.
  /// @param owner_ Who can set emergency status. Default: msg.sender.
  constructor(address token_, address owner_) public {
    erc20Token = ERC20(token_);
    owner = owner_;
    emergency = false;
  }

  /// @dev Implement ERC165
  /// With three or more supported interfaces (including ERC165 itself as a required supported interface),
  /// the mapping approach (in every case) costs less gas than the pure approach (at worst case).
  function supportsInterface(bytes4 interfaceID) external view returns (bool) {
    return
      interfaceID == this.supportsInterface.selector ||
      interfaceID == this.stake.selector ^ this.stakeFor.selector ^ this.unstake.selector ^ this.totalStakedFor.selector ^ this.totalStaked.selector ^ this.token.selector ^ this.supportsHistory.selector;
  }

  /// @dev msg.sender stakes for him/her self.
  /// @param amount Number of ERC20 to be staked. Amount must be > 0.
  /// @param data Used for signaling the unlocked time.
  function stake(uint256 amount, bytes calldata data) external {
    registerStake(msg.sender, amount, data);
  }

  /// @dev msg.sender stakes for someone else.
  /// @param amount Number of ERC20 to be staked. Must be > 0.
  /// @param data Used for signaling the unlocked time.
  function stakeFor(address user, uint256 amount, bytes calldata data) external {
    registerStake(user, amount, data);
  }

  /// @dev msg.sender can unstake full amount or partial if unlockedAt =< now
  /// @notice as a result, the "member since" attribute is reset.
  /// @param amount Number of ERC20 to be unstaked. Must be > 0 and =< staked amount.
  /// @param data The payload that was used when staking.
  function unstake(uint256 amount, bytes calldata data)
    external
    greaterThanZero(stakers[msg.sender].effectiveAt) // must be a member
    greaterThanZero(amount)
  {
    address user = msg.sender;

    bytes32 recordId = keccak256(data);

    StakeRecord storage record = stakers[user].stakeRecords[recordId];

    require(amount <= record.amount, "Amount must be equal or smaller than the record.");

    // Validate unlockedAt if there's no emergency.
    // Otherwise, ignore the lockdown period.
    if (!emergency) {
      require(block.timestamp >= record.unlockedAt, "This stake is still locked.");
    }

    record.amount = record.amount.sub(amount);

    stakers[user].totalAmount = stakers[user].totalAmount.sub(amount);
    stakers[user].effectiveAt = block.timestamp;

    totalStaked_ = totalStaked_.sub(amount);

    require(erc20Token.transfer(user, amount), "Transfer failed.");
    emit Unstaked(user, amount, stakers[user].totalAmount, data);
  }

  /// @return The staked amount of an address.
  function totalStakedFor(address addr) external view returns (uint256) {
    return stakers[addr].totalAmount;
  }

  /// @return Total number of tokens this smart contract hold.
  function totalStaked() external view returns (uint256) {
    return totalStaked_;
  }

  /// @return Address of the ERC20 used for staking.
  function token() external view returns (address) {
    return address(erc20Token);
  }

  /// @dev This smart contract does not store staking activities on chain.
  /// @return false History is processed off-chain via event logs.
  function supportsHistory() external pure returns (bool) {
    return false;
  }


  /// Escape hatch
  function setEmergency(bool status) external {
    require(msg.sender == owner, "msg.sender must be owner.");
    emergency = status;
  }

  /// Helpers
  ///

  function max(uint256 a, uint256 b) public pure returns (uint256) {
    return a > b ? a : b;
  }

  function min(uint256 a, uint256 b) public pure returns (uint256) {
    return a > b ? b : a;
  }

  function getStakeRecordUnlockedAt(address user, bytes memory data) public view returns (uint256) {
    return stakers[user].stakeRecords[keccak256(data)].unlockedAt;
  }

  function getStakeRecordAmount(address user, bytes memory data) public view returns (uint256) {
    return stakers[user].stakeRecords[keccak256(data)].amount;
  }

  /// @dev Get the unlockedAt in the data field.
  /// Maximum of 365 days from now.
  /// Minimum of 1. Default value if data.length < 32.
  /// @param data The left-most 256 bits are unix timestamp in seconds.
  /// @return The unlockedAt in the data. Range [1, 365 days from now].
  function getUnlockedAtSignal(bytes memory data) public view returns (uint256) {
    uint256 unlockedAt;

    if (data.length >= 32) {
      assembly {
        let d := add(data, 32) // first 32 bytes are the padded length of data
        unlockedAt := mload(d)
      }
    }

    // Maximum 365 days from now
    uint256 oneYearFromNow = block.timestamp + 365 days;
    uint256 capped = min(unlockedAt, oneYearFromNow);

    return max(1, capped);
  }

  /// @dev Register a stake by updating the StakeInfo struct
  function registerStake(address user, uint256 amount, bytes memory data) private greaterThanZero(amount) {
    require(!emergency, "Cannot stake due to emergency.");
    require(erc20Token.transferFrom(msg.sender, address(this), amount), "Transfer failed.");

    StakeInfo storage info = stakers[user];

    // Update effective at
    info.effectiveAt = info.effectiveAt == 0 ? block.timestamp : info.effectiveAt;

    // Update stake record
    bytes32 recordId = keccak256(data);
    StakeRecord storage record = info.stakeRecords[recordId];
    record.amount = amount.add(record.amount);
    record.unlockedAt = record.unlockedAt == 0 ? getUnlockedAtSignal(data) : record.unlockedAt;

    // Update total amounts
    info.totalAmount = amount.add(info.totalAmount);
    totalStaked_ = totalStaked_.add(amount);

    emit Staked(user, amount, stakers[user].totalAmount, data);
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"status","type":"bool"}],"name":"setEmergency","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"stakeFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"data","type":"bytes"}],"name":"getUnlockedAtSignal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"totalStakedFor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"max","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"supportsHistory","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"min","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"stakers","outputs":[{"name":"totalAmount","type":"uint256"},{"name":"effectiveAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"data","type":"bytes"}],"name":"getStakeRecordUnlockedAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"emergency","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"data","type":"bytes"}],"name":"getStakeRecordAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"token_","type":"address"},{"name":"owner_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"total","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"Unstaked","type":"event"}]

6080604052600060025534801561001557600080fd5b50604051604080611ae48339810180604052604081101561003557600080fd5b81019080805190602001909291908051906020019092919050505081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548160ff02191690831515021790555050506119e7806100fd6000396000f3fe6080604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100f65780630501d556146101685780630e89439b146101a55780630ef9635614610235578063317eda69146102e55780634b341aed146103c15780636d5433e6146104265780637033e4a61461047f5780637ae2b5c7146104ae578063817b1cd2146105075780638da5cb5b146105325780639168ae7214610589578063be98dae7146105f5578063c8fd6ed0146106f1578063caa6fea414610781578063e122549e146107b0578063fc0c546a146108ac575b600080fd5b34801561010257600080fd5b5061014e6004803603602081101561011957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610903565b604051808215151515815260200191505060405180910390f35b34801561017457600080fd5b506101a36004803603602081101561018b57600080fd5b81019080803515159060200190929190505050610ab9565b005b3480156101b157600080fd5b50610233600480360360408110156101c857600080fd5b8101908080359060200190929190803590602001906401000000008111156101ef57600080fd5b82018360208201111561020157600080fd5b8035906020019184600183028401116401000000008311171561022357600080fd5b9091929391929390505050610b9a565b005b34801561024157600080fd5b506102e36004803603606081101561025857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561029f57600080fd5b8201836020820111156102b157600080fd5b803590602001918460018302840111640100000000831117156102d357600080fd5b9091929391929390505050610bee565b005b3480156102f157600080fd5b506103ab6004803603602081101561030857600080fd5b810190808035906020019064010000000081111561032557600080fd5b82018360208201111561033757600080fd5b8035906020019184600183028401116401000000008311171561035957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c43565b6040518082815260200191505060405180910390f35b3480156103cd57600080fd5b50610410600480360360208110156103e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c89565b6040518082815260200191505060405180910390f35b34801561043257600080fd5b506104696004803603604081101561044957600080fd5b810190808035906020019092919080359060200190929190505050610cd5565b6040518082815260200191505060405180910390f35b34801561048b57600080fd5b50610494610cee565b604051808215151515815260200191505060405180910390f35b3480156104ba57600080fd5b506104f1600480360360408110156104d157600080fd5b810190808035906020019092919080359060200190929190505050610cf6565b6040518082815260200191505060405180910390f35b34801561051357600080fd5b5061051c610d0f565b6040518082815260200191505060405180910390f35b34801561053e57600080fd5b50610547610d19565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059557600080fd5b506105d8600480360360208110156105ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d3f565b604051808381526020018281526020019250505060405180910390f35b34801561060157600080fd5b506106db6004803603604081101561061857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561065557600080fd5b82018360208201111561066757600080fd5b8035906020019184600183028401116401000000008311171561068957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d63565b6040518082815260200191505060405180910390f35b3480156106fd57600080fd5b5061077f6004803603604081101561071457600080fd5b81019080803590602001909291908035906020019064010000000081111561073b57600080fd5b82018360208201111561074d57600080fd5b8035906020019184600183028401116401000000008311171561076f57600080fd5b9091929391929390505050610dcb565b005b34801561078d57600080fd5b50610796611418565b604051808215151515815260200191505060405180910390f35b3480156107bc57600080fd5b50610896600480360360408110156107d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561081057600080fd5b82018360208201111561082257600080fd5b8035906020019184600183028401116401000000008311171561084457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061142a565b6040518082815260200191505060405180910390f35b3480156108b857600080fd5b506108c1611492565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ab25750637033e4a67c01000000000000000000000000000000000000000000000000000000000263fc0c546a7c01000000000000000000000000000000000000000000000000000000000263817b1cd27c010000000000000000000000000000000000000000000000000000000002634b341aed7c01000000000000000000000000000000000000000000000000000000000263c8fd6ed07c010000000000000000000000000000000000000000000000000000000002630ef963567c010000000000000000000000000000000000000000000000000000000002630e89439b7c0100000000000000000000000000000000000000000000000000000000021818181818187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6d73672e73656e646572206d757374206265206f776e65722e0000000000000081525060200191505060405180910390fd5b806000806101000a81548160ff02191690831515021790555050565b610be9338484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114bc565b505050565b610c3d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114bc565b50505050565b60008060208351101515610c5b576020830180519150505b60006301e13380420190506000610c728383610cf6565b9050610c7f600182610cd5565b9350505050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000818311610ce45781610ce6565b825b905092915050565b600080905090565b6000818311610d055782610d07565b815b905092915050565b6000600254905090565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000154908060010154905082565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008380519060200120815260200190815260200160002060010154905092915050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600081111515610e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d7573742062652067726561746572207468616e20302e00000000000000000081525060200191505060405180910390fd5b83600081111515610eff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d7573742062652067726561746572207468616e20302e00000000000000000081525060200191505060405180910390fd5b600033905060008585604051808383808284378083019250505092505050604051809103902090506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000838152602001908152602001600020905080600001548811151515611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f416d6f756e74206d75737420626520657175616c206f7220736d616c6c65722081526020017f7468616e20746865207265636f72642e0000000000000000000000000000000081525060400191505060405180910390fd5b6000809054906101000a900460ff1615156110b257806001015442101515156110b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54686973207374616b65206973207374696c6c206c6f636b65642e000000000081525060200191505060405180910390fd5b5b6110c988826000015461197890919063ffffffff16565b816000018190555061112688600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461197890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506111c88860025461197890919063ffffffff16565b600281905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb848a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561129357600080fd5b505af11580156112a7573d6000803e3d6000fd5b505050506040513d60208110156112bd57600080fd5b81019080805190602001909291905050501515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c875489600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548a8a60405180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a25050505050505050565b6000809054906101000a900460ff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008380519060200120815260200190815260200160002060000154905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b81600081111515611535576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d7573742062652067726561746572207468616e20302e00000000000000000081525060200191505060405180910390fd5b6000809054906101000a900460ff161515156115b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f74207374616b652064756520746f20656d657267656e63792e000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156116b257600080fd5b505af11580156116c6573d6000803e3d6000fd5b505050506040513d60208110156116dc57600080fd5b81019080805190602001909291905050501515611761576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010154146117ba5780600101546117bc565b425b81600101819055506000838051906020012090506000826002016000838152602001908152602001600020905061180081600001548761199a90919063ffffffff16565b8160000181905550600081600101541461181e578060010154611828565b61182785610c43565b5b816001018190555061184783600001548761199a90919063ffffffff16565b83600001819055506118648660025461199a90919063ffffffff16565b6002819055508673ffffffffffffffffffffffffffffffffffffffff167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f16093514287600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154886040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611933578082015181840152602081019050611918565b50505050905090810190601f1680156119605780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250505050505050565b600082821115151561198957600080fd5b600082840390508091505092915050565b60008082840190508381101515156119b157600080fd5b809150509291505056fea165627a7a723058205762661b761eb975883621464a2ba04b08dcd41c7205e67914041196806ac30b0029000000000000000000000000cb94be6f13a1182e4a4b6140cb7bf2025d28e41b0000000000000000000000000ed8c3d25849fe3fe918a8863a04e71036cbc501

Deployed Bytecode

0x6080604052600436106100f1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146100f65780630501d556146101685780630e89439b146101a55780630ef9635614610235578063317eda69146102e55780634b341aed146103c15780636d5433e6146104265780637033e4a61461047f5780637ae2b5c7146104ae578063817b1cd2146105075780638da5cb5b146105325780639168ae7214610589578063be98dae7146105f5578063c8fd6ed0146106f1578063caa6fea414610781578063e122549e146107b0578063fc0c546a146108ac575b600080fd5b34801561010257600080fd5b5061014e6004803603602081101561011957600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610903565b604051808215151515815260200191505060405180910390f35b34801561017457600080fd5b506101a36004803603602081101561018b57600080fd5b81019080803515159060200190929190505050610ab9565b005b3480156101b157600080fd5b50610233600480360360408110156101c857600080fd5b8101908080359060200190929190803590602001906401000000008111156101ef57600080fd5b82018360208201111561020157600080fd5b8035906020019184600183028401116401000000008311171561022357600080fd5b9091929391929390505050610b9a565b005b34801561024157600080fd5b506102e36004803603606081101561025857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561029f57600080fd5b8201836020820111156102b157600080fd5b803590602001918460018302840111640100000000831117156102d357600080fd5b9091929391929390505050610bee565b005b3480156102f157600080fd5b506103ab6004803603602081101561030857600080fd5b810190808035906020019064010000000081111561032557600080fd5b82018360208201111561033757600080fd5b8035906020019184600183028401116401000000008311171561035957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610c43565b6040518082815260200191505060405180910390f35b3480156103cd57600080fd5b50610410600480360360208110156103e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c89565b6040518082815260200191505060405180910390f35b34801561043257600080fd5b506104696004803603604081101561044957600080fd5b810190808035906020019092919080359060200190929190505050610cd5565b6040518082815260200191505060405180910390f35b34801561048b57600080fd5b50610494610cee565b604051808215151515815260200191505060405180910390f35b3480156104ba57600080fd5b506104f1600480360360408110156104d157600080fd5b810190808035906020019092919080359060200190929190505050610cf6565b6040518082815260200191505060405180910390f35b34801561051357600080fd5b5061051c610d0f565b6040518082815260200191505060405180910390f35b34801561053e57600080fd5b50610547610d19565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059557600080fd5b506105d8600480360360208110156105ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d3f565b604051808381526020018281526020019250505060405180910390f35b34801561060157600080fd5b506106db6004803603604081101561061857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561065557600080fd5b82018360208201111561066757600080fd5b8035906020019184600183028401116401000000008311171561068957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610d63565b6040518082815260200191505060405180910390f35b3480156106fd57600080fd5b5061077f6004803603604081101561071457600080fd5b81019080803590602001909291908035906020019064010000000081111561073b57600080fd5b82018360208201111561074d57600080fd5b8035906020019184600183028401116401000000008311171561076f57600080fd5b9091929391929390505050610dcb565b005b34801561078d57600080fd5b50610796611418565b604051808215151515815260200191505060405180910390f35b3480156107bc57600080fd5b50610896600480360360408110156107d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561081057600080fd5b82018360208201111561082257600080fd5b8035906020019184600183028401116401000000008311171561084457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061142a565b6040518082815260200191505060405180910390f35b3480156108b857600080fd5b506108c1611492565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ab25750637033e4a67c01000000000000000000000000000000000000000000000000000000000263fc0c546a7c01000000000000000000000000000000000000000000000000000000000263817b1cd27c010000000000000000000000000000000000000000000000000000000002634b341aed7c01000000000000000000000000000000000000000000000000000000000263c8fd6ed07c010000000000000000000000000000000000000000000000000000000002630ef963567c010000000000000000000000000000000000000000000000000000000002630e89439b7c0100000000000000000000000000000000000000000000000000000000021818181818187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6d73672e73656e646572206d757374206265206f776e65722e0000000000000081525060200191505060405180910390fd5b806000806101000a81548160ff02191690831515021790555050565b610be9338484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114bc565b505050565b610c3d848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506114bc565b50505050565b60008060208351101515610c5b576020830180519150505b60006301e13380420190506000610c728383610cf6565b9050610c7f600182610cd5565b9350505050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6000818311610ce45781610ce6565b825b905092915050565b600080905090565b6000818311610d055782610d07565b815b905092915050565b6000600254905090565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60036020528060005260406000206000915090508060000154908060010154905082565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008380519060200120815260200190815260200160002060010154905092915050565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600081111515610e86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d7573742062652067726561746572207468616e20302e00000000000000000081525060200191505060405180910390fd5b83600081111515610eff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d7573742062652067726561746572207468616e20302e00000000000000000081525060200191505060405180910390fd5b600033905060008585604051808383808284378083019250505092505050604051809103902090506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000838152602001908152602001600020905080600001548811151515611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001807f416d6f756e74206d75737420626520657175616c206f7220736d616c6c65722081526020017f7468616e20746865207265636f72642e0000000000000000000000000000000081525060400191505060405180910390fd5b6000809054906101000a900460ff1615156110b257806001015442101515156110b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f54686973207374616b65206973207374696c6c206c6f636b65642e000000000081525060200191505060405180910390fd5b5b6110c988826000015461197890919063ffffffff16565b816000018190555061112688600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461197890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506111c88860025461197890919063ffffffff16565b600281905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb848a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561129357600080fd5b505af11580156112a7573d6000803e3d6000fd5b505050506040513d60208110156112bd57600080fd5b81019080805190602001909291905050501515611342576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c875489600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548a8a60405180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509550505050505060405180910390a25050505050505050565b6000809054906101000a900460ff1681565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008380519060200120815260200190815260200160002060000154905092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b81600081111515611535576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4d7573742062652067726561746572207468616e20302e00000000000000000081525060200191505060405180910390fd5b6000809054906101000a900460ff161515156115b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f43616e6e6f74207374616b652064756520746f20656d657267656e63792e000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156116b257600080fd5b505af11580156116c6573d6000803e3d6000fd5b505050506040513d60208110156116dc57600080fd5b81019080805190602001909291905050501515611761576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160010154146117ba5780600101546117bc565b425b81600101819055506000838051906020012090506000826002016000838152602001908152602001600020905061180081600001548761199a90919063ffffffff16565b8160000181905550600081600101541461181e578060010154611828565b61182785610c43565b5b816001018190555061184783600001548761199a90919063ffffffff16565b83600001819055506118648660025461199a90919063ffffffff16565b6002819055508673ffffffffffffffffffffffffffffffffffffffff167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f16093514287600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154886040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611933578082015181840152602081019050611918565b50505050905090810190601f1680156119605780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a250505050505050565b600082821115151561198957600080fd5b600082840390508091505092915050565b60008082840190508381101515156119b157600080fd5b809150509291505056fea165627a7a723058205762661b761eb975883621464a2ba04b08dcd41c7205e67914041196806ac30b0029

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

000000000000000000000000cb94be6f13a1182e4a4b6140cb7bf2025d28e41b0000000000000000000000000ed8c3d25849fe3fe918a8863a04e71036cbc501

-----Decoded View---------------
Arg [0] : token_ (address): 0xCb94be6f13A1182E4A4B6140cb7bf2025d28e41B
Arg [1] : owner_ (address): 0x0Ed8C3d25849fe3fe918A8863A04E71036cbc501

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb94be6f13a1182e4a4b6140cb7bf2025d28e41b
Arg [1] : 0000000000000000000000000ed8c3d25849fe3fe918a8863a04e71036cbc501


Libraries Used


Swarm Source

bzzr://5762661b761eb975883621464a2ba04b08dcd41c7205e67914041196806ac30b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.