NFT Overview ​
The abbreviation ‘NFT’ stands for Non-Fungible Token which means that NFT is a unit of data stored on a blockchain that can be sold or traded like other tokens. Unlike other tokens all NFTs are unique and one NFT cannot be replaced with another. That is why NFTs are often called Uniqs
. In this document the NFTs can also be referred to as tokens.
The Ultra's eosio.nft.ft
smart contract defines a set of data structures (multi index tables, singletons) and a set of blockchain actions to manipulate the data structures. Both the data structures and the actions implement the supported set of NFT Use cases.
Info ​
NFT use cases describe what different users can do with NFTs. The text in bold represents actions, the text in italic represents blockchain accounts and the highlighted
text represents the related data structures or data structure elements. Please refer to the action description or data structure overview to obtain more information.
Token Factory Creation ​
PLEASE NOTE: Recall and Lockup feature will be disabled by default which means when creating new token factory, action will fail if you put any value for recall window or lockup time. This note will be removed when these features are enabled again.
The Asset Creator and the Asset Manager can create.b a token factory.
To issue a token, a token factory should be created first. For this version of eosio.nft.ft
only Ultra can be the Asset Creator and the Asset Manager. A token factory is a set of blockchain data which provides settings for the NFTs issued with the factory. During the creation process it is required to set up several token parameters which control the NFTs parameters and the lifecycle - the NFTs off-chain metadata, minimum prices, reselling timeframes etc. All these data is stored in the factory.b
table.
Issuing ​
The Asset Manager can issue.b a token either to the Asset Manager or to another Account.
The NFT issuance requires setting several parameters like the receiving Account and the amount of tokens. The issued NFTs receive a global unique ID and a token factory recorded serial (ordinal) number. The issued token is recorded into the Account's token.b
table. The issue.b action reads and updates the data in the factory.b
table.
Transferring ​
The token Owner can transfer tokens to another Account.
An NFT Owner can transfer their tokens to another Account. If the Account is listed on the conditionless_receivers
array of the token factory, no transfer checks are done. Otherwise the action is checked against the trading window and lock time limitations. The tables affected are token.b
scoped to the sender and receiver accounts. The factory.b
is read to obtain limitations.
Selling ​
The token Owner can resell tokens.
An NFT Owner can resell their tokens on the resale marketplace specifying the desirable price. A resale promoter fee can be specified, the resale promoter will receive a fraction of the received funds. This action is a subject to the trading window, minimal resale price and the lockup checks. The token ownership is verified using the token.b
table. The resale marketplace table is resale.a
.
Buying ​
An Account can buy a token ownership.
A blockchain Account can buy a token from the resale marketplace. This action is a subject to the trading window checks. The global and the token factory specific resale shares as well as the resale promoter are dealt with when the paid funds are transferred from the buer to the seller. The token is deduced from the Seller's token.b
and added to the Buyer's token.b
. The factory.b
and resale.a
are read to obtain the tradeable window, promoter and the shares info.
Cancelling resell ​
The token Owner can cancelresell tokens.
This action is only removes the token from the resale marketplace. The resale marketplace table is resale.a
.
Burning ​
The token Owner can burn tokens.
An NFT Owner can execute the burn action which removes the token from the resale marketplace (resale.a
), removes the token from the Owner account (token.b
) and updates the token factory existing_tokens_no
field (factory.b
).
NFT Service Use Cases ​
Recalling ​
The Asset Manager can recall tokens from an Account in case of fraudulent action or erroneous issue.
During the recall time window the Asset Manager can recall tokens from an Account in case of fraudulent action or erroneous issue or other cases that require tokens ownership be returned to the Asset Manager. If the token being recalled has entered the resell marketplace, the reselling of such token is canceled. The recall action affects factory.b
, resale.a
and token.b
tables.
Authorizing Another Minter ​
The Asset Manager or an Authorized Minter can authorize another Minter to issue tokens with a token factory with the authminter action.
Initially the Asset Manager can delegate their ability to issue NFTs to some other account Authorized Minter limited to issue up to the quantity of tokens. An Authorized Minter can re-delegate a part of their quantity to another Authorized Minter. The factory.a
table is read and authmintr.a
table is modified during this action.
Controlling Token Factory Lifecycle ​
The Asset Manager can stop issuing with or decommission a token factory.
The setstatus action lets the Asset Manager to control the lifecycle of the token factory. Only the factory.b
table is involved.
Updating the Token Factory Metadata ​
The Asset Manager can update the token factory metadata.
The setmeta.b action lets the Asset Manager to set the token factory metadata updating the factory.b
table.
Setting the conditionless receivers ​
The Asset Manager can set the token factory conditionless receivers.
The setconrecv action allows the Asset Manager to set the token factory conditional receivers - the accounts that can receive NFTs without checking for mintable window, lockup and other limitations. The action updates the factory.b
table.
Adding factory purchase options ​
The Asset Manager can add the factory first-hand purchase requirements
The setprchsreq.a/setprchsreq.b action allows the Asset Manager to set a purchase requirement for the factory which can then be used by any user to purchase a token from the factory directly using purchase.a action.
setprchsreq.a action is deprecated, we recommend using setprchsreq.b action.
Multiple purchase requirements can be specified for a single factory. In addition to a simple fungible token price (UOS or USD) asset manager can specify the price for an individual purchase option using uniqs from other factories. Those uniqs can be either burnt or transferred to a specified account or simply verify their presence.