Latest 2 txns

TxHash Age From To Value [TxFee]
0x4be8cc9762945f0b9823e8c35acdf8d5800484b607a9501814cca371a450b4f9223 days 5 hrs ago0x8c5013e3a10b97f0382f7afdc559c8615047be20  IN   0x8fa7c01220396a205181d289ea805023abecce610 Ether0.0002197
0xe14b4e9250da8c64f0a38e774cfaaeead142f55bc4c46fd68c14d68a3264b86c223 days 5 hrs ago0x8c5013e3a10b97f0382f7afdc559c8615047be20  IN    Contract Creation0 Ether0.0121355


[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x2c99a0bf8668b10b5d293aa4113cbb35828041a1229ef77a6afe979158ecdb57315731898 days 17 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x0927952843a9aa51be6816884f47e6659b51442104189c1a5cddc8abe70ec0f23117105105 days 17 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x0212f9e5e636c98a0f5ba74a11abb3488b82161ff049b441af4d6784912d638e3117097105 days 17 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x08bc715c94181e8b4421161fd86d621ba7e5984b2f4986a4218f5c47b2130b6d3117077105 days 17 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x85c4ca67d65a319d68b252307770980c80ef004fcac4aa7d39584b41802ee9e63111866106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x6679779d7203b5ba3ced68b67ddfa039fee0b442a9504e0a4796fa987acb3f7a3111865106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xb9eff6e70760dd89649ef6304e640deb7959cd6893dfbc9856b96657a08759b63111861106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xd60c0387e72e19d84caa3ddf1fb0da1f9656be9c27dfb2fe5d06e5ab3236a2223111860106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x9155a9dd11711c8f6e7209aff539bd6d72f39241a533de53bc38c592155e40153111858106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x630fcef05fef887d4c8be2689b1cd247053d242a7afa5e00fb536405cec0d6d13111856106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xb931b621aa0561dec0815d1d0977dba1035e7bba4e244c531173df7568947d413111855106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x6d6d643a93d9728f65b75d73e67aa5c83d9781ac62f3d9af0bb6c75a13eb7d9f3111855106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x7d977365985ba71440f113a4fb028aad4f364b5e6acdcd29c9114900a3250b933111852106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xa8889d2259dba7ccc8de643bb261f040503369c5cb68f9deee5ab6511b86c4093111841106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xc4a89929cf04a0f87ddb076ae9c80455602a4b7b058720bd1a1be74a722feb893111796106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xbee9252ab99842cea7e62fdf71b1015206abc7cceeba1b373b4a81ab36c1c1aa3111781106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xef89069f215460a6fc0c586d6a082f5d82a39fc0fe83f90276255407c096b42a3111777106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xcdf25b019a8ac235f2ca9dec059dd10d9a60b45df55f441f1a24e13e20f20bad3111772106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x0eab28c5dc714c055e4832f7e537a0ee1f42945318ea14138c93f5cf6487937c3111770106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xff7400177d745e76a4717f9f211f4171cb9ba0956e8738c88e8d1e4e298600833111760106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x6df8b7e8ff5aa22268fc956fc95f8e3c2edd1b2b444b919dc73db06589f1aa3f3111756106 days 15 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x0417fb8a09a392edd2851a6f396c42b492b3ceef49c6727412f99f4593789e703106819107 days 12 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x2b6402a1666ced86e1dae62b8ea7c4a06df0b6072afc62dee61603e0cfaaa2b93098529108 days 22 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0xf5d16896548111df6f2b1608a79258377c15ef01b49ef58901310bdcb37971873091246110 days 4 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
0x062788b092f264f231df724b4204855bde9cb2e41099086e41d2599feee51ed82962445132 days 13 hrs ago0x034b42734234ef65e2032c0e6c80348e1ca1d40a0x8fa7c01220396a205181d289ea805023abecce610 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: CodexStakeContainer
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.24;

// File: contracts/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: contracts/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/library/SafeMath.sol

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

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting '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;
    }

    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws 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 a / b;
  }

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

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

// File: contracts/ERC900/ERC900.sol

/**
 * @title ERC900 Simple Staking Interface
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-900.md
 */
contract ERC900 {
  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 data) public;
  function stakeFor(address user, uint256 amount, bytes data) public;
  function unstake(uint256 amount, bytes data) public;
  function totalStakedFor(address addr) public view returns (uint256);
  function totalStaked() public view returns (uint256);
  function token() public view returns (address);
  function supportsHistory() public pure returns (bool);

  // NOTE: Not implementing the optional functions
  // 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);
}

// File: contracts/ERC900/ERC900BasicStakeContainer.sol

/* solium-disable security/no-block-members */
pragma solidity 0.4.24;





/**
 * @title ERC900 Simple Staking Interface basic implementation
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-900.md
 */
contract ERC900BasicStakeContainer is ERC900 {
  // @TODO: deploy this separately so we don't have to deploy it multiple times for each contract
  using SafeMath for uint256;

  // Token used for staking
  ERC20 stakingToken;

  // The duration of stake lock-in (in seconds)
  uint256 public lockInDuration;

  // For token staked longer than a year, they will become more valuable by this coefficient
  //  e.g., if interestRate is 10, after 1 year the perceived stake is 10% more valuable.
  // Stakeholders will have to ping the contract via updatePerceivedStakeAmounts to have
  //  the contract update the perceived amounts of their stakes.
  uint256 public annualizedInterestRate;

  // The number of seconds in a year (365.25 days)
  // Used for determining when stakes are eligible for interest
  uint256 constant public YEAR_IN_SECONDS = 31557600;

  // To save on gas, rather than create a separate mapping for totalStakedFor & personalStakes,
  //  both data structures are stored in a single mapping for a given addresses.
  //
  // It's possible to have a non-existing personalStakes, but have tokens in totalStakedFor
  //  if other users are staking on behalf of a given address.
  mapping (address => StakeContainer) public stakeHolders;

  // Struct for personal stakes (i.e., stakes made by this address)
  // lastUpdatedTimestamp - when the perceivedAmount of the stake was last updated
  // unlockedTimestamp - when the stake unlocks (in seconds since Unix epoch)
  // actualAmount - the amount of tokens in the stake
  // perceivedAmount - the weighted amount of tokens in the stake
  // stakedFor - the address the stake was staked for
  struct Stake {
    uint256 lastUpdatedTimestamp;
    uint256 unlockedTimestamp;
    uint256 actualAmount;
    uint256 perceivedAmount;
    address stakedFor;
  }

  // Struct for all stake metadata at a particular address
  // totalStakedFor - the number of tokens staked for this address
  // personalStakeIndex - the index in the personalStakes array.
  // personalStakes - append only array of stakes made by this address
  // exists - whether or not there are stakes that involve this address
  struct StakeContainer {
    uint256 totalStakedFor;

    uint256 personalStakeIndex;

    Stake[] personalStakes;

    bool exists;
  }

  /**
   * @dev Modifier that checks that this contract can transfer tokens from the
   *  balance in the stakingToken contract for the given address.
   * @dev This modifier also transfers the tokens.
   * @param _address address to transfer tokens from
   * @param _amount uint256 the number of tokens
   */
  modifier canStake(address _address, uint256 _amount) {
    require(
      stakingToken.transferFrom(_address, this, _amount),
      "Stake required");

    _;
  }

  /**
   * @dev Constructor function
   * @param _stakingToken ERC20 The address of the token contract used for staking
   */
  constructor(ERC20 _stakingToken) public {
    stakingToken = _stakingToken;
  }

  /**
   * @dev Returns the timestamps for when active personal stakes for an address will unlock
   * @dev These accessors functions are needed until https://github.com/ethereum/web3.js/issues/1241 is solved
   * @param _address address that created the stakes
   * @return uint256[] array of timestamps
   */
  function getPersonalStakeUnlockedTimestamps(address _address) external view returns (uint256[]) {
    uint256[] memory timestamps;
    (timestamps,,,) = getPersonalStakes(_address);

    return timestamps;
  }

  /**
   * @dev Returns the stake actualAmount for active personal stakes for an address
   * @dev These accessors functions are needed until https://github.com/ethereum/web3.js/issues/1241 is solved
   * @param _address address that created the stakes
   * @return uint256[] array of actualAmounts
   */
  function getPersonalStakeActualAmounts(address _address) external view returns (uint256[]) {
    uint256[] memory actualAmounts;
    (,actualAmounts,,) = getPersonalStakes(_address);

    return actualAmounts;
  }

  /**
   * @dev Returns the stake perceivedAmount for active personal stakes for an address
   * @dev These accessors functions are needed until https://github.com/ethereum/web3.js/issues/1241 is solved
   * @param _address address that created the stakes
   * @return uint256[] array of perceivedAmounts
   */
  function getPersonalStakePerceivedAmounts(address _address) external view returns (uint256[]) {
    uint256[] memory perceivedAmounts;
    (,,perceivedAmounts,) = getPersonalStakes(_address);

    return perceivedAmounts;
  }

  /**
   * @dev Returns the addresses that each personal stake was created for by an address
   * @dev These accessors functions are needed until https://github.com/ethereum/web3.js/issues/1241 is solved
   * @param _address address that created the stakes
   * @return address[] array of amounts
   */
  function getPersonalStakeForAddresses(address _address) external view returns (address[]) {
    address[] memory stakedFor;
    (,,,stakedFor) = getPersonalStakes(_address);

    return stakedFor;
  }

  /**
   * @dev Updates the perceivedAmount for all personal stakes at the given address
   * @param _address The address to update personal stakes
   */
  function updatePerceivedStakeAmounts(address _address) external {
    StakeContainer storage stakeContainer = stakeHolders[_address];

    for (uint256 i = stakeContainer.personalStakeIndex; i < stakeContainer.personalStakes.length; i++) {
      Stake storage currentStake = stakeContainer.personalStakes[i];
      uint256 lastUpdatedTimestamp = currentStake.lastUpdatedTimestamp;

      // If interest has accrued over multiple years, the actual interest received will be higher than the
      //  annualized interest rate, so we use a loop to accrue this over multiple years
      // @TODO: There are some gas optimizations that can be made here (i.e., calculated the compoundedInterest rate)
      while (block.timestamp.sub(lastUpdatedTimestamp) >= YEAR_IN_SECONDS) {
        uint256 unit = 1 ether;

        uint256 newAmount = currentStake.perceivedAmount.mul(annualizedInterestRate.add(unit)).div(unit);
        uint256 difference = newAmount.sub(currentStake.perceivedAmount);

        // Update the totalStakedFor with the interest received
        stakeHolders[currentStake.stakedFor].totalStakedFor = stakeHolders[currentStake.stakedFor].totalStakedFor.add(difference);

        // Update the perceivedAmount with the interest received
        currentStake.perceivedAmount = newAmount;

        // SafeMath not needed here
        lastUpdatedTimestamp += YEAR_IN_SECONDS;
      }

      // Update the timestamp, so this stake is only eligible for interest a year from now
      if (currentStake.lastUpdatedTimestamp != lastUpdatedTimestamp) {
        currentStake.lastUpdatedTimestamp = block.timestamp;
      }
    }
  }

  /**
   * @notice Stakes a certain amount of tokens, this MUST transfer the given amount from the user
   * @notice MUST trigger Staked event
   * @param _amount uint256 the amount of tokens to stake
   * @param _data bytes optional data to include in the Stake event
   */
  function stake(uint256 _amount, bytes _data) public {
    createStake(
      msg.sender,
      _amount,
      _data);
  }

  /**
   * @notice Stakes a certain amount of tokens, this MUST transfer the given amount from the caller
   * @notice MUST trigger Staked event
   * @param _user address the address the tokens are staked for
   * @param _amount uint256 the amount of tokens to stake
   * @param _data bytes optional data to include in the Stake event
   */
  function stakeFor(address _user, uint256 _amount, bytes _data) public {
    createStake(
      _user,
      _amount,
      _data);
  }

  /**
   * @notice Unstakes a certain amount of tokens, this SHOULD return the given amount of tokens to the user, if unstaking is currently not possible the function MUST revert
   * @notice MUST trigger Unstaked event
   * @dev Unstaking tokens is an atomic operation—either all of the tokens in a stake, or none of the tokens.
   * @dev Users can only unstake a single stake at a time, it is must be their oldest active stake. Upon releasing that stake, the tokens will be
   *  transferred back to their account, and their personalStakeIndex will increment to the next active stake.
   * @param _amount uint256 the amount of tokens to unstake
   * @param _data bytes optional data to include in the Unstake event
   */
  function unstake(uint256 _amount, bytes _data) public {
    Stake storage personalStake = stakeHolders[msg.sender].personalStakes[stakeHolders[msg.sender].personalStakeIndex];

    // Check that the current stake has unlocked & matches the unstake amount
    require(
      personalStake.unlockedTimestamp <= block.timestamp,
      "The current stake hasn't unlocked yet");

    require(
      personalStake.actualAmount == _amount,
      "The unstake amount does not match the current stake");

    // Transfer the staked tokens from this contract back to the sender
    // Notice that we are using transfer instead of transferFrom here, so
    //  no approval is needed beforehand.
    require(
      stakingToken.transfer(msg.sender, _amount),
      "Unable to withdraw stake");

    // Notice that we are reducing totalStakedFor by the perceivedAmount of tokens in case any interest had accrued
    //  in the stakes for that address
    stakeHolders[personalStake.stakedFor].totalStakedFor = stakeHolders[personalStake.stakedFor]
      .totalStakedFor.sub(personalStake.perceivedAmount);

    personalStake.actualAmount = 0;
    personalStake.perceivedAmount = 0;
    stakeHolders[msg.sender].personalStakeIndex++;

    emit Unstaked(
      msg.sender,
      _amount,
      totalStakedFor(msg.sender),
      _data);
  }

  /**
   * @notice Returns the current total of tokens staked for an address
   * @param _address address The address to query
   * @return uint256 The number of tokens staked for the given address
   */
  function totalStakedFor(address _address) public view returns (uint256) {
    return stakeHolders[_address].totalStakedFor;
  }

  /**
   * @notice Returns the current total of tokens staked
   * @return uint256 The number of tokens staked in the contract
   */
  function totalStaked() public view returns (uint256) {
    return stakingToken.balanceOf(this);
  }

  /**
   * @notice Address of the token being used by the staking interface
   * @return address The address of the ERC20 token used for staking
   */
  function token() public view returns (address) {
    return stakingToken;
  }

  /**
   * @notice MUST return true if the optional history functions are implemented, otherwise false
   * @dev Since we don't implement the optional interface, this always returns false
   * @return bool Whether or not the optional history functions are implemented
   */
  function supportsHistory() public pure returns (bool) {
    return false;
  }

  /**
   * @dev Helper function to get specific properties of all of the personal stakes created by an address
   * @param _address address The address to query
   * @return (uint256[], uint256[], uint256[], address[])
   *  timestamps array, actualAmounts array, perceivedAmounts array, stakedFor array
   */
  function getPersonalStakes(
    address _address
  )
    view
    public
    returns(uint256[], uint256[], uint256[], address[])
  {
    StakeContainer storage stakeContainer = stakeHolders[_address];

    uint256 arraySize = stakeContainer.personalStakes.length - stakeContainer.personalStakeIndex;
    uint256[] memory unlockedTimestamps = new uint256[](arraySize);
    uint256[] memory actualAmounts = new uint256[](arraySize);
    uint256[] memory perceivedAmounts = new uint256[](arraySize);
    address[] memory stakedFor = new address[](arraySize);

    for (uint256 i = stakeContainer.personalStakeIndex; i < stakeContainer.personalStakes.length; i++) {
      uint256 index = i - stakeContainer.personalStakeIndex;
      unlockedTimestamps[index] = stakeContainer.personalStakes[i].unlockedTimestamp;
      actualAmounts[index] = stakeContainer.personalStakes[i].actualAmount;
      perceivedAmounts[index] = stakeContainer.personalStakes[i].perceivedAmount;
      stakedFor[index] = stakeContainer.personalStakes[i].stakedFor;
    }

    return (
      unlockedTimestamps,
      actualAmounts,
      perceivedAmounts,
      stakedFor
    );
  }

  /**
   * @dev Helper function to create stakes for a given address
   * @param _address address The address the stake is being created for
   * @param _amount uint256 The number of tokens being staked
   * @param _data bytes The optional data emitted in the Staked event
   */
  function createStake(
    address _address,
    uint256 _amount,
    bytes _data
  )
    internal
    canStake(msg.sender, _amount)
  {
    if (!stakeHolders[msg.sender].exists) {
      stakeHolders[msg.sender].exists = true;
    }

    stakeHolders[_address].totalStakedFor = stakeHolders[_address].totalStakedFor.add(_amount);
    stakeHolders[msg.sender].personalStakes.push(
      Stake(
        block.timestamp,
        block.timestamp.add(lockInDuration),
        _amount,
        _amount,
        _address)
      );

    emit Staked(
      _address,
      _amount,
      totalStakedFor(_address),
      _data);
  }
}

// File: contracts/library/DelayedOwnable.sol

/**
 * @title DelayedOwnable
 * @dev The DelayedOwnable contract has an owner address, and provides basic authorization control
 *  functions, this simplifies the implementation of "user permissions".
 * @dev This is different than the original Ownable contract because intializeOwnable
 *  must be specifically called after creation to create an owner.
 */
contract DelayedOwnable {
  address public owner;
  bool public isInitialized = false;

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

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

  function initializeOwnable(address _owner) external {
    require(!isInitialized, "The owner has already been set");

    owner = _owner;
  }

  /**
   * @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 {
    require(_newOwner != address(0));

    emit OwnershipTransferred(owner, _newOwner);

    owner = _newOwner;
  }
}

// File: contracts/library/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is DelayedOwnable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

// File: contracts/CodexStakeContainer.sol

// @TODO: Add Pausable functionality to prevent staking/unstaking?



/**
 * @title CodexStakeContainer
 */
contract CodexStakeContainer is ERC900BasicStakeContainer, Pausable {
  /**
   * @dev Constructor function
   * @param _stakingToken ERC20 The address of the token used for staking
   * @param _lockInDuration uint256 The duration (in seconds) that stakes are required to be locked for
   * @param _annualizedInterestRate uint256 The interest rate (in wei) that stakes can receive on a yearly basis
   */
  constructor(ERC20 _stakingToken, uint256 _lockInDuration, uint256 _annualizedInterestRate) public
    ERC900BasicStakeContainer(_stakingToken)
  {
    lockInDuration = _lockInDuration;
    annualizedInterestRate = _annualizedInterestRate;
  }

  /**
   * @dev Sets the lockInDuration for stakes. Only callable by the owner
   * @param _lockInDuration uint256 The duration (in seconds) that stakes are required to be locked for
   */
  function setLockInDuration(uint256 _lockInDuration) external onlyOwner {
    lockInDuration = _lockInDuration;
  }

  /**
   * @dev Sets the interest rate for the perceivedAmount on stakes. Only callable by the owner.
   * @param _annualizedInterestRate uint256 The annualized interest rate (in wei)
   */
  function setAnnualizedInterestRate(uint256 _annualizedInterestRate) external onlyOwner {
    annualizedInterestRate = _annualizedInterestRate;
  }
}

    Contract ABI  
[{"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":"_address","type":"address"}],"name":"getPersonalStakeUnlockedTimestamps","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getPersonalStakes","outputs":[{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_annualizedInterestRate","type":"uint256"}],"name":"setAnnualizedInterestRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockInDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"totalStakedFor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockInDuration","type":"uint256"}],"name":"setLockInDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getPersonalStakeActualAmounts","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"supportsHistory","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getPersonalStakePerceivedAmounts","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"updatePerceivedStakeAmounts","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"YEAR_IN_SECONDS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getPersonalStakeForAddresses","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"annualizedInterestRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"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":false,"inputs":[{"name":"_owner","type":"address"}],"name":"initializeOwnable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"stakeHolders","outputs":[{"name":"totalStakedFor","type":"uint256"},{"name":"personalStakeIndex","type":"uint256"},{"name":"exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_stakingToken","type":"address"},{"name":"_lockInDuration","type":"uint256"},{"name":"_annualizedInterestRate","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"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"}]

  Contract Creation Code Switch To Opcodes View
60806040526000600460146101000a81548160ff0219169083151502179055506000600460156101000a81548160ff02191690831515021790555034801561004657600080fd5b506040516060806122ab83398101806040528101908080519060200190929190805190602001909291908051906020019092919050505082806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505081600181905550806002819055505050506121cc806100df6000396000f300608060405260043610610154576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630e89439b146101595780630ef96356146101cc578063201d3be71461025f57806320bf9620146102f75780633640398d146104675780633766693c14610494578063392e53cd146104bf5780633f4ba83a146104ee5780634b341aed146105055780635c975abb1461055c578063658a66511461058b57806366e6360d146105b85780637033e4a61461065057806374ca92131461067f5780637759b75e146107175780637847ea531461075a5780638033f6bc1461078557806380a4c36f1461081d578063817b1cd2146108485780638456cb59146108735780638da5cb5b1461088a578063c8fd6ed0146108e1578063c9a6964a14610954578063e26ff10a14610997578063f2fde38b14610a00578063fc0c546a14610a43575b600080fd5b34801561016557600080fd5b506101ca60048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610a9a565b005b3480156101d857600080fd5b5061025d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610aa9565b005b34801561026b57600080fd5b506102a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ab9565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156102e35780820151818401526020810190506102c8565b505050509050019250505060405180910390f35b34801561030357600080fd5b50610338600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ad8565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b8381101561038757808201518184015260208101905061036c565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156103c95780820151818401526020810190506103ae565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561040b5780820151818401526020810190506103f0565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561044d578082015181840152602081019050610432565b505050509050019850505050505050505060405180910390f35b34801561047357600080fd5b5061049260048036038101908080359060200190929190505050610d95565b005b3480156104a057600080fd5b506104a9610dfb565b6040518082815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610e01565b604051808215151515815260200191505060405180910390f35b3480156104fa57600080fd5b50610503610e14565b005b34801561051157600080fd5b50610546600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed4565b6040518082815260200191505060405180910390f35b34801561056857600080fd5b50610571610f20565b604051808215151515815260200191505060405180910390f35b34801561059757600080fd5b506105b660048036038101908080359060200190929190505050610f33565b005b3480156105c457600080fd5b506105f9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f99565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561063c578082015181840152602081019050610621565b505050509050019250505060405180910390f35b34801561065c57600080fd5b50610665610fb9565b604051808215151515815260200191505060405180910390f35b34801561068b57600080fd5b506106c0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fc1565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156107035780820151818401526020810190506106e8565b505050509050019250505060405180910390f35b34801561072357600080fd5b50610758600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fe2565b005b34801561076657600080fd5b5061076f611218565b6040518082815260200191505060405180910390f35b34801561079157600080fd5b506107c6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611220565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108095780820151818401526020810190506107ee565b505050509050019250505060405180910390f35b34801561082957600080fd5b50610832611242565b6040518082815260200191505060405180910390f35b34801561085457600080fd5b5061085d611248565b6040518082815260200191505060405180910390f35b34801561087f57600080fd5b50610888611346565b005b34801561089657600080fd5b5061089f611407565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108ed57600080fd5b5061095260048036038101908080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061142d565b005b34801561096057600080fd5b50610995600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a3565b005b3480156109a357600080fd5b506109d8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6c565b6040518084815260200183815260200182151515158152602001935050505060405180910390f35b348015610a0c57600080fd5b50610a41600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa3565b005b348015610a4f57600080fd5b50610a58611bfb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610aa5338383611c24565b5050565b610ab4838383611c24565b505050565b606080610ac583610ad8565b9091509050508091505080915050919050565b606080606080600080606080606080600080600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002097508760010154886002018054905003965086604051908082528060200260200182016040528015610b6a5781602001602082028038833980820191505090505b50955086604051908082528060200260200182016040528015610b9c5781602001602082028038833980820191505090505b50945086604051908082528060200260200182016040528015610bce5781602001602082028038833980820191505090505b50935086604051908082528060200260200182016040528015610c005781602001602082028038833980820191505090505b509250876001015491505b8760020180549050821015610d7a578760010154820390508760020182815481101515610c3457fe5b9060005260206000209060050201600101548682815181101515610c5457fe5b90602001906020020181815250508760020182815481101515610c7357fe5b9060005260206000209060050201600201548582815181101515610c9357fe5b90602001906020020181815250508760020182815481101515610cb257fe5b9060005260206000209060050201600301548482815181101515610cd257fe5b90602001906020020181815250508760020182815481101515610cf157fe5b906000526020600020906005020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168382815181101515610d3157fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508180600101925050610c0b565b858585859b509b509b509b5050505050505050509193509193565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610df157600080fd5b8060028190555050565b60015481565b600460149054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e7057600080fd5b600460159054906101000a900460ff161515610e8b57600080fd5b6000600460156101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600460159054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f8f57600080fd5b8060018190555050565b606080610fa583610ad8565b909192509050508091505080915050919050565b600080905090565b606080610fcd83610ad8565b90919250909150508091505080915050919050565b6000806000806000806000600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209650866001015495505b866002018054905086101561120e57866002018681548110151561105657fe5b90600052602060002090600502019450846000015493505b6301e187e0611086854261211d90919063ffffffff16565b1015156111ea57670de0b6b3a764000092506110d5836110c76110b48660025461213690919063ffffffff16565b886003015461215290919063ffffffff16565b61218a90919063ffffffff16565b91506110ee85600301548361211d90919063ffffffff16565b905061116981600360008860040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461213690919063ffffffff16565b600360008760040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508185600301819055506301e187e08401935061106e565b838560000154141515611201574285600001819055505b8580600101965050611036565b5050505050505050565b6301e187e081565b60608061122c83610ad8565b9091925090915090508091505080915050919050565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561130657600080fd5b505af115801561131a573d6000803e3d6000fd5b505050506040513d602081101561133057600080fd5b8101908080519060200190929190505050905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113a257600080fd5b600460159054906101000a900460ff161515156113be57600080fd5b6001600460156101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101548154811015156114c057fe5b9060005260206000209060050201905042816001015411151515611572576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f5468652063757272656e74207374616b65206861736e277420756e6c6f636b6581526020017f642079657400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b828160020154141515611613576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001807f54686520756e7374616b6520616d6f756e7420646f6573206e6f74206d61746381526020017f68207468652063757272656e74207374616b650000000000000000000000000081525060400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156116d757600080fd5b505af11580156116eb573d6000803e3d6000fd5b505050506040513d602081101561170157600080fd5b81019080805190602001909291905050501515611786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f556e61626c6520746f207769746864726177207374616b65000000000000000081525060200191505060405180910390fd5b6118038160030154600360008460040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461211d90919063ffffffff16565b600360008360040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000816002018190555060008160030181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c87548461191533610ed4565b856040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611962578082015181840152602081019050611947565b50505050905090810190601f16801561198f5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050565b600460149054906101000a900460ff16151515611a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f546865206f776e65722068617320616c7265616479206265656e20736574000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036020528060005260406000206000915090508060000154908060010154908060030160009054906101000a900460ff16905083565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611aff57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611b3b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b33826000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d1e57600080fd5b505af1158015611d32573d6000803e3d6000fd5b505050506040513d6020811015611d4857600080fd5b81019080805190602001909291905050501515611dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f5374616b6520726571756972656400000000000000000000000000000000000081525060200191505060405180910390fd5b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff161515611e7f576001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff0219169083151502179055505b611ed484600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461213690919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160a060405190810160405280428152602001611f836001544261213690919063ffffffff16565b81526020018681526020018681526020018773ffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505090600182039060005260206000209060050201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508473ffffffffffffffffffffffffffffffffffffffff167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f1609351428561208d88610ed4565b866040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120da5780820151818401526020810190506120bf565b50505050905090810190601f1680156121075780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a25050505050565b600082821115151561212b57fe5b818303905092915050565b6000818301905082811015151561214957fe5b80905092915050565b6000808314156121655760009050612184565b818302905081838281151561217657fe5b0414151561218057fe5b8090505b92915050565b6000818381151561219757fe5b049050929150505600a165627a7a72305820384707f9f86a7a068da31f2ccb1f65a6709ad1d487d33582fd1b35b6c898ff650029000000000000000000000000b7f7848507a6af9c6d7560da89d4778aa1043d69000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000000000000000000000000000016345785d8a0000

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

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b7f7848507a6af9c6d7560da89d4778aa1043d69
Arg [1] : 000000000000000000000000000000000000000000000000000000000076a700
Arg [2] : 000000000000000000000000000000000000000000000000016345785d8a0000


   Swarm Source:
bzzr://384707f9f86a7a068da31f2ccb1f65a6709ad1d487d33582fd1b35b6c898ff65

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward