About
Stats
                Public Functions
                29
            
            
                Event Types
                7
            
            
                Code Size
                37,277 bytes
            
        Library Use
Uses SafeMath for uint256.
        Events (7) keyboard_arrow_up
Constants (5) keyboard_arrow_up
State Variables (18) keyboard_arrow_up
Functions
owner keyboard_arrow_up
isOwner keyboard_arrow_up
renounceOwnership keyboard_arrow_up
transferOwnership keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
null
                                Source Code
function transferOwnership(address newOwner) public onlyOwner {
  _transferOwnership(newOwner);
}
enableWhitelist keyboard_arrow_up
addToWhitelist keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
null
                                Source Code
function addToWhitelist(address _newAddress) public onlyOwner {
  _whitelist(_newAddress);
  emit AddToWhitelist(_newAddress);
}
removeFromWhitelist keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
null
                                Source Code
function removeFromWhitelist(address _removedAddress) public onlyOwner {
  _unWhitelist(_removedAddress);
  emit RemoveFromWhitelist(_removedAddress);
}
isWhitelisted keyboard_arrow_up
balanceOf keyboard_arrow_up
Source Code
function balanceOf(address owner) public view returns (uint256) {
  require(owner != address(0));
  return _ownedTokensCount[owner];
}
ownerOf keyboard_arrow_up
Source Code
function ownerOf(uint256 tokenId) public view returns (address) {
  address owner = _tokenOwner[tokenId];
  require(owner != address(0));
  return owner;
}
approve keyboard_arrow_up
Requirements help
Source Code
function approve(address to, uint256 tokenId) public {
  address owner = ownerOf(tokenId);
  require(to != owner);
  require(msg.sender == owner || isApprovedForAll(owner, msg.sender));
  _tokenApprovals[tokenId] = to;
  emit Approval(owner, to, tokenId);
}
getApproved keyboard_arrow_up
setApprovalForAll keyboard_arrow_up
Requirements help
Source Code
function setApprovalForAll(address to, bool approved) public {
  require(to != msg.sender);
  _operatorApprovals[msg.sender][to] = approved;
  emit ApprovalForAll(msg.sender, to, approved);
}
isApprovedForAll keyboard_arrow_up
transferFrom keyboard_arrow_up
Requirements help
Source Code
function transferFrom(
  address from,
  address to,
  uint256 tokenId
) public {
  require(_isApprovedOrOwner(msg.sender, tokenId));
  require(to != address(0));
  _clearApproval(from, tokenId);
  _removeTokenFrom(from, tokenId);
  _addTokenTo(to, tokenId);
  emit Transfer(from, to, tokenId);
}
safeTransferFrom keyboard_arrow_up
Requirements help
Source Code
function safeTransferFrom(
  address from,
  address to,
  uint256 tokenId
) public {
  // solium-disable-next-line arg-overflow
  safeTransferFrom(from, to, tokenId, "");
}
safeTransferFrom keyboard_arrow_up
Requirements help
Source Code
function safeTransferFrom(
  address from,
  address to,
  uint256 tokenId,
  bytes _data
) public {
  transferFrom(from, to, tokenId);
  // solium-disable-next-line arg-overflow
  require(_checkOnERC721Received(from, to, tokenId, _data));
}
tokenCreator keyboard_arrow_up
name keyboard_arrow_up
symbol keyboard_arrow_up
tokenURI keyboard_arrow_up
supportsInterface keyboard_arrow_up
totalSupply keyboard_arrow_up
tokenOfOwnerByIndex keyboard_arrow_up
Source Code
function tokenOfOwnerByIndex(address owner, uint256 index)
  public
  view
  returns (uint256)
{
  require(index < balanceOf(owner));
  return _ownedTokens[owner][index];
}
tokenByIndex keyboard_arrow_up
Requirements help
Source Code
function tokenByIndex(uint256 index) public view returns (uint256) {
  require(index < totalSupply());
  return _allTokens[index];
}
initWhitelist keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
null
                                Source Code
function initWhitelist(address[] _whitelistees) public onlyOwner {
  // Add all whitelistees.
  for (uint256 i = 0; i < _whitelistees.length; i++) {
    address creator = _whitelistees[i];
    if (!isWhitelisted(creator)) {
      _whitelist(creator);
    }
  }
}
addNewToken keyboard_arrow_up
Requirements help
null
                            
                            
                            null
                    Source Code
function addNewToken(string _uri) public {
  require(isWhitelisted(msg.sender), "must be whitelisted to create tokens");
  _createToken(_uri, msg.sender);
}
deleteToken keyboard_arrow_up
updateTokenMetadata keyboard_arrow_up
Modifiers help
onlyTokenOwner checks for the following:
onlyTokenCreator checks for the following:
Requirements help
null
                    Source Code
function updateTokenMetadata(uint256 _tokenId, string _uri)
  public
  onlyTokenOwner(_tokenId)
  onlyTokenCreator(_tokenId)
{
  _setTokenURI(_tokenId, _uri);
  emit TokenURIUpdated(_tokenId, _uri);
}
Internal Functions
Internal functions are parts of the contract that can't be used directly, but instead are used by the public functions listed above.
internal SuperRareV2._setTokenCreator keyboard_arrow_up
internal SuperRareV2._createToken keyboard_arrow_up
Requirements help
Source Code
function _createToken(string _uri, address _creator)
  internal
  returns (uint256)
{
  uint256 newId = idCounter;
  idCounter++;
  _mint(_creator, newId);
  _setTokenURI(newId, _uri);
  _setTokenCreator(newId, _creator);
  return newId;
}
internal ERC721._exists keyboard_arrow_up
internal ERC721._isApprovedOrOwner keyboard_arrow_up
Source Code
function _isApprovedOrOwner(address spender, uint256 tokenId)
  internal
  view
  returns (bool)
{
  address owner = ownerOf(tokenId);
  // Disable solium check because of
  // https://github.com/duaraghav8/Solium/issues/175
  // solium-disable-next-line operator-whitespace
  return (spender == owner ||
    getApproved(tokenId) == spender ||
    isApprovedForAll(owner, spender));
}
internal ERC721._mint keyboard_arrow_up
Requirements help
Source Code
function _mint(address to, uint256 tokenId) internal {
  require(to != address(0));
  _addTokenTo(to, tokenId);
  emit Transfer(address(0), to, tokenId);
}
internal ERC721._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address owner, uint256 tokenId) internal {
  _clearApproval(owner, tokenId);
  _removeTokenFrom(owner, tokenId);
  emit Transfer(owner, address(0), tokenId);
}
internal ERC721._addTokenTo keyboard_arrow_up
Requirements help
Source Code
function _addTokenTo(address to, uint256 tokenId) internal {
  require(_tokenOwner[tokenId] == address(0));
  _tokenOwner[tokenId] = to;
  _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
}
internal ERC721._removeTokenFrom keyboard_arrow_up
Source Code
function _removeTokenFrom(address from, uint256 tokenId) internal {
  require(ownerOf(tokenId) == from);
  _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
  _tokenOwner[tokenId] = address(0);
}
internal ERC721._checkOnERC721Received keyboard_arrow_up
Source Code
function _checkOnERC721Received(
  address from,
  address to,
  uint256 tokenId,
  bytes _data
) internal returns (bool) {
  if (!to.isContract()) {
    return true;
  }
  bytes4 retval = IERC721Receiver(to).onERC721Received(
    msg.sender,
    from,
    tokenId,
    _data
  );
  return (retval == _ERC721_RECEIVED);
}
internal ERC721._clearApproval keyboard_arrow_up
Source Code
function _clearApproval(address owner, uint256 tokenId) private {
  require(ownerOf(tokenId) == owner);
  if (_tokenApprovals[tokenId] != address(0)) {
    _tokenApprovals[tokenId] = address(0);
  }
}
internal ERC165.constructor keyboard_arrow_up
internal ERC165._registerInterface keyboard_arrow_up
Requirements help
Source Code
function _registerInterface(bytes4 interfaceId) internal {
  require(interfaceId != 0xffffffff);
  _supportedInterfaces[interfaceId] = true;
}
internal ERC721Enumerable._addTokenTo keyboard_arrow_up
Requirements help
Source Code
function _addTokenTo(address to, uint256 tokenId) internal {
  super._addTokenTo(to, tokenId);
  uint256 length = _ownedTokens[to].length;
  _ownedTokens[to].push(tokenId);
  _ownedTokensIndex[tokenId] = length;
}
internal ERC721Enumerable._removeTokenFrom keyboard_arrow_up
Source Code
function _removeTokenFrom(address from, uint256 tokenId) internal {
  super._removeTokenFrom(from, tokenId);
  // To prevent a gap in the array, we store the last token in the index of the token to delete, and
  // then delete the last slot.
  uint256 tokenIndex = _ownedTokensIndex[tokenId];
  uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
  uint256 lastToken = _ownedTokens[from][lastTokenIndex];
  _ownedTokens[from][tokenIndex] = lastToken;
  // This also deletes the contents at the last position of the array
  _ownedTokens[from].length--;
  // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
  // be zero. Then we can make sure that we will remove tokenId from the ownedTokens list since we are first swapping
  // the lastToken to the first position, and then dropping the element placed in the last position of the list
  _ownedTokensIndex[tokenId] = 0;
  _ownedTokensIndex[lastToken] = tokenIndex;
}
internal ERC721Enumerable._mint keyboard_arrow_up
Requirements help
Source Code
function _mint(address to, uint256 tokenId) internal {
  super._mint(to, tokenId);
  _allTokensIndex[tokenId] = _allTokens.length;
  _allTokens.push(tokenId);
}
internal ERC721Enumerable._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address owner, uint256 tokenId) internal {
  super._burn(owner, tokenId);
  // Reorg all tokens array
  uint256 tokenIndex = _allTokensIndex[tokenId];
  uint256 lastTokenIndex = _allTokens.length.sub(1);
  uint256 lastToken = _allTokens[lastTokenIndex];
  _allTokens[tokenIndex] = lastToken;
  _allTokens[lastTokenIndex] = 0;
  _allTokens.length--;
  _allTokensIndex[tokenId] = 0;
  _allTokensIndex[lastToken] = tokenIndex;
}
internal ERC165.constructor keyboard_arrow_up
internal ERC165._registerInterface keyboard_arrow_up
Requirements help
Source Code
function _registerInterface(bytes4 interfaceId) internal {
  require(interfaceId != 0xffffffff);
  _supportedInterfaces[interfaceId] = true;
}
internal ERC721._exists keyboard_arrow_up
internal ERC721._isApprovedOrOwner keyboard_arrow_up
Source Code
function _isApprovedOrOwner(address spender, uint256 tokenId)
  internal
  view
  returns (bool)
{
  address owner = ownerOf(tokenId);
  // Disable solium check because of
  // https://github.com/duaraghav8/Solium/issues/175
  // solium-disable-next-line operator-whitespace
  return (spender == owner ||
    getApproved(tokenId) == spender ||
    isApprovedForAll(owner, spender));
}
internal ERC721._mint keyboard_arrow_up
Requirements help
Source Code
function _mint(address to, uint256 tokenId) internal {
  require(to != address(0));
  _addTokenTo(to, tokenId);
  emit Transfer(address(0), to, tokenId);
}
internal ERC721._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address owner, uint256 tokenId) internal {
  _clearApproval(owner, tokenId);
  _removeTokenFrom(owner, tokenId);
  emit Transfer(owner, address(0), tokenId);
}
internal ERC721._addTokenTo keyboard_arrow_up
Requirements help
Source Code
function _addTokenTo(address to, uint256 tokenId) internal {
  require(_tokenOwner[tokenId] == address(0));
  _tokenOwner[tokenId] = to;
  _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
}
internal ERC721._removeTokenFrom keyboard_arrow_up
Source Code
function _removeTokenFrom(address from, uint256 tokenId) internal {
  require(ownerOf(tokenId) == from);
  _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
  _tokenOwner[tokenId] = address(0);
}
internal ERC721._checkOnERC721Received keyboard_arrow_up
Source Code
function _checkOnERC721Received(
  address from,
  address to,
  uint256 tokenId,
  bytes _data
) internal returns (bool) {
  if (!to.isContract()) {
    return true;
  }
  bytes4 retval = IERC721Receiver(to).onERC721Received(
    msg.sender,
    from,
    tokenId,
    _data
  );
  return (retval == _ERC721_RECEIVED);
}
internal ERC721._clearApproval keyboard_arrow_up
Source Code
function _clearApproval(address owner, uint256 tokenId) private {
  require(ownerOf(tokenId) == owner);
  if (_tokenApprovals[tokenId] != address(0)) {
    _tokenApprovals[tokenId] = address(0);
  }
}
internal ERC165.constructor keyboard_arrow_up
internal ERC165._registerInterface keyboard_arrow_up
Requirements help
Source Code
function _registerInterface(bytes4 interfaceId) internal {
  require(interfaceId != 0xffffffff);
  _supportedInterfaces[interfaceId] = true;
}
internal ERC721Metadata._setTokenURI keyboard_arrow_up
internal ERC721Metadata._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address owner, uint256 tokenId) internal {
  super._burn(owner, tokenId);
  // Clear metadata (if any)
  if (bytes(_tokenURIs[tokenId]).length != 0) {
    delete _tokenURIs[tokenId];
  }
}
internal ERC165.constructor keyboard_arrow_up
internal ERC165._registerInterface keyboard_arrow_up
Requirements help
Source Code
function _registerInterface(bytes4 interfaceId) internal {
  require(interfaceId != 0xffffffff);
  _supportedInterfaces[interfaceId] = true;
}
internal ERC721._exists keyboard_arrow_up
internal ERC721._isApprovedOrOwner keyboard_arrow_up
Source Code
function _isApprovedOrOwner(address spender, uint256 tokenId)
  internal
  view
  returns (bool)
{
  address owner = ownerOf(tokenId);
  // Disable solium check because of
  // https://github.com/duaraghav8/Solium/issues/175
  // solium-disable-next-line operator-whitespace
  return (spender == owner ||
    getApproved(tokenId) == spender ||
    isApprovedForAll(owner, spender));
}
internal ERC721._mint keyboard_arrow_up
Requirements help
Source Code
function _mint(address to, uint256 tokenId) internal {
  require(to != address(0));
  _addTokenTo(to, tokenId);
  emit Transfer(address(0), to, tokenId);
}
internal ERC721._burn keyboard_arrow_up
Requirements help
Source Code
function _burn(address owner, uint256 tokenId) internal {
  _clearApproval(owner, tokenId);
  _removeTokenFrom(owner, tokenId);
  emit Transfer(owner, address(0), tokenId);
}
internal ERC721._addTokenTo keyboard_arrow_up
Requirements help
Source Code
function _addTokenTo(address to, uint256 tokenId) internal {
  require(_tokenOwner[tokenId] == address(0));
  _tokenOwner[tokenId] = to;
  _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
}
internal ERC721._removeTokenFrom keyboard_arrow_up
Source Code
function _removeTokenFrom(address from, uint256 tokenId) internal {
  require(ownerOf(tokenId) == from);
  _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
  _tokenOwner[tokenId] = address(0);
}
internal ERC721._checkOnERC721Received keyboard_arrow_up
Source Code
function _checkOnERC721Received(
  address from,
  address to,
  uint256 tokenId,
  bytes _data
) internal returns (bool) {
  if (!to.isContract()) {
    return true;
  }
  bytes4 retval = IERC721Receiver(to).onERC721Received(
    msg.sender,
    from,
    tokenId,
    _data
  );
  return (retval == _ERC721_RECEIVED);
}
internal ERC721._clearApproval keyboard_arrow_up
Source Code
function _clearApproval(address owner, uint256 tokenId) private {
  require(ownerOf(tokenId) == owner);
  if (_tokenApprovals[tokenId] != address(0)) {
    _tokenApprovals[tokenId] = address(0);
  }
}
internal ERC165.constructor keyboard_arrow_up
internal ERC165._registerInterface keyboard_arrow_up
Requirements help
Source Code
function _registerInterface(bytes4 interfaceId) internal {
  require(interfaceId != 0xffffffff);
  _supportedInterfaces[interfaceId] = true;
}
internal Ownable.constructor keyboard_arrow_up
internal Ownable._transferOwnership keyboard_arrow_up
Source Code
function _transferOwnership(address newOwner) internal {
  require(newOwner != address(0));
  emit OwnershipTransferred(_owner, newOwner);
  _owner = newOwner;
}
internal Whitelist._unWhitelist keyboard_arrow_up
internal Whitelist._whitelist keyboard_arrow_up
internal Ownable.constructor keyboard_arrow_up
internal Ownable._transferOwnership keyboard_arrow_up
Source Code
function _transferOwnership(address newOwner) internal {
  require(newOwner != address(0));
  emit OwnershipTransferred(_owner, newOwner);
  _owner = newOwner;
}
 
         
    



