Contract Overview
Balance: 0 Ether
Transactions: 3 txns
 Latest 3 txns

TxHash Age From To Value [TxFee]
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd486131 days 2 hrs ago0x4cd98f82decade2d152e256efd1f8d5a334a3e28  IN   0xee301e417e8e802089fccec365f3e0416cfd083b0 Ether0.02040604
0xab6f4f8f9fdf5bf557100a5085cd5adb770fe0ac862e5a8c117018a57b8b3210131 days 2 hrs ago0x4cd98f82decade2d152e256efd1f8d5a334a3e28  IN   0xee301e417e8e802089fccec365f3e0416cfd083b0 Ether0.02040284
0xdc8047c2fa18077a489247eb353927de5561dcce6c224df19e95b473afd206e6131 days 3 hrs ago0x4cd98f82decade2d152e256efd1f8d5a334a3e28  IN    Contract Creation0 Ether0.01898517
[ 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
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0x31ec42d64ee0f4e970d536fa6eed1b731f99459d77321aa37d98a9ac70efd4864009573131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0xab6f4f8f9fdf5bf557100a5085cd5adb770fe0ac862e5a8c117018a57b8b32104009568131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0xab6f4f8f9fdf5bf557100a5085cd5adb770fe0ac862e5a8c117018a57b8b32104009568131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0xab6f4f8f9fdf5bf557100a5085cd5adb770fe0ac862e5a8c117018a57b8b32104009568131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0xab6f4f8f9fdf5bf557100a5085cd5adb770fe0ac862e5a8c117018a57b8b32104009568131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 Ether
0xab6f4f8f9fdf5bf557100a5085cd5adb770fe0ac862e5a8c117018a57b8b32104009568131 days 2 hrs ago0xee301e417e8e802089fccec365f3e0416cfd083b0x9a059a2dd2e3c025a123f2ae65cd85bf73d9db5e0 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 (Similar Match)
Note: Displaying Similar Match Verified Source Code At Contract 0x431928f185c57f92d4ce3cd6e4480e6b32d3bb18(Excluding Constructor Arguments if any)
Contract Name: NFTsCrowdsale
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.24;


/**
 * @title -NFTs crowdsale
 * NFTsCrowdsale provides a marketplace for NFTs
 *
 *  ██████╗ ██████╗   ██████╗  ██╗    ██╗ ██████╗  ███████╗  █████╗  ██╗      ███████╗ ██╗
 * ██╔════╝ ██╔══██╗ ██╔═══██╗ ██║    ██║ ██╔══██╗ ██╔════╝ ██╔══██╗ ██║      ██╔════╝ ██║
 * ██║      ██████╔╝ ██║   ██║ ██║ █╗ ██║ ██║  ██║ ███████╗ ███████║ ██║      █████╗   ██║
 * ██║      ██╔══██╗ ██║   ██║ ██║███╗██║ ██║  ██║ ╚════██║ ██╔══██║ ██║      ██╔══╝   ╚═╝
 * ╚██████╗ ██║  ██║ ╚██████╔╝ ╚███╔███╔╝ ██████╔╝ ███████║ ██║  ██║ ███████╗ ███████╗ ██╗
 *  ╚═════╝ ╚═╝  ╚═╝  ╚═════╝   ╚══╝╚══╝  ╚═════╝  ╚══════╝ ╚═╝  ╚═╝ ╚══════╝ ╚══════╝ ╚═╝
 *
 * ---
 * POWERED BY
 * ╦   ╔═╗ ╦═╗ ╔╦╗ ╦   ╔═╗ ╔═╗ ╔═╗      ╔╦╗ ╔═╗ ╔═╗ ╔╦╗
 * ║   ║ ║ ╠╦╝  ║║ ║   ║╣  ╚═╗ ╚═╗       ║  ║╣  ╠═╣ ║║║
 * ╩═╝ ╚═╝ ╩╚═ ═╩╝ ╩═╝ ╚═╝ ╚═╝ ╚═╝       ╩  ╚═╝ ╩ ╩ ╩ ╩
 * game at https://lordless.io
 * code at https://github.com/lordlessio
 */

// File: node_modules/zeppelin-solidity/contracts/access/rbac/Roles.sol

/**
 * @title Roles
 * @author Francisco Giordano (@frangio)
 * @dev Library for managing addresses assigned to a Role.
 * See RBAC.sol for example usage.
 */
library Roles {
  struct Role {
    mapping (address => bool) bearer;
  }

  /**
   * @dev give an address access to this role
   */
  function add(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = true;
  }

  /**
   * @dev remove an address' access to this role
   */
  function remove(Role storage _role, address _addr)
    internal
  {
    _role.bearer[_addr] = false;
  }

  /**
   * @dev check if an address has this role
   * // reverts
   */
  function check(Role storage _role, address _addr)
    internal
    view
  {
    require(has(_role, _addr));
  }

  /**
   * @dev check if an address has this role
   * @return bool
   */
  function has(Role storage _role, address _addr)
    internal
    view
    returns (bool)
  {
    return _role.bearer[_addr];
  }
}

// File: node_modules/zeppelin-solidity/contracts/access/rbac/RBAC.sol

/**
 * @title RBAC (Role-Based Access Control)
 * @author Matt Condon (@Shrugs)
 * @dev Stores and provides setters and getters for roles and addresses.
 * Supports unlimited numbers of roles and addresses.
 * See //contracts/mocks/RBACMock.sol for an example of usage.
 * This RBAC method uses strings to key roles. It may be beneficial
 * for you to write your own implementation of this interface using Enums or similar.
 */
contract RBAC {
  using Roles for Roles.Role;

  mapping (string => Roles.Role) private roles;

  event RoleAdded(address indexed operator, string role);
  event RoleRemoved(address indexed operator, string role);

  /**
   * @dev reverts if addr does not have role
   * @param _operator address
   * @param _role the name of the role
   * // reverts
   */
  function checkRole(address _operator, string _role)
    public
    view
  {
    roles[_role].check(_operator);
  }

  /**
   * @dev determine if addr has role
   * @param _operator address
   * @param _role the name of the role
   * @return bool
   */
  function hasRole(address _operator, string _role)
    public
    view
    returns (bool)
  {
    return roles[_role].has(_operator);
  }

  /**
   * @dev add a role to an address
   * @param _operator address
   * @param _role the name of the role
   */
  function addRole(address _operator, string _role)
    internal
  {
    roles[_role].add(_operator);
    emit RoleAdded(_operator, _role);
  }

  /**
   * @dev remove a role from an address
   * @param _operator address
   * @param _role the name of the role
   */
  function removeRole(address _operator, string _role)
    internal
  {
    roles[_role].remove(_operator);
    emit RoleRemoved(_operator, _role);
  }

  /**
   * @dev modifier to scope access to a single role (uses msg.sender as addr)
   * @param _role the name of the role
   * // reverts
   */
  modifier onlyRole(string _role)
  {
    checkRole(msg.sender, _role);
    _;
  }

  /**
   * @dev modifier to scope access to a set of roles (uses msg.sender as addr)
   * @param _roles the names of the roles to scope access to
   * // reverts
   *
   * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this
   *  see: https://github.com/ethereum/solidity/issues/2467
   */
  // modifier onlyRoles(string[] _roles) {
  //     bool hasAnyRole = false;
  //     for (uint8 i = 0; i < _roles.length; i++) {
  //         if (hasRole(msg.sender, _roles[i])) {
  //             hasAnyRole = true;
  //             break;
  //         }
  //     }

  //     require(hasAnyRole);

  //     _;
  // }
}

// File: node_modules/zeppelin-solidity/contracts/ownership/Ownable.sol

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


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

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

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

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

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

// File: node_modules/zeppelin-solidity/contracts/ownership/Superuser.sol

/**
 * @title Superuser
 * @dev The Superuser contract defines a single superuser who can transfer the ownership
 * of a contract to a new address, even if he is not the owner.
 * A superuser can transfer his role to a new address.
 */
contract Superuser is Ownable, RBAC {
  string public constant ROLE_SUPERUSER = "superuser";

  constructor () public {
    addRole(msg.sender, ROLE_SUPERUSER);
  }

  /**
   * @dev Throws if called by any account that's not a superuser.
   */
  modifier onlySuperuser() {
    checkRole(msg.sender, ROLE_SUPERUSER);
    _;
  }

  modifier onlyOwnerOrSuperuser() {
    require(msg.sender == owner || isSuperuser(msg.sender));
    _;
  }

  /**
   * @dev getter to determine if address has superuser role
   */
  function isSuperuser(address _addr)
    public
    view
    returns (bool)
  {
    return hasRole(_addr, ROLE_SUPERUSER);
  }

  /**
   * @dev Allows the current superuser to transfer his role to a newSuperuser.
   * @param _newSuperuser The address to transfer ownership to.
   */
  function transferSuperuser(address _newSuperuser) public onlySuperuser {
    require(_newSuperuser != address(0));
    removeRole(msg.sender, ROLE_SUPERUSER);
    addRole(_newSuperuser, ROLE_SUPERUSER);
  }

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

// File: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * 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: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
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: node_modules/zeppelin-solidity/contracts/introspection/ERC165.sol

/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface ERC165 {

  /**
   * @notice Query if a contract implements an interface
   * @param _interfaceId The interface identifier, as specified in ERC-165
   * @dev Interface identification is specified in ERC-165. This function
   * uses less than 30,000 gas.
   */
  function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

// File: node_modules/zeppelin-solidity/contracts/token/ERC721/ERC721Basic.sol

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Basic is ERC165 {

  bytes4 internal constant InterfaceId_ERC721 = 0x80ac58cd;
  /*
   * 0x80ac58cd ===
   *   bytes4(keccak256('balanceOf(address)')) ^
   *   bytes4(keccak256('ownerOf(uint256)')) ^
   *   bytes4(keccak256('approve(address,uint256)')) ^
   *   bytes4(keccak256('getApproved(uint256)')) ^
   *   bytes4(keccak256('setApprovalForAll(address,bool)')) ^
   *   bytes4(keccak256('isApprovedForAll(address,address)')) ^
   *   bytes4(keccak256('transferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
   *   bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
   */

  bytes4 internal constant InterfaceId_ERC721Exists = 0x4f558e79;
  /*
   * 0x4f558e79 ===
   *   bytes4(keccak256('exists(uint256)'))
   */

  bytes4 internal constant InterfaceId_ERC721Enumerable = 0x780e9d63;
  /**
   * 0x780e9d63 ===
   *   bytes4(keccak256('totalSupply()')) ^
   *   bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
   *   bytes4(keccak256('tokenByIndex(uint256)'))
   */

  bytes4 internal constant InterfaceId_ERC721Metadata = 0x5b5e139f;
  /**
   * 0x5b5e139f ===
   *   bytes4(keccak256('name()')) ^
   *   bytes4(keccak256('symbol()')) ^
   *   bytes4(keccak256('tokenURI(uint256)'))
   */

  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 indexed _tokenId
  );
  event Approval(
    address indexed _owner,
    address indexed _approved,
    uint256 indexed _tokenId
  );
  event ApprovalForAll(
    address indexed _owner,
    address indexed _operator,
    bool _approved
  );

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function exists(uint256 _tokenId) public view returns (bool _exists);

  function approve(address _to, uint256 _tokenId) public;
  function getApproved(uint256 _tokenId)
    public view returns (address _operator);

  function setApprovalForAll(address _operator, bool _approved) public;
  function isApprovedForAll(address _owner, address _operator)
    public view returns (bool);

  function transferFrom(address _from, address _to, uint256 _tokenId) public;
  function safeTransferFrom(address _from, address _to, uint256 _tokenId)
    public;

  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes _data
  )
    public;
}

// File: node_modules/zeppelin-solidity/contracts/token/ERC721/ERC721.sol

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Enumerable is ERC721Basic {
  function totalSupply() public view returns (uint256);
  function tokenOfOwnerByIndex(
    address _owner,
    uint256 _index
  )
    public
    view
    returns (uint256 _tokenId);

  function tokenByIndex(uint256 _index) public view returns (uint256);
}


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Metadata is ERC721Basic {
  function name() external view returns (string _name);
  function symbol() external view returns (string _symbol);
  function tokenURI(uint256 _tokenId) public view returns (string);
}


/**
 * @title ERC-721 Non-Fungible Token Standard, full implementation interface
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata {
}

// File: contracts/lib/SafeMath.sol

/**
 * @title SafeMath
 */
library SafeMath {
  /**
  * @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 Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) 
      internal 
      pure 
      returns (uint256 c) 
  {
    if (a == 0) {
      return 0;
    }
    c = a * b;
    require(c / a == b, "SafeMath mul failed");
    return c;
  }

  /**
  * @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) 
  {
    require(b <= a, "SafeMath sub failed");
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b)
      internal
      pure
      returns (uint256 c) 
  {
    c = a + b;
    require(c >= a, "SafeMath add failed");
    return c;
  }
  
  /**
    * @dev gives square root of given x.
    */
  function sqrt(uint256 x)
      internal
      pure
      returns (uint256 y) 
  {
    uint256 z = ((add(x,1)) / 2);
    y = x;
    while (z < y) 
    {
      y = z;
      z = ((add((x / z),z)) / 2);
    }
  }
  
  /**
    * @dev gives square. batchplies x by x
    */
  function sq(uint256 x)
      internal
      pure
      returns (uint256)
  {
    return (mul(x,x));
  }
  
  /**
    * @dev x to the power of y 
    */
  function pwr(uint256 x, uint256 y)
      internal 
      pure 
      returns (uint256)
  {
    if (x==0)
        return (0);
    else if (y==0)
        return (1);
    else 
    {
      uint256 z = x;
      for (uint256 i=1; i < y; i++)
        z = mul(z,x);
      return (z);
    }
  }
}

// File: contracts/crowdsale/INFTsCrowdsale.sol

/**
 * @title -NFTs crowdsale Interface
 */

interface INFTsCrowdsale {

  function getAuction(uint256 tokenId) external view
  returns (
    bytes32,
    address,
    uint256,
    uint256,
    uint256,
    uint256
  );

  function isOnAuction(uint256 tokenId) external view returns (bool);

  function isOnPreAuction(uint256 tokenId) external view returns (bool);

  function newAuction(uint128 price, uint256 tokenId, uint256 startAt, uint256 endAt) external;

  function batchNewAuctions(uint128[] prices, uint256[] tokenIds, uint256[] startAts, uint256[] endAts) external;

  function payByEth (uint256 tokenId) external payable; 

  function payByErc20 (uint256 tokenId) external;

  function cancelAuction (uint256 tokenId) external;

  function batchCancelAuctions (uint256[] tokenIds) external;
  
  /* Events */

  event NewAuction (
    bytes32 id,
    address indexed seller,
    uint256 price,
    uint256 startAt,
    uint256 endAt,
    uint256 indexed tokenId
  );

  event PayByEth (
    bytes32 id,
    address indexed seller,
    address indexed buyer,
    uint256 price,
    uint256 endAt,
    uint256 indexed tokenId
  );

  event PayByErc20 (
    bytes32 id,
    address indexed seller,
    address indexed buyer, 
    uint256 price,
    uint256 endAt,
    uint256 indexed tokenId
  );

  event CancelAuction (
    bytes32 id,
    address indexed seller,
    uint256 indexed tokenId
  );

}

// File: contracts/crowdsale/NFTsCrowdsaleBase.sol

contract NFTsCrowdsaleBase is Superuser, INFTsCrowdsale {

  using SafeMath for uint256;

  ERC20 public erc20Contract;
  ERC721 public erc721Contract;
  // eth(price)/erc20(price)
  uint public eth2erc20;
  // Represents a auction
  struct Auction {
    bytes32 id; // Auction id
    address seller; // Seller
    uint256 price; // eth in wei
    uint256 startAt; //  Auction startAt
    uint256 endAt; //  Auction endAt
    uint256 tokenId; // ERC721 tokenId 
  }

  mapping (uint256 => Auction) tokenIdToAuction;
  
  constructor(address _erc721Address,address _erc20Address, uint _eth2erc20) public {
    erc721Contract = ERC721(_erc721Address);
    erc20Contract = ERC20(_erc20Address);
    eth2erc20 = _eth2erc20;
  }

  function getAuction(uint256 _tokenId) external view
  returns (
    bytes32,
    address,
    uint256,
    uint256,
    uint256,
    uint256
  ){
    Auction storage auction = tokenIdToAuction[_tokenId];
    return (auction.id, auction.seller, auction.price, auction.startAt, auction.endAt, auction.tokenId);
  }

  function isOnAuction(uint256 _tokenId) external view returns (bool) {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 time = block.timestamp;
    return (time < _auction.endAt && time > _auction.startAt);
  }

  function isOnPreAuction(uint256 _tokenId) external view returns (bool) {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    return (block.timestamp < _auction.startAt);
  }

  function _isTokenOwner(address _seller, uint256 _tokenId) internal view returns (bool){
    return (erc721Contract.ownerOf(_tokenId) == _seller);
  }

  function _isOnAuction(uint256 _tokenId) internal view returns (bool) {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 time = block.timestamp;
    return (time < _auction.endAt && time > _auction.startAt);
  }
  function _escrow(address _owner, uint256 _tokenId) internal {
    erc721Contract.transferFrom(_owner, this, _tokenId);
  }

  function _cancelEscrow(address _owner, uint256 _tokenId) internal {
    erc721Contract.transferFrom(this, _owner, _tokenId);
  }

  function _transfer(address _receiver, uint256 _tokenId) internal {
    erc721Contract.safeTransferFrom(this, _receiver, _tokenId);
  }

  function _newAuction(uint256 _price, uint256 _tokenId, uint256 _startAt, uint256 _endAt) internal {
    require(_price == uint256(_price));
    address _seller = msg.sender;

    require(_isTokenOwner(_seller, _tokenId));
    _escrow(_seller, _tokenId);

    bytes32 auctionId = keccak256(
      abi.encodePacked(block.timestamp, _seller, _tokenId, _price)
    );
    
    Auction memory _order = Auction(
      auctionId,
      _seller,
      uint128(_price),
      _startAt,
      _endAt,
      _tokenId
    );

    tokenIdToAuction[_tokenId] = _order;
    emit NewAuction(auctionId, _seller, _price, _startAt, _endAt, _tokenId);
  }

  function _cancelAuction(uint256 _tokenId) internal {
    Auction storage _auction = tokenIdToAuction[_tokenId];
    require(_auction.seller == msg.sender || msg.sender == owner);
    emit CancelAuction(_auction.id, _auction.seller, _tokenId);
    _cancelEscrow(_auction.seller, _tokenId);
    delete tokenIdToAuction[_tokenId];
  }

  function _payByEth(uint256 _tokenId) internal {
    uint256 _ethAmount = msg.value;
    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 price = _auction.price;
    require(_isOnAuction(_auction.tokenId));
    require(_ethAmount >= price);

    uint256 payExcess = _ethAmount.sub(price);

    if (price > 0) {
      _auction.seller.transfer(price);
    }
    address buyer = msg.sender;
    buyer.transfer(payExcess);
    _transfer(buyer, _tokenId);
    emit PayByEth(_auction.id, _auction.seller, msg.sender, _auction.price, _auction.endAt, _auction.tokenId);
    delete tokenIdToAuction[_tokenId];
  }

  function _payByErc20(uint256 _tokenId) internal {

    Auction storage _auction = tokenIdToAuction[_tokenId];
    uint256 price = uint256(_auction.price);
    uint256 computedErc20Price = price.mul(eth2erc20);
    uint256 balance = erc20Contract.balanceOf(msg.sender);
    require(balance >= computedErc20Price);
    require(_isOnAuction(_auction.tokenId));

    if (price > 0) {
      erc20Contract.transferFrom(msg.sender, _auction.seller, computedErc20Price);
    }
    _transfer(msg.sender, _tokenId);
    emit PayByErc20(_auction.id, _auction.seller, msg.sender, _auction.price, _auction.endAt, _auction.tokenId);
    delete tokenIdToAuction[_tokenId];
  }
  
}

// File: contracts/crowdsale/Pausable.sol

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

  event Pause2();
  event Unpause2();

  bool public paused = false;
  bool public paused2 = false;


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

  modifier whenNotPaused2() {
    require(!paused2);
    _;
  }

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

  modifier whenPaused2() {
    require(paused2);
    _;
  }

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

  function pause2() public onlyOwner whenNotPaused2 {
    paused2 = true;
    emit Pause2();
  }

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

  function unpause2() public onlyOwner whenPaused2 {
    paused2 = false;
    emit Unpause2();
  }
}

// File: contracts/crowdsale/NFTsCrowdsale.sol

contract NFTsCrowdsale is NFTsCrowdsaleBase, Pausable {

  constructor(address erc721Address, address erc20Address, uint eth2erc20) public 
  NFTsCrowdsaleBase(erc721Address, erc20Address, eth2erc20){}

  /**
   * @dev new a Auction
   * @param price price in wei
   * @param tokenId Tavern's tokenid
   * @param endAt auction end time
   */
  function newAuction(uint128 price, uint256 tokenId, uint256 startAt, uint256 endAt) whenNotPaused external {
    uint256 _startAt = startAt;
    if (msg.sender != owner) {
      _startAt = block.timestamp;
    }
    _newAuction(price, tokenId, _startAt, endAt);
  }

  /**
   * @dev batch New Auctions 
   * @param prices Array price in wei
   * @param tokenIds Array Tavern's tokenid
   * @param endAts  Array auction end time
   */
  function batchNewAuctions(uint128[] prices, uint256[] tokenIds, uint256[] startAts, uint256[] endAts) whenNotPaused external {
    uint256 i = 0;
    while (i < tokenIds.length) {
      _newAuction(prices[i], tokenIds[i], startAts[i], endAts[i]);
      i += 1;
    }
  }

  /**
   * @dev pay a auction by eth
   * @param tokenId tavern tokenid
   */
  function payByEth (uint256 tokenId) whenNotPaused external payable {
    _payByEth(tokenId); 
  }

  /**
   * @dev pay a auction by erc20 Token
   * @param tokenId Tavern's tokenid
   */
  function payByErc20 (uint256 tokenId) whenNotPaused2 external {
    _payByErc20(tokenId);
  }

  /**
   * @dev cancel a auction
   * @param tokenId Tavern's tokenid
   */
  function cancelAuction (uint256 tokenId) external {
    _cancelAuction(tokenId);
  }

  /**
   * @dev batch cancel auctions
   * @param tokenIds Array Tavern's tokenid
   */
  function batchCancelAuctions (uint256[] tokenIds) external {
    uint256 i = 0;
    while (i < tokenIds.length) {
      _cancelAuction(tokenIds[i]);
      i += 1;
    }
  }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"checkRole","outputs":[],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenIds","type":"uint256[]"}],"name":"batchCancelAuctions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_operator","type":"address"},{"name":"_role","type":"string"}],"name":"hasRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isOnAuction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"payByEth","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newSuperuser","type":"address"}],"name":"transferSuperuser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused2","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isOnPreAuction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getAuction","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"price","type":"uint128"},{"name":"tokenId","type":"uint256"},{"name":"startAt","type":"uint256"},{"name":"endAt","type":"uint256"}],"name":"newAuction","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":"tokenId","type":"uint256"}],"name":"cancelAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"eth2erc20","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"erc20Contract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isSuperuser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"payByErc20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"erc721Contract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_SUPERUSER","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"prices","type":"uint128[]"},{"name":"tokenIds","type":"uint256[]"},{"name":"startAts","type":"uint256[]"},{"name":"endAts","type":"uint256[]"}],"name":"batchNewAuctions","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"erc721Address","type":"address"},{"name":"erc20Address","type":"address"},{"name":"eth2erc20","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":[],"name":"Pause2","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"startAt","type":"uint256"},{"indexed":false,"name":"endAt","type":"uint256"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"NewAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"endAt","type":"uint256"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"PayByEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"buyer","type":"address"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"endAt","type":"uint256"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"PayByErc20","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"seller","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"CancelAuction","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"role","type":"string"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526006805461ffff191690553480156200001c57600080fd5b5060405160608062001b6883398101604081815282516020808501519483015160008054600160a060020a03191633908117909155848601909452600985527f7375706572757365720000000000000000000000000000000000000000000000918501919091529093929091849184918491620000a39190640100000000620000e0810204565b60038054600160a060020a03948516600160a060020a0319918216179091556002805493909416921691909117909155600455506200022b915050565b6200015c826001836040518082805190602001908083835b60208310620001195780518252601f199092019160209182019101620000f8565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050640100000000620002068102620016ce1704565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489826040518080602001828103825283818151815260200191508051906020019080838360005b83811015620001c7578181015183820152602001620001ad565b50505050905090810190601f168015620001f55780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b61192d806200023b6000396000f3006080604052600436106101535763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630988ca8c81146101585780630f5f4c53146101c1578063119ee4ab146101d6578063217fe6c6146101f657806337e246ad146102715780633f4ba83a146102895780634b739b611461029e57806357c393fa146102a95780635c975abb146102ca5780636515c6a9146102df5780636fc4f2c2146102f4578063715018a61461030c57806378bd7935146103215780638456cb59146103745780638aa2c280146103895780638da5cb5b146103bc57806396b5a755146103ed578063a7384c1e14610405578063a8f6c9131461042c578063ac64675614610441578063bceee05e14610456578063c334e87514610477578063d7c97fb41461048f578063ebb4f484146104a4578063eeb415ee1461052e578063f2fde38b14610572575b600080fd5b34801561016457600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101bf958335600160a060020a03169536956044949193909101919081908401838280828437509497506105939650505050505050565b005b3480156101cd57600080fd5b506101bf610601565b3480156101e257600080fd5b506101bf6004803560248101910135610664565b34801561020257600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261025d958335600160a060020a03169536956044949193909101919081908401838280828437509497506106979650505050505050565b604080519115158252519081900360200190f35b34801561027d57600080fd5b5061025d60043561070c565b34801561029557600080fd5b506101bf61073a565b6101bf600435610797565b3480156102b557600080fd5b506101bf600160a060020a03600435166107b3565b3480156102d657600080fd5b5061025d61084f565b3480156102eb57600080fd5b5061025d610858565b34801561030057600080fd5b5061025d600435610866565b34801561031857600080fd5b506101bf61087d565b34801561032d57600080fd5b506103396004356108e9565b60408051968752600160a060020a039095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561038057600080fd5b506101bf61092b565b34801561039557600080fd5b506101bf6fffffffffffffffffffffffffffffffff6004351660243560443560643561098a565b3480156103c857600080fd5b506103d16109da565b60408051600160a060020a039092168252519081900360200190f35b3480156103f957600080fd5b506101bf6004356109e9565b34801561041157600080fd5b5061041a6109f2565b60408051918252519081900360200190f35b34801561043857600080fd5b506103d16109f8565b34801561044d57600080fd5b506101bf610a07565b34801561046257600080fd5b5061025d600160a060020a0360043516610a6d565b34801561048357600080fd5b506101bf600435610a9c565b34801561049b57600080fd5b506103d1610aba565b3480156104b057600080fd5b506104b9610ac9565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104f35781810151838201526020016104db565b50505050905090810190601f1680156105205780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561053a57600080fd5b506101bf6024600480358281019290820135918135808301929082013591604435808301929082013591606435918201910135610aee565b34801561057e57600080fd5b506101bf600160a060020a0360043516610b9e565b6105fd826001836040518082805190602001908083835b602083106105c95780518252601f1990920191602091820191016105aa565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610bcf565b5050565b600054600160a060020a0316331461061857600080fd5b600654610100900460ff16151561062e57600080fd5b6006805461ff00191690556040517fb767f256808a62843a8fb88da70a3dd3270e6943d4a9bc2c4c6c624ebb8da2bd90600090a1565b60005b818110156106925761068a83838381811061067e57fe5b90506020020135610be4565b600101610667565b505050565b6000610703836001846040518082805190602001908083835b602083106106cf5780518252601f1990920191602091820191016106b0565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922092915050610ccc565b90505b92915050565b600081815260056020526040812060048101544290811080156107325750816003015481115b949350505050565b600054600160a060020a0316331461075157600080fd5b60065460ff16151561076257600080fd5b6006805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60065460ff16156107a757600080fd5b6107b081610ceb565b50565b6107e0336040805190810160405280600981526020016000805160206118e2833981519152815250610593565b600160a060020a03811615156107f557600080fd5b610822336040805190810160405280600981526020016000805160206118e2833981519152815250610e72565b6107b0816040805190810160405280600981526020016000805160206118e2833981519152815250610f83565b60065460ff1681565b600654610100900460ff1681565b600090815260056020526040902060030154421090565b600054600160a060020a0316331461089457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60009081526005602081905260409091208054600182015460028301546003840154600485015494909501549295600160a060020a0390921694909390929091565b600054600160a060020a0316331461094257600080fd5b60065460ff161561095257600080fd5b6006805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60065460009060ff161561099d57600080fd5b506000548290600160a060020a031633146109b55750425b6109d3856fffffffffffffffffffffffffffffffff16858385611055565b5050505050565b600054600160a060020a031681565b6107b081610be4565b60045481565b600254600160a060020a031681565b600054600160a060020a03163314610a1e57600080fd5b600654610100900460ff1615610a3357600080fd5b6006805461ff0019166101001790556040517f5c3a51950aca10c6d964d6e14e44bdcde77ecc8c4de666952b61ecb353c8307e90600090a1565b6000610706826040805190810160405280600981526020016000805160206118e2833981519152815250610697565b600654610100900460ff1615610ab157600080fd5b6107b081611261565b600354600160a060020a031681565b60408051808201909152600981526000805160206118e2833981519152602082015281565b60065460009060ff1615610b0157600080fd5b5060005b85811015610b9357610b8b898983818110610b1c57fe5b905060200201356fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168888848181101515610b5557fe5b905060200201358787858181101515610b6a57fe5b905060200201358686868181101515610b7f57fe5b90506020020135611055565b600101610b05565b505050505050505050565b600054600160a060020a0316331480610bbb5750610bbb33610a6d565b1515610bc657600080fd5b6107b0816114b4565b610bd98282610ccc565b15156105fd57600080fd5b60008181526005602052604090206001810154600160a060020a0316331480610c175750600054600160a060020a031633145b1515610c2257600080fd5b6001810154815460408051918252518492600160a060020a0316917fa062cdbfcedce0017d76de7b8c5aec56af6fb386285af7a4bbd4bef10eaed11e919081900360200190a36001810154610c8090600160a060020a031683611531565b506000908152600560208190526040822082815560018101805473ffffffffffffffffffffffffffffffffffffffff191690556002810183905560038101839055600481018390550155565b600160a060020a03166000908152602091909152604090205460ff1690565b600081815260056020819052604082206002810154918101543493919291908190610d159061070c565b1515610d2057600080fd5b82851015610d2d57600080fd5b610d3d858463ffffffff6115c116565b91506000831115610d86576001840154604051600160a060020a039091169084156108fc029085906000818181858888f19350505050158015610d84573d6000803e3d6000fd5b505b506040513390819083156108fc029084906000818181858888f19350505050158015610db6573d6000803e3d6000fd5b50610dc18187611638565b6005840154600185015485546002870154600488015460408051938452602084019290925282820152513392600160a060020a0316917f76771b5750ddfc82d5fc52885927e7027de47450fa188aaf1ffe9197f879fc40919081900360600190a450505060009283525050600560208190526040822082815560018101805473ffffffffffffffffffffffffffffffffffffffff191690556002810183905560038101839055600481018390550155565b610edc826001836040518082805190602001908083835b60208310610ea85780518252601f199092019160209182019101610e89565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506116ac565b81600160a060020a03167fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a826040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f45578181015183820152602001610f2d565b50505050905090810190601f168015610f725780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b610fed826001836040518082805190602001908083835b60208310610fb95780518252601f199092019160209182019101610f9a565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929150506116ce565b81600160a060020a03167fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898260405180806020018281038252838181518152602001915080519060200190808383600083811015610f45578181015183820152602001610f2d565b60008061106061189e565b33925061106d83876116f3565b151561107857600080fd5b611082838761179c565b60408051426020808301919091526c01000000000000000000000000600160a060020a03871602828401526054820189905260748083018b905283518084039091018152609490920192839052815191929182918401908083835b602083106110fc5780518252601f1990920191602091820191016110dd565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915060c0604051908101604052808360001916815260200184600160a060020a03168152602001886fffffffffffffffffffffffffffffffff16815260200186815260200185815260200187815250905080600560008881526020019081526020016000206000820151816000019060001916905560208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020155606082015181600301556080820151816004015560a082015181600501559050508583600160a060020a03167fc113f503fabf56efa06fef76c4f99328016f2f1cd7b0950c16ea165fe29c92ce848a898960405180856000191660001916815260200184815260200183815260200182815260200194505050505060405180910390a350505050505050565b6000818152600560205260408120600281015460045491929091819061128e90849063ffffffff61181016565b600254604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051929450600160a060020a03909116916370a08231916024808201926020929091908290030181600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b505050506040513d602081101561132157600080fd5b505190508181101561133257600080fd5b61133f846005015461070c565b151561134a57600080fd5b60008311156113fa576002546001850154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03928316602482015260448101869052905191909216916323b872dd9160648083019260209291908290030181600087803b1580156113cd57600080fd5b505af11580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b50505b6114043386611638565b6005840154600185015485546002870154600488015460408051938452602084019290925282820152513392600160a060020a0316917fd79ce631dd34ddc18646ac1e362c85f6a59697eecb42918e2e6da7c11f919734919081900360600190a4505050600091825250600560208190526040822082815560018101805473ffffffffffffffffffffffffffffffffffffffff191690556002810183905560038101839055600481018390550155565b600160a060020a03811615156114c957600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600354604080517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03858116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b1580156115a557600080fd5b505af11580156115b9573d6000803e3d6000fd5b505050505050565b60008282111561163257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536166654d61746820737562206661696c656400000000000000000000000000604482015290519081900360640190fd5b50900390565b600354604080517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a03858116602483015260448201859052915191909216916342842e0e91606480830192600092919082900301818387803b1580156115a557600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600354604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018490529051600092600160a060020a0380871693911691636352211e9160248082019260209290919082900301818887803b15801561175f57600080fd5b505af1158015611773573d6000803e3d6000fd5b505050506040513d602081101561178957600080fd5b5051600160a060020a0316149392505050565b600354604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b1580156115a557600080fd5b600082151561182157506000610706565b5081810281838281151561183157fe5b041461070657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f536166654d617468206d756c206661696c656400000000000000000000000000604482015290519081900360640190fd5b60c060405190810160405280600080191681526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160008152509056007375706572757365720000000000000000000000000000000000000000000000a165627a7a72305820c37113afea96069020c5d0a24dedf6091e9fe1518cb477ca5d54f23b757d5d6800290000000000000000000000006ee97dd08c2325a0d9c59545137373bb9309515700000000000000000000000056ba2703c08986ba42f4758a9c4a335a8ff3c95d000000000000000000000000000000000000000000000000000000000000a2c2

   Swarm Source:
bzzr://c37113afea96069020c5d0a24dedf6091e9fe1518cb477ca5d54f23b757d5d68

 

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