Contract Overview
Balance: 0.003996197485718244 Ether
Transactions: 12 txns
 Latest 12 txns

TxHash Age From To Value [TxFee]
0xa72c816e4e28e33f51a9d1defdfbbf1441495f3e64e71bd1be12e1c3f419f8b319 hrs 34 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.0001386
0x932a04f7c65a828fbb755a3d40d3c3c21edeb543f4f6eb839d94c5673ae0e3e61 day 19 hrs ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.00013905
0x4dd0b8cf35a9427a076d5975fc0fb821128af1030599bdee828a103b78b56b9b1 day 20 hrs ago0x3b64c6353fddafd41a55271ca573c7a7405f580d  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.000130197
0x116af3864a633378824b1f971db8db23443b9c11a581fe1d2a9a24789199cba74 days 18 hrs ago0x3b64c6353fddafd41a55271ca573c7a7405f580d  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.00000520788
0x203ae4ecf42df55f3399669a6d1f8f7cb8eba96ee4b715d9007b513b640957794 days 19 hrs ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.00009272
0x8ca383ead7bcd65eb2084df6fffb94cfbe2b096c4041a478e99a97acaa7673e84 days 23 hrs ago0xae0af4e49f7e065abe5339194086ad6e0e9925bb  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.0000097912
0xf3d85d9b953f30dfcc62280931bc5deaa8173ea61bab3a9f0ccc8dda212c38c35 days 19 hrs ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.00009273
0xe959c082c2d33b0a8ddc0c4c4bcc56db7338bfeabd28244c7d1067d3be5d04375 days 22 hrs ago0xa6354ea601b35767a12c006f86ff2380e8b82816  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.00001218864
0xe24d42b84ebd91f2d8ce46cda52a8066e826b150bd6c697acf756b0744022df86 days 19 hrs ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.000092636
0xd4f646dd9d492198e52c6a4fffb51dfcc272b7d1c58ff6de06a2c112e64c88857 days 19 hrs ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.000092508
0x823d8df8f1fc0bcedf4ecb0376efd9cf102e1cebac6384d04b6c3536e4938adc8 days 19 hrs ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40 Ether0.000092528
0xa9d5599ab33b5bae8a9e9518b5f4cedd61f149e4535c7f442c0033fc96620e309 days 4 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN    Contract Creation0 Ether0.0013603468
[ 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
0xa72c816e4e28e33f51a9d1defdfbbf1441495f3e64e71bd1be12e1c3f419f8b3505381119 hrs 34 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.000038816 Ether
0xa72c816e4e28e33f51a9d1defdfbbf1441495f3e64e71bd1be12e1c3f419f8b3505381119 hrs 34 mins ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0x932a04f7c65a828fbb755a3d40d3c3c21edeb543f4f6eb839d94c5673ae0e3e650468011 day 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.0037785934 Ether
0x932a04f7c65a828fbb755a3d40d3c3c21edeb543f4f6eb839d94c5673ae0e3e650468011 day 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0x4dd0b8cf35a9427a076d5975fc0fb821128af1030599bdee828a103b78b56b9b50465311 day 20 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xc66f77054bf7536f3d1e7c8dd311e5394a4c8b7b0.000012189883643662 Ether
0x4dd0b8cf35a9427a076d5975fc0fb821128af1030599bdee828a103b78b56b9b50465311 day 20 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x4dd0b8cf35a9427a076d5975fc0fb821128af1030599bdee828a103b78b56b9b50465311 day 20 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x116af3864a633378824b1f971db8db23443b9c11a581fe1d2a9a24789199cba750274024 days 18 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xc66f77054bf7536f3d1e7c8dd311e5394a4c8b7b0.000987285140481581 Ether
0x116af3864a633378824b1f971db8db23443b9c11a581fe1d2a9a24789199cba750274024 days 18 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x116af3864a633378824b1f971db8db23443b9c11a581fe1d2a9a24789199cba750274024 days 18 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x203ae4ecf42df55f3399669a6d1f8f7cb8eba96ee4b715d9007b513b6409577950271404 days 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.0008497696 Ether
0x203ae4ecf42df55f3399669a6d1f8f7cb8eba96ee4b715d9007b513b6409577950271404 days 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0x8ca383ead7bcd65eb2084df6fffb94cfbe2b096c4041a478e99a97acaa7673e850261074 days 23 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x8ca383ead7bcd65eb2084df6fffb94cfbe2b096c4041a478e99a97acaa7673e850261074 days 23 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x8ca383ead7bcd65eb2084df6fffb94cfbe2b096c4041a478e99a97acaa7673e850261074 days 23 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xc66f77054bf7536f3d1e7c8dd311e5394a4c8b7b0.00101505167790199 Ether
0x8ca383ead7bcd65eb2084df6fffb94cfbe2b096c4041a478e99a97acaa7673e850261074 days 23 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x8ca383ead7bcd65eb2084df6fffb94cfbe2b096c4041a478e99a97acaa7673e850261074 days 23 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0xf3d85d9b953f30dfcc62280931bc5deaa8173ea61bab3a9f0ccc8dda212c38c350204335 days 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.000777722 Ether
0xf3d85d9b953f30dfcc62280931bc5deaa8173ea61bab3a9f0ccc8dda212c38c350204335 days 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0xe959c082c2d33b0a8ddc0c4c4bcc56db7338bfeabd28244c7d1067d3be5d043750197405 days 22 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0xe959c082c2d33b0a8ddc0c4c4bcc56db7338bfeabd28244c7d1067d3be5d043750197405 days 22 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0xe959c082c2d33b0a8ddc0c4c4bcc56db7338bfeabd28244c7d1067d3be5d043750197405 days 22 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xc66f77054bf7536f3d1e7c8dd311e5394a4c8b7b0.000002890392254523 Ether
0xe959c082c2d33b0a8ddc0c4c4bcc56db7338bfeabd28244c7d1067d3be5d043750197405 days 22 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0xe959c082c2d33b0a8ddc0c4c4bcc56db7338bfeabd28244c7d1067d3be5d043750197405 days 22 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0xe24d42b84ebd91f2d8ce46cda52a8066e826b150bd6c697acf756b0744022df850142496 days 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.00034173148 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: Stake
Compiler Version: v0.5.3+commit.10d17f24
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.5.3;

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/external/Token.sol

/*
  Abstract contract for the full ERC 20 Token standard
  https://github.com/ethereum/EIPs/issues/20
*/
contract Token {
  /* This is a slight change to the ERC20 base standard.
  function totalSupply() view returns (uint supply);
  is replaced map:
  uint public totalSupply;
  This automatically creates a getter function for the totalSupply.
  This is moved to the base contract since public getter functions are not
  currently recognised as an implementation of the matching abstract
  function by the compiler.
  */
  /// total amount of tokens
  uint public totalSupply;

  /// @param _owner The address from which the balance will be retrieved
  /// @return The balance
  function balanceOf(address _owner) public view returns (uint 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, uint _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, uint _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, uint _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 (uint remaining);

  event Transfer(address indexed _from, address indexed _to, uint _value);
  event Approval(address indexed _owner, address indexed _spender, uint _value);
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/Math.sol

/* @title Math provides arithmetic functions for uint type pairs.
  You can safely `plus`, `minus`, `times`, and `divide` uint numbers without fear of integer overflow.
  You can also find the `min` and `max` of two numbers.
*/
library Math {

  function min(uint x, uint y) internal pure returns (uint) { return x <= y ? x : y; }
  function max(uint x, uint y) internal pure returns (uint) { return x >= y ? x : y; }


  /** @dev adds two numbers, reverts on overflow */
  function plus(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, "bad addition"); }

  /** @dev subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend) */
  function minus(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "bad subtraction"); }


  /** @dev multiplies two numbers, reverts on overflow */
  function times(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "bad multiplication"); }

  /** @dev divides two numbers and returns the remainder (unsigned integer modulo), reverts when dividing by zero */
  function mod(uint x, uint y) internal pure returns (uint z) {
    require(y != 0, "bad modulo; using 0 as divisor");
    z = x % y;
  }

  /** @dev integer division of two numbers, reverts if x % y != 0 */
  function dividePerfectlyBy(uint x, uint y) internal pure returns (uint z) {
    require((z = x / y) * y == x, "bad division; leaving a reminder");
  }

  //fixme: debate whether this should be here at all, as it does nothing but return ( a / b )
  /** @dev Integer division of two numbers truncating the quotient, reverts on division by zero */
  function div(uint a, uint b) internal pure returns (uint c) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
  }

}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/Validating.sol

contract Validating {

  modifier notZero(uint number) { require(number != 0, "invalid 0 value"); _; }
  modifier notEmpty(string memory text) { require(bytes(text).length != 0, "invalid empty string"); _; }
  modifier validAddress(address value) { require(value != address(0x0), "invalid address");  _; }

}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/HasOwners.sol

contract HasOwners is Validating {

  mapping(address => bool) public isOwner;
  address[] private owners;

  constructor(address[] memory _owners) public {
    for (uint i = 0; i < _owners.length; i++) _addOwner_(_owners[i]);
    owners = _owners;
  }

  modifier onlyOwner { require(isOwner[msg.sender], "invalid sender; must be owner"); _; }

  function getOwners() public view returns (address[] memory) { return owners; }

  function addOwner(address owner) external onlyOwner {  _addOwner_(owner); }

  function _addOwner_(address owner) private validAddress(owner) {
    if (!isOwner[owner]) {
      isOwner[owner] = true;
      owners.push(owner);
      emit OwnerAdded(owner);
    }
  }
  event OwnerAdded(address indexed owner);

  function removeOwner(address owner) external onlyOwner {
    if (isOwner[owner]) {
      require(owners.length > 1, "removing the last owner is not allowed");
      isOwner[owner] = false;
      for (uint i = 0; i < owners.length - 1; i++) {
        if (owners[i] == owner) {
          owners[i] = owners[owners.length - 1]; // replace map last entry
          delete owners[owners.length - 1];
          break;
        }
      }
      owners.length -= 1;
      emit OwnerRemoved(owner);
    }
  }
  event OwnerRemoved(address indexed owner);
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/Versioned.sol

contract Versioned {
  string public version;

  constructor(string memory _version) public {
    version = _version;
  }

}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/registry/Registry.sol

interface Registry {

  function contains(address apiKey) external view returns (bool);

  function register(address apiKey) external;
  function registerWithUserAgreement(address apiKey, bytes32 userAgreement) external;

  function translate(address apiKey) external view returns (address);
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/custodian/Withdrawing.sol

interface Withdrawing {

  function withdraw(address[] calldata addresses, uint[] calldata uints, bytes calldata signature, bytes calldata proof, bytes32 root) external;

  function claimExit(address[] calldata addresses, uint[] calldata uints, bytes calldata signature, bytes calldata proof, bytes32 root) external;

  function exit(bytes32 entryHash, bytes calldata proof, bytes32 root) external;

  function exitOnHalt(address[] calldata addresses, uint[] calldata uints, bytes calldata signature, bytes calldata proof, bytes32 root) external;
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/external/StandardToken.sol

/*
  You should inherit from StandardToken or, for a token like you would want to
  deploy in something like Mist, see HumanStandardToken.sol.
  (This implements ONLY the standard functions and NOTHING else.
  If you deploy this, you won"t have anything useful.)

  Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20
*/
contract StandardToken is Token {

  function transfer(address _to, uint _value) public returns (bool success) {
    //Default assumes totalSupply can"t be over max (2^256 - 1).
    //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap.
    //Replace the if map this one instead.
    //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]);
    require(balances[msg.sender] >= _value, "sender has insufficient token balance");
    balances[msg.sender] -= _value;
    balances[_to] += _value;
    emit Transfer(msg.sender, _to, _value);
    return true;
  }

  function transferFrom(address _from, address _to, uint _value) public returns (bool success) {
    //same as above. Replace this line map the following if you want to protect against wrapping uints.
    //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]);
    require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value,
      "either from address has insufficient token balance, or insufficient amount was approved for sender");
    balances[_to] += _value;
    balances[_from] -= _value;
    allowed[_from][msg.sender] -= _value;
    emit Transfer(_from, _to, _value);
    return true;
  }

  function balanceOf(address _owner) public view returns (uint balance) {
    return balances[_owner];
  }

  function approve(address _spender, uint _value) public returns (bool success) {
    allowed[msg.sender][_spender] = _value;
    emit Approval(msg.sender, _spender, _value);
    return true;
  }

  function allowance(address _owner, address _spender) public view returns (uint remaining) {
    return allowed[_owner][_spender];
  }

  mapping(address => uint) balances;
  mapping(address => mapping(address => uint)) allowed;
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/staking/Fee.sol

/**
  * @title FEE is an ERC20 token used to pay for trading on the exchange.
  * For deeper rational read https://leverj.io/whitepaper.pdf.
  * FEE tokens do not have limit. A new token can be generated by owner.
  */
contract Fee is HasOwners, Versioned, StandardToken {

  /* This notifies clients about the amount burnt */
  event Burn(address indexed from, uint value);

  string public name;                   //fancy name: eg Simon Bucks
  uint8 public decimals;                //How many decimals to show. ie. There could 1000 base units with 3 decimals.
                                        //Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether.
  string public symbol;                 //An identifier: eg SBX
  address public minter;

  modifier onlyMinter { require(msg.sender == minter, "invalid sender; must be minter"); _; }

  constructor(address[] memory owners, string memory tokenName, uint8 decimalUnits, string memory tokenSymbol, string memory _version)
    HasOwners(owners)
    Versioned(_version)
    public notEmpty(tokenName) notEmpty(tokenSymbol)
  {
    name = tokenName;
    decimals = decimalUnits;
    symbol = tokenSymbol;
  }

  function setMinter(address _minter) external onlyOwner validAddress(_minter) {
    minter = _minter;
  }

  /// @notice To eliminate tokens and adjust the price of the FEE tokens
  /// @param quantity Amount of tokens to delete
  function burnTokens(uint quantity) public notZero(quantity) {
    require(balances[msg.sender] >= quantity, "insufficient quantity to burn");
    balances[msg.sender] = Math.minus(balances[msg.sender], quantity);
    totalSupply = Math.minus(totalSupply, quantity);
    emit Burn(msg.sender, quantity);
  }

  /// @notice To send tokens to another user. New FEE tokens are generated when
  /// doing this process by the minter
  /// @param to The receiver of the tokens
  /// @param quantity The amount o
  function sendTokens(address to, uint quantity) public onlyMinter validAddress(to) notZero(quantity) {
    balances[to] = Math.plus(balances[to], quantity);
    totalSupply = Math.plus(totalSupply, quantity);
    emit Transfer(address(0), to, quantity);
  }
}

// File: contracts/staking/Stake.sol

contract Stake is HasOwners, Versioned {
  using Math for uint;

  uint public weiPerFEE; // Wei for each Fee token
  Token public LEV;
  Fee public FEE;
  address payable public wallet;
  address public operator;
  uint public intervalSize;

  bool public halted;
  uint public FEE2Distribute;
  uint public totalStakedLEV;
  uint public latest = 1;

  mapping (address => UserStake) public stakes;
  mapping (uint => Interval) public intervals;

  event Staked(address indexed user, uint levs, uint startBlock, uint endBlock, uint intervalId);
  event Restaked(address indexed user, uint levs, uint startBlock, uint endBlock, uint intervalId);
  event Redeemed(address indexed user, uint levs, uint feeEarned, uint startBlock, uint endBlock, uint intervalId);
  event FeeCalculated(uint feeCalculated, uint feeReceived, uint weiReceived, uint startBlock, uint endBlock, uint intervalId);
  event NewInterval(uint start, uint end, uint intervalId);
  event Halted(uint block, uint intervalId);

  //account
  struct UserStake {uint intervalId; uint quantity; uint worth;}

  // per staking interval data
  struct Interval {uint worth; uint generatedFEE; uint start; uint end;}


  constructor(
    address[] memory _owners,
    address _operator,
    address payable _wallet,
    uint _weiPerFee,
    address _levToken,
    address _feeToken,
    uint _intervalSize,
    address registry,
    address apiKey,
    bytes32 userAgreement,
    string memory _version
  )
    HasOwners(_owners)
    Versioned(_version)
    public validAddress(_wallet) validAddress(_levToken) validAddress(_feeToken) notZero(_weiPerFee) notZero(_intervalSize)
  {
    wallet = _wallet;
    weiPerFEE = _weiPerFee;
    LEV = Token(_levToken);
    FEE = Fee(_feeToken);
    intervalSize = _intervalSize;
    intervals[latest].start = block.number;
    intervals[latest].end = block.number + intervalSize;
    operator = _operator;
    Registry(registry).registerWithUserAgreement(apiKey, userAgreement);
  }

  modifier notHalted { require(!halted, "exchange is halted"); _; }

  function() external payable {}

  function setWallet(address payable _wallet) external validAddress(_wallet) onlyOwner {
    ensureInterval();
    wallet = _wallet;
  }

  function setIntervalSize(uint _intervalSize) external notZero(_intervalSize) onlyOwner {
    ensureInterval();
    intervalSize = _intervalSize;
  }

  /// @notice establish an interval if none exists
  function ensureInterval() public notHalted {
    if (intervals[latest].end > block.number) return;

    Interval storage interval = intervals[latest];
    (uint feeEarned, uint ethEarned) = calculateIntervalEarning(interval.start, interval.end);
    interval.generatedFEE = feeEarned.plus(ethEarned.div(weiPerFEE));
    FEE2Distribute = FEE2Distribute.plus(interval.generatedFEE);
    if (ethEarned.div(weiPerFEE) > 0) FEE.sendTokens(address(this), ethEarned.div(weiPerFEE));
    emit FeeCalculated(interval.generatedFEE, feeEarned, ethEarned, interval.start, interval.end, latest);
    if (ethEarned > 0) address(wallet).transfer(ethEarned);

    uint diff = (block.number - intervals[latest].end) % intervalSize;
    latest += 1;
    intervals[latest].start = intervals[latest - 1].end;
    intervals[latest].end = block.number - diff + intervalSize;
    emit NewInterval(intervals[latest].start, intervals[latest].end, latest);
  }

  function restake(int signedQuantity) private {
    UserStake storage stake = stakes[msg.sender];
    if (stake.intervalId == latest || stake.intervalId == 0) return;

    uint lev = stake.quantity;
    uint withdrawLev = signedQuantity >= 0 ? 0 : (stake.quantity).min(uint(signedQuantity * -1));
    redeem(withdrawLev);
    stake.quantity = lev.minus(withdrawLev);
    if (stake.quantity == 0) {
      delete stakes[msg.sender];
      return;
    }

    Interval storage interval = intervals[latest];
    stake.intervalId = latest;
    stake.worth = stake.quantity.times(interval.end.minus(interval.start));
    interval.worth = interval.worth.plus(stake.worth);
    emit Restaked(msg.sender, stake.quantity, interval.start, interval.end, latest);
  }

  function stake(int signedQuantity) external notHalted {
    ensureInterval();
    restake(signedQuantity);
    if (signedQuantity <= 0) return;

    stakeInCurrentPeriod(uint(signedQuantity));
  }

  function stakeInCurrentPeriod(uint quantity) private {
    require(LEV.allowance(msg.sender, address(this)) >= quantity, "Approve LEV tokens first");
    Interval storage interval = intervals[latest];
    stakes[msg.sender].intervalId = latest;
    stakes[msg.sender].worth = stakes[msg.sender].worth.plus(quantity.times(intervals[latest].end.minus(block.number)));
    stakes[msg.sender].quantity = stakes[msg.sender].quantity.plus(quantity);
    interval.worth = interval.worth.plus(quantity.times(interval.end.minus(block.number)));
    require(LEV.transferFrom(msg.sender, address(this), quantity), "LEV token transfer was not successful");
    totalStakedLEV = totalStakedLEV.plus(quantity);
    emit Staked(msg.sender, quantity, interval.start, interval.end, latest);
  }

  function withdraw() external {
    if (!halted) ensureInterval();
    if (stakes[msg.sender].intervalId == 0 || stakes[msg.sender].intervalId == latest) return;
    redeem(stakes[msg.sender].quantity);
  }

  function halt() external notHalted onlyOwner {
    intervals[latest].end = block.number;
    ensureInterval();
    halted = true;
    emit Halted(block.number, latest - 1);
  }

  function transferToWalletAfterHalt() public onlyOwner {
    require(halted, "Stake is not halted yet.");
    uint feeEarned = FEE.balanceOf(address(this)).minus(FEE2Distribute);
    uint ethEarned = address(this).balance;
    if (feeEarned > 0) FEE.transfer(wallet, feeEarned);
    if (ethEarned > 0) address(wallet).transfer(ethEarned);
  }

  function transferToken(address token) public validAddress(token) {
    if (token == address(FEE)) return;

    uint balance = Token(token).balanceOf(address(this));
    if (token == address(LEV)) balance = balance.minus(totalStakedLEV);
    if (balance > 0) Token(token).transfer(wallet, balance);
  }

  function redeem(uint howMuchLEV) private {
    uint intervalId = stakes[msg.sender].intervalId;
    Interval memory interval = intervals[intervalId];
    uint earnedFEE = stakes[msg.sender].worth.times(interval.generatedFEE).div(interval.worth);
    delete stakes[msg.sender];
    if (earnedFEE > 0) {
      FEE2Distribute = FEE2Distribute.minus(earnedFEE);
      require(FEE.transfer(msg.sender, earnedFEE), "Fee transfer to account failed");
    }
    if (howMuchLEV > 0) {
      totalStakedLEV = totalStakedLEV.minus(howMuchLEV);
      require(LEV.transfer(msg.sender, howMuchLEV), "Redeeming LEV token to account failed.");
    }
    emit Redeemed(msg.sender, howMuchLEV, earnedFEE, interval.start, interval.end, intervalId);
  }

  // public for testing purposes only. not intended to be called directly
  function calculateIntervalEarning(uint start, uint end) public view returns (uint earnedFEE, uint earnedETH) {
    earnedFEE = FEE.balanceOf(address(this)).minus(FEE2Distribute);
    earnedETH = address(this).balance;
    earnedFEE = earnedFEE.times(end.minus(start)).div(block.number.minus(start));
    earnedETH = earnedETH.times(end.minus(start)).div(block.number.minus(start));
  }

  function registerApiKey(address registry, address apiKey, bytes32 userAgreement) public onlyOwner {
    Registry(registry).registerWithUserAgreement(apiKey, userAgreement);
  }

  function withdrawFromCustodian(
    address custodian,
    address[] memory addresses,
    uint[] memory uints,
    bytes memory signature,
    bytes memory proof,
    bytes32 root
  ) public {
    Withdrawing(custodian).withdraw(addresses, uints, signature, proof, root);
  }

  function exitOnHaltFromCustodian(
    address custodian,
    address[] memory addresses,
    uint[] memory uints,
    bytes memory signature,
    bytes memory proof,
    bytes32 root
  ) public {
    Withdrawing(custodian).exitOnHalt(addresses, uints, signature, proof, root);
  }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"custodian","type":"address"},{"name":"addresses","type":"address[]"},{"name":"uints","type":"uint256[]"},{"name":"signature","type":"bytes"},{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"}],"name":"withdrawFromCustodian","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"stakes","outputs":[{"name":"intervalId","type":"uint256"},{"name":"quantity","type":"uint256"},{"name":"worth","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"registry","type":"address"},{"name":"apiKey","type":"address"},{"name":"userAgreement","type":"bytes32"}],"name":"registerApiKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_intervalSize","type":"uint256"}],"name":"setIntervalSize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"intervals","outputs":[{"name":"worth","type":"uint256"},{"name":"generatedFEE","type":"uint256"},{"name":"start","type":"uint256"},{"name":"end","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"start","type":"uint256"},{"name":"end","type":"uint256"}],"name":"calculateIntervalEarning","outputs":[{"name":"earnedFEE","type":"uint256"},{"name":"earnedETH","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"transferToWalletAfterHalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"custodian","type":"address"},{"name":"addresses","type":"address[]"},{"name":"uints","type":"uint256[]"},{"name":"signature","type":"bytes"},{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"}],"name":"exitOnHaltFromCustodian","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"signedQuantity","type":"int256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalStakedLEV","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"ensureInterval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"LEV","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiPerFEE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FEE","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"intervalSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FEE2Distribute","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"setWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"transferToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_operator","type":"address"},{"name":"_wallet","type":"address"},{"name":"_weiPerFee","type":"uint256"},{"name":"_levToken","type":"address"},{"name":"_feeToken","type":"address"},{"name":"_intervalSize","type":"uint256"},{"name":"registry","type":"address"},{"name":"apiKey","type":"address"},{"name":"userAgreement","type":"bytes32"},{"name":"_version","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"levs","type":"uint256"},{"indexed":false,"name":"startBlock","type":"uint256"},{"indexed":false,"name":"endBlock","type":"uint256"},{"indexed":false,"name":"intervalId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"levs","type":"uint256"},{"indexed":false,"name":"startBlock","type":"uint256"},{"indexed":false,"name":"endBlock","type":"uint256"},{"indexed":false,"name":"intervalId","type":"uint256"}],"name":"Restaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"levs","type":"uint256"},{"indexed":false,"name":"feeEarned","type":"uint256"},{"indexed":false,"name":"startBlock","type":"uint256"},{"indexed":false,"name":"endBlock","type":"uint256"},{"indexed":false,"name":"intervalId","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeCalculated","type":"uint256"},{"indexed":false,"name":"feeReceived","type":"uint256"},{"indexed":false,"name":"weiReceived","type":"uint256"},{"indexed":false,"name":"startBlock","type":"uint256"},{"indexed":false,"name":"endBlock","type":"uint256"},{"indexed":false,"name":"intervalId","type":"uint256"}],"name":"FeeCalculated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"start","type":"uint256"},{"indexed":false,"name":"end","type":"uint256"},{"indexed":false,"name":"intervalId","type":"uint256"}],"name":"NewInterval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"block","type":"uint256"},{"indexed":false,"name":"intervalId","type":"uint256"}],"name":"Halted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerRemoved","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526001600c553480156200001657600080fd5b506040516200311d3803806200311d83398101806040526101608110156200003d57600080fd5b8101908080516401000000008111156200005657600080fd5b820160208101848111156200006a57600080fd5b81518560208202830111640100000000821117156200008857600080fd5b5050602082015160408301516060840151608085015160a086015160c087015160e08801516101008901516101208a0151610140909a018051999c989b979a969995989497939692959194929391640100000000811115620000e957600080fd5b82016020810184811115620000fd57600080fd5b81516401000000008111828201871017156200011857600080fd5b509093508392508d9150600090505b81518110156200016c576200016382828151811015156200014457fe5b906020019060200201516200057b640100000000026401000000009004565b60010162000127565b50805162000182906001906020840190620006a4565b50508051620001999060029060208401906200070e565b50899050600160a060020a03811615156200021557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b87600160a060020a03811615156200028e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b87600160a060020a03811615156200030757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b8a8015156200037757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420302076616c75650000000000000000000000000000000000604482015290519081900360640190fd5b88801515620003e757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420302076616c75650000000000000000000000000000000000604482015290519081900360640190fd5b8d600660006101000a815481600160a060020a030219169083600160a060020a031602179055508c6003819055508b600460006101000a815481600160a060020a030219169083600160a060020a031602179055508a600560006101000a815481600160a060020a030219169083600160a060020a031602179055508960088190555043600e6000600c548152602001908152602001600020600201819055506008544301600e6000600c548152602001908152602001600020600301819055508e600760006101000a815481600160a060020a030219169083600160a060020a0316021790555088600160a060020a0316635d4aaf1c89896040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156200054c57600080fd5b505af115801562000561573d6000803e3d6000fd5b5050505050505050505050505050505050505050620007d6565b80600160a060020a0381161515620005f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526020819052604090205460ff161515620006a057600160a060020a038216600081815260208190526040808220805460ff19166001908117909155805480820182559083527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6018054600160a060020a03191684179055517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a25b5050565b828054828255906000526020600020908101928215620006fc579160200282015b82811115620006fc5782518254600160a060020a031916600160a060020a03909116178255602090920191600190910190620006c5565b506200070a9291506200078f565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200075157805160ff191683800117855562000781565b8280016001018555821562000781579182015b828111156200078157825182559160200191906001019062000764565b506200070a929150620007b9565b620007b691905b808211156200070a578054600160a060020a031916815560010162000796565b90565b620007b691905b808211156200070a5760008155600101620007c0565b61293780620007e66000396000f3fe6080604052600436106101c65760003560e060020a900480635ed7ca5b116100fb578063a0e67e2b11610099578063d216720c11610068578063d216720c14610ab7578063d26264f614610acc578063deaa59df14610ae1578063deebeac914610b14576101c6565b8063a0e67e2b14610a13578063b532f20714610a78578063b9b8af0b14610a8d578063c57981b514610aa2576101c6565b806377b71df0116100d557806377b71df0146109aa5780638a35134c146109d4578063949076b6146109e95780639c659622146109fe576101c6565b80635ed7ca5b1461070e578063701ab8e2146107235780637065cb4814610977576101c6565b8063375288821161016857806352bfe7891161014257806352bfe7891461063357806354fd4d501461065a578063570ca735146106e457806358adc9ae146106f9576101c6565b806337528882146105a45780633ccfd60b146105ed578063521eb27314610602576101c6565b8063209f36d0116101a4578063209f36d0146104a0578063287eda92146104e35780632f54bf6e1461050d578063328ffd1114610554576101c6565b806305d0e91c146101c857806316934fc41461041c578063173825d91461046d575b005b3480156101d457600080fd5b506101c6600480360360c08110156101eb57600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184602083028401116401000000008311171561024a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460208302840111640100000000831117156102ce57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561031e57600080fd5b82018360208201111561033057600080fd5b8035906020019184600183028401116401000000008311171561035257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156103a557600080fd5b8201836020820111156103b757600080fd5b803590602001918460018302840111640100000000831117156103d957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610b47915050565b34801561042857600080fd5b5061044f6004803603602081101561043f57600080fd5b5035600160a060020a0316610d0d565b60408051938452602084019290925282820152519081900360600190f35b34801561047957600080fd5b506101c66004803603602081101561049057600080fd5b5035600160a060020a0316610d2e565b3480156104ac57600080fd5b506101c6600480360360608110156104c357600080fd5b50600160a060020a03813581169160208101359091169060400135610f4c565b3480156104ef57600080fd5b506101c66004803603602081101561050657600080fd5b5035611023565b34801561051957600080fd5b506105406004803603602081101561053057600080fd5b5035600160a060020a03166110e0565b604080519115158252519081900360200190f35b34801561056057600080fd5b5061057e6004803603602081101561057757600080fd5b50356110f5565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156105b057600080fd5b506105d4600480360360408110156105c757600080fd5b508035906020013561111c565b6040805192835260208301919091528051918290030190f35b3480156105f957600080fd5b506101c6611247565b34801561060e57600080fd5b506106176112af565b60408051600160a060020a039092168252519081900360200190f35b34801561063f57600080fd5b506106486112be565b60408051918252519081900360200190f35b34801561066657600080fd5b5061066f6112c4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156106a9578181015183820152602001610691565b50505050905090810190601f1680156106d65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156106f057600080fd5b5061061761134f565b34801561070557600080fd5b506101c661135e565b34801561071a57600080fd5b506101c6611560565b34801561072f57600080fd5b506101c6600480360360c081101561074657600080fd5b600160a060020a03823516919081019060408101602082013564010000000081111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460208302840111640100000000831117156107a557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156107f557600080fd5b82018360208201111561080757600080fd5b8035906020019184602083028401116401000000008311171561082957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561087957600080fd5b82018360208201111561088b57600080fd5b803590602001918460018302840111640100000000831117156108ad57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561090057600080fd5b82018360208201111561091257600080fd5b8035906020019184600183028401116401000000008311171561093457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611682915050565b34801561098357600080fd5b506101c66004803603602081101561099a57600080fd5b5035600160a060020a03166116f9565b3480156109b657600080fd5b506101c6600480360360208110156109cd57600080fd5b5035611759565b3480156109e057600080fd5b506106486117db565b3480156109f557600080fd5b506101c66117e1565b348015610a0a57600080fd5b50610617611af2565b348015610a1f57600080fd5b50610a28611b01565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a64578181015183820152602001610a4c565b505050509050019250505060405180910390f35b348015610a8457600080fd5b50610648611b64565b348015610a9957600080fd5b50610540611b6a565b348015610aae57600080fd5b50610617611b73565b348015610ac357600080fd5b50610648611b82565b348015610ad857600080fd5b50610648611b88565b348015610aed57600080fd5b506101c660048036036020811015610b0457600080fd5b5035600160a060020a0316611b8e565b348015610b2057600080fd5b506101c660048036036020811015610b3757600080fd5b5035600160a060020a0316611c7e565b85600160a060020a0316634cbd7a2686868686866040518663ffffffff1660e060020a028152600401808060200180602001806020018060200186815260200185810385528a818151815260200191508051906020019060200280838360005b83811015610bbf578181015183820152602001610ba7565b50505050905001858103845289818151815260200191508051906020019060200280838360005b83811015610bfe578181015183820152602001610be6565b50505050905001858103835288818151815260200191508051906020019080838360005b83811015610c3a578181015183820152602001610c22565b50505050905090810190601f168015610c675780820380516001836020036101000a031916815260200191505b50858103825287518152875160209182019189019080838360005b83811015610c9a578181015183820152602001610c82565b50505050905090810190601f168015610cc75780820380516001836020036101000a031916815260200191505b509950505050505050505050600060405180830381600087803b158015610ced57600080fd5b505af1158015610d01573d6000803e3d6000fd5b50505050505050505050565b600d6020526000908152604090208054600182015460029092015490919083565b3360009081526020819052604090205460ff161515610d85576040805160e560020a62461bcd02815260206004820152601d60248201526000805160206128a1833981519152604482015290519081900360640190fd5b600160a060020a03811660009081526020819052604090205460ff1615610f49576001805411610de95760405160e560020a62461bcd0281526004018080602001828103825260268152602001806128e66026913960400191505060405180910390fd5b600160a060020a0381166000908152602081905260408120805460ff191690555b60015460001901811015610eff5781600160a060020a0316600182815481101515610e3157fe5b600091825260209091200154600160a060020a03161415610ef757600180546000198101908110610e5e57fe5b60009182526020909120015460018054600160a060020a039092169183908110610e8457fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600180546000198101908110610ecc57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff19169055610eff565b600101610e0a565b50600180546000190190610f13908261280f565b50604051600160a060020a038216907f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da90600090a25b50565b3360009081526020819052604090205460ff161515610fa3576040805160e560020a62461bcd02815260206004820152601d60248201526000805160206128a1833981519152604482015290519081900360640190fd5b82600160a060020a0316635d4aaf1c83836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b15801561100657600080fd5b505af115801561101a573d6000803e3d6000fd5b50505050505050565b8080151561107b576040805160e560020a62461bcd02815260206004820152600f60248201527f696e76616c696420302076616c75650000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff1615156110d2576040805160e560020a62461bcd02815260206004820152601d60248201526000805160206128a1833981519152604482015290519081900360640190fd5b6110da6117e1565b50600855565b60006020819052908152604090205460ff1681565b600e6020526000908152604090208054600182015460028301546003909301549192909184565b600a54600554604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009384936111c5939192600160a060020a03909116916370a08231916024808301926020929190829003018186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b50519063ffffffff611e4c16565b91505030316112096111dd438663ffffffff611e4c16565b6111fd6111f0868863ffffffff611e4c16565b859063ffffffff611ead16565b9063ffffffff611f2016565b915061123e61121e438663ffffffff611e4c16565b6111fd611231868863ffffffff611e4c16565b849063ffffffff611ead16565b90509250929050565b60095460ff16151561125b5761125b6117e1565b336000908152600d602052604090205415806112875750600c54336000908152600d6020526040902054145b15611291576112ad565b336000908152600d60205260409020600101546112ad90611f35565b565b600654600160a060020a031681565b600c5481565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156113475780601f1061131c57610100808354040283529160200191611347565b820191906000526020600020905b81548152906001019060200180831161132a57829003601f168201915b505050505081565b600754600160a060020a031681565b3360009081526020819052604090205460ff1615156113b5576040805160e560020a62461bcd02815260206004820152601d60248201526000805160206128a1833981519152604482015290519081900360640190fd5b60095460ff161515611411576040805160e560020a62461bcd02815260206004820152601860248201527f5374616b65206973206e6f742068616c746564207965742e0000000000000000604482015290519081900360640190fd5b600a54600554604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600093611481939092600160a060020a03909116916370a0823191602480820192602092909190829003018186803b15801561118d57600080fd5b905030316000821115611517576005546006546040805160e060020a63a9059cbb028152600160a060020a039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156114ea57600080fd5b505af11580156114fe573d6000803e3d6000fd5b505050506040513d602081101561151457600080fd5b50505b600081111561155c57600654604051600160a060020a039091169082156108fc029083906000818181858888f1935050505015801561155a573d6000803e3d6000fd5b505b5050565b60095460ff16156115bb576040805160e560020a62461bcd02815260206004820152601260248201527f65786368616e67652069732068616c7465640000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff161515611612576040805160e560020a62461bcd02815260206004820152601d60248201526000805160206128a1833981519152604482015290519081900360640190fd5b600c546000908152600e60205260409020436003909101556116326117e1565b6009805460ff19166001179055600c5460408051438152600019909201602083015280517f6ee7a80c9b76876b78d2eb80b2f424ff294fff0ab616a5491216516c51fc94f89281900390910190a1565b85600160a060020a031663ebf5906886868686866040518663ffffffff1660e060020a028152600401808060200180602001806020018060200186815260200185810385528a8181518152602001915080519060200190602002808383600083811015610bbf578181015183820152602001610ba7565b3360009081526020819052604090205460ff161515611750576040805160e560020a62461bcd02815260206004820152601d60248201526000805160206128a1833981519152604482015290519081900360640190fd5b610f498161220c565b60095460ff16156117b4576040805160e560020a62461bcd02815260206004820152601260248201527f65786368616e67652069732068616c7465640000000000000000000000000000604482015290519081900360640190fd5b6117bc6117e1565b6117c581612328565b600081136117d257610f49565b610f498161248e565b600b5481565b60095460ff161561183c576040805160e560020a62461bcd02815260206004820152601260248201527f65786368616e67652069732068616c7465640000000000000000000000000000604482015290519081900360640190fd5b600c546000908152600e602052604090206003015443101561185d576112ad565b600c546000908152600e602052604081206002810154600382015491929182916118869161111c565b915091506118af6118a260035483611f2090919063ffffffff16565b839063ffffffff61279b16565b60018401819055600a546118c89163ffffffff61279b16565b600a556003546000906118e290839063ffffffff611f2016565b111561197e57600554600354600160a060020a03909116906305ab421d90309061191390859063ffffffff611f2016565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b15801561196557600080fd5b505af1158015611979573d6000803e3d6000fd5b505050505b600183015460028401546003850154600c5460408051948552602085018790528481018690526060850193909352608084019190915260a0830152517f5cdc67815871fd07a4f639e6393218fed82d2f5d135063767d7fb84c65acec959181900360c00190a16000811115611a2957600654604051600160a060020a039091169082156108fc029083906000818181858888f19350505050158015611a27573d6000803e3d6000fd5b505b600854600c546000908152600e60205260408120600301549091904303811515611a4f57fe5b600c8054600181018083556000918252600e602090815260408084206003908101549385528185206002908101949094556008548654865282862098909706438190039097019781019790975593548084529284902091820154919095015483519182529481019490945283820152519092507f156a3fcd31aa2664f1fffd0b3a2bd207c84156c6e20edb633472ea0e560ed7419181900360600190a150505050565b600454600160a060020a031681565b60606001805480602002602001604051908101604052809291908181526020018280548015611b5957602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611b3b575b505050505090505b90565b60035481565b60095460ff1681565b600554600160a060020a031681565b60085481565b600a5481565b80600160a060020a0381161515611bef576040805160e560020a62461bcd02815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526020819052604090205460ff161515611c46576040805160e560020a62461bcd02815260206004820152601d60248201526000805160206128a1833981519152604482015290519081900360640190fd5b611c4e6117e1565b506006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b80600160a060020a0381161515611cdf576040805160e560020a62461bcd02815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600554600160a060020a0383811691161415611cfa5761155c565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038516916370a0823191602480820192602092909190829003018186803b158015611d5d57600080fd5b505afa158015611d71573d6000803e3d6000fd5b505050506040513d6020811015611d8757600080fd5b5051600454909150600160a060020a0384811691161415611db957600b54611db690829063ffffffff611e4c16565b90505b600081111561155a576006546040805160e060020a63a9059cbb028152600160a060020a0392831660048201526024810184905290519185169163a9059cbb916044808201926020929091908290030181600087803b158015611e1b57600080fd5b505af1158015611e2f573d6000803e3d6000fd5b505050506040513d6020811015611e4557600080fd5b5050505050565b80820382811115611ea7576040805160e560020a62461bcd02815260206004820152600f60248201527f626164207375627472616374696f6e0000000000000000000000000000000000604482015290519081900360640190fd5b92915050565b6000811580611eca575050808202828282811515611ec757fe5b04145b1515611ea7576040805160e560020a62461bcd02815260206004820152601260248201527f626164206d756c7469706c69636174696f6e0000000000000000000000000000604482015290519081900360640190fd5b60008183811515611f2d57fe5b049392505050565b336000908152600d6020526040902054611f4d612833565b506000818152600e60209081526040808320815160808101835281548082526001830154828601819052600280850154848701526003909401546060840152338752600d90955292852090910154909392611fb292916111fd9163ffffffff611ead16565b336000908152600d60205260408120818155600181018290556002018190559091508111156120ca57600a54611fee908263ffffffff611e4c16565b600a556005546040805160e060020a63a9059cbb028152336004820152602481018490529051600160a060020a039092169163a9059cbb916044808201926020929091908290030181600087803b15801561204857600080fd5b505af115801561205c573d6000803e3d6000fd5b505050506040513d602081101561207257600080fd5b505115156120ca576040805160e560020a62461bcd02815260206004820152601e60248201527f466565207472616e7366657220746f206163636f756e74206661696c65640000604482015290519081900360640190fd5b60008411156121ad57600b546120e6908563ffffffff611e4c16565b600b55600480546040805160e060020a63a9059cbb02815233938101939093526024830187905251600160a060020a039091169163a9059cbb9160448083019260209291908290030181600087803b15801561214157600080fd5b505af1158015612155573d6000803e3d6000fd5b505050506040513d602081101561216b57600080fd5b505115156121ad5760405160e560020a62461bcd02815260040180806020018281038252602681526020018061287b6026913960400191505060405180910390fd5b604080830151606080850151835188815260208101869052808501939093529082015260808101859052905133917f09018aaedaafcf3a655b4c0e4a7c39bad2f98f367ef23f57b6d9062057db7547919081900360a00190a250505050565b80600160a060020a038116151561226d576040805160e560020a62461bcd02815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526020819052604090205460ff16151561155c57600160a060020a038216600081815260208190526040808220805460ff19166001908117909155805480820182559083527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601805473ffffffffffffffffffffffffffffffffffffffff191684179055517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a25050565b336000908152600d60205260409020600c548154148061234757508054155b156123525750610f49565b600181015460008084121561237f57600183015461237a90600086900363ffffffff6127f616565b612382565b60005b905061238d81611f35565b61239d828263ffffffff611e4c16565b6001840181905515156123cf575050336000908152600d60205260408120818155600181018290556002015550610f49565b600c546000818152600e602052604090209084556002810154600382015461241291612401919063ffffffff611e4c16565b60018601549063ffffffff611ead16565b60028501819055815461242a9163ffffffff61279b16565b8155600184015460028201546003830154600c546040805194855260208501939093528383019190915260608301525133917f4bce7886509a8aa645f57f99a104498ffdef78a52bd6e6cb6a13a99d92c7ac0c919081900360800190a25050505050565b60048054604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523393810193909352306024840152518392600160a060020a039092169163dd62ed3e916044808301926020929190829003018186803b1580156124fb57600080fd5b505afa15801561250f573d6000803e3d6000fd5b505050506040513d602081101561252557600080fd5b5051101561257d576040805160e560020a62461bcd02815260206004820152601860248201527f417070726f7665204c455620746f6b656e732066697273740000000000000000604482015290519081900360640190fd5b600c546000818152600e60208181526040808420338552600d835290842085905593909252905260038101546125e0906125c190611231904363ffffffff611e4c16565b336000908152600d60205260409020600201549063ffffffff61279b16565b336000908152600d6020526040902060028101919091556001015461260b908363ffffffff61279b16565b336000908152600d602052604090206001015560038101546126499061263b90611231904363ffffffff611e4c16565b82549063ffffffff61279b16565b815560048054604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233938101939093523060248401526044830185905251600160a060020a03909116916323b872dd9160648083019260209291908290030181600087803b1580156126bf57600080fd5b505af11580156126d3573d6000803e3d6000fd5b505050506040513d60208110156126e957600080fd5b5051151561272b5760405160e560020a62461bcd0281526004018080602001828103825260258152602001806128c16025913960400191505060405180910390fd5b600b5461273e908363ffffffff61279b16565b600b5560028101546003820154600c546040805186815260208101949094528381019290925260608301525133917f9cfd25589d1eb8ad71e342a86a8524e83522e3936c0803048c08f6d9ad974f40919081900360800190a25050565b80820182811015611ea7576040805160e560020a62461bcd02815260206004820152600c60248201527f626164206164646974696f6e0000000000000000000000000000000000000000604482015290519081900360640190fd5b6000818311156128065781612808565b825b9392505050565b81548183558181111561155a5760008381526020902061155a91810190830161285c565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b611b6191905b808211156128765760008155600101612862565b509056fe52656465656d696e67204c455620746f6b656e20746f206163636f756e74206661696c65642e696e76616c69642073656e6465723b206d757374206265206f776e65720000004c455620746f6b656e207472616e7366657220776173206e6f74207375636365737366756c72656d6f76696e6720746865206c617374206f776e6572206973206e6f7420616c6c6f776564a165627a7a72305820d6a390cb7e5f68875a9201b43919f4bba6aa8ea409cf7f86a3fb7c10fee4e9710029000000000000000000000000000000000000000000000000000000000000016000000000000000000000000072dcc3cf050dda45bfe3da608de044e5b47316d8000000000000000000000000c66f77054bf7536f3d1e7c8dd311e5394a4c8b7b00000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000aa7127e250e87476fdd253f15e86a4ea9c4c4bd40000000000000000000000001df65ad4e59391116c5b155723682ea0cec68a8600000000000000000000000000000000000000000000000000000000000000640000000000000000000000003c1ae9f71c8384181750f0d02aaaa5089754c50f00000000000000000000000023ce54c6820cf48d9187580b5cedd06f624723842843914aff6616c499f7c72899dd6cf31ad6525e0b3d6e04b39b5ed08770e40c00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000030000000000000000000000004d2130d9d20428dc249a1e938a0bcea4b5b9ac1a000000000000000000000000ff423afeb0e6d997163467b39b7bd192cffd38bc000000000000000000000000ac01f01f51f0bdd012c1838bd5cef330e6c7ffca0000000000000000000000000000000000000000000000000000000000000006302e34312e300000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
17 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000072dcc3cf050dda45bfe3da608de044e5b47316d8
Arg [2] : 000000000000000000000000c66f77054bf7536f3d1e7c8dd311e5394a4c8b7b
Arg [3] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [4] : 000000000000000000000000aa7127e250e87476fdd253f15e86a4ea9c4c4bd4
Arg [5] : 0000000000000000000000001df65ad4e59391116c5b155723682ea0cec68a86
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [7] : 0000000000000000000000003c1ae9f71c8384181750f0d02aaaa5089754c50f
Arg [8] : 00000000000000000000000023ce54c6820cf48d9187580b5cedd06f62472384
Arg [9] : 2843914aff6616c499f7c72899dd6cf31ad6525e0b3d6e04b39b5ed08770e40c
Arg [10] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [12] : 0000000000000000000000004d2130d9d20428dc249a1e938a0bcea4b5b9ac1a
Arg [13] : 000000000000000000000000ff423afeb0e6d997163467b39b7bd192cffd38bc
Arg [14] : 000000000000000000000000ac01f01f51f0bdd012c1838bd5cef330e6c7ffca
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [16] : 302e34312e300000000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://d6a390cb7e5f68875a9201b43919f4bba6aa8ea409cf7f86a3fb7c10fee4e971

 

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