More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 12,435 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer From | 23792583 | 3 days ago | IN | 0 ETH | 0.00012498 | ||||
| Transfer From | 23777055 | 5 days ago | IN | 0 ETH | 0.00024143 | ||||
| Transfer From | 23761363 | 7 days ago | IN | 0 ETH | 0.00009721 | ||||
| Transfer From | 23756738 | 8 days ago | IN | 0 ETH | 0.00009537 | ||||
| Transfer From | 23756704 | 8 days ago | IN | 0 ETH | 0.00011251 | ||||
| Transfer From | 23704928 | 15 days ago | IN | 0 ETH | 0.00000804 | ||||
| Transfer From | 23677492 | 19 days ago | IN | 0 ETH | 0.00010384 | ||||
| Set Approval For... | 23641316 | 24 days ago | IN | 0 ETH | 0.00001027 | ||||
| Transfer From | 23621006 | 27 days ago | IN | 0 ETH | 0.00009836 | ||||
| Transfer From | 23603709 | 29 days ago | IN | 0 ETH | 0.00011331 | ||||
| Transfer From | 23562088 | 35 days ago | IN | 0 ETH | 0.00010616 | ||||
| Transfer From | 23489838 | 45 days ago | IN | 0 ETH | 0.00029821 | ||||
| Transfer From | 23474554 | 47 days ago | IN | 0 ETH | 0.00015264 | ||||
| Transfer From | 23474347 | 47 days ago | IN | 0 ETH | 0.00012676 | ||||
| Set Approval For... | 23253211 | 78 days ago | IN | 0 ETH | 0.00005515 | ||||
| Transfer From | 23213268 | 84 days ago | IN | 0 ETH | 0.0001663 | ||||
| Transfer From | 23212883 | 84 days ago | IN | 0 ETH | 0.00004562 | ||||
| Transfer From | 23212883 | 84 days ago | IN | 0 ETH | 0.0001379 | ||||
| Transfer From | 23212783 | 84 days ago | IN | 0 ETH | 0.00019148 | ||||
| Transfer From | 23212747 | 84 days ago | IN | 0 ETH | 0.00014027 | ||||
| Transfer From | 23204293 | 85 days ago | IN | 0 ETH | 0.0000247 | ||||
| Transfer From | 23204290 | 85 days ago | IN | 0 ETH | 0.00002446 | ||||
| Transfer From | 23204284 | 85 days ago | IN | 0 ETH | 0.00002398 | ||||
| Transfer From | 23202599 | 85 days ago | IN | 0 ETH | 0.00002861 | ||||
| Transfer From | 23199635 | 86 days ago | IN | 0 ETH | 0.00010218 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Cryptostamp
Compiler Version
v0.5.7+commit.6da8b019
Optimization Enabled:
Yes with 200 runs
Other Settings:
petersburg EvmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-05-16
*/
/*
* Crypto stamp
* Digitalphysical collectible postage stamp
*
* Developed by capacity.at
* for post.at
*/
// File: openzeppelin-solidity/contracts/introspection/IERC165.sol
pragma solidity ^0.5.0;
/**
* @title IERC165
* @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
*/
interface IERC165 {
/**
* @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: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.5.0;
/**
* @title ERC721 Non-Fungible Token Standard basic interface
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract IERC721 is IERC165 {
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 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 memory data) public;
}
// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol
pragma solidity ^0.5.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
contract IERC721Receiver {
/**
* @notice Handle the receipt of an NFT
* @dev The ERC721 smart contract calls this function on the recipient
* after a `safeTransfer`. This function MUST return the function selector,
* otherwise the caller will revert the transaction. The selector to be
* returned can be obtained as `this.onERC721Received.selector`. This
* function MAY throw to revert and reject the transfer.
* Note: the ERC721 contract address is always the message sender.
* @param operator The address which called `safeTransferFrom` function
* @param from The address which previously owned the token
* @param tokenId The NFT identifier which is being transferred
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
*/
function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
public returns (bytes4);
}
// File: openzeppelin-solidity/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @title SafeMath
* @dev Unsigned math operations with safety checks that revert on error
*/
library SafeMath {
/**
* @dev Multiplies two unsigned integers, reverts on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
/**
* @dev Adds two unsigned integers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
/**
* @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
// File: openzeppelin-solidity/contracts/utils/Address.sol
pragma solidity ^0.5.0;
/**
* Utility library of inline functions on addresses
*/
library Address {
/**
* Returns whether the target address is a contract
* @dev This function will return false if invoked during the constructor of a contract,
* as the code is not actually created until after the constructor finishes.
* @param account address of the account to check
* @return whether the target address is a contract
*/
function isContract(address account) internal view returns (bool) {
uint256 size;
// XXX Currently there is no better way to check if there is a contract in an address
// than to check the size of the code at that address.
// See https://ethereum.stackexchange.com/a/14016/36603
// for more details about how this works.
// TODO Check this again before the Serenity release, because all addresses will be
// contracts then.
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
}
// File: openzeppelin-solidity/contracts/introspection/ERC165.sol
pragma solidity ^0.5.0;
/**
* @title ERC165
* @author Matt Condon (@shrugs)
* @dev Implements ERC165 using a lookup table.
*/
contract ERC165 is IERC165 {
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* 0x01ffc9a7 ===
* bytes4(keccak256('supportsInterface(bytes4)'))
*/
/**
* @dev a mapping of interface id to whether or not it's supported
*/
mapping(bytes4 => bool) private _supportedInterfaces;
/**
* @dev A contract implementing SupportsInterfaceWithLookup
* implement ERC165 itself
*/
constructor () internal {
_registerInterface(_INTERFACE_ID_ERC165);
}
/**
* @dev implement supportsInterface(bytes4) using a lookup table
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool) {
return _supportedInterfaces[interfaceId];
}
/**
* @dev internal method for registering an interface
*/
function _registerInterface(bytes4 interfaceId) internal {
require(interfaceId != 0xffffffff);
_supportedInterfaces[interfaceId] = true;
}
}
// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.5.0;
/**
* @title ERC721 Non-Fungible Token Standard basic implementation
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract ERC721 is ERC165, IERC721 {
using SafeMath for uint256;
using Address for address;
// Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
// which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
// Mapping from token ID to owner
mapping (uint256 => address) private _tokenOwner;
// Mapping from token ID to approved address
mapping (uint256 => address) private _tokenApprovals;
// Mapping from owner to number of owned token
mapping (address => uint256) private _ownedTokensCount;
// Mapping from owner to operator approvals
mapping (address => mapping (address => bool)) private _operatorApprovals;
bytes4 private constant _INTERFACE_ID_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)'))
*/
constructor () public {
// register the supported interfaces to conform to ERC721 via ERC165
_registerInterface(_INTERFACE_ID_ERC721);
}
/**
* @dev Gets the balance of the specified address
* @param owner address to query the balance of
* @return uint256 representing the amount owned by the passed address
*/
function balanceOf(address owner) public view returns (uint256) {
require(owner != address(0));
return _ownedTokensCount[owner];
}
/**
* @dev Gets the owner of the specified token ID
* @param tokenId uint256 ID of the token to query the owner of
* @return owner address currently marked as the owner of the given token ID
*/
function ownerOf(uint256 tokenId) public view returns (address) {
address owner = _tokenOwner[tokenId];
require(owner != address(0));
return owner;
}
/**
* @dev Approves another address to transfer the given token ID
* The zero address indicates there is no approved address.
* There can only be one approved address per token at a given time.
* Can only be called by the token owner or an approved operator.
* @param to address to be approved for the given token ID
* @param tokenId uint256 ID of the token to be approved
*/
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);
}
/**
* @dev Gets the approved address for a token ID, or zero if no address set
* Reverts if the token ID does not exist.
* @param tokenId uint256 ID of the token to query the approval of
* @return address currently approved for the given token ID
*/
function getApproved(uint256 tokenId) public view returns (address) {
require(_exists(tokenId));
return _tokenApprovals[tokenId];
}
/**
* @dev Sets or unsets the approval of a given operator
* An operator is allowed to transfer all tokens of the sender on their behalf
* @param to operator address to set the approval
* @param approved representing the status of the approval to be set
*/
function setApprovalForAll(address to, bool approved) public {
require(to != msg.sender);
_operatorApprovals[msg.sender][to] = approved;
emit ApprovalForAll(msg.sender, to, approved);
}
/**
* @dev Tells whether an operator is approved by a given owner
* @param owner owner address which you want to query the approval of
* @param operator operator address which you want to query the approval of
* @return bool whether the given operator is approved by the given owner
*/
function isApprovedForAll(address owner, address operator) public view returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev Transfers the ownership of a given token ID to another address
* Usage of this method is discouraged, use `safeTransferFrom` whenever possible
* Requires the msg sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function transferFrom(address from, address to, uint256 tokenId) public {
require(_isApprovedOrOwner(msg.sender, tokenId));
_transferFrom(from, to, tokenId);
}
/**
* @dev Safely transfers the ownership of a given token ID to another address
* If the target address is a contract, it must implement `onERC721Received`,
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
*
* Requires the msg sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev Safely transfers the ownership of a given token ID to another address
* If the target address is a contract, it must implement `onERC721Received`,
* which is called upon a safe transfer, and return the magic value
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
* the transfer is reverted.
* Requires the msg sender to be the owner, approved, or operator
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes data to send along with a safe transfer check
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
transferFrom(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data));
}
/**
* @dev Returns whether the specified token exists
* @param tokenId uint256 ID of the token to query the existence of
* @return whether the token exists
*/
function _exists(uint256 tokenId) internal view returns (bool) {
address owner = _tokenOwner[tokenId];
return owner != address(0);
}
/**
* @dev Returns whether the given spender can transfer a given token ID
* @param spender address of the spender to query
* @param tokenId uint256 ID of the token to be transferred
* @return bool whether the msg.sender is approved for the given token ID,
* is an operator of the owner, or is the owner of the token
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
address owner = ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Internal function to mint a new token
* Reverts if the given token ID already exists
* @param to The address that will own the minted token
* @param tokenId uint256 ID of the token to be minted
*/
function _mint(address to, uint256 tokenId) internal {
require(to != address(0));
require(!_exists(tokenId));
_tokenOwner[tokenId] = to;
_ownedTokensCount[to] = _ownedTokensCount[to].add(1);
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Internal function to burn a specific token
* Reverts if the token does not exist
* Deprecated, use _burn(uint256) instead.
* @param owner owner of the token to burn
* @param tokenId uint256 ID of the token being burned
*/
function _burn(address owner, uint256 tokenId) internal {
require(ownerOf(tokenId) == owner);
_clearApproval(tokenId);
_ownedTokensCount[owner] = _ownedTokensCount[owner].sub(1);
_tokenOwner[tokenId] = address(0);
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Internal function to burn a specific token
* Reverts if the token does not exist
* @param tokenId uint256 ID of the token being burned
*/
function _burn(uint256 tokenId) internal {
_burn(ownerOf(tokenId), tokenId);
}
/**
* @dev Internal function to transfer ownership of a given token ID to another address.
* As opposed to transferFrom, this imposes no restrictions on msg.sender.
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function _transferFrom(address from, address to, uint256 tokenId) internal {
require(ownerOf(tokenId) == from);
require(to != address(0));
_clearApproval(tokenId);
_ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
_ownedTokensCount[to] = _ownedTokensCount[to].add(1);
_tokenOwner[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Internal function to invoke `onERC721Received` on a target address
* The call is not executed if the target address is not a contract
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
internal returns (bool)
{
if (!to.isContract()) {
return true;
}
bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
return (retval == _ERC721_RECEIVED);
}
/**
* @dev Private function to clear current approval of a given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function _clearApproval(uint256 tokenId) private {
if (_tokenApprovals[tokenId] != address(0)) {
_tokenApprovals[tokenId] = address(0);
}
}
}
// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol
pragma solidity ^0.5.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract IERC721Enumerable is IERC721 {
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);
}
// File: contracts/ERC721EnumerableSimple.sol
pragma solidity ^0.5.0;
/* This is a simplified (and cheaper) version of OpenZeppelin's ERC721Enumerable.
* ERC721Enumerable's allTokens array and allTokensIndex mapping are eliminated.
* Side effects: _burn cannot be used any more with this, and creation needs to be
* in ascending order, starting with 0, and have no holes in the sequence of IDs.
*/
/**
* @title ERC-721 Non-Fungible Token with optional enumeration extension logic
* @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract ERC721EnumerableSimple is ERC165, ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => uint256[]) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
uint256 internal totalSupply_;
bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;
/**
* 0x780e9d63 ===
* bytes4(keccak256('totalSupply()')) ^
* bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
* bytes4(keccak256('tokenByIndex(uint256)'))
*/
/**
* @dev Constructor function
*/
constructor () public {
// register the supported interface to conform to ERC721 via ERC165
_registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
}
/**
* @dev Gets the token ID at a given index of the tokens list of the requested owner
* @param owner address owning the tokens list to be accessed
* @param index uint256 representing the index to be accessed of the requested tokens list
* @return uint256 token ID at the given index of the tokens list owned by the requested address
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
require(index < balanceOf(owner), "Index is higher than number of tokens owned.");
return _ownedTokens[owner][index];
}
/**
* @dev Gets the total amount of tokens stored by the contract
* @return uint256 representing the total amount of tokens
*/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev Gets the token ID at a given index of all the tokens in this contract
* Reverts if the index is greater or equal to the total number of tokens
* @param index uint256 representing the index to be accessed of the tokens list
* @return uint256 token ID at the given index of the tokens list
*/
function tokenByIndex(uint256 index) public view returns (uint256) {
require(index < totalSupply(), "Index is out of bounds.");
return index;
}
/**
* @dev Internal function to transfer ownership of a given token ID to another address.
* As opposed to transferFrom, this imposes no restrictions on msg.sender.
* @param from current owner of the token
* @param to address to receive the ownership of the given token ID
* @param tokenId uint256 ID of the token to be transferred
*/
function _transferFrom(address from, address to, uint256 tokenId) internal {
super._transferFrom(from, to, tokenId);
_removeTokenFromOwnerEnumeration(from, tokenId);
_addTokenToOwnerEnumeration(to, tokenId);
}
/**
* @dev Internal function to mint a new token
* Reverts if the given token ID already exists
* @param to address the beneficiary that will own the minted token
* @param tokenId uint256 ID of the token to be minted
*/
function _mint(address to, uint256 tokenId) internal {
super._mint(to, tokenId);
_addTokenToOwnerEnumeration(to, tokenId);
totalSupply_ = totalSupply_.add(1);
}
/**
* @dev Internal function to burn a specific token
* Reverts if the token does not exist
* Deprecated, use _burn(uint256) instead
* param owner owner of the token to burn
* param tokenId uint256 ID of the token being burned
*/
function _burn(address /*owner*/, uint256 /*tokenId*/) internal {
revert("This token cannot be burned.");
}
/**
* @dev Gets the list of token IDs of the requested owner
* @param owner address owning the tokens
* @return uint256[] List of token IDs owned by the requested address
*/
function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
return _ownedTokens[owner];
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
_ownedTokensIndex[tokenId] = _ownedTokens[to].length;
_ownedTokens[to].push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
_ownedTokens[from].length--;
// Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occcupied by
// lasTokenId, or just over the end of the array if the token was the last one).
}
}
// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol
pragma solidity ^0.5.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
contract IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol
pragma solidity ^0.5.0;
contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
// Token name
string private _name;
// Token symbol
string private _symbol;
// Optional mapping for token URIs
mapping(uint256 => string) private _tokenURIs;
bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
/**
* 0x5b5e139f ===
* bytes4(keccak256('name()')) ^
* bytes4(keccak256('symbol()')) ^
* bytes4(keccak256('tokenURI(uint256)'))
*/
/**
* @dev Constructor function
*/
constructor (string memory name, string memory symbol) public {
_name = name;
_symbol = symbol;
// register the supported interfaces to conform to ERC721 via ERC165
_registerInterface(_INTERFACE_ID_ERC721_METADATA);
}
/**
* @dev Gets the token name
* @return string representing the token name
*/
function name() external view returns (string memory) {
return _name;
}
/**
* @dev Gets the token symbol
* @return string representing the token symbol
*/
function symbol() external view returns (string memory) {
return _symbol;
}
/**
* @dev Returns an URI for a given token ID
* Throws if the token ID does not exist. May return an empty string.
* @param tokenId uint256 ID of the token to query
*/
function tokenURI(uint256 tokenId) external view returns (string memory) {
require(_exists(tokenId));
return _tokenURIs[tokenId];
}
/**
* @dev Internal function to set the token URI for a given token
* Reverts if the token ID does not exist
* @param tokenId uint256 ID of the token to set its URI
* @param uri string URI to assign
*/
function _setTokenURI(uint256 tokenId, string memory uri) internal {
require(_exists(tokenId));
_tokenURIs[tokenId] = uri;
}
/**
* @dev Internal function to burn a specific token
* Reverts if the token does not exist
* Deprecated, use _burn(uint256) instead
* @param owner owner of the token to burn
* @param tokenId uint256 ID of the token being burned by the msg.sender
*/
function _burn(address owner, uint256 tokenId) internal {
super._burn(owner, tokenId);
// Clear metadata (if any)
if (bytes(_tokenURIs[tokenId]).length != 0) {
delete _tokenURIs[tokenId];
}
}
}
// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
*/
interface IERC20 {
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(address who) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: contracts/Cryptostamp.sol
/*
Implements ERC 721 Token standard: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
pragma solidity ^0.5.0;
/* The inheritance is very much the same as OpenZeppelin's ERC721Full,
* but using a simplified (and cheaper) version of ERC721Enumerable */
contract Cryptostamp is ERC721, ERC721EnumerableSimple, ERC721Metadata("Crypto stamp Edition 1", "CS1") {
string public uribase;
address public createControl;
address public tokenAssignmentControl;
bool public mintingFinished = false;
constructor(address _createControl, address _tokenAssignmentControl)
public
{
createControl = _createControl;
tokenAssignmentControl = _tokenAssignmentControl;
uribase = "https://test.crypto.post.at/CS1/meta/";
}
modifier onlyCreateControl()
{
require(msg.sender == createControl, "createControl key required for this function.");
_;
}
modifier onlyTokenAssignmentControl() {
require(msg.sender == tokenAssignmentControl, "tokenAssignmentControl key required for this function.");
_;
}
modifier requireMinting() {
require(mintingFinished == false, "This call only works when minting is not finished.");
_;
}
// Issue a new crypto stamp asset, giving it to a specific owner address.
// As appending the ID into a URI in Solidity is complicated, generate both
// externally and hand them over to the asset here.
function create(uint256 _tokenId, address _owner)
public
onlyCreateControl
requireMinting
{
// Make sure we do not get any holes in Ids so we can do more optimizations.
require(_tokenId == 0 || _exists(_tokenId.sub(1)), "Previous token ID has to exist.");
// _mint already ends up checking if owner != 0 and that tokenId doesn't exist yet.
_mint(_owner, _tokenId);
}
// Batch-issue multiple crypto stamp with adjacent IDs.
function createMulti(uint256 _tokenIdStart, address[] memory _owners)
public
onlyCreateControl
requireMinting
{
// Make sure we do not get any holes in Ids so we can do more optimizations.
require(_tokenIdStart == 0 || _exists(_tokenIdStart.sub(1)), "Previous token ID has to exist.");
uint256 addrcount = _owners.length;
for (uint256 i = 0; i < addrcount; i++) {
// Make sure this is in sync with what create() does.
_mint(_owners[i], _tokenIdStart + i);
}
}
// Finish the creation/minting process.
function finishMinting()
public
onlyCreateControl
{
mintingFinished = true;
}
// Set new base for the token URI.
function newUriBase(string memory _newUriBase)
public
onlyCreateControl
{
uribase = _newUriBase;
}
// Override ERC721Metadata to create the URI from the base and ID.
function tokenURI(uint256 _tokenId)
external view
returns (string memory)
{
require(_exists(_tokenId), "Token ID does not exist.");
return string(abi.encodePacked(uribase, uint2str(_tokenId)));
}
// Returns whether the specified token exists
function exists(uint256 tokenId) public view returns (bool) {
return _exists(tokenId);
}
// Helper function from Oraclize
// https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
function uint2str(uint256 inp)
internal pure
returns (string memory)
{
if (inp == 0) return "0";
uint i = inp;
uint j = i;
uint length;
while (j != 0){
length++;
j /= 10;
}
bytes memory bstr = new bytes(length);
uint k = length - 1;
while (i != 0){
bstr[k--] = byte(uint8(48 + i % 10));
i /= 10;
}
return string(bstr);
}
/*** Make sure currency doesn't get stranded in this contract ***/
// If this contract gets a balance in some ERC20 contract after it's finished, then we can rescue it.
function rescueToken(IERC20 _foreignToken, address _to)
external
onlyTokenAssignmentControl
{
_foreignToken.transfer(_to, _foreignToken.balanceOf(address(this)));
}
// Make sure this contract cannot receive ETH.
function()
external payable
{
revert("The contract cannot receive ETH payments.");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_foreignToken","type":"address"},{"name":"_to","type":"address"}],"name":"rescueToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenIdStart","type":"uint256"},{"name":"_owners","type":"address[]"}],"name":"createMulti","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newUriBase","type":"string"}],"name":"newUriBase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uribase","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenAssignmentControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"createControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_owner","type":"address"}],"name":"create","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_createControl","type":"address"},{"name":"_tokenAssignmentControl","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]Contract Creation Code
6080604052600d8054600160a01b60ff02191690553480156200002157600080fd5b5060405160408062001e26833981018060405260408110156200004357600080fd5b508051602091820151604080518082018252601681527f43727970746f207374616d702045646974696f6e203100000000000000000000818601528151808301909252600382527f4353310000000000000000000000000000000000000000000000000000000000828601529293919291620000e5907f01ffc9a70000000000000000000000000000000000000000000000000000000090620001c3811b901c565b620000fd6380ac58cd60e01b620001c360201b60201c565b6200011563780e9d6360e01b620001c360201b60201c565b81516200012a90600890602085019062000230565b5080516200014090600990602084019062000230565b5062000159635b5e139f60e01b620001c360201b60201c565b5050600c80546001600160a01b038085166001600160a01b031992831617909255600d8054928416929091169190911790556040805160608101909152602580825262001e0160208301398051620001ba91600b9160209091019062000230565b505050620002d5565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620001f357600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200027357805160ff1916838001178555620002a3565b82800160010185558215620002a3579182015b82811115620002a357825182559160200191906001019062000286565b50620002b1929150620002b5565b5090565b620002d291905b80821115620002b15760008155600101620002bc565b90565b611b1c80620002e56000396000f3fe6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063c8c2ed5411610064578063c8c2ed54146107d6578063e66075c2146107eb578063e985e9c514610800578063f01fe6921461083b57610181565b8063a22cb4651461069e578063b88d4fde146106d9578063c87b56dd146107ac57610181565b80636352211e1461054f57806370a08231146105795780637d64bcb4146105ac578063879499f4146105c157806395d89b4114610674578063964585df1461068957610181565b806323b872dd1161013e5780634707d000116101185780634707d000146104095780634f558e79146104445780634f6ccce71461046e5780635ba13abf1461049857610181565b806323b872dd1461034a5780632f745c591461038d57806342842e0e146103c657610181565b806301ffc9a7146101bb57806305d2035b1461020357806306fdde0314610218578063081812fc146102a2578063095ea7b3146102e857806318160ddd14610323575b604051600160e51b62461bcd028152600401808060200182810382526029815260200180611a076029913960400191505060405180910390fd5b3480156101c757600080fd5b506101ef600480360360208110156101de57600080fd5b50356001600160e01b031916610874565b604080519115158252519081900360200190f35b34801561020f57600080fd5b506101ef610897565b34801561022457600080fd5b5061022d6108a7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506102cc600480360360208110156102c557600080fd5b503561093e565b604080516001600160a01b039092168252519081900360200190f35b3480156102f457600080fd5b506103216004803603604081101561030b57600080fd5b506001600160a01b03813516906020013561096e565b005b34801561032f57600080fd5b50610338610a1b565b60408051918252519081900360200190f35b34801561035657600080fd5b506103216004803603606081101561036d57600080fd5b506001600160a01b03813581169160208101359091169060400135610a21565b34801561039957600080fd5b50610338600480360360408110156103b057600080fd5b506001600160a01b038135169060200135610a44565b3480156103d257600080fd5b50610321600480360360608110156103e957600080fd5b506001600160a01b03813581169160208101359091169060400135610ac6565b34801561041557600080fd5b506103216004803603604081101561042c57600080fd5b506001600160a01b0381358116916020013516610ae1565b34801561045057600080fd5b506101ef6004803603602081101561046757600080fd5b5035610c27565b34801561047a57600080fd5b506103386004803603602081101561049157600080fd5b5035610c38565b3480156104a457600080fd5b50610321600480360360408110156104bb57600080fd5b813591908101906040810160208201356401000000008111156104dd57600080fd5b8201836020820111156104ef57600080fd5b8035906020019184602083028401116401000000008311171561051157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c9c945050505050565b34801561055b57600080fd5b506102cc6004803603602081101561057257600080fd5b5035610ddd565b34801561058557600080fd5b506103386004803603602081101561059c57600080fd5b50356001600160a01b0316610dff565b3480156105b857600080fd5b50610321610e30565b3480156105cd57600080fd5b50610321600480360360208110156105e457600080fd5b8101906020810181356401000000008111156105ff57600080fd5b82018360208201111561061157600080fd5b8035906020019184600183028401116401000000008311171561063357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ea2945050505050565b34801561068057600080fd5b5061022d610f05565b34801561069557600080fd5b5061022d610f66565b3480156106aa57600080fd5b50610321600480360360408110156106c157600080fd5b506001600160a01b0381351690602001351515610ff4565b3480156106e557600080fd5b50610321600480360360808110156106fc57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073757600080fd5b82018360208201111561074957600080fd5b8035906020019184600183028401116401000000008311171561076b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611078945050505050565b3480156107b857600080fd5b5061022d600480360360208110156107cf57600080fd5b5035611098565b3480156107e257600080fd5b506102cc6111c8565b3480156107f757600080fd5b506102cc6111d7565b34801561080c57600080fd5b506101ef6004803603604081101561082357600080fd5b506001600160a01b03813581169160200135166111e6565b34801561084757600080fd5b506103216004803603604081101561085e57600080fd5b50803590602001356001600160a01b0316611214565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b600d54600160a01b900460ff1681565b60088054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b820191906000526020600020905b81548152906001019060200180831161091657829003601f168201915b505050505090505b90565b600061094982611326565b61095257600080fd5b506000908152600260205260409020546001600160a01b031690565b600061097982610ddd565b9050806001600160a01b0316836001600160a01b0316141561099a57600080fd5b336001600160a01b03821614806109b657506109b681336111e6565b6109bf57600080fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60075490565b610a2b3382611343565b610a3457600080fd5b610a3f8383836113a2565b505050565b6000610a4f83610dff565b8210610a8f57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180611a93602c913960400191505060405180910390fd5b6001600160a01b0383166000908152600560205260409020805483908110610ab357fe5b9060005260206000200154905092915050565b610a3f83838360405180602001604052806000815250611078565b600d546001600160a01b03163314610b2d57604051600160e51b62461bcd028152600401808060200182810382526036815260200180611a5d6036913960400191505060405180910390fd5b60408051600160e01b6370a0823102815230600482015290516001600160a01b0384169163a9059cbb91849184916370a0823191602480820192602092909190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b50516040805163ffffffff851660e01b81526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610bf757600080fd5b505af1158015610c0b573d6000803e3d6000fd5b505050506040513d6020811015610c2157600080fd5b50505050565b6000610c3282611326565b92915050565b6000610c42610a1b565b8210610c985760408051600160e51b62461bcd02815260206004820152601760248201527f496e646578206973206f7574206f6620626f756e64732e000000000000000000604482015290519081900360640190fd5b5090565b600c546001600160a01b03163314610ce857604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff1615610d3457604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b811580610d555750610d55610d5083600163ffffffff6113c116565b611326565b610da95760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b805160005b81811015610c2157610dd5838281518110610dc557fe5b60200260200101518286016113d6565b600101610dae565b6000818152600160205260408120546001600160a01b031680610c3257600080fd5b60006001600160a01b038216610e1457600080fd5b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b03163314610e7c57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d805474ff00000000000000000000000000000000000000001916600160a01b179055565b600c546001600160a01b03163314610eee57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b8051610f0190600b906020840190611952565b5050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610fec5780601f10610fc157610100808354040283529160200191610fec565b820191906000526020600020905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b6001600160a01b03821633141561100a57600080fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b611083848484610a21565b61108f84848484611405565b610c2157600080fd5b60606110a382611326565b6110f75760408051600160e51b62461bcd02815260206004820152601860248201527f546f6b656e20494420646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b600b6111028361153e565b60405160200180838054600181600116156101000203166002900480156111605780601f1061113e576101008083540402835291820191611160565b820191906000526020600020905b81548152906001019060200180831161114c575b5050825160208401908083835b6020831061118c5780518252601f19909201916020918201910161116d565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b600d546001600160a01b031681565b600c546001600160a01b031681565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600c546001600160a01b0316331461126057604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff16156112ac57604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b8115806112c857506112c8610d5083600163ffffffff6113c116565b61131c5760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b610f0181836113d6565b6000908152600160205260409020546001600160a01b0316151590565b60008061134f83610ddd565b9050806001600160a01b0316846001600160a01b0316148061138a5750836001600160a01b031661137f8461093e565b6001600160a01b0316145b8061139a575061139a81856111e6565b949350505050565b6113ad838383611604565b6113b78382611711565b610a3f8282611806565b6000828211156113d057600080fd5b50900390565b6113e08282611844565b6113ea8282611806565b6007546113fe90600163ffffffff6118f616565b6007555050565b6000611419846001600160a01b031661190f565b6114255750600161139a565b604051600160e11b630a85bd0102815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b838110156114a257818101518382015260200161148a565b50505050905090810190601f1680156114cf5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156114f157600080fd5b505af1158015611505573d6000803e3d6000fd5b505050506040513d602081101561151b57600080fd5b50516001600160e01b031916600160e11b630a85bd010214915050949350505050565b60608161156657506040805180820190915260018152600160fc1b6003026020820152610892565b818060005b811561157f57600101600a8204915061156b565b6060816040519080825280601f01601f1916602001820160405280156115ac576020820181803883390190505b50905060001982015b84156115fa57600a850660300160f81b828280600190039350815181106115d857fe5b60200101906001600160f81b031916908160001a905350600a850494506115b5565b5095945050505050565b826001600160a01b031661161782610ddd565b6001600160a01b03161461162a57600080fd5b6001600160a01b03821661163d57600080fd5b61164681611915565b6001600160a01b03831660009081526003602052604090205461167090600163ffffffff6113c116565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546116a690600163ffffffff6118f616565b6001600160a01b038084166000818152600360209081526040808320959095558582526001905283812080546001600160a01b031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b03821660009081526005602052604081205461173b90600163ffffffff6113c116565b6000838152600660205260409020549091508082146117d6576001600160a01b038416600090815260056020526040812080548490811061177857fe5b906000526020600020015490508060056000876001600160a01b03166001600160a01b0316815260200190815260200160002083815481106117b657fe5b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b03841660009081526005602052604090208054906117ff9060001983016119cc565b5050505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b6001600160a01b03821661185757600080fd5b61186081611326565b1561186a57600080fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b03881690811790915584526003909152909120546118ab916118f6565b6001600160a01b0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282018381101561190857600080fd5b9392505050565b3b151590565b6000818152600260205260409020546001600160a01b03161561194f57600081815260026020526040902080546001600160a01b03191690555b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061199357805160ff19168380011785556119c0565b828001600101855582156119c0579182015b828111156119c05782518255916020019190600101906119a5565b50610c989291506119ec565b815481835581811115610a3f57600083815260209020610a3f9181019083015b61093b91905b80821115610c9857600081556001016119f256fe54686520636f6e74726163742063616e6e6f74207265636569766520455448207061796d656e74732e637265617465436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e746f6b656e41737369676e6d656e74436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e496e64657820697320686967686572207468616e206e756d626572206f6620746f6b656e73206f776e65642e546869732063616c6c206f6e6c7920776f726b73207768656e206d696e74696e67206973206e6f742066696e69736865642ea165627a7a72305820881eff59ea96168a047f88d1a174a3522c0147cee065cf96dce362140363964f002968747470733a2f2f746573742e63727970746f2e706f73742e61742f4353312f6d6574612f000000000000000000000000d39a7ad8ebe8c57aab85f868fe0d454e1aa5349e000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
Deployed Bytecode
0x6080604052600436106101815760003560e01c80636352211e116100d1578063a22cb4651161008a578063c8c2ed5411610064578063c8c2ed54146107d6578063e66075c2146107eb578063e985e9c514610800578063f01fe6921461083b57610181565b8063a22cb4651461069e578063b88d4fde146106d9578063c87b56dd146107ac57610181565b80636352211e1461054f57806370a08231146105795780637d64bcb4146105ac578063879499f4146105c157806395d89b4114610674578063964585df1461068957610181565b806323b872dd1161013e5780634707d000116101185780634707d000146104095780634f558e79146104445780634f6ccce71461046e5780635ba13abf1461049857610181565b806323b872dd1461034a5780632f745c591461038d57806342842e0e146103c657610181565b806301ffc9a7146101bb57806305d2035b1461020357806306fdde0314610218578063081812fc146102a2578063095ea7b3146102e857806318160ddd14610323575b604051600160e51b62461bcd028152600401808060200182810382526029815260200180611a076029913960400191505060405180910390fd5b3480156101c757600080fd5b506101ef600480360360208110156101de57600080fd5b50356001600160e01b031916610874565b604080519115158252519081900360200190f35b34801561020f57600080fd5b506101ef610897565b34801561022457600080fd5b5061022d6108a7565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561026757818101518382015260200161024f565b50505050905090810190601f1680156102945780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102ae57600080fd5b506102cc600480360360208110156102c557600080fd5b503561093e565b604080516001600160a01b039092168252519081900360200190f35b3480156102f457600080fd5b506103216004803603604081101561030b57600080fd5b506001600160a01b03813516906020013561096e565b005b34801561032f57600080fd5b50610338610a1b565b60408051918252519081900360200190f35b34801561035657600080fd5b506103216004803603606081101561036d57600080fd5b506001600160a01b03813581169160208101359091169060400135610a21565b34801561039957600080fd5b50610338600480360360408110156103b057600080fd5b506001600160a01b038135169060200135610a44565b3480156103d257600080fd5b50610321600480360360608110156103e957600080fd5b506001600160a01b03813581169160208101359091169060400135610ac6565b34801561041557600080fd5b506103216004803603604081101561042c57600080fd5b506001600160a01b0381358116916020013516610ae1565b34801561045057600080fd5b506101ef6004803603602081101561046757600080fd5b5035610c27565b34801561047a57600080fd5b506103386004803603602081101561049157600080fd5b5035610c38565b3480156104a457600080fd5b50610321600480360360408110156104bb57600080fd5b813591908101906040810160208201356401000000008111156104dd57600080fd5b8201836020820111156104ef57600080fd5b8035906020019184602083028401116401000000008311171561051157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610c9c945050505050565b34801561055b57600080fd5b506102cc6004803603602081101561057257600080fd5b5035610ddd565b34801561058557600080fd5b506103386004803603602081101561059c57600080fd5b50356001600160a01b0316610dff565b3480156105b857600080fd5b50610321610e30565b3480156105cd57600080fd5b50610321600480360360208110156105e457600080fd5b8101906020810181356401000000008111156105ff57600080fd5b82018360208201111561061157600080fd5b8035906020019184600183028401116401000000008311171561063357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ea2945050505050565b34801561068057600080fd5b5061022d610f05565b34801561069557600080fd5b5061022d610f66565b3480156106aa57600080fd5b50610321600480360360408110156106c157600080fd5b506001600160a01b0381351690602001351515610ff4565b3480156106e557600080fd5b50610321600480360360808110156106fc57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073757600080fd5b82018360208201111561074957600080fd5b8035906020019184600183028401116401000000008311171561076b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611078945050505050565b3480156107b857600080fd5b5061022d600480360360208110156107cf57600080fd5b5035611098565b3480156107e257600080fd5b506102cc6111c8565b3480156107f757600080fd5b506102cc6111d7565b34801561080c57600080fd5b506101ef6004803603604081101561082357600080fd5b506001600160a01b03813581169160200135166111e6565b34801561084757600080fd5b506103216004803603604081101561085e57600080fd5b50803590602001356001600160a01b0316611214565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b600d54600160a01b900460ff1681565b60088054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b820191906000526020600020905b81548152906001019060200180831161091657829003601f168201915b505050505090505b90565b600061094982611326565b61095257600080fd5b506000908152600260205260409020546001600160a01b031690565b600061097982610ddd565b9050806001600160a01b0316836001600160a01b0316141561099a57600080fd5b336001600160a01b03821614806109b657506109b681336111e6565b6109bf57600080fd5b60008281526002602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60075490565b610a2b3382611343565b610a3457600080fd5b610a3f8383836113a2565b505050565b6000610a4f83610dff565b8210610a8f57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180611a93602c913960400191505060405180910390fd5b6001600160a01b0383166000908152600560205260409020805483908110610ab357fe5b9060005260206000200154905092915050565b610a3f83838360405180602001604052806000815250611078565b600d546001600160a01b03163314610b2d57604051600160e51b62461bcd028152600401808060200182810382526036815260200180611a5d6036913960400191505060405180910390fd5b60408051600160e01b6370a0823102815230600482015290516001600160a01b0384169163a9059cbb91849184916370a0823191602480820192602092909190829003018186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d6020811015610bab57600080fd5b50516040805163ffffffff851660e01b81526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015610bf757600080fd5b505af1158015610c0b573d6000803e3d6000fd5b505050506040513d6020811015610c2157600080fd5b50505050565b6000610c3282611326565b92915050565b6000610c42610a1b565b8210610c985760408051600160e51b62461bcd02815260206004820152601760248201527f496e646578206973206f7574206f6620626f756e64732e000000000000000000604482015290519081900360640190fd5b5090565b600c546001600160a01b03163314610ce857604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff1615610d3457604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b811580610d555750610d55610d5083600163ffffffff6113c116565b611326565b610da95760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b805160005b81811015610c2157610dd5838281518110610dc557fe5b60200260200101518286016113d6565b600101610dae565b6000818152600160205260408120546001600160a01b031680610c3257600080fd5b60006001600160a01b038216610e1457600080fd5b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b03163314610e7c57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d805474ff00000000000000000000000000000000000000001916600160a01b179055565b600c546001600160a01b03163314610eee57604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b8051610f0190600b906020840190611952565b5050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109335780601f1061090857610100808354040283529160200191610933565b600b805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610fec5780601f10610fc157610100808354040283529160200191610fec565b820191906000526020600020905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b6001600160a01b03821633141561100a57600080fd5b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b611083848484610a21565b61108f84848484611405565b610c2157600080fd5b60606110a382611326565b6110f75760408051600160e51b62461bcd02815260206004820152601860248201527f546f6b656e20494420646f6573206e6f742065786973742e0000000000000000604482015290519081900360640190fd5b600b6111028361153e565b60405160200180838054600181600116156101000203166002900480156111605780601f1061113e576101008083540402835291820191611160565b820191906000526020600020905b81548152906001019060200180831161114c575b5050825160208401908083835b6020831061118c5780518252601f19909201916020918201910161116d565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529050919050565b600d546001600160a01b031681565b600c546001600160a01b031681565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600c546001600160a01b0316331461126057604051600160e51b62461bcd02815260040180806020018281038252602d815260200180611a30602d913960400191505060405180910390fd5b600d54600160a01b900460ff16156112ac57604051600160e51b62461bcd028152600401808060200182810382526032815260200180611abf6032913960400191505060405180910390fd5b8115806112c857506112c8610d5083600163ffffffff6113c116565b61131c5760408051600160e51b62461bcd02815260206004820152601f60248201527f50726576696f757320746f6b656e2049442068617320746f2065786973742e00604482015290519081900360640190fd5b610f0181836113d6565b6000908152600160205260409020546001600160a01b0316151590565b60008061134f83610ddd565b9050806001600160a01b0316846001600160a01b0316148061138a5750836001600160a01b031661137f8461093e565b6001600160a01b0316145b8061139a575061139a81856111e6565b949350505050565b6113ad838383611604565b6113b78382611711565b610a3f8282611806565b6000828211156113d057600080fd5b50900390565b6113e08282611844565b6113ea8282611806565b6007546113fe90600163ffffffff6118f616565b6007555050565b6000611419846001600160a01b031661190f565b6114255750600161139a565b604051600160e11b630a85bd0102815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b838110156114a257818101518382015260200161148a565b50505050905090810190601f1680156114cf5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156114f157600080fd5b505af1158015611505573d6000803e3d6000fd5b505050506040513d602081101561151b57600080fd5b50516001600160e01b031916600160e11b630a85bd010214915050949350505050565b60608161156657506040805180820190915260018152600160fc1b6003026020820152610892565b818060005b811561157f57600101600a8204915061156b565b6060816040519080825280601f01601f1916602001820160405280156115ac576020820181803883390190505b50905060001982015b84156115fa57600a850660300160f81b828280600190039350815181106115d857fe5b60200101906001600160f81b031916908160001a905350600a850494506115b5565b5095945050505050565b826001600160a01b031661161782610ddd565b6001600160a01b03161461162a57600080fd5b6001600160a01b03821661163d57600080fd5b61164681611915565b6001600160a01b03831660009081526003602052604090205461167090600163ffffffff6113c116565b6001600160a01b0380851660009081526003602052604080822093909355908416815220546116a690600163ffffffff6118f616565b6001600160a01b038084166000818152600360209081526040808320959095558582526001905283812080546001600160a01b031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b03821660009081526005602052604081205461173b90600163ffffffff6113c116565b6000838152600660205260409020549091508082146117d6576001600160a01b038416600090815260056020526040812080548490811061177857fe5b906000526020600020015490508060056000876001600160a01b03166001600160a01b0316815260200190815260200160002083815481106117b657fe5b600091825260208083209091019290925591825260069052604090208190555b6001600160a01b03841660009081526005602052604090208054906117ff9060001983016119cc565b5050505050565b6001600160a01b0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b6001600160a01b03821661185757600080fd5b61186081611326565b1561186a57600080fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b03881690811790915584526003909152909120546118ab916118f6565b6001600160a01b0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282018381101561190857600080fd5b9392505050565b3b151590565b6000818152600260205260409020546001600160a01b03161561194f57600081815260026020526040902080546001600160a01b03191690555b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061199357805160ff19168380011785556119c0565b828001600101855582156119c0579182015b828111156119c05782518255916020019190600101906119a5565b50610c989291506119ec565b815481835581811115610a3f57600083815260209020610a3f9181019083015b61093b91905b80821115610c9857600081556001016119f256fe54686520636f6e74726163742063616e6e6f74207265636569766520455448207061796d656e74732e637265617465436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e746f6b656e41737369676e6d656e74436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2e496e64657820697320686967686572207468616e206e756d626572206f6620746f6b656e73206f776e65642e546869732063616c6c206f6e6c7920776f726b73207768656e206d696e74696e67206973206e6f742066696e69736865642ea165627a7a72305820881eff59ea96168a047f88d1a174a3522c0147cee065cf96dce362140363964f0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d39a7ad8ebe8c57aab85f868fe0d454e1aa5349e000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
-----Decoded View---------------
Arg [0] : _createControl (address): 0xd39a7ad8ebE8C57aaB85f868fE0d454e1Aa5349E
Arg [1] : _tokenAssignmentControl (address): 0x596E620E175C2C37A5f35A41d9F2305A991fFc89
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d39a7ad8ebe8c57aab85f868fe0d454e1aa5349e
Arg [1] : 000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
Deployed Bytecode Sourcemap
31084:4269:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35291:51;;-1:-1:-1;;;;;35291:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7277:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7277:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7277:135:0;-1:-1:-1;;;;;;7277:135:0;;:::i;:::-;;;;;;;;;;;;;;;;;;31310:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31310:35:0;;;:::i;28314:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28314:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28314:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11370:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11370:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11370:154:0;;:::i;:::-;;;;-1:-1:-1;;;;;11370:154:0;;;;;;;;;;;;;;10778:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10778:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10778:299:0;;;;;;;;:::i;:::-;;22062:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22062:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;12960:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12960:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12960:184:0;;;;;;;;;;;;;;;;;:::i;21671:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21671:233:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21671:233:0;;;;;;;;:::i;13797:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13797:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13797:134:0;;;;;;;;;;;;;;;;;:::i;34989:193::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34989:193:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;34989:193:0;;;;;;;;;;:::i;34080:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34080:102:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34080:102:0;;:::i;22500:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22500:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22500:166:0;;:::i;32819:555::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32819:555:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32819:555:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;32819:555:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32819:555:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32819:555:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32819:555:0;;-1:-1:-1;32819:555:0;;-1:-1:-1;;;;;32819:555:0:i;10166:181::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10166:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10166:181:0;;:::i;9782:153::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9782:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9782:153:0;-1:-1:-1;;;;;9782:153:0;;:::i;33427:106::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33427:106:0;;;:::i;33581:127::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33581:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33581:127:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;33581:127:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;33581:127:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;33581:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33581:127:0;;-1:-1:-1;33581:127:0;;-1:-1:-1;;;;;33581:127:0:i;28513:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28513:89:0;;;:::i;31197:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31197:21:0;;;:::i;11824:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11824:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11824:217:0;;;;;;;;;;:::i;14650:214::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14650:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;14650:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14650:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14650:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14650:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14650:214:0;;-1:-1:-1;14650:214:0;;-1:-1:-1;;;;;14650:214:0:i;33788:233::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33788:233:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33788:233:0;;:::i;31264:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31264:37:0;;;:::i;31227:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31227:28:0;;;:::i;12370:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12370:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12370:147:0;;;;;;;;;;:::i;32323:427::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32323:427:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32323:427:0;;;;;;-1:-1:-1;;;;;32323:427:0;;:::i;7277:135::-;-1:-1:-1;;;;;;7371:33:0;;7347:4;7371:33;;;;;;;;;;;;;7277:135;;;;:::o;31310:35::-;;;-1:-1:-1;;;31310:35:0;;;;;:::o;28314:85::-;28386:5;28379:12;;;;;;;;-1:-1:-1;;28379:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28353:13;;28379:12;;28386:5;;28379:12;;28386:5;28379:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28314:85;;:::o;11370:154::-;11429:7;11457:16;11465:7;11457;:16::i;:::-;11449:25;;;;;;-1:-1:-1;11492:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11492:24:0;;11370:154::o;10778:299::-;10842:13;10858:16;10866:7;10858;:16::i;:::-;10842:32;;10899:5;-1:-1:-1;;;;;10893:11:0;:2;-1:-1:-1;;;;;10893:11:0;;;10885:20;;;;;;10924:10;-1:-1:-1;;;;;10924:19:0;;;;:58;;;10947:35;10964:5;10971:10;10947:16;:35::i;:::-;10916:67;;;;;;10996:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;10996:29:0;-1:-1:-1;;;;;10996:29:0;;;;;;;;;11041:28;;10996:24;;11041:28;;;;;;;10778:299;;;:::o;22062:91::-;22133:12;;22062:91;:::o;12960:184::-;13051:39;13070:10;13082:7;13051:18;:39::i;:::-;13043:48;;;;;;13104:32;13118:4;13124:2;13128:7;13104:13;:32::i;:::-;12960:184;;;:::o;21671:233::-;21751:7;21787:16;21797:5;21787:9;:16::i;:::-;21779:5;:24;21771:81;;;;-1:-1:-1;;;;;21771:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21870:19:0;;;;;;:12;:19;;;;;:26;;21890:5;;21870:26;;;;;;;;;;;;;;21863:33;;21671:233;;;;:::o;13797:134::-;13884:39;13901:4;13907:2;13911:7;13884:39;;;;;;;;;;;;:16;:39::i;34989:193::-;31845:22;;-1:-1:-1;;;;;31845:22:0;31831:10;:36;31823:103;;;;-1:-1:-1;;;;;31823:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35135:38;;;-1:-1:-1;;;;;35135:38:0;;35167:4;35135:38;;;;;;-1:-1:-1;;;;;35107:22:0;;;;;35130:3;;35107:22;;35135:23;;:38;;;;;;;;;;;;;;;35107:22;35135:38;;;5:2:-1;;;;30:1;27;20:12;5:2;35135:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35135:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35135:38:0;35107:67;;;;;;;;;;-1:-1:-1;;;;;35107:67:0;;;;;;;;;;;;;;;;;;;;35135:38;;35107:67;;;;;;;-1:-1:-1;35107:67:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;35107:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35107:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;34989:193:0:o;34080:102::-;34134:4;34158:16;34166:7;34158;:16::i;:::-;34151:23;34080:102;-1:-1:-1;;34080:102:0:o;22500:166::-;22558:7;22594:13;:11;:13::i;:::-;22586:5;:21;22578:57;;;;;-1:-1:-1;;;;;22578:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22653:5:0;22500:166::o;32819:555::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31999:15;;-1:-1:-1;;;31999:15:0;;;;:24;31991:87;;;;-1:-1:-1;;;;;31991:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33054:18;;;:51;;-1:-1:-1;33076:29:0;33084:20;:13;33102:1;33084:20;:17;:20;:::i;:::-;33076:7;:29::i;:::-;33046:95;;;;;-1:-1:-1;;;;;33046:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33172:14;;33152:17;33197:170;33221:9;33217:1;:13;33197:170;;;33319:36;33325:7;33333:1;33325:10;;;;;;;;;;;;;;33353:1;33337:13;:17;33319:5;:36::i;:::-;33232:3;;33197:170;;10166:181;10221:7;10257:20;;;:11;:20;;;;;;-1:-1:-1;;;;;10257:20:0;10296:19;10288:28;;;;;9782:153;9837:7;-1:-1:-1;;;;;9865:19:0;;9857:28;;;;;;-1:-1:-1;;;;;;9903:24:0;;;;;:17;:24;;;;;;;9782:153::o;33427:106::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33503:15;:22;;-1:-1:-1;;33503:22:0;-1:-1:-1;;;33503:22:0;;;33427:106::o;33581:127::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33679:21;;;;:7;;:21;;;;;:::i;:::-;;33581:127;:::o;28513:89::-;28587:7;28580:14;;;;;;;;-1:-1:-1;;28580:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28554:13;;28580:14;;28587:7;;28580:14;;28587:7;28580:14;;;;;;;;;;;;;;;;;;;;;;;;31197:21;;;;;;;;;;;;;;;-1:-1:-1;;31197:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11824:217::-;-1:-1:-1;;;;;11904:16:0;;11910:10;11904:16;;11896:25;;;;;;11951:10;11932:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;11932:34:0;;;;;;;;;;;;:45;;-1:-1:-1;;11932:45:0;;;;;;;;;;11993:40;;;;;;;11932:34;;11951:10;11993:40;;;;;;;;;;;11824:217;;:::o;14650:214::-;14757:31;14770:4;14776:2;14780:7;14757:12;:31::i;:::-;14807:48;14830:4;14836:2;14840:7;14849:5;14807:22;:48::i;:::-;14799:57;;;;;33788:233;33857:13;33896:17;33904:8;33896:7;:17::i;:::-;33888:54;;;;;-1:-1:-1;;;;;33888:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33984:7;33993:18;34002:8;33993;:18::i;:::-;33967:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33967:45:0;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;33967:45:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;33967:45:0;;;33953:60;;33788:233;;;:::o;31264:37::-;;;-1:-1:-1;;;;;31264:37:0;;:::o;31227:28::-;;;-1:-1:-1;;;;;31227:28:0;;:::o;12370:147::-;-1:-1:-1;;;;;12474:25:0;;;12450:4;12474:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12370:147::o;32323:427::-;31683:13;;-1:-1:-1;;;;;31683:13:0;31669:10;:27;31661:85;;;;-1:-1:-1;;;;;31661:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31999:15;;-1:-1:-1;;;31999:15:0;;;;:24;31991:87;;;;-1:-1:-1;;;;;31991:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32538:13;;;:41;;-1:-1:-1;32555:24:0;32563:15;:8;32576:1;32563:15;:12;:15;:::i;32555:24::-;32530:85;;;;;-1:-1:-1;;;;;32530:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32719:23;32725:6;32733:8;32719:5;:23::i;15060:155::-;15117:4;15150:20;;;:11;:20;;;;;;-1:-1:-1;;;;;15150:20:0;15188:19;;;15060:155::o;15587:249::-;15672:4;15689:13;15705:16;15713:7;15705;:16::i;:::-;15689:32;;15751:5;-1:-1:-1;;;;;15740:16:0;:7;-1:-1:-1;;;;;15740:16:0;;:51;;;;15784:7;-1:-1:-1;;;;;15760:31:0;:20;15772:7;15760:11;:20::i;:::-;-1:-1:-1;;;;;15760:31:0;;15740:51;:87;;;;15795:32;15812:5;15819:7;15795:16;:32::i;:::-;15732:96;15587:249;-1:-1:-1;;;;15587:249:0:o;23051:245::-;23137:38;23157:4;23163:2;23167:7;23137:19;:38::i;:::-;23188:47;23221:4;23227:7;23188:32;:47::i;:::-;23248:40;23276:2;23280:7;23248:27;:40::i;4576:150::-;4634:7;4667:1;4662;:6;;4654:15;;;;;;-1:-1:-1;4692:5:0;;;4576:150::o;23559:196::-;23623:24;23635:2;23639:7;23623:11;:24::i;:::-;23660:40;23688:2;23692:7;23660:27;:40::i;:::-;23728:12;;:19;;23745:1;23728:19;:16;:19;:::i;:::-;23713:12;:34;-1:-1:-1;;23559:196:0:o;18578:356::-;18700:4;18727:15;:2;-1:-1:-1;;;;;18727:13:0;;:15::i;:::-;18722:60;;-1:-1:-1;18766:4:0;18759:11;;18722:60;18810:70;;-1:-1:-1;;;;;18810:70:0;;18847:10;18810:70;;;;;;-1:-1:-1;;;;;18810:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18794:13;;18810:36;;;;;;18847:10;;18859:4;;18865:7;;18874:5;;18810:70;;;;;;;;;;;18794:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18810:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18810:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18810:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18810:70:0;-1:-1:-1;;;;;;18899:26:0;-1:-1:-1;;;;;18899:26:0;;-1:-1:-1;;18578:356:0;;;;;;:::o;34309:491::-;34373:13;34408:8;34404:24;;-1:-1:-1;34418:10:0;;;;;;;;;;;;-1:-1:-1;;;;;34418:10:0;;;;;;34404:24;34448:3;;34439:6;34505:71;34512:6;;34505:71;;34534:8;;34562:2;34557:7;;;;34505:71;;;34586:17;34616:6;34606:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;34606:17:0;87:34:-1;135:17;;-1:-1;34606:17:0;-1:-1:-1;34586:37:0;-1:-1:-1;;;34643:10:0;;34664:99;34671:6;;34664:99;;34725:2;34721:1;:6;34716:2;:11;34705:24;;34693:4;34698:3;;;;;;;34693:9;;;;;;;;;;;:36;-1:-1:-1;;;;;34693:36:0;;;;;;;;-1:-1:-1;34749:2:0;34744:7;;;;34664:99;;;-1:-1:-1;34787:4:0;34309:491;-1:-1:-1;;;;;34309:491:0:o;17630:414::-;17744:4;-1:-1:-1;;;;;17724:24:0;:16;17732:7;17724;:16::i;:::-;-1:-1:-1;;;;;17724:24:0;;17716:33;;;;;;-1:-1:-1;;;;;17768:16:0;;17760:25;;;;;;17798:23;17813:7;17798:14;:23::i;:::-;-1:-1:-1;;;;;17860:23:0;;;;;;:17;:23;;;;;;:30;;17888:1;17860:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;17834:23:0;;;;;;;:17;:23;;;;;;:56;;;;17925:21;;;;;;;:28;;17951:1;17925:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;17901:21:0;;;;;;;:17;:21;;;;;;;;:52;;;;17966:20;;;:11;:20;;;;;:25;;-1:-1:-1;;;;;;17966:25:0;;;;;18009:27;;17978:7;;17901:21;;18009:27;;;;;;17630:414;;;:::o;25604:1148::-;-1:-1:-1;;;;;25895:18:0;;25870:22;25895:18;;;:12;:18;;;;;:25;:32;;25925:1;25895:32;:29;:32;:::i;:::-;25938:18;25959:26;;;:17;:26;;;;;;25870:57;;-1:-1:-1;26092:28:0;;;26088:328;;-1:-1:-1;;;;;26159:18:0;;26137:19;26159:18;;;:12;:18;;;;;:34;;26178:14;;26159:34;;;;;;;;;;;;;;26137:56;;26243:11;26210:12;:18;26223:4;-1:-1:-1;;;;;26210:18:0;-1:-1:-1;;;;;26210:18:0;;;;;;;;;;;;26229:10;26210:30;;;;;;;;;;;;;;;;;;;:44;;;;26327:30;;;:17;:30;;;;;:43;;;26088:328;-1:-1:-1;;;;;26505:18:0;;;;;;:12;:18;;;;;:27;;;;;-1:-1:-1;;26505:27:0;;;:::i;:::-;;25604:1148;;;;:::o;24793:186::-;-1:-1:-1;;;;;24907:16:0;;;;;;;:12;:16;;;;;;;;:23;;24878:26;;;:17;:26;;;;;:52;;;24941:16;;;39:1:-1;23:18;;45:23;;24941:30:0;;;;;;;;24793:186::o;16087:286::-;-1:-1:-1;;;;;16159:16:0;;16151:25;;;;;;16196:16;16204:7;16196;:16::i;:::-;16195:17;16187:26;;;;;;16226:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;;;;;16226:25:0;-1:-1:-1;;;;;16226:25:0;;;;;;;;16286:21;;:17;:21;;;;;;;:28;;:25;:28::i;:::-;-1:-1:-1;;;;;16262:21:0;;;;;;:17;:21;;;;;;:52;;;;16332:33;;16357:7;;16262:21;16332:33;;16262:21;;16332:33;16087:286;;:::o;4812:150::-;4870:7;4902:5;;;4926:6;;;;4918:15;;;;;;4953:1;4812:150;-1:-1:-1;;;4812:150:0:o;5789:627::-;6361:20;6400:8;;;5789:627::o;19101:175::-;19201:1;19165:24;;;:15;:24;;;;;;-1:-1:-1;;;;;19165:24:0;:38;19161:108;;19255:1;19220:24;;;:15;:24;;;;;:37;;-1:-1:-1;;;;;;19220:37:0;;;19161:108;19101:175;:::o;31084:4269::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31084:4269:0;;;-1:-1:-1;31084:4269:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://881eff59ea96168a047f88d1a174a3522c0147cee065cf96dce362140363964f
Loading...
Loading
Loading...
Loading
OVERVIEW
The innovative special stamp block connects the analogue world with the digital one.Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.