# From NFT 1.0 to NFT 2.0: A Review of the Evolution of Non-Fungible Tokens
## 4 From NFT 1.0 to NFT 2.0
### Generativity and Randomness  
An important feature unique to NFTs 2.0 is dynamism. A dynamic non-fungible token (dNFT) [10] is an NFT whose metadata can be modified by smart contracts. Indeed, changes in a dNFT are based on conditions, and a smart contract is responsible for metadata changes. Metadata changes can be either off-chain or on-chain. For this reason, smart contracts provide instructions on how the dNFT's metadata should be changed given a triggering event based on external data through an oracle or an on-chain event [14]. A dNFT is minted by a smart contract with a set of metadata, usually provided by third-party services, such as web APIs, Internet of Things (IoT) devices, or any other source of verified data. A dNFT can be linked to multiple sources of data, documents or images. Currently, dNFTs can be both ERC-721 and ERC-1155, depending on the use case [64]. When tokens are built on the ERC-1155 standard, it creates a semi-fungible token set that has the same token ID for each token but is still different from any other set of tokens that exists. To create a dNFT, the initial NFT is minted using a specific smart contract. The same or another smart contract provides instructions to the dNFT regarding updating its metadata if specified external events trigger the change. The metadata can be updated by using blockchain data or oracles, which collect off-chain data. As shown in Figure 4, when a user asks for an NFT, the following steps summarise the actions needed. * First, an NFT request is sent to a smart contract, as shown in Figure 4, Step 1. * The smart contract processes the request according to its code. * The smart contract makes a call for on-chain data, and/or it uses an oracle to make a call for off-chain data, as highlighted in Figure 4, Step 2. The results obtained by these calls are then used to personalise the answer. * The smart contract then sends back the media necessary to show the current state of the NFT, as shown in Figure 4, Step 3. A dNFT essentially needs two pieces of information to know how to update metadata:  
* Providing the underlying NFT with instructions on when and how to change the metadata;
* Accessing relevant external data sources. Dynamic elements other than metadata changes can also exist, for instance, allowing dNFTs to be minted based on specific external conditions, such as minting a certain dNFT when a real-life team wins a game, and adding metadata to the NFT concerning how the game went. dNFTs can also contain \"hidden features\" generated by user interactions. For example, the transfer function may be disabled after scanning a QR code, which is useful for using NFTs as tickets. Concerning the oracles, they are a collection of nodes capable of validating or supplying external data. In the context of NFTs, the main purpose of oracles is to act as a bridge between the blockchain and an external source of information. For instance, an oracle can be used to modify an NFT according to a set of conditions provided by the  
Figure 4: Generativity and randomness in dNFTs. oracle. However, the usage of oracles can compromise the NFT because users trust that the oracle behaves correctly and that the data it supplies are correct. If it is not the case, the smart contract execution will produce erroneous results. Smart contracts expose ad hoc methods to change the pointer to metadata files for their NFTs, so that oracles can change the metadata autonomously [10]. For this reason, another way to introduce dynamism in the NFTs is through randomness. Randomness can be implemented using verifiable random functions (VRF), which is a provably fair and verifiable random number generator that enables smart contracts to access random values without compromising security or usability. Since VFR is verified, no one can influence the randomness in their favour, and the outcomes are verifiable on the blockchain.