Non-Fungible Tokens And Domains

Non-Fungible Tokens (NFTs)

Before understanding non-fungible tokens, let's consider a large number of stones on a beach. In the real world, every stone on a beach has a different weight, appearance and rock type. There are no two exactly identical stones. Also, stones cannot be easily combined together. Therefore, we say that every stone is ‘indivisible’ and ‘not to be combined’.

An example in blockchain is the CryptoKitties, which was once a hot game in the blockchain world. Each cat has unique numbers and attributes. An NFT is similar to an individual, stone, or blockchain cat. It is naturally different and unique in the real world, as are the NFTs in our system.

On-chain, NFTs are primarily used for tickets, real estate, game props, coupons, and income rights as well as many other assets and interests. On everiToken, the issue, management, and transfer of NFTs follow the authority tree model. NFTs are stored and calculated through our token-based model on everiToken chain. NFTs are the most distinctive type of token in the everiToken system.

Domains

Generally speaking, NFT Token is divided into different categories according to their different value types. We can categorize the same kind of NFT Token to form a Domain.

A domain has three kinds of authorization protocols: issue, transfer, manage:

issue refers to who has the authorization to issue a token in a given domain.

transfer denotes who has the authorization to transfer tokens in a given domain.

manage means who has the authorization to manage a given domain or to change the authorization of the domain.

A domain that begins with . is for specific use, such as .fungible, which is a special domain that manages fungible tokens.

Try NFTs via evtc

evtc is a command line tool that manages everiToken wallets and sends commands to the chain.

If you want to use our SDK for NFTs, please refer to Javascript SDK Reference.

You can also manage NFTs by calling HTTP API of everiToken directly (See API Reference for detail).

Create Domain

Create a domain named cookie:

    evtc domain create cookie EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr --payer EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr

Great! You just created a new domain named cookie! And EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr is cookie domain's issuer.

You will get the output like this:

Click to see full code example
    executed transaction: 301df994e24450afc16816c8c0f9c61e42aa15b36c46452f8358c37a14840777
    total elapsed: 9916 us
    total charge: 0.00000 S#1
    (1 of 1)
       action : newdomain
       domain : cookie
          key : .create
      elapsed : 9495 us
      details : 
    |->name : cookie
    |->creator : EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr
    |->issue : 
        |->name : issue
        |->threshold : 1
        |->authorizers : 
            |->ref : [A] EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr
            |->weight : 1
    |->transfer : 
        |->name : transfer
        |->threshold : 1
        |->authorizers : 
            |->ref : [G] .OWNER
            |->weight : 1
    |->manage : 
        |->name : manage
        |->threshold : 1
        |->authorizers : 
            |->ref : [A] EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr
            |->weight : 1

You can now query the domain you just created!

    evtc get domain cookie

This will result in:

Click to see full code example
    |->name : cookie
    |->creator : EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr
    |->create_time : 2018-08-30T02:27:03
    |->issue : 
        |->name : issue
        |->threshold : 1
        |->authorizers : 
            |->ref : [A] EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr
            |->weight : 1
    |->transfer : 
        |->name : transfer
        |->threshold : 1
        |->authorizers : 
            |->ref : [G] .OWNER
            |->weight : 1
    |->manage : 
        |->name : manage
        |->threshold : 1
        |->authorizers : 
            |->ref : [A] EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr
            |->weight : 1
    |->metas : (empty)
    |->address : EVT0000005X5qdvvvnpfuMNm7CabbLb3P6L2HJpmjyRT6UTiW8hDZ

Issue token

Issue token t1 t2 t3 in domain cookie:

evtc token issue cookie EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr -n t1 t2 t3 --payer EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr

You will get an output similar to this:

Click to see full code example
    executed transaction: 3947c11af79c645faab204bc678927e2dd826996fafbc9ea5c3a984390
    total elapsed: 412 us
    total charge: 0.00000 S#1
    (1 of 1)
       action : issuetoken
       domain : cookie
          key : .issue
      elapsed : 235 us
      details : 
    |->domain : cookie
    |->names : 
          |->t1
          |->t2
          |->t3
    |->owner : 
          |->EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr

Then you could check the token:

    evtc get token cookie t1

Output:

    |->domain : cookie
    |->name : t1
    |->owner : 
          |->EVT7JoY9nbkfWCx2opvUhS9pPmWbLjRuhNCmDTG971PVkhxvAzWWr
    |->metas : (empty)