What's a token?

  • Blockchains have a native coin/token that the chain is built with. These coins/tokens are required to execute transactions, send data, are rewards for mining, etc.
  • But it may be possible to encode additional metadata in the chain which represents a token.

Why use tokens?

  • Say you want to issue share of stocks to the many co-founders (different percentages) for your new startup company that is yet to be registered
  • In the Ethereum world, you can represent the shares in the form of “tokens” that can be sold, sold back to the company, transferred, etc.
  • You can create a “token contract” and deploy it in Ethereum blockchain
    • Then the tokens can be transferred, sold, etc.

ERC-721 standard

ERC-721 tokens

  • Provides basic functionality to track and transfer NFTs
  • NFTs can represent ownership over digital or physical assets.
  • NFTs are distinguishable and so the ownership of each one must be tracked separately
  • NFTs are about managing ownership of general digital assets

ERC-721 use-cases

  • Physical property — houses, unique artwork
  • Virtual collectables — unique pictures of kittens, collectable cards
  • “Negative value” assets — loans, burdens and other responsibilities

Why manage NFT on a blockchain?

  • Blockchain ensures long-term ownership, until sale.
  • Provides a trusted record of provenance (forgeries are evident)

ERC-721 Example

  • Digital art — opensea, foundation
  • Collector items — NBA top shots
  • Game items - horses (zed.run), axies
  • Metaverse - ENS, plots in a virtual land

ERC-721 Interface


      interface ERC721 /* is ERC165 */ {
        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) external view returns (uint256);
        function ownerOf(uint256 _tokenId) external view returns (address);
        function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
        function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
        function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
        function approve(address _approved, uint256 _tokenId) external payable;
        function setApprovalForAll(address _operator, bool _approved) external;
        function getApproved(uint256 _tokenId) external view returns (address);
        function isApprovedForAll(address _owner, address _operator) external view returns (bool);
     }

      /// @dev Note: the ERC-165 identifier for this interface is 0x150b7a02.
      interface ERC165 {
        function supportsInterface(bytes4 interfaceID) external 
        view returns (bool);
     }
    

ERC721 NFT Contract

ERC721 Required Interface

IERC721Metadata

ERC721 Contract with Metadata

IERC721Enumerable

ERC721 Contract with Enumerable

NFT Landscape

NFT Landscape : Publishers (Game)

  • Cryptofighters
  • Cryptokitties
  • Decentraland
  • Etherbots
  • Ethermon
  • Rare peppes
  • Spells of Genesis

NFT Landscape : Publishers (Non-Game)

  • Crafty
  • Superrare
  • Terra0
  • Unico

NFT Landscape : Marketplaces

  • OpenBazaar
  • Opensea
  • OpSkins
  • Rarebits

NFT Landscape : Infrastructure

  • Oxcert.org
  • Bitcrystals
  • Codex Protocol
  • Counterparty
  • Ethereum
  • Fanbits
  • Metamask
  • Mokens
  • Userfeeds
  • Wax
  • ZeppelinOS

Recommended Resources