<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: BlocOGs</title>
    <description>The latest articles on DEV Community by BlocOGs (@bloc_ogs).</description>
    <link>https://dev.to/bloc_ogs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F976244%2F03d36270-5200-40cd-9e7c-25bdd70ce44a.jpg</url>
      <title>DEV Community: BlocOGs</title>
      <link>https://dev.to/bloc_ogs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bloc_ogs"/>
    <language>en</language>
    <item>
      <title>Are you an Aspiring Web3 Developer? These 10 Tools Will Make Your Life Easy</title>
      <dc:creator>BlocOGs</dc:creator>
      <pubDate>Thu, 05 Jan 2023 15:07:28 +0000</pubDate>
      <link>https://dev.to/bloc_ogs/are-you-an-aspiring-web3-developer-these-10-tools-will-make-your-life-easy-1c5c</link>
      <guid>https://dev.to/bloc_ogs/are-you-an-aspiring-web3-developer-these-10-tools-will-make-your-life-easy-1c5c</guid>
      <description>&lt;p&gt;The fuss about web3 that stirred up in its initial days has quickly turned into how valuable the tech is for everyone. Be it NFTs, DeFi, DAOs, or other technology that falls under the web3 umbrella, the third generation of the internet has experienced immense growth as a whole and will continue to transcend beyond that. The rise of web3 also opened a myriad of working opportunities for everyone, especially for developers as blockchain development is one of the fastest-growing sectors. However, things get a little daunting when you’re just starting out in web3, considering the space is still in its infancy and discovering authentic resources online is not a breeze. &lt;/p&gt;

&lt;p&gt;But fret not! If you’re an aspiring web3 developer and in search of tools that can make your life easy, this guide is just for you. Stick with us till the end as we’re getting started. &lt;/p&gt;

&lt;h2&gt;
  
  
  Top 10 Tools You Must Know as a Web3 Developer
&lt;/h2&gt;

&lt;p&gt;As a web3 developer, there are certain tools that you must know like programming languages, frameworks,  testnets, wallets, etc., as these act as a base and you may need them from time to time. Let’s uncover all such and other necessary tools in the guide below. &lt;/p&gt;

&lt;h3&gt;
  
  
  Solidity - Programming Language
&lt;/h3&gt;

&lt;p&gt;Developed by Ethereum, Solidity is a high-end popular coding language that allows the development of smart contracts on various blockchain networks like Avalanche, BNB Smart Chain, Polygon, and more. It was proposed by the CTO of Ethereum, Gavin Wood, and was inspired by popular programming languages like C, C++, JavaScript, and Python. As a web3 developer, you can reinforce your portfolio by learning Solidity as smart contracts are already popular in the industry and a huge percentage of them are running on the Ethereum blockchain.&lt;/p&gt;

&lt;h4&gt;
  
  
  Let’s have a look at its other offerings:
&lt;/h4&gt;

&lt;p&gt;Like other programming languages, it also has functions, classes, variables, etc., to code the smart contract. &lt;br&gt;
Solidity is capable of forming machine-level code and compiling it on EVM or Ethereum Virtual Machine.&lt;br&gt;
Crowdfunding, blind auction, mortgages, voting are a few smart contract use cases.&lt;/p&gt;

&lt;p&gt;Solidity alternates such as Vyper and Rust also make a good choice. Note that Rust is not an EVM-compatible language but it still supports new chains like NEAR, Polkadot, Solana, and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Revise - Dynamic NFT Platform
&lt;/h3&gt;

&lt;p&gt;Dynamic NFTs are the next frontier of static NFTs. They can do much more than what standard NFTs are capable of and there’s no doubt that the next wave of NFTs will be dynamic. But do you wonder how to build such an NFT that has dynamic elements? Or how the process looks like? Well, it’s super fast, simple, and secure with Revise as we empower developers with a powerful back-end, a high-end SDK (Software Development Kit), and third-party integrations like Google Health and Ether Price for a better experience while creating them. &lt;/p&gt;

&lt;h4&gt;
  
  
  A few of their offerings are as follows:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Works across Ethereum Virtual Machine (EVM) chains&lt;/li&gt;
&lt;li&gt;Library of Integrations&lt;/li&gt;
&lt;li&gt;Works with any storage layer&lt;/li&gt;
&lt;li&gt;Benchmarked at 20,000 TPS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moreover, Revise also offers a free simulator that allows changing the properties, images, and automating your NFTs with ease. Try it for free now. &lt;/p&gt;

&lt;h3&gt;
  
  
  Truffle - Software Framework
&lt;/h3&gt;

&lt;p&gt;Building a dApp is not a cakewalk, especially when you’re handling everything on your own. But, luckily, there are software frameworks like Truffle that can easily create, test, and deploy smart contracts. Truffle is a JavaScript-based framework and comes with built-in smart contracts functionalities and other resources like libraries and tools to create dApps seamlessly. Smart contract management, interactive console, network management, automated contract testing are among a few of its attributes that eases the entire development process. It also offers a dApp development ecosystem called Truffle Suite that comes with three parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Truffle- The development environment that eases the dApp creation process &lt;/li&gt;
&lt;li&gt;Ganache- Testnet for testing your dApps/smart contracts first before making them live on mainnet &lt;/li&gt;
&lt;li&gt;Drizzle- A set of frontend libraries &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Let’s have a look at its other features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Automated contract testing support &lt;/li&gt;
&lt;li&gt;Allows direct contract communication with its interactive console &lt;/li&gt;
&lt;li&gt;Allows to deploy contracts on a host of public and private networks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also check Hardhat and Embark development frameworks  as they are good alternatives to Truffle.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web3.js - Ethereum JavaScript API
&lt;/h3&gt;

&lt;p&gt;Web3.js is an Ethereum JavaScript library that allows developers to interact with the Ethereum blockchain (both local and remote). It uses IPC, HTTP, or WebSocket for a smooth connection and allows users to call functions on smart contracts, sends ETH to different users, and gives access to smart contracts. A few of the most used functions that make it possible to interact with the Ethereum blockchain are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web3-eth: For Ethereum smart contracts and ecosystem&lt;/li&gt;
&lt;li&gt;Web3-bzz: Used for decentralized file storage&lt;/li&gt;
&lt;li&gt;Web3-shh: For the communication of p2p and broadcast&lt;/li&gt;
&lt;li&gt;Web3-utils: Provides a collection of dApps functions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  MetaMask - Web3 Wallet
&lt;/h3&gt;

&lt;p&gt;MetaMask is one of the most popular cryptocurrency wallets in the market. It can be used as a browser extension or a mobile application to store digital assets. It allows a secure way to protect your virtual assets with the use of private keys that should be exclusive to the owners only to avoid scams. Developers can use MetaMask to access Ethereum-based dApps, however, it isn’t only limited to that. MetaMask also acts as a gateway to several layer-2 blockchain ecosystems such as Polygon. &lt;/p&gt;

&lt;p&gt;Other than that, let’s see what else it has to offer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allows running dApps on the local host &lt;/li&gt;
&lt;li&gt;Makes it easy to sign transactions, identity management, read blockchain data, keys management, and access multiple accounts on different networks &lt;/li&gt;
&lt;li&gt;Developers can also use a test blockchain network such as Ganache &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In case you want to explore more crypto wallets with different functionalities, you can choose from a bunch of options such as Coinbase wallet, Trust wallet, Ambire wallet, MyEtherWallet, and more. &lt;/p&gt;

&lt;h3&gt;
  
  
  Remix IDE - Integrated Development Environment
&lt;/h3&gt;

&lt;p&gt;Remix is one of the most trusted IDEs among web3 developers that aids with the application development process. It provides an intuitive user interface that eases the process of compiling, testing, and debugging smart contracts. Written in JavaScript, Remix can be accessed both ways— as a browser extension or a desktop application. It is packed with a host of plugins, libraries, and other functionalities that boosts smart contract development. Let’s explore some of its other qualities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires no setup to get started &lt;/li&gt;
&lt;li&gt;Offers a Remix plugins engine and Remix Libraries that are a part of its Remix Project&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Alchemy NFT API - Application Programming Interface
&lt;/h3&gt;

&lt;p&gt;NFTs are insanely popular among everyone out there and Alchemy’s NFT API lets you build one without any hassle. They launched a multi-chain API that is capable of verifying, creating, displaying, and trading NFTs easily. It works across Ethereum, Polygon, and Arbitrum to name a few, and abstracts away the need to go through the technical aspects of building an NFT. &lt;/p&gt;

&lt;h4&gt;
  
  
  Have a look at a few of its characteristics:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Allows access to NFT sales data &lt;/li&gt;
&lt;li&gt;Can aid the process of building NFT drops, marketplaces, wallets, token-gating experiences, and much more&lt;/li&gt;
&lt;li&gt;It has 4 times better spam detection and allows to filter spam and airdropped NFTs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Besides Alchemy’s NFT API, you can also check out Thirdweb SDK and Moralis API &amp;amp; SDK for a similar experience. &lt;/p&gt;

&lt;h3&gt;
  
  
  Ganache - Testnet
&lt;/h3&gt;

&lt;p&gt;Testnets are alternative blockchain networks used for testing purposes that underlie the same blockchain technology as the main network (mainnet). As a web3 developer, you must already know that smart contracts are immutable and cannot be modified once deployed on the blockchain. Hence, to address this, testnets are used before deploying the contracts on mainnet, mainly to find any flaws and see whether the contract works the right way. Ganache is the tool that works exactly the same. It has a user-friendly interface and acts as a local blockchain for Ethereum development. Developers can access blockchain data, debug information, and also configure block time as per their development needs. &lt;/p&gt;

&lt;h4&gt;
  
  
  A few of Ganache’s features include:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Offers a desktop app and a command-line tool as well&lt;/li&gt;
&lt;li&gt;Comes with advanced mining attributes&lt;/li&gt;
&lt;li&gt;Shows blockchain log output&lt;/li&gt;
&lt;li&gt;In-built block explorer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chainlink - Oracle
&lt;/h3&gt;

&lt;p&gt;Smart contracts are undoubtedly an innovative tech that has many use cases. However, its capabilities are still limited to accessing info present on the blockchain only. In other words, it cannot extract data from the outside world (off-chain) and put it to use. And that’s when Oracles come into the game. Oracles gather information from external sources and relay it to the smart contracts on the blockchain. One such popular decentralized oracle is Chainlink. With Chainlink, users can easily feed smart contracts with off-chain data such as live soccer scores, weather updates, etc., and ease the process of building dApps. The best part about this tool is that it allows automation, supports cross-blockchain interoperability, and provides verifiable sources of randomness. &lt;/p&gt;

&lt;p&gt;Universal Market Access (UMA), Band Protocol, and Witnet are other decentralized tools that you can give a try.&lt;/p&gt;

&lt;h3&gt;
  
  
  Octopus - To Enhance Security
&lt;/h3&gt;

&lt;p&gt;If there’s one thing that should not be overlooked while creating a dApp, then it’s the security aspect. Not to mention but 2022 saw some fatal hacks in the industry, which was enough for builders to emphasize the security of their applications first and not the gimmickry. Octopus is the one-stop solution that beefs up the security of your smart contract by running it through a detailed analysis. It comes with control flow analysis, symbolic execution, and call flow analysis that helps find contract errors and easily fix them.&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;p&gt;Here are the ten tools we discovered in this blog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Solidity - Programming Language &lt;/li&gt;
&lt;li&gt;Revise - Dynamic NFT Platform&lt;/li&gt;
&lt;li&gt;Truffle - Software Framework&lt;/li&gt;
&lt;li&gt;Web3.js - Ethereum JavaScript API&lt;/li&gt;
&lt;li&gt;MetaMask - Web3 Wallet&lt;/li&gt;
&lt;li&gt;Remix IDE - Integrated Development Environment&lt;/li&gt;
&lt;li&gt;Alchemy NFT API - Application Programming Interface&lt;/li&gt;
&lt;li&gt;Ganache - Testnet&lt;/li&gt;
&lt;li&gt;Chainlink - Oracle&lt;/li&gt;
&lt;li&gt;Octopus - To Enhance Security&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Web3 is gradually running on the path of becoming more mainstream. The vast adoption of the next iteration of the internet will certainly bring in an influx of people together and a lot more job opportunities for everyone. Hence, if you’re thinking to go web3 full-time, it’s high time that you should do that. Also, if you’ve just started out as a web3 developer and struggling to find tools/resources that could facilitate your work, then check out the tools we mentioned in our guide above.&lt;/p&gt;

&lt;p&gt;Moreover, as dNFTs are being embraced by many prominent brands and personalities worldwide, it’s safe to say that they are going to be the next big thing in 2023 and beyond. If you’re seeking a way to build dNFTs with ease, check out our free simulator now that allows changing the properties, images, and automating your NFTs. &lt;/p&gt;

&lt;p&gt;For more such informative posts and recent updates about dNFT, follow us from the links below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://revise.network/" rel="noopener noreferrer"&gt;Website&lt;/a&gt; | &lt;a href="https://twitter.com/ReviseNFT" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; | &lt;a href="https://discord.com/invite/aMRnzBR5Pj" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; | [&lt;a href="https://www.instagram.com/revisenft/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt; | &lt;a href="https://www.facebook.com/ReviseNFT/" rel="noopener noreferrer"&gt;Facebook&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hiring</category>
    </item>
    <item>
      <title>Building Dynamic NFTs on Tezos</title>
      <dc:creator>BlocOGs</dc:creator>
      <pubDate>Wed, 30 Nov 2022 12:44:01 +0000</pubDate>
      <link>https://dev.to/bloc_ogs/building-dynamic-nfts-on-tezos-4gnl</link>
      <guid>https://dev.to/bloc_ogs/building-dynamic-nfts-on-tezos-4gnl</guid>
      <description>&lt;p&gt;Over the past year and a half, Non-fungible tokens (NFT) have gained a lot of traction, but the next generation of NFTs will be dynamic. Dynamic NFTs give us an opportunity to explore a new level of interpretability for NFTs and other tokens, as it allows us to alter the metadata of our NFT. The ‘dynamic-ness’ of the NFT is often dependent on some online or IRL event such as a piece of art or character updating based on weather data, real-life sports scores, or even simple user activities. In this article we will be looking at a simple example of a dynamic NFT, combining trading cards and their attributes being updated based on simulated sports data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tezos and NFTs
&lt;/h3&gt;

&lt;p&gt;Creating and managing NFTs on &lt;a href="https://tezos.com/"&gt;Tezos&lt;/a&gt; is both sustainable and practical, due to the low energy consumption and low fees of the Tezos blockchain. Plus, the large ecosystem that exists on Tezos and the developers, artists and collectors make it a great fit for NFTs. Most Tezos NFTs can be found at a Tezos (hosted/compatible) NFT Marketplace such as &lt;a href="https://objkt.com/"&gt;Objkt&lt;/a&gt;, &lt;a href="https://kalamint.io/"&gt;Kalamint&lt;/a&gt; and &lt;a href="https://rarible.com/"&gt;Rarible&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start by deploying an NFT/smart contract on Tezos
&lt;/h3&gt;

&lt;p&gt;Let’s use &lt;a href="https://smartpy.io"&gt;SmartPy&lt;/a&gt; to build the NFT smart contract in the example below.&lt;/p&gt;

&lt;p&gt;A good place to get started is the Online SmartPy &lt;a href="https://smartpy.io/ide"&gt;IDE&lt;/a&gt;. It runs directly in your browser and lets you build your SmartPy contracts and test them.&lt;/p&gt;

&lt;p&gt;We’ll be building the NFT using the FA2 standard on Tezos.&lt;/p&gt;

&lt;p&gt;Here is a &lt;a href="https://gist.github.com/anildukkipatty/6107b980fe73bd8fa48349531462724e"&gt;link (click here)&lt;/a&gt; to the full smart contract you can use to build the NFT. We’ll walk you through some of the important parts of the smart contract below.&lt;/p&gt;

&lt;p&gt;We start by importing smartpy into our project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;smartpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the below code, we’re defining the structure for our Token Metadata. This metadata helps us add media and attributes to our NFT.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Token_meta_data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TRecord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TNat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;token_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TBytes&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;set_type_and_layout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_type&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following code lets us interact with the NFT smart contract to output the token metadata URI. Marketplaces and wallets will use this data to render the NFT correctly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FA2_token_metadata&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FA2_core&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;set_token_metadata_view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;token_metadata&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tok&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="s"&gt;"""
            Return the token-metadata URI for the given token.

            For a reference implementation, dynamic-views seem to be the
            most flexible choice.
            """&lt;/span&gt;
            &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TNat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token_metadata&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tok&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;token_metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;offchain_view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pure&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Get Token Metadata"&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;token_metadata&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The rest of the code in the smart contract linked above is boilerplate to enable interactions with the NFT. Some examples are mentioned below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;count_tokens&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;does_token_exist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tok&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;all_tokens&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;total_supply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tok&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_operator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let’s take a look at how we can deploy our Tezos smart contract. Before we can deploy anything, let's first get some Testnet ꜩ from the &lt;a href="https://teztnets.xyz/"&gt;Tezos Faucet&lt;/a&gt;. Once you complete the CAPTCHA verification on the Faucet page, you will be given a faucet key. Keep this file in a secure location. It contains the secret key and mnemonic. This is used for deployment of the smart contract we have created.&lt;/p&gt;

&lt;p&gt;Open your Temple wallet and import the account we got from the faucet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--70qu-9oX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p0itjlskqxs7ulb7v9tr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--70qu-9oX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p0itjlskqxs7ulb7v9tr.png" alt="Image description" width="880" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's deploy the actual contract. Hit run in the SmartPy online IDE. It will run your contract and output some simulations on the adjacent panel. Over there you will find the option to &lt;strong&gt;Deploy Michelson Contract&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a98qPcSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25ft49a9vmrus0nm9jjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a98qPcSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25ft49a9vmrus0nm9jjp.png" alt="Image description" width="880" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the subsequent steps and you’ll be able to finish deploying the contract.&lt;/p&gt;

&lt;p&gt;Now we will learn about Revise and how it empowers you and your NFTs. &lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction to Revise
&lt;/h3&gt;

&lt;p&gt;Revise is a platform that’ll let you build dynamic NFTs. NFTs today are fairly static. Once you buy it they don’t change. What you see is what you get. Dynamic NFTs are able to react to the outside world, to data, to user interactions, etc. They are capable of changing and evolving over time. &lt;/p&gt;

&lt;p&gt;Let’s use Revise to build your own football team NFT collections, then add NFTs too it and allow them to change dynamically.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a Repo
&lt;/h3&gt;

&lt;p&gt;Let’s clone this &lt;a href="https://github.com/revise-network/nft-tutorial-1"&gt;GitHub repo&lt;/a&gt; to get started. The repo is an empty Javascript project with &lt;a href="https://www.npmjs.com/package/revise-sdk"&gt;revise-sdk&lt;/a&gt; added to the package manager. Once you &lt;code&gt;cd&lt;/code&gt; into the project folder, you can run &lt;code&gt;npm install&lt;/code&gt; to install all the dependencies. Let’s create an &lt;code&gt;index.js&lt;/code&gt; file. We’ll write all our code in this file, we’ll use &lt;code&gt;node index.js&lt;/code&gt; to run the program.&lt;/p&gt;

&lt;p&gt;Copy and paste the following code into the &lt;code&gt;index.js&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;revise-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...PASTE YOUR AUTH TOKEN HERE...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// write your code here&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the first couple of lines, we’re importing the &lt;a href="https://www.npmjs.com/package/revise-sdk"&gt;Revise-sdk&lt;/a&gt; and adding our auth token (more on how to get this below). In the third line, we’re instantiating the &lt;code&gt;revise&lt;/code&gt; object. We can now use this object to call all the functions needed to complete the exercise. Revise functions are mostly async, so we create a &lt;code&gt;run&lt;/code&gt; function that is async and can call the revise functions using the &lt;code&gt;await&lt;/code&gt; keyword. This will make our code more readable and maintainable.&lt;/p&gt;

&lt;p&gt;💡 You can generate the Auth token from app.revise.network. For more details refer to the next section of this article.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate API Key (Auth Token)
&lt;/h3&gt;

&lt;p&gt;Before we continue writing the rest of the code let’s go grab an auth key. Visit &lt;a href="https://revise.network?utm_source=webinar&amp;amp;utm_medium=video&amp;amp;utm_campaign=ua&amp;amp;utm_id=ap"&gt;Revise&lt;/a&gt; and click on “get started”. Once you make an account and log in you’ll see the “generate API key” link in the header. Click on it, you should now be able to generate the API key (auth token). Copy the key that is shown on the screen and keep it safe. This key is not stored on Revise’s servers for security reasons. If you misplace the key it’s permanently lost. You can always come back and generate a new key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mMMgeX6o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6mr728geqx6lsha9c22i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mMMgeX6o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6mr728geqx6lsha9c22i.png" alt="Image description" width="880" height="50"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s replace the &lt;code&gt;AUTH_TOKEN&lt;/code&gt; in the above code with the key we just generated. Now we’re ready to start writing out Dynamic player NFT.&lt;/p&gt;

&lt;h3&gt;
  
  
  Add a Collection
&lt;/h3&gt;

&lt;p&gt;To start with let’s make a collection called “My Dynamic Football Team”. This collection can have multiple NFTs. Each NFT is a player trading card. In order to make the collection, we’ll call the &lt;code&gt;addCollection&lt;/code&gt; function. We’ll have to pass it two parameters, the name for the collection and the URI for the collection. The &lt;code&gt;collectionURI&lt;/code&gt; is a unique project name that can be used to generate links for the NFT (why we need these links is described later). We have to make sure that the URI is unique and a single word. For e.g. “myfootballteam" is a valid Collection URI “my football team” is not. Add the following code to your &lt;code&gt;index.js&lt;/code&gt; inside the &lt;code&gt;run&lt;/code&gt; function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addCollection&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Dynamic Football Team&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;..CREATE YOUR UNIQUE URI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Collection Name : Use any name you want for your collection (this gets shown in the marketplace))&lt;/span&gt;
&lt;span class="c1"&gt;// Collection_URI  : Use a unique name (no spaces or special characters)&lt;/span&gt;
&lt;span class="c1"&gt;//                   this will generate a unique link for your collection&lt;/span&gt;
&lt;span class="c1"&gt;//                   for e.g. if you choose "mydynamicplayer12345"&lt;/span&gt;
&lt;span class="c1"&gt;//                   your baseURI wil be "mydynamicplayer12345.revise.link"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add an NFT
&lt;/h3&gt;

&lt;p&gt;Now let’s add our first NFT player. We’ll use the &lt;code&gt;addNFT&lt;/code&gt; function to create our player. Add the following code to your &lt;code&gt;run&lt;/code&gt; function below the &lt;code&gt;addCollection&lt;/code&gt; function call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nft&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNFT&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/players/bronze.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kylian Mbappe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tokenId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Forward with exceptional abilities. Legend to have on your team&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;team&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PSG&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Forward&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bronze&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;offense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;75&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;defense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;45&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;stamina&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;76&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;71&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We’re passing parameters for the image of our player, the name, description, &lt;code&gt;tokenId&lt;/code&gt; and some properties. We’re also passing the &lt;code&gt;collectionId&lt;/code&gt; we received after creating our collection for the earlier code snippet. &lt;code&gt;tokenId&lt;/code&gt; is the unique ID of your NFT on the blockchain. This helps the blockchain and marketplaces distinguish between the NFTs part of the same collection. Two NFTs shouldn’t have the same &lt;code&gt;tokenId&lt;/code&gt;. We can add any amount of custom data to our NFTs via its attributes. As you can see in the above snippet we’ve added “team”, “position“, offense”, “defense”, “stamina” etc. You can add any number of attributes here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run
&lt;/h3&gt;

&lt;p&gt;The final state of our &lt;code&gt;index.js&lt;/code&gt; file should look like this now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;revise-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...PASTE YOUR AUTH TOKEN HERE...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addCollection&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Dynamic Football Team&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;..CREATE YOUR UNIQUE URI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nft&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNFT&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/players/bronze.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Kylian Mbappe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tokenId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Forward with exceptional abilities. Legend to have on your team&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;team&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PSG&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Forward&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bronze&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;offense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;75&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;defense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;45&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;stamina&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;76&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;71&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s run this file to create a collection and add our first NFT. Run &lt;code&gt;node index.js&lt;/code&gt; in your terminal. The expected output is an &lt;code&gt;id&lt;/code&gt; as shown below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2VwyLnkB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bixi0dy4oa9blb3hhhgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2VwyLnkB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bixi0dy4oa9blb3hhhgx.png" alt="Image description" width="404" height="71"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command you ran earlier should output the id for the NFT we just created. The ID is the unique identifier for this NFT, we’ll be using this &lt;code&gt;nftId&lt;/code&gt; to fetch and makes updates to our player. &lt;strong&gt;Let’s store this ID carefully.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;💡 Note: the &lt;code&gt;tokenId&lt;/code&gt; and &lt;code&gt;nftId&lt;/code&gt; are different. &lt;code&gt;tokenId&lt;/code&gt; is used by marketplaces and wallets to identify your NFT. &lt;code&gt;nftId&lt;/code&gt; is used by Revise to identify and control the NFT.&lt;/p&gt;

&lt;p&gt;Visit your &lt;a href="https://app.revise.network?utm_source=webinar&amp;amp;utm_medium=video&amp;amp;utm_campaign=ua&amp;amp;utm_id=ap"&gt;Revise dashboard&lt;/a&gt; to see your NFT player in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zWkw6vn4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jjur29dlv8hwpd1j8tzt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zWkw6vn4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jjur29dlv8hwpd1j8tzt.png" alt="Image description" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the “View” button to see your NFT and it should show up with the Bronze image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4KIh9ngM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7cd5baea-e85a-406c-a776-44b4bc3590d6/Revise_-_Mbappe_Bronze_SQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4KIh9ngM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7cd5baea-e85a-406c-a776-44b4bc3590d6/Revise_-_Mbappe_Bronze_SQ.png" alt="Revise - Mbappe Bronze SQ.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding dynamic capabilities to your NFT
&lt;/h3&gt;

&lt;p&gt;Now that we’ve created our first NFT player, let’s make it dynamic by changing its moods.&lt;/p&gt;

&lt;p&gt;Create a new file called &lt;code&gt;levels.js&lt;/code&gt;. Paste the following code in the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;revise-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...AUTH_TOKEN...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Silver&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;offense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;82&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;defense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;51&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;stamina&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;82&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;79&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/players/silver.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gold&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;offense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;98&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;defense&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;64&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;stamina&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;92&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;87&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/players/gold.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;randomIndex&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2m&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;listenTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;player&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fetchNFT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0d6cee67-d3c1-41d5-bd57-ebbe4d34ebd3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;//Change the NFT Id to yours&lt;/span&gt;
    &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;player&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;level&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offense&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;offense&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;defense&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defense&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stamina&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stamina&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;skill&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;'s is now at level &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;level&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code, we’re setting up automation which will fetch a level every 2 mins and update our player attributes and image. Execute the above file by running &lt;code&gt;node levels.js&lt;/code&gt;. The program will execute automatically and evolve our NFT player in the background. You should be able to see the player change its level to Silver or Gold and subsequent attributes and all the old versions (revisions) of the NFT as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iz7EWpeA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h89xeh48vrh8qm8lscux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iz7EWpeA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h89xeh48vrh8qm8lscux.png" alt="Image description" width="880" height="804"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats on creating your dynamic football collection and NFT!&lt;/p&gt;

&lt;p&gt;If you want to learn more or explore opportunities creating with Revise, please schedule a call with us &lt;a href="https://calendly.com/anil-revise/dynamic-nfts-and-revise"&gt;here&lt;/a&gt; or join &lt;a href="https://discord.gg/47wkvCz3"&gt;our Discord&lt;/a&gt; or message us on &lt;a href="https://twitter.com/ReviseNFT"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Unlock Multiple Revenue Streams in Web3 Through Dynamic NFTs - Revise Network</title>
      <dc:creator>BlocOGs</dc:creator>
      <pubDate>Fri, 25 Nov 2022 10:27:01 +0000</pubDate>
      <link>https://dev.to/bloc_ogs/unlock-multiple-revenue-streams-in-web3-through-dynamic-nfts-revise-network-27kl</link>
      <guid>https://dev.to/bloc_ogs/unlock-multiple-revenue-streams-in-web3-through-dynamic-nfts-revise-network-27kl</guid>
      <description>&lt;p&gt;Despite being considered just hype by some, the non-fungible tokens (NFTs) have disrupted the entire web3 industry and generated billions of sales in no time. Many big brands such as Adidas, Nike, Gucci, and Louis Vuitton are being a part of this paradigm shift and creating multiple revenue channels for themselves. However, the regular NFTs (ERC-721 standard) are monotonous and lack in providing real-life utilities. In contrast, dynamic NFTs are the new norm now due to their dynamic nature and increased use cases. &lt;/p&gt;

&lt;p&gt;Keep reading to know more about Dynamic NFTs and how you can open numerous revenue streams with them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Dynamic NFTs?
&lt;/h2&gt;

&lt;p&gt;Dynamic NFTs are the next iteration of the ERC-721 standard, aka static NFTs. They come with better utility and inherit dynamic properties that it achieves with the help of smart contracts and oracles. Unlike a regular NFT, the dNFTs are capable of changing their characteristics whenever a pre-determined condition is met. For example, you can code your dNFT and program it to display snowy weather whenever it hits the real world. &lt;/p&gt;

&lt;h2&gt;
  
  
  How do dynamic NFTs open web3 business opportunities in the metaverse?
&lt;/h2&gt;

&lt;p&gt;Dynamic NFTs open up a lot of business opportunities for brands and creators. Let’s have a look at some of the ways how it makes it possible:&lt;/p&gt;

&lt;h3&gt;
  
  
  Sports
&lt;/h3&gt;

&lt;p&gt;Sports is one of the most sought-after sectors, and the reason behind it is simple— athletes. They possess a massive following among people, and as a result, their fans are always looking to get hands-on with their exclusive items or collectibles. Many brands are already partnering with athletes or sports institutions to build dynamic NFTs that allow users to engage with their favorite stars in a unique way. &lt;/p&gt;

&lt;p&gt;One good example of this is the recent partnership between FIFA and Altered State Machine (ASM). They launched a metaverse-focused soccer game called AI League, where users can predict FIFA World Cup matches and compete against each other to win exciting perks. ASM uses NFTs and AI technology to infuse dynamic elements into their NFTs (gaming characters), making them more engaging. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F146f6de41lspb0gqnm48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F146f6de41lspb0gqnm48.png" alt="Image description" width="512" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Collectibles
&lt;/h3&gt;

&lt;p&gt;Dynamic NFTs radically change the way how we used to collect rare items in the form of static NFTs. A recent partnership between the global sports league giant NBA and NBPA launched an initiative called The Association NFT, which comprises dynamic NFT collectibles that change over time based on athletes' in-game performance. &lt;/p&gt;

&lt;p&gt;More than that, dynamic NFTs can also provide the holders extra perks whenever a player hits a certain performance level in the game. For example, if an athlete gets crowned as the “rookie of the year,” then their dNFT holders may get their signed merchandise or any other exciting rewards you could think of.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hcflnr6amivrzzy1sd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hcflnr6amivrzzy1sd5.png" alt="Image description" width="512" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tokenizing Real-World Assets
&lt;/h3&gt;

&lt;p&gt;Certifications or documents like passports, driving licenses, etc., are a great way to verify someone's credentials. However, the fact that they can easily be counterfeited and are difficult to verify makes it challenging for students, employees, and everyone who owns them. With dynamic NFTs, they can be stored on blockchain technology (which is immutable) and will react as per your performance. &lt;/p&gt;

&lt;p&gt;Another interesting real-life example can be the real-estate sector, where the dynamic NFT represents a real-world property and reflects metrics such as maintenance history, market value, age, past sales, and much more. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bck5qzvyf0qm3efm92b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bck5qzvyf0qm3efm92b.png" alt="Image description" width="512" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Credits: Chainlink&lt;/p&gt;

&lt;h2&gt;
  
  
  How can Dynamic NFT Builders/Creators Monetize Their Creations?
&lt;/h2&gt;

&lt;p&gt;The ERC-1155 standard is already becoming widespread and adopted by the masses. Therefore, if you’re a dNFT builder/creator looking to monetize your creations, then follow the steps below to generate a windfall of money with your NFTs:&lt;/p&gt;

&lt;h3&gt;
  
  
  Royalties
&lt;/h3&gt;

&lt;p&gt;At present, static NFTs or the ERC-721 is the most minted standard on the Ethereum chain. However, with static NFTs, the original creators lost out on gaining recurring revenue from their creations whenever they get sold, let’s say, for the 3rd, 4th, or 5th time. Dynamic NFTs, on the other hand, change this as their smart contract can be coded as per the creator’s requirements. For instance, you can code your dNFT to get a 10% share every time it gets sold on a secondary marketplace and enjoy persistent revenue. &lt;/p&gt;

&lt;h3&gt;
  
  
  Brand Deals &amp;amp; Sponsorships
&lt;/h3&gt;

&lt;p&gt;Collaborating with brands and seeking sponsorships is another best way to monetize your creations. You can reach out to different brands to see if they’d be up for a partnership with you if you’re just starting out. However, attracting brand deals is a breeze if you’re already a prominent player in the industry. &lt;/p&gt;

&lt;p&gt;For example, the Bored Ape Yacht Creators, Yuga Labs, bagged a collab with Adidas as their creations were highly admired and praised among NFT enthusiasts. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9sxd1mdata4exrh5g86.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9sxd1mdata4exrh5g86.jpeg" alt="Image description" width="512" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  In Closing
&lt;/h2&gt;

&lt;p&gt;Dynamic NFTs are the next frontier of the non-fungible tokens, where the possibilities and use cases it provides to everyone - from builders to brands to holders - are limitless. It is indeed the revolution needed in the web3 space that will have a colossal impact on the overall industry - and why not, as it opens a pool of revenue streams for brands and creators as well. If you’re wondering how you can build a dynamic NFT, then simply head to our website and try our free simulator that allows changing the properties, images, and automating your NFTs with ease.&lt;/p&gt;

&lt;p&gt;For more recent updates about dynamic NFTs and Revise Network, follow us from the links below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://revise.network/" rel="noopener noreferrer"&gt;Website &lt;/a&gt;| &lt;a href="https://twitter.com/ReviseNFT" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; |&lt;a href="https://discord.com/invite/aMRnzBR5Pj" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;| &lt;a href="https://www.instagram.com/revisenft/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt; | &lt;a href="https://www.facebook.com/ReviseNFT/" rel="noopener noreferrer"&gt;Facebook &lt;/a&gt;&lt;/p&gt;

</description>
      <category>cloudcomputing</category>
      <category>learning</category>
      <category>devops</category>
      <category>career</category>
    </item>
    <item>
      <title>Changing The Game of Ticketing Using Revise and NFTs</title>
      <dc:creator>BlocOGs</dc:creator>
      <pubDate>Mon, 21 Nov 2022 07:04:39 +0000</pubDate>
      <link>https://dev.to/bloc_ogs/changing-the-game-of-ticketing-using-revise-and-nfts-2d0e</link>
      <guid>https://dev.to/bloc_ogs/changing-the-game-of-ticketing-using-revise-and-nfts-2d0e</guid>
      <description>&lt;p&gt;NFT’s have been all the buzz in the recent years, but dynamic NFTs is where the spotlight is at nowadays. This is a quick guide to creating your own ticket NFT, where your ticket will change once it is used and points will be added towards your ticket. These points can then be used for merchandise and food purchases, as well as to get early access to new albums from this artist.&lt;/p&gt;

&lt;h3&gt;
  
  
  Introduction to Revise
&lt;/h3&gt;

&lt;p&gt;Revise is a platform that’ll let you build dynamic NFTs. NFTs today are fairly static. Once you buy it they don’t change. What you see is what you get. Dynamic NFTs are able to react to the outside world, to data, to user interactions, etc. They are capable of changing, and evolving over time.&lt;/p&gt;

&lt;p&gt;We’ll cover how to add NFTs using Revise and how to update the NFTs to make them dynamic in this guide. We won’t cover how to deploy these NFTs to Ethereum/Opensea (&lt;a href="https://dev.to/anil_from_revise/how-to-publish-your-nft-on-opensea-testnet-3n29"&gt;click here to learn more&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Clone the repository
&lt;/h3&gt;

&lt;p&gt;Let’s clone this &lt;a href="https://github.com/revise-network/nft-tutorial-1"&gt;GitHub repo&lt;/a&gt; to get started. The repo is an empty Javascript project with &lt;a href="https://www.npmjs.com/package/revise-sdk"&gt;revise-sdk&lt;/a&gt; added to the package manager. Once you &lt;code&gt;cd&lt;/code&gt; into the project folder, you can run &lt;code&gt;npm install&lt;/code&gt; to install all the dependencies. Let’s create an &lt;code&gt;index.js&lt;/code&gt; file. We’ll write all our code in this file, we’ll use &lt;code&gt;node index.js&lt;/code&gt; to run the program.&lt;/p&gt;

&lt;p&gt;Copy and paste the following code into the &lt;code&gt;index.js&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;revise-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...PASTE YOUR AUTH TOKEN HERE...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// write your code here&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 You can generate the Auth token from app.revise.network. For more details refer here&lt;/p&gt;

&lt;p&gt;In the first couple of lines, we’re importing the &lt;a href="https://www.npmjs.com/package/revise-sdk"&gt;Revise-sdk&lt;/a&gt; and adding our auth token (more on how to get this below). In the third line, we’re instantiating the &lt;code&gt;revise&lt;/code&gt; object. We can now use this object to call all the functions needed to complete the exercise. Revise functions are mostly async, so we create a &lt;code&gt;run&lt;/code&gt; function which is async and can call the revise functions using the &lt;code&gt;await&lt;/code&gt; keyword. This will make our code more readable and maintainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate API Key (Auth Token)
&lt;/h3&gt;

&lt;p&gt;Before we continue writing the rest of the code let’s go grab an auth key. Visit &lt;a href="https://revise.network?utm_source=webinar&amp;amp;utm_medium=video&amp;amp;utm_campaign=ua&amp;amp;utm_id=ap"&gt;Revise&lt;/a&gt; and click on “get started”. Once you make an account and log in you’ll see the “generate API key” link in the header. Click on it, you should now be able to generate the API key (auth token). Copy the key that is shown on the screen and keep it safe. This key is not stored on Revise’s servers for security reasons. If you misplace the key it’s permanently lost. You can always come back and generate a new key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XxnykJ3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sd5dq0gydvfr6ybha5uh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XxnykJ3n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sd5dq0gydvfr6ybha5uh.png" alt="Image description" width="880" height="50"&gt;&lt;/a&gt;&lt;br&gt;
Let’s replace the &lt;code&gt;AUTH_TOKEN&lt;/code&gt; in the above code with the key we just generated. Now we’re ready to start building our dynamic ticket NFT.&lt;/p&gt;
&lt;h3&gt;
  
  
  Add a Collection
&lt;/h3&gt;

&lt;p&gt;To start with let’s make a collection called “My Concert Tickets”. This collection can have multiple NFTs. Each NFT is a ticket. In order to make the collection, we’ll call the &lt;code&gt;addCollection&lt;/code&gt; function. We’ll have to pass it two parameters, the name for the collection and the URI for the collection. The &lt;code&gt;collectionURI&lt;/code&gt; is a unique project name that can be used to generate links for the NFT (why we need these links is described later). We have to make sure that the URI is unique and a single word. For e.g. “myconcerttickets" is a valid Collection URI “my concert tickets” is not. Add the following code to your &lt;code&gt;index.js&lt;/code&gt; inside the &lt;code&gt;run&lt;/code&gt; function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addCollection&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Concert Tickets&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;..CREATE YOUR UNIQUE URI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Collection Name : Use any name you want for your collection (this gets shown in the marketplace))&lt;/span&gt;
&lt;span class="c1"&gt;// Collection_URI  : Use a unique name (no spaces or special characters)&lt;/span&gt;
&lt;span class="c1"&gt;//                   this will generate a unique link for your collection&lt;/span&gt;
&lt;span class="c1"&gt;//                   for e.g. if you choose "myconcerttickets12345"&lt;/span&gt;
&lt;span class="c1"&gt;//                   your baseURI wil be "myconcerttickets12345.revise.link"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add an NFT
&lt;/h3&gt;

&lt;p&gt;Now let’s add our first NFT ticket. We’ll use the &lt;code&gt;addNFT&lt;/code&gt; function to create our ticket. Add the following code to your &lt;code&gt;run&lt;/code&gt; function below the &lt;code&gt;addCollection&lt;/code&gt; function call.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nft&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNFT&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/tickets/regular.jpg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;My Concert Ticket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tokenId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A concert ticket with exclusive perks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;General&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;refreshments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Yes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;seat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;General Area&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We’re passing parameters for the image of our ticket, the name, description, &lt;code&gt;tokenId&lt;/code&gt; and some properties. We’re also passing the &lt;code&gt;collectionId&lt;/code&gt; we received after creating our collection for the earlier code snippet. &lt;code&gt;tokenId&lt;/code&gt; is the unique ID of your NFT on the blockchain. This helps the blockchain and marketplaces distinguish between the NFTs part of the same collection. Two NFTs shouldn’t have the same &lt;code&gt;tokenId&lt;/code&gt;. We can add any amount of custom data to our NFTs via its attributes. As you can see in the above snippet we’ve added “points”, “category”, “refreshments”, etc. You can add any number of attributes here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run
&lt;/h3&gt;

&lt;p&gt;The final state of our &lt;code&gt;index.js&lt;/code&gt; file should look like this now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;revise-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...PASTE YOUR AUTH TOKEN HERE...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addCollection&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My Concert Tickets&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;..CREATE YOUR UNIQUE URI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nft&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNFT&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/tickets/regular.jpg&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;My Concert Ticket&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tokenId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A concert ticket with exclusive perks&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;points&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;General&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;refreshments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Yes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;seat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;General Area&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;used&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s run this file to create a collection and add our first NFT. Run &lt;code&gt;node index.js&lt;/code&gt; in your terminal. The expected output is an &lt;code&gt;id&lt;/code&gt; as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fdrBov_W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dbjchtv2y3qbfja8hvuo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fdrBov_W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dbjchtv2y3qbfja8hvuo.png" alt="Image description" width="762" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The command you ran earlier should output the id for the NFT we just created. The ID is the unique identifier for this NFT, we’ll be using this &lt;code&gt;nftId&lt;/code&gt; to fetch and makes updates to our pet. Let’s store this ID carefully.&lt;/p&gt;

&lt;p&gt;💡 Note: the &lt;code&gt;tokenId&lt;/code&gt; and &lt;code&gt;nftId&lt;/code&gt; are different. &lt;code&gt;tokenId&lt;/code&gt; is used by marketplaces and wallets to identify your NFT. &lt;code&gt;nftId&lt;/code&gt; is used by Revise to identify and control the NFT.&lt;/p&gt;

&lt;p&gt;Visit your &lt;a href="https://app.revise.network/?utm_source=webinar&amp;amp;utm_medium=video&amp;amp;utm_campaign=ua&amp;amp;utm_id=ap"&gt;Revise dashboard&lt;/a&gt; to see your NFT ticket in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pNNFu2FG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n959iainwh9hdz5cqk1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pNNFu2FG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n959iainwh9hdz5cqk1b.png" alt="Image description" width="880" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bnJGLBbd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mibax0xzaccqoadylnjl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bnJGLBbd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mibax0xzaccqoadylnjl.png" alt="Image description" width="880" height="670"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Upgrading your ticket using points
&lt;/h3&gt;

&lt;p&gt;The ticket you currently have is a “General” type ticket, but the fact that you’ve gotten this far in the exercise means your ticket should be upgraded to “VIP”. Imagine this happening at a real concert, where you can use the points on your NFT ticket to get exclusive privileges such as upgrading to a VIP ticket, claiming food/drinks, redeeming points for merchandise, or even backstage access. Let’s start by upgrading your ticket to a VIP.&lt;/p&gt;

&lt;p&gt;Create a new file called  &lt;code&gt;update.js&lt;/code&gt; and paste the code snippet below. Run the code using &lt;code&gt;node update.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;revise-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...AUTH_TOKEN...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Revise&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AUTH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ticket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fetchNFT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...NFT_ID...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;points&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;category&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;VIP&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;seat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;VIP&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/tickets/vip.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; has been updated`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code we’re first referencing and fetching the NFT we just minted using the &lt;code&gt;fetchNFT&lt;/code&gt; function and passing the &lt;code&gt;nftId&lt;/code&gt; . Then we consume 5 points to upgrade our NFT to a VIP ticket, subsequently leading to a new image. You should be able to see the ticket change and it’s old version (revisions) of the NFT on your  &lt;a href="https://app.revise.network/?utm_source=webinar&amp;amp;utm_medium=video&amp;amp;utm_campaign=ua&amp;amp;utm_id=ap"&gt;Revise dashboard&lt;/a&gt; as well.&lt;/p&gt;

&lt;p&gt;💡 The setProperty function allows us to change the underlying NFT metadata properties. It takes two parameters, the name of the property and the new value that needs to be set.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding extra points for attending the concert
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ticket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fetchNFT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...NFT_ID...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;used&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Yes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;points&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;50&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; has been updated`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code is similar to the last, all thats changed is we are setting the “used” property to “Yes” to indicate the ticket has been used, and the “points” to 50. Run the code using &lt;code&gt;node update.js&lt;/code&gt; .&lt;/p&gt;

&lt;h3&gt;
  
  
  Using your new points
&lt;/h3&gt;

&lt;p&gt;With 50 points there’s a lot you can now claim. You can claim a t-shirt, mouse pad or a concert banner. Which one would you pick? T-shirts cost 35 points, mousepad is 25 points and the banner is 40 points. Plug in the remainder number for points and run the code snippet below.&lt;/p&gt;

&lt;p&gt;We also change the image of the ticket to now show the claimed badge on the ticket. Run the code using &lt;code&gt;node update.js&lt;/code&gt; .&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ticket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fetchNFT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5acdcba9-4126-476d-8f62-e6efab3bdbfd&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;revise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;points&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...SET NEW POINTS BASED ON WHAT YOU CLAIM...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://revise-testing.fra1.cdn.digitaloceanspaces.com/tickets/vip-claimed.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; has been updated`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ofb-dogz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92qd4cju7l5q8iwbz2xc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ofb-dogz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92qd4cju7l5q8iwbz2xc.png" alt="Image description" width="880" height="679"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats on creating your concert ticket NFT! &lt;a href="https://dev.to/anil_from_revise/how-to-publish-your-nft-on-opensea-testnet-3n29"&gt;Publish your ticket to Opensea&lt;/a&gt; and show it off to the world.&lt;/p&gt;

&lt;p&gt;If you want to learn more or explore opportunities creating with Revise, please schedule a call with us &lt;a href="https://calendly.com/anil-revise/dynamic-nfts-and-revise"&gt;here&lt;/a&gt; or join &lt;a href="https://discord.gg/47wkvCz3"&gt;our Discord&lt;/a&gt; or message us on &lt;a href="https://twitter.com/ReviseNFT"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
