<?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: Anil Dukkipatty</title>
    <description>The latest articles on DEV Community by Anil Dukkipatty (@anil_from_revise).</description>
    <link>https://dev.to/anil_from_revise</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%2F852994%2F6138a8b9-37d7-4b52-8133-1d621448851d.jpg</url>
      <title>DEV Community: Anil Dukkipatty</title>
      <link>https://dev.to/anil_from_revise</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anil_from_revise"/>
    <language>en</language>
    <item>
      <title>The New Reality - AR + dNFTs</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Tue, 21 Feb 2023 14:33:25 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/the-new-reality-ar-dnfts-2n57</link>
      <guid>https://dev.to/anil_from_revise/the-new-reality-ar-dnfts-2n57</guid>
      <description>&lt;p&gt;What if you could enhance your reality and own it? What if you could also allow others to experience it immersively? This idea can become a reality we could live in together. This is possible by utilizing the power of Augmented Reality (AR) and Dynamic NFTs (dNFTs).&lt;/p&gt;

&lt;p&gt;So, let’s dive right in and see how we can use AR and dNFTs to create a new reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro to AR and dNFTs
&lt;/h2&gt;

&lt;p&gt;Let’s start by understanding what AR and dNFT’s are.&lt;/p&gt;

&lt;h3&gt;
  
  
  AR
&lt;/h3&gt;

&lt;p&gt;Augmented Reality is a technology designed to augment our reality. AR enhances our real world by incorporating different digital elements into our physical world. We can create interactive experiences using AR that are influenced by our real world.&lt;/p&gt;

&lt;p&gt;Digital content is gaining a new outlook because of the immersive potential of AR.&lt;/p&gt;

&lt;p&gt;Pokemon Go was a successful AR game showcasing the power of AR in gaming. You must have also experienced AR lenses on Instagram and Snapchat. This is one of AR’s use cases called “Social AR”.&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%2Frhnsl4q78r2e5ad4rpmq.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%2Frhnsl4q78r2e5ad4rpmq.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;Few Examples of AR experiences on Snapchat(&lt;a href="https://dansapio.medium.com/snapchat-lenses-are-a-game-changing-marketing-tool-e7414b01d063" rel="noopener noreferrer"&gt;source&lt;/a&gt;) &lt;/p&gt;

&lt;p&gt;There are many more use cases and implementations of AR; we will get onto that soon. But now let’s learn about dNFTs.&lt;/p&gt;

&lt;h3&gt;
  
  
  dNFTs
&lt;/h3&gt;

&lt;p&gt;dNFTs are nothing but the involvement of dynamics in NFTs.&lt;/p&gt;

&lt;p&gt;So, what is dynamic? Well, it implies change; the opposite of it is static. Consider your name, it’s likely not gonna change; so we can consider it to be an example of static data. However, if we look at the temperature of our place or the price of a cryptocurrency; they keep on changing. This implies that they are dynamic. Let’s get back to dNFTs.&lt;/p&gt;

&lt;p&gt;NFTs (Non-Fungible Tokens), as we know, are unique digital objects on a blockchain. Each NFT differs from the others as it possesses a unique token ID and contract address. Then, we can attach metadata like images, videos, and other forms of media to it; thus making it possible to own a token representing a unique digital object.&lt;/p&gt;

&lt;p&gt;But what if we could incorporate new information and data into an NFT? This will increase its value and utility. Here’s where dNFTs come to light.&lt;/p&gt;

&lt;p&gt;Dynamic NFTs (dNFTs) are expanding NFTs by their ability to respond to external events and data. A dNFT is a type of NFT that can change its property based on external conditions. Smart contracts are instructed on how the dNFT’s metadata should be changed based on an external trigger.&lt;/p&gt;

&lt;p&gt;Eg. Dynamic Art (A piece of digital art in a dynamic NFT can change depending on the external weather)&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%2F4xecg3z1elhb48vlb7x4.gif" 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%2F4xecg3z1elhb48vlb7x4.gif" alt=" " width="80" height="80"&gt;&lt;/a&gt;Source: &lt;a href="https://blog.chain.link/how-to-build-dynamic-nfts-on-polygon/" rel="noopener noreferrer"&gt;Chainlink&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The intersection of AR and dNFTs
&lt;/h2&gt;

&lt;p&gt;AR and dNFTs can be combined to enhance the way we experience our digital and physical worlds. For example, an AR app could recognize a dynamic NFT and display different information or animations depending on the token's current state.&lt;/p&gt;

&lt;p&gt;Instead of letting NFTs stay in the wallet, AR allows us to experience them in the real world.&lt;/p&gt;

&lt;p&gt;Artists are using AR to enhance their artwork and give it life!&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%2F8536ju2zbo0aipxu3t84.gif" 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%2F8536ju2zbo0aipxu3t84.gif" alt=" " width="600" height="1069"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The true power of the spatial web can be experienced by combining AR with NFTs.&lt;/p&gt;

&lt;p&gt;dNFTs, for instance, can be created when specific events occur, such as when a hidden location in an AR app is discovered. dNFTs might also have “hidden features” that are only revealed when a user interacts with them.&lt;/p&gt;

&lt;p&gt;By overlaying this digital art onto the real world through AR, users can experience the art in a unique way. For example, a dNFT art piece could respond to the user's motion or change its look based on the time of day.&lt;/p&gt;

&lt;p&gt;Let’s explore a few use cases of dNFTs and AR -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gaming -&lt;/strong&gt; The immersion and engagement of gaming can be taken to the next level by overlaying game worlds onto the real world using AR. The items and assets in the game can be represented using dNFTs. dNFTs can also allow character progression i.e. as we level up in the game, our character’s look will change to reflect the progress. Example - Maddroids (&lt;a href="https://maddroids.io/" rel="noopener noreferrer"&gt;https://maddroids.io/&lt;/a&gt;) are using the power of AR and dNFTs in their game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Art -&lt;/strong&gt; In the world of art, AR with dNFTs is enabling artists to create dynamic as well as interactive art pieces that can evolve over time. In addition, technologies like face tracking provide new methods of control for NFT-based interactive and animated artwork by providing a new canvas to place them. With a world lens, you can interact with an art NFT by placing it in your own environment, be it your living room, office, or art gallery, with AR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketing and advertising -&lt;/strong&gt; Companies can use the potential of dNFTs with AR to increase their consumer engagement and reward their customers with exclusive access to their events and products.&lt;/li&gt;
&lt;/ul&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%2Foix0mm1or9p2kuvkk080.gif" 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%2Foix0mm1or9p2kuvkk080.gif" alt=" " width="480" height="853"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Education -&lt;/strong&gt; With AR, we can provide an interactive learning experience to students by laying educational content in the real world. Also, dNFTs can be combined to provide students with badges, progress cards, and exam reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fashion -&lt;/strong&gt; AR could allow people to wear simple bodysuits in real life and view each other’s fashion NFTs through AR glasses, which overlay extra information onto a user’s real-world scene. Rtfkt, arguably the most successful NFT fashion brand, recently posted a video of &lt;a href="https://www.tiktok.com/foryou?is_copy_url=1&amp;amp;is_from_webapp=v1&amp;amp;item_id=6980411178103213318#/@rtfkt/video/6980411178103213318" rel="noopener noreferrer"&gt;people walking around New York City wearing Rtfkt’s clothing in AR&lt;/a&gt;, including its Metajacket, from the point of view of a person wearing AR glasses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passport and identity -&lt;/strong&gt; Future passports can be issued as dNFTs, this getting automatically updated based on the locations you travel to. Also, you could go through your travel history in form of AR. (I am super excited to use this)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business growth -&lt;/strong&gt; Businesses will use AR and dNFTs as a means to provide loyalty points and discounts to their customers will see an incremental growth in their traction and profits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event organization -&lt;/strong&gt; dNFTs as a form of event ticket can update its status on its own based on your activity and involvement in the event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supply chain -&lt;/strong&gt; Supply chain can gain a surmountable benefit by using dNFTs and AR to get automatic and immersive updates on the status of delivery during each checkpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;Let’s look at some exciting projects in this space -&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QR + AR + NFT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pascal Boyart was one of the first street artists to attach Bitcoin QR codes to his work. He gives life to his murals using the power of AR, spatial audio and NFTs.&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%2Fwls1cssw8u2e89abyrhy.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%2Fwls1cssw8u2e89abyrhy.png" alt=" " width="800" height="453"&gt;&lt;/a&gt;&lt;br&gt;
La Liberté Guidant le Peuple” (&lt;a href="https://www.collater.al/en/pascal-boyart-1000-bitcoin/" rel="noopener noreferrer"&gt;Liberty Guiding the People&lt;/a&gt;) - Pascal Boyart&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lamelo Ball dNFT -&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lamelo Ball, a professional NBA player, released dynamic NFT tied to his performance on the court.&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%2F4w6ck38zkm12avvmj9mz.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%2F4w6ck38zkm12avvmj9mz.png" alt=" " width="800" height="258"&gt;&lt;/a&gt;&lt;br&gt;
Source - &lt;a href="https://lameloball.io/#/" rel="noopener noreferrer"&gt;Lamelo Ball Website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AR filter to showcase NFT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The auction house Sotheby’s created an Instagram filter allowing users to see what Botticelli’s “Portrait of a Young Man Holding a Roundel” painting would look like in their homes.&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%2F0hrry8oc1fpihclbh82b.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%2F0hrry8oc1fpihclbh82b.png" alt=" " width="800" height="461"&gt;&lt;/a&gt;&lt;a href="https://digiday.com/media/sothebys-and-saatchi-augmented-reality/" rel="noopener noreferrer"&gt;Botticelli’s Portrait of a Young Man Holding a Roundel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AR + dNFTs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One can buy seed crystals which with time grow into OG crystal. &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%2Fyo1rm1imvs87af6ji4xw.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%2Fyo1rm1imvs87af6ji4xw.png" alt=" " width="502" height="572"&gt;&lt;/a&gt;&lt;br&gt;
Source:&lt;a href="https://ogcrystals.com/" rel="noopener noreferrer"&gt;OG Crystal &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AR Mural NFT -&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ryan Sarfati and Eric Skotnes’s The Majestic artwork allows people who can’t visit Tulsa can enjoy the painting online in AR.&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%2Fnew4gxb1lphwz6y1m21n.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%2Fnew4gxb1lphwz6y1m21n.png" alt=" " width="800" height="415"&gt;&lt;/a&gt;Source:&lt;a href="https://opensea.io/assets/ethereum/0x495f947276749ce646f68ac8c248420045cb7b5e/39932607241677209205595738808075921205738551222167312311363635920413243998209" rel="noopener noreferrer"&gt;Opensea&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is the largest mural in Oklahoma, holding the world record for the largest augmented mural.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target Tracking AR NFT -&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NFT Boba allows owners to view their NFT in the real world using AR plane tracking implementation.&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%2Ffs0iald4yj1ursi7zorp.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%2Ffs0iald4yj1ursi7zorp.png" alt=" " width="428" height="476"&gt;&lt;/a&gt;Source:&lt;a href="https://nftboba.io/" rel="noopener noreferrer"&gt;NFTBoba&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;dNFT gaming&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sunflower Land is a game allowing the creation of dynamic pfp and characters.&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%2Fipiackfifce7b8aagnrh.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%2Fipiackfifce7b8aagnrh.png" alt=" " width="800" height="1183"&gt;&lt;/a&gt;Source: &lt;a href="https://sunflower-land.com/" rel="noopener noreferrer"&gt;Sunflower Land&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some other examples are -&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Face filter NFTs - Melbourne-based artist &lt;a href="https://www.youtube.com/watch?v=DdNE9hQL8sY&amp;amp;ab_channel=FerrumNetwork" rel="noopener noreferrer"&gt;Marc-O-Matic&lt;/a&gt; merges traditional illustrative art, 3D animation, and augmented reality.****&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://readyplayer.me/" rel="noopener noreferrer"&gt;Ready Player Me&lt;/a&gt; - buy NFT avatars and use them in augmented reality and virtual reality environments.&lt;/li&gt;
&lt;li&gt;Hololoot (&lt;a href="https://hololoot.io/" rel="noopener noreferrer"&gt;https://hololoot.io/&lt;/a&gt;) - It is a blockchain-based ecosystem that integrates NFTs and AR assets, creating a metaverse for users to explore and create user-generated contents that are recorded on the blockchain.&lt;/li&gt;
&lt;li&gt;AR Metaverse &lt;a href="https://www.overthereality.ai/" rel="noopener noreferrer"&gt;https://www.overthereality.ai/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With the powerful combination of AR and dNFTs, brands and creators can benefit as their immersive projects will gain improved engagement, greater loyalty, and flexible monetization. AR (Augmented Reality) and dynamic NFTs (Non-Fungible Tokens) are two emerging technologies that have the potential to revolutionize the way we interact with digital assets.&lt;/p&gt;

&lt;p&gt;Overall, the future of AR with dynamic NFTs is bright, with the potential to transform various industries and create new and exciting experiences for users.&lt;/p&gt;

&lt;p&gt;This new sphere of collaboration leaves us with a question to ponder,&lt;/p&gt;

&lt;p&gt;If we can build the future, then why not?&lt;/p&gt;

&lt;p&gt;For more updates about dynamic NFTs and their recent developments, 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>discuss</category>
    </item>
    <item>
      <title>Exploring 5 Interesting Dynamic NFT Projects</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Sat, 11 Feb 2023 13:43:48 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/exploring-5-interesting-dynamic-nft-projects-51j4</link>
      <guid>https://dev.to/anil_from_revise/exploring-5-interesting-dynamic-nft-projects-51j4</guid>
      <description>&lt;p&gt;Dynamic NFTs are the next frontier of the ERC-721 standard. Why, you ask? Well, ERC-721 standard represents the static NFTs that were the first generation of digital collectibles. Dynamic NFTs, on the other hand, are capable of changing their appearance based on off-chain data feed. For example, you can program your dNFTs to display live weather updates or a soccer match’s live scores or anything you could think of. We are all aware of NFT avatars in games, virtual environments etc. Now imagine adding dynamicity to these characters in a way in which they can exhibit traits based on their positions in a game or follower count in a social media account etc. NFT creators/collectors are gradually warming up to dNFTs because of their extended use cases. As dNFTs hold the potential to be the next big thing in the web3 space, let’s have a look at some of the rising and innovative dynamic NFT projects that are taking the game to the next level.&lt;/p&gt;

&lt;p&gt;Let’s get right into it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Altered State Machine x FIFA
&lt;/h2&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%2F0wevg9899bowd1t2mt4b.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%2F0wevg9899bowd1t2mt4b.png" alt="Image description" width="667" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The partnership between Altered State Machine (ASM) and FIFA arrived just as the FIFA World Cup 2022 was approaching. FIFA in collaboration with ASM created an AI-enabled metaverse-focused game called AI League that allowed players to predict FIFA matches and compete against each other to earn exciting rewards. However, as FIFA is already over, players can now create their collectables team and lead them to victory in the metaverse. The best part about this collaboration is the ASM brains and Non Fungible Intelligence. Well, they both are ASM technology that can be used in digital avatars/characters, games, metaverse platforms, to infuse life (dynamic elements) into your digital avatars and gaming experience.&lt;/p&gt;

&lt;p&gt;“The possibilities with ASM brains are endless as they are interoperable across games, avatars, forms, and different worlds. With training, they can evolve, learn, and are also capable of improving their skills” said Altered State Machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Yuga Labs Otherside
&lt;/h2&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%2Flh4igigo0wkpdht9ucaj.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%2Flh4igigo0wkpdht9ucaj.jpeg" alt="Image description" width="624" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yuga Labs needs no introduction thanks to the insanely popular BAYC, MAYC, and Cryptopunk NFTs that emerged from this house. Their Otherside metaverse, which they announced earlier this year, is also going to join their “hit” list. But what exactly is it? Well, the ApeCoin-powered metaverse, Otherside, is Yuga Labs’ metaverse space developed for digital community building and ownership opportunities. Over 10,000 people can engage with each other in Otherside at once and interact via natural voice chat option.&lt;/p&gt;

&lt;p&gt;The most intriguing aspect of Otherside is “Otherdeeds”, which are virtual plots of land in the form of NFTs that can also be traded on secondary markets. There are only 200,000 parcels and owning one is necessary to get access to exclusive Otherside events. The fact that Otherdeed NFTs are dynamic in nature and will evolve based on the user’s in-game behavior makes them more fascinating. Moreover, users may also get to encounter artifacts, various gaming elements, and mysterious living creatures in their metaverse.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Association NFT
&lt;/h2&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%2F6ec4fnd388r4yi1tnh6h.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%2F6ec4fnd388r4yi1tnh6h.png" alt="Image description" width="673" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Association NFT is an NBA project that comprises 30,000 dynamic NFTs in the collection. It was minted for the 2022 NBA playoffs and had 125 editions per player. As they are not the regular non-fungible tokens, The Association NFTs are capable of changing appearance over time as per a team’s or a player’s in-game performance. The dynamic elements may include player accessories, emoticons designed by artists, and various backgrounds. NBA uses Chainlink Oracle to fetch live data feeds to update live performance of players so the changes may reflect automatically in the NFTs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Life In Our Minds (LIOM)
&lt;/h2&gt;

&lt;p&gt;Life In Our Minds touts itself as one of the most innovative dynamic NFT projects to date. It’s mainly because how rare the NFT evolves depends completely on how its owner interacts with or influences the asset. While some of LIOM NFTs properties are predefined (like number of Boids, evolution speed, and shape), others get influenced by the owner’s wallet. This gives the holders a reason to not trade their asset and hold them until it evolves into something rare. LIOM NFT consists of two main parts; first is the Boids which are an animated NFT collection, whereas, the second facet is the Mother Flock which represents a generative video sculpture. One interesting fact about Mother Flock is that the image it displays to its user represents the current behavior and psychology of humans and birds. LIOM started to roll out the NFTs for collectors on 25th October 2022. Check them out &lt;a href="https://og.art/collections/liom/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quirky Soul College
&lt;/h2&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%2Fh5o7hatn4d2fsvznwrk3.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%2Fh5o7hatn4d2fsvznwrk3.png" alt="Image description" width="624" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quirky Soul College launched the first dynamic NFT game on the Neo N3 blockchain that allows users to level up their NFT characters as they progress and increase their powers to complete the missions. They minted 10,000 dynamic NFTs (which began on October 31t) that have 7 visual traits, 1 secret hidden trait, and 6 abilities. Players also get to earn Fresh Dark Elixir (FDE) tokens as they play with Quirky NFTs which they can later use to participate in various missions, heal their characters, and interact with the Quirky Soul College world. Have a look at their whitepaper to know everything about their dynamic NFTs, token, their character features, and much more &lt;a href="https://www.quirkysoulcollege.com/whitepaper" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

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

&lt;p&gt;There’s no doubt that dynamic NFTs have opened up a lot of new use cases that both popular legacy brands and web3 brands are utilising. Unlike static NFTs, dynamic NFTs have the power to change their appearance over time which sets them apart from the traditional ERC-721 standard. We’ve listed a few of the dynamic NFT projects that you can check out in this blog and see how they’re leveraging this outstanding technology to make an impact in the industry. In case you’re wondering how you can program an NFT, then have a look at our free simulator that allows you to change the properties, images, and automate your NFTs seamlessly.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="//revise.network"&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>discuss</category>
      <category>productivity</category>
      <category>career</category>
      <category>ai</category>
    </item>
    <item>
      <title>Revise Hack - Add and Update multiple NFT’s using the Revise SDK</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Fri, 10 Feb 2023 08:58:22 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/revise-hack-add-and-update-multiple-nfts-using-the-revise-sdk-125a</link>
      <guid>https://dev.to/anil_from_revise/revise-hack-add-and-update-multiple-nfts-using-the-revise-sdk-125a</guid>
      <description>&lt;p&gt;Here is a quick and easy way to add and update multiple dNFT’s for our collection using the Revise SDK.&lt;/p&gt;

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

&lt;p&gt;Start by making a collection using the Revise SDK with the your collection &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;uri.&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="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="nf"&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;p&gt;After execution of the above code you will receive a unique collection ID as a response, copy it and paste it in your &lt;code&gt;.env&lt;/code&gt; file or any other config file that you are maintaining as we will need it in the future while adding the dNFTs into your collection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Storing NFT ID’s in a smart contract
&lt;/h3&gt;

&lt;p&gt;Now in case you are using dNFT for various purposes in the tool , there might be a lot of dNFT’s getting added to your tool and in order to update them we will need to store their ID’s. Storing them in contract is the safest, so we have provided a contract below for context and for you to use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

//using counters provided by openzeppelin, one can aso write their own counter program
import "@openzeppelin/contracts/utils/Counters.sol";

contract RealEstate {

    using Counters for Counters.Counter;

        //making a counter to keep track of the number of dnft added to the collection
    Counters.Counter private nftcount;

        //function that will return the current number of dnft
    function currNFTcount() public view returns(uint256) {
        return nftcount.current();
    }

        //function that increase the count when a dnft is added to the collection
    function incNFTcount() private {
        nftcount.increment();
    }

        //array that will store the dnft ids in form of string
        string[] private nftTokenIds;

        //function that adds the dnft to the array and inc the nftcount
        function addNFT(string memory _nftTokenId) authorized(msg.sender) public payable {
        nftTokenIds.push(_nftTokenId);
        incNFTcount();
        }

        //function that returns all the dnftid added to the collection
        function getAllNFTIds() public view returns(string[] memory) {
        return nftTokenIds;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have a dNFT collection and a smart contract to store the &lt;code&gt;nftcount&lt;/code&gt; and the &lt;code&gt;nftID&lt;/code&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting our previous smart contract to our js file
&lt;/h3&gt;

&lt;p&gt;Before we start adding NFT’s, we need to connect the smart contract we previously created with our Javascript code.  There are various way of doing the below, but we prefer this method. Feel free to follow other methods, but ensure that you can establish a connection with the smart contract.&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;import&lt;/span&gt; &lt;span class="nx"&gt;Reactfrom&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&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;ethers&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="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;Contract&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// address of the contract&lt;/span&gt;
  &lt;span class="nx"&gt;ContractABI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//abi of the contract&lt;/span&gt;
  &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//authkey provided by revise SDK&lt;/span&gt;
  &lt;span class="nx"&gt;collectionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// collection Id recorded when we made the collection previously&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&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;./constants&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Web3Modal&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&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;web3modal&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="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="nf"&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;revise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&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;key&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TransactionContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TransactionProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&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;getEthereumContract&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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="c1"&gt;// Talk to the smart contact in Ethereum blockchain&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&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;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Web3Provider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethereum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eth_requestAccounts&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="c1"&gt;// Implement the signing in metamask&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;signer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// Three ingredients to fetch an contact&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;transactionContract&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;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;Contract&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;ContractABI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;signer&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// logging the contrac&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;transactionContract&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;//other functions that are needed to be coded , like the generateNFT we will add after this ..... &lt;/span&gt;
&lt;span class="c1"&gt;//....&lt;/span&gt;
&lt;span class="c1"&gt;//.....&lt;/span&gt;

&lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TransactionContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;
      &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;connectWallet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;checkIfWalletIsConnect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;generateNFT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;TransactionContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding NFT’s to our collection
&lt;/h3&gt;

&lt;p&gt;Now let’s implement the function which handles the part of adding the NFT to the collection.&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;generateNFT&lt;/span&gt; &lt;span class="o"&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;param1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;param2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;param3&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;contract&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getEthereumContract&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="c1"&gt;// setting index to the current nft count number&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;index&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;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;currNFTcount&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;ind&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;indfinal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ind&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// function to add the nft to the collection&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&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="nf"&gt;addNFT&lt;/span&gt;&lt;span class="p"&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="s2"&gt;xyz&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="nx"&gt;indfinal&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="s2"&gt;This is a dnft made for demo purposes &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
          &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
          &lt;span class="nx"&gt;landdetails&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://i.ibb.co/4dXWQhC/Frame-57.gif&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;param1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;param1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;param2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;param2&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;param3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;param3&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="nx"&gt;collectionId&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nftadded&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;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addNFT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nx"&gt;res&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="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;gasLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000000&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nftadded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;();&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://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%2Fblwlq9dyinw2n4snn43s.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%2Fblwlq9dyinw2n4snn43s.png" alt="Image description" width="800" height="391"&gt;&lt;/a&gt;&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%2Ftvzy3mbymr64zbgpq51r.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%2Ftvzy3mbymr64zbgpq51r.png" alt="Image description" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The images above show the NFT’s being added on the Revise Dashboard.&lt;/p&gt;

&lt;p&gt;You can have an array of objects containing relevant data and then loop over the array while conditionally triggering the function above. Below is just a simple example of how to use it , the function above can be used as per need of the tool so feel free to experiment/change.&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;connectWallet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;currentAccount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;generateNFT&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TransactionContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nftdata&lt;/span&gt;&lt;span class="o"&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;data about nft1&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;data about nft2&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;data about nft3&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;data about nft4&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;multiplenft&lt;/span&gt; &lt;span class="o"&gt;=&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="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;nftdata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nf"&gt;generateNFT&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Updating multiple NFT’s at the same time
&lt;/h3&gt;

&lt;p&gt;As the NFTs has been added to the collection, we can now look at how to update them simultaneously. To achieve this we will use the array we prepared on the contract earlier which is &lt;code&gt;nftTokenIds&lt;/code&gt;. We will acquire the array from contract and then loop it to update each and every NFT in out collection using their respective &lt;code&gt;nftID&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We will be using Alchemy this time to integrate our contract to our Javascript - this is just another way to integrate contracts. You can choose whatever way you are comfortable with.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { ethers } = require("ethers");
conequire("axios");
const {
  Contract,
  ContractABI,
  key,
  collectionId,
} = require("./constants");

let nftt = null;

//example data
const home = [
  {
    coins: "0",
    image: "https://i.ibb.co/0DKLtm0/home0.png",
  },
  {
    coins: "1",
    image: "https://i.ibb.co/JmHs3RJ/Home1.png",
  },
  {
    coins: "2",
    image: "https://i.ibb.co/YcBDqF9/Home2.png",
  },
  {
    coins: "3",
    image: "https://i.ibb.co/Nj65rrj/Home3.png",
  },
  {
    coins: "4",
    image: "https://i.ibb.co/j5SvNtN/Home4.png",
  },
];

async function API() {

 //current param of the dnft
  let param1 = nftt?.nft?.metaData[1]?.param1;
  let param2 = nftt?.nft?.metaData[1]?.param2;

  //do changes in the parameters or metadata of the dnft as you like using different conditional statments and apis

    //then return the desired changed data back to the update function 
  let data = Home[param1];
  return data;

}

//function to fetch the nftarray from the contract
const fetchNftArray = async () =&amp;gt; {
  const alchemy = new ethers.providers.AlchemyProvider(
    "maticmum",
    "key"
  );
  const contract = new ethers.Contract(
    Contract,
    ContractABI,
    alchemy
  );
  const allNftIds = await contract.getAllNFTIds();
  return allNftIds;
};

//function that takes care of the update of the dnfts whose ids we acquired from the contract
async function update() {
  const nftArray = await fetchNftArray();

  for (let i = 0; i &amp;lt; nftArray.length; i++) {
    const res = await revise.fetchNFT(nftArray[i]);
    const nft = revise.nft(res);
    nftt = nft;
    revise
      .every("10s")
      .listenTo(API)
      .start(async (data) =&amp;gt; {
        await nft
          .setProperty("param1", data.coins)
          .setImage(data.image)
          .save();
      });
  }
}

update();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fykhhvvc85su2w5cgjffq.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%2Fykhhvvc85su2w5cgjffq.png" alt="Image description" width="800" height="393"&gt;&lt;/a&gt;&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%2F6ujpeiekbk7k5nmjg4fq.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%2F6ujpeiekbk7k5nmjg4fq.png" alt="Image description" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;To summarize:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a collection&lt;/li&gt;
&lt;li&gt;Store the NFT ID’s in a smart contract - because its safer!&lt;/li&gt;
&lt;li&gt;Add NFT’s to our collection and connect the smart contract from step 2 to your code&lt;/li&gt;
&lt;li&gt;Update multiple NFT’s at the same time - while using Alchemy&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that’s all! Hope you found that easy and learned something new. Happy building on Revise!&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" rel="noopener noreferrer"&gt;here&lt;/a&gt; join our &lt;a href="https://discord.gg/47wkvCz3" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; or message us on &lt;a href="https://twitter.com/ReviseNFT" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>abotwrotethis</category>
      <category>wecoded</category>
      <category>ai</category>
      <category>gratitude</category>
    </item>
    <item>
      <title>The AI Age of NFTs: Deep Dive</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Thu, 09 Feb 2023 12:51:41 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/the-ai-age-of-nfts-deep-dive-1g6e</link>
      <guid>https://dev.to/anil_from_revise/the-ai-age-of-nfts-deep-dive-1g6e</guid>
      <description>&lt;p&gt;2021 saw a massive rise in the adoption of NFTs and since then, we’ve witnessed its continuous growth and many new advancements that added to its use cases. While digital assets have already become fairly mainstream, there’s no doubt that we’ve just touched upon their actual potential and that they can certainly evolve into more disruptive tech with the advancement of technology. &lt;/p&gt;

&lt;p&gt;AI has been here for a while now. However, with ChatGPT &amp;amp; OpenAI going viral - the discussion around the use of AI in the web3 space, especially NFTs has once again caught fire. Many are of the opinion that in order to advance the current state of NFTs, artificial intelligence comes out as one of the most promising solution, especially at a time when it's progressing exponentially.&lt;/p&gt;

&lt;p&gt;So, what does AI has to do with NFTs? &lt;br&gt;
What role does AI play in the NFT Space? &lt;br&gt;
Are there any benefits or potential risks involved with using Artificial Intelligence in the NFT space?&lt;/p&gt;

&lt;p&gt;These are some of the questions that we’ll be looking into &amp;amp; (possibly answer) in this blog. Allow us to elaborate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Role of AI in the NFT Space
&lt;/h2&gt;

&lt;p&gt;We all know the first generation of NFTs were static and there was a lot of debate around whether they held any actual utilities. Considering that, several argue - AI can have a colossal impact on the next wave of NFTs as they must go from simple JPEG images to smart and intelligent collectables. Generative art is one such example where users can batch-create NFTs by using AI tools like NightCafe.&lt;/p&gt;

&lt;p&gt;However, the use cases go far beyond that: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI when converged with NFTs can let them evolve on their own and program smart contracts with dynamic elements as a result of their self-learning ability. &lt;/li&gt;
&lt;li&gt;It would also be safe to envision NFTs explaining the inspiration behind why they evolved as a specific art. &lt;/li&gt;
&lt;li&gt;We could also experience NFTs that could evolve as per our mood, feelings, and based on our conversations with them.&lt;/li&gt;
&lt;li&gt;AI can also make the NFT marketplace smarter and more intuitive which may attract new customers and increase sales.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The role of artificial intelligence (AI) in non-fungible tokens (NFTs) can also vary depending on the specific application. Some other possible ways in which AI can be used in conjunction with NFTs include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generating unique digital content: AI can be used to create unique pieces of art, music, or other digital media that are represented by NFTs. For example, an artist could use an AI model to generate a series of unique paintings, and then sell NFTs representing ownership of each painting.&lt;/li&gt;
&lt;li&gt;Creating interactive experiences: NFTs can be used to represent ownership of interactive experiences that use AI to generate unique content on demand. For example, an NFT could represent ownership of a virtual reality experience that uses AI to generate unique landscapes or characters each time it is accessed.&lt;/li&gt;
&lt;li&gt;Verifying the authenticity of NFTs: AI can be used to help verify the authenticity of NFTs by analysing the content they represent and comparing it to other known works. This can help prevent the sale of counterfeit NFTs and increase confidence in the NFT market.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While these may sound futuristic, there are already projects who are bringing such imaginative visions to life. Let’s take a look at a few of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  FUZZLE
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://collectfuzzle.com/" rel="noopener noreferrer"&gt;Fuzzle&lt;/a&gt;, for example, is an AI-powered NFT that can engage around topics such as crypto, life, dating, religion, and so on. Not only so, but you can also play games with your NFT and create rare stories using AI. &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%2Fyug60e34jgc5hoeim334.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%2Fyug60e34jgc5hoeim334.jpeg" alt="Image description" width="624" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ALETHEA AI
&lt;/h2&gt;

&lt;p&gt;Another project called &lt;a href="https://alethea.ai/" rel="noopener noreferrer"&gt;Alethea AI&lt;/a&gt; created the first intelligent NFT (iNFT), dubbed Alice, in 2021 and sold it for a massive $478,800. Alethea AI uses blockchain and AI technology to allow users to infuse AI animations and voice elements into their NFTs. What’s more interesting about Alethea is the fact that it lets users create, train, and earn from their iNFTs in Noah’s Ark, the world’s first intelligent metaverse. &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%2Fsjuftmpf6mehn8x01xq5.gif" 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%2Fsjuftmpf6mehn8x01xq5.gif" alt="Image description" width="512" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ALTERED STATE MACHINE
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.alteredstatemachine.xyz/" rel="noopener noreferrer"&gt;Altered State Machine&lt;/a&gt; (ASM) is yet another budding platform that allows creators to infuse artificial intelligence into their existing NFTs. If you’re a soccer fan, then there are good chances that you might have already heard about their recent collaboration with FIFA to create an AI-powered metaverse-focused game called AI League. The best part about this platform is ASM Brains and Non-Fungible Intelligence (NFI) that can inject life into your digital avatars/NFTs.&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%2Ff7soiax70p36pz62xvmz.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%2Ff7soiax70p36pz62xvmz.jpeg" alt="Image description" width="624" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Using AI for NFTs
&lt;/h2&gt;

&lt;p&gt;AI will certainly beef up the non-fungible tokens and the use cases we may experience with their intersection are unbelievable. The simple proof of ownership of NFTs will turn into intelligent proprietary software that'll help everyone - from NFT creators to consumers - get the most out of it.&lt;/p&gt;

&lt;p&gt;As NFTs already reside on one of the safest techs ever (blockchain), integrating AI with NFTs will further expand it in dealing with cybersecurity attacks.  AI when linked with NFTs will also let users see more specific content on the internet as per their interaction with the digital asset sitting in their wallet.&lt;/p&gt;

&lt;p&gt;Brands can use such AI-powered NFTs for various purposes such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attracting potential customers or audience&lt;/li&gt;
&lt;li&gt;Innovative and new ways to produce and disseminate content&lt;/li&gt;
&lt;li&gt;Exploring new trends in the industry&lt;/li&gt;
&lt;li&gt;Keeping the community hooked with novel ways of interacting with their assets&lt;/li&gt;
&lt;li&gt;Increased efficiency and accuracy in verifying authenticity&lt;/li&gt;
&lt;li&gt;Ability to create unique, one-of-a-kind NFTs through AI-generated content&lt;/li&gt;
&lt;li&gt;Enhanced user experience through AI-powered marketplaces and gaming environments. And many more. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges and Ethical Concerns
&lt;/h2&gt;

&lt;p&gt;As is with everything, AI into NFTs also stir up some ethical concerns &amp;amp; challenges that are worth noting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lack of transparency and understanding about how AI-generated NFTs are created&lt;/li&gt;
&lt;li&gt;Potential for misuse or exploitation of AI in the NFT market&lt;/li&gt;
&lt;li&gt;Ethical concerns surrounding the creation and ownership of AI-generated art and collectibles&lt;/li&gt;
&lt;li&gt;Possibly with time, we’ll have a clearer resolution to all of these. However, it definitely does not act as a free pass to totally negate the use of AI.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Looking at the use cases and the capabilities of both technologies (AI &amp;amp; NFTs), it might not be amiss to remark that the future looks promising once they both intertwine closely. AI still has a long way to go, however, it can radically change the entire NFT industry once fully matured. &lt;/p&gt;

&lt;p&gt;If you seek a way to infuse dynamic elements into your digital assets, then it has never been easier with our simulator that allows changing the properties, images, and automating your NFTs in a few clicks. Try it for free here.&lt;/p&gt;

&lt;p&gt;For more recent updates about NFTs and their convergence with AI, 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>jokes</category>
      <category>devmeme</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Managing Real Estate as Dynamic NFTs</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Wed, 08 Feb 2023 12:03:35 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/managing-real-estate-as-dynamic-nfts-fh5</link>
      <guid>https://dev.to/anil_from_revise/managing-real-estate-as-dynamic-nfts-fh5</guid>
      <description>&lt;p&gt;A hot topic of discussion amongst our community has been real estate tokenisation and how upgrades, issues and sales data regarding a property can be stored and shared easily using the blockchain. In light of this, we thought of creating a simple technical example to help you understand how you can tokenise your property as a dynamic NFT (dNFT) and store updates about it on the blockchain using Revise.&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 real estate NFT collection, then tokenise a real estate property and finally store changes that are occurring on this property. 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;
  
  
  Create a Repo
&lt;/h3&gt;

&lt;p&gt;Let’s clone this &lt;a href="https://github.com/revise-network/nft-tutorial-1" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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="nf"&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="nc"&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="nf"&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="nf"&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" rel="noopener noreferrer"&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;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" rel="noopener noreferrer"&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://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%2Frdyttubh7v1rbu4hk46a.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%2Frdyttubh7v1rbu4hk46a.png" alt="Image description" width="690" height="39"&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 real estate 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 Properties”. This collection can have multiple NFTs. Each NFT is a property. 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. “myproperties" is a valid Collection URI “my properties are epic” 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="nf"&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 Properties&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 "myproperties12345"&lt;/span&gt;
&lt;span class="c1"&gt;//                   your baseURI wil be "myproperties.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 real estate. We’ll use the &lt;code&gt;addNFT&lt;/code&gt; function to create our real estate NFT. 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="nf"&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/tutorial/2023.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;Castle Street Property&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;Townhouse with great interiors&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;street&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 Castle Street&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;maintenance_history&lt;/span&gt;&lt;span class="p"&gt;:&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;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&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;past_sales&lt;/span&gt;&lt;span class="p"&gt;:&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="nf"&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 property, the name, description, &lt;code&gt;tokenId&lt;/code&gt; and some metadata 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 “street”, “maintenance_history“, age”, “past_sales” 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="nf"&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="nc"&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="nf"&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="nf"&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 Properties&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="nf"&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/tutorial/2023.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;Castle Street Property&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;Townhouse with great interiors&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;street&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 Castle Street&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;maintenance_history&lt;/span&gt;&lt;span class="p"&gt;:&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;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&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;past_sales&lt;/span&gt;&lt;span class="p"&gt;:&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="nf"&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="nf"&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://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%2F00pj04i73rtu5nmfsa5f.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%2F00pj04i73rtu5nmfsa5f.png" alt="Image description" width="800" height="68"&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 real estate. &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" rel="noopener noreferrer"&gt;Revise dashboard&lt;/a&gt; to see your NFT real estate in action.&lt;/p&gt;

&lt;p&gt;Click on the “View” button to see your NFT and it show show up with the image of your house from 2023.&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%2Fh0xyqz2jx17phz8cd90e.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%2Fh0xyqz2jx17phz8cd90e.jpeg" alt="Image description" width="500" height="500"&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 NFT Real Estate property, let’s show any updates that have happened to it. Let’s add some mock data to show the maintenance related updates and also any new sales data for this house.&lt;/p&gt;

&lt;p&gt;Create a new file called &lt;code&gt;updates.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="nf"&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="nc"&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;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;maintenance_history&lt;/span&gt; &lt;span class="p"&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;2022, New roof&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;2024, New deck&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;past_sales&lt;/span&gt; &lt;span class="p"&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;2022, $300,000&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;2024, $380,000&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;2028, $420,000&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/tutorial/2052.png&lt;/span&gt;&lt;span class="dl"&gt;"&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;data&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="nf"&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="nf"&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;10m&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&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="nf"&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;property&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="nf"&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;b73897be-cf0e-4517-8de7-cd83be8aae8d&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="nf"&gt;nft&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;property&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&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;maintenance_history&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;maintenance_history&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&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;past_sales&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;past_sales&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&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="nf"&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="nf"&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;property&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; is updated`&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="nf"&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 are creating some mock data for maintenance_history and past_sales. Then we’re setting up automation which will fetch the data and update our real estate attributes every 10 minutes with a new image. Execute the above file by running &lt;code&gt;node updates.js&lt;/code&gt;. The program will execute automatically and show all the updates that have occurred to your real estate. We are aware that our UI does not display the information correctly (no spacing etc) - don’t worry this is getting fixed in our next release (coming soon!) 😊&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%2Fk59k2haa223bc0uhhhag.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%2Fk59k2haa223bc0uhhhag.jpeg" alt="Image description" width="690" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats on creating your real estate collection and property NFT! &lt;a href="https://dev.to/anil_from_revise/how-to-publish-your-nft-on-opensea-testnet-3n29"&gt;Publish your Real Estate NFT 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" rel="noopener noreferrer"&gt;here&lt;/a&gt; or join &lt;a href="https://discord.gg/47wkvCz3" rel="noopener noreferrer"&gt;our Discord&lt;/a&gt; or message us on &lt;a href="https://twitter.com/ReviseNFT" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>help</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Are you an Aspiring Web3 Developer? These 10 Tools Will Make your Life Easy</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Thu, 05 Jan 2023 15:04:41 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/are-you-an-aspiring-web3-developer-these-10-tools-will-make-your-life-easy-2i62</link>
      <guid>https://dev.to/anil_from_revise/are-you-an-aspiring-web3-developer-these-10-tools-will-make-your-life-easy-2i62</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/"&gt;Website&lt;/a&gt; | &lt;a href="https://twitter.com/ReviseNFT"&gt;Twitter&lt;/a&gt; | &lt;a href="https://discord.com/invite/aMRnzBR5Pj"&gt;Discord&lt;/a&gt; | [&lt;a href="https://www.instagram.com/revisenft/"&gt;Instagram&lt;/a&gt; | &lt;a href="https://www.facebook.com/ReviseNFT/"&gt;Facebook&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>tooling</category>
      <category>blockchain</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Building Dynamic NFTs on Tezos</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Wed, 30 Nov 2022 12:27:20 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/building-dynamic-nfts-on-tezos-5dfb</link>
      <guid>https://dev.to/anil_from_revise/building-dynamic-nfts-on-tezos-5dfb</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/" rel="noopener noreferrer"&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/" rel="noopener noreferrer"&gt;Objkt&lt;/a&gt;, &lt;a href="https://kalamint.io/" rel="noopener noreferrer"&gt;Kalamint&lt;/a&gt; and &lt;a href="https://rarible.com/" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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="n"&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="n"&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="n"&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="n"&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="nc"&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="nc"&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="n"&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="nf"&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="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&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="n"&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="n"&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="sh"&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="sh"&gt;"""&lt;/span&gt;
            &lt;span class="n"&gt;sp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&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="nf"&gt;result&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&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="n"&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="nf"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get Token Metadata&lt;/span&gt;&lt;span class="sh"&gt;"&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="n"&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="n"&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="n"&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="n"&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="n"&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/" rel="noopener noreferrer"&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://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%2Fyw11zhildz47e2hoxnno.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%2Fyw11zhildz47e2hoxnno.png" alt="Image description" width="800" height="435"&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://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%2Fgly0o67nwc945hh7xglf.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%2Fgly0o67nwc945hh7xglf.png" alt="Image description" width="800" height="304"&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" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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="nf"&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="nc"&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="nf"&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="nf"&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" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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://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%2F9f0jtvot9b6wup2wk59l.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%2F9f0jtvot9b6wup2wk59l.png" alt="Image description" width="800" height="45"&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="nf"&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="nf"&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="nf"&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="nf"&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="nc"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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://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%2Fp1lxifdpqnlyagwk8ue5.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%2Fp1lxifdpqnlyagwk8ue5.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" rel="noopener noreferrer"&gt;Revise dashboard&lt;/a&gt; to see your NFT player in action.&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%2Fpp58fxb9yr5igh5yp4e1.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%2Fpp58fxb9yr5igh5yp4e1.png" alt="Image description" width="800" height="162"&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://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%2Fx7wt1rjd3fpc4m0dduyo.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%2Fx7wt1rjd3fpc4m0dduyo.png" alt="Image description" width="800" height="800"&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="nf"&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="nc"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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://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%2Fv6s7dpuj4e2irz92tl0x.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%2Fv6s7dpuj4e2irz92tl0x.png" alt="Image description" width="800" height="730"&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" rel="noopener noreferrer"&gt;here&lt;/a&gt; or join &lt;a href="https://discord.gg/47wkvCz3" rel="noopener noreferrer"&gt;our Discord&lt;/a&gt; or message us on &lt;a href="https://twitter.com/ReviseNFT" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>Unlock Multiple Revenue Streams in Web3 Through Dynamic NFTs - Revise Network</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Fri, 25 Nov 2022 10:11:54 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/unlock-multiple-revenue-streams-in-web3-through-dynamic-nfts-revise-network-58i3</link>
      <guid>https://dev.to/anil_from_revise/unlock-multiple-revenue-streams-in-web3-through-dynamic-nfts-revise-network-58i3</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://res.cloudinary.com/practicaldev/image/fetch/s--h0JZWbzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q627y1ky0h4pr3r0c2cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h0JZWbzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q627y1ky0h4pr3r0c2cl.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://res.cloudinary.com/practicaldev/image/fetch/s--J68BbUZh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/498tps8lx5js1zroo3hw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J68BbUZh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/498tps8lx5js1zroo3hw.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://res.cloudinary.com/practicaldev/image/fetch/s--xqmG54cL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3gndzlzfskf7nvdb4lb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xqmG54cL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3gndzlzfskf7nvdb4lb.png" alt="Image description" width="512" height="372"&gt;&lt;/a&gt;&lt;br&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://res.cloudinary.com/practicaldev/image/fetch/s--jRGC-ydU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvqdt7juz0nyvdnlfhp3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jRGC-ydU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvqdt7juz0nyvdnlfhp3.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;Website | Twitter | Discord | Instagram | Facebook &lt;/p&gt;

</description>
      <category>web3</category>
      <category>javascript</category>
      <category>blockchain</category>
      <category>writing</category>
    </item>
    <item>
      <title>Changing the Game of Ticketing Using Revise and NFTs</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Mon, 21 Nov 2022 07:18:18 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/changing-the-game-of-ticketing-using-revise-and-nfts-23ck</link>
      <guid>https://dev.to/anil_from_revise/changing-the-game-of-ticketing-using-revise-and-nfts-23ck</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" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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="nf"&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="nc"&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="nf"&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="nf"&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" rel="noopener noreferrer"&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" rel="noopener noreferrer"&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://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%2Fwa8bgw2nl0lro58xxm4m.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%2Fwa8bgw2nl0lro58xxm4m.png" alt="Image description" width="800" height="45"&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 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="nf"&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="nf"&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="nf"&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="nf"&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="nc"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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://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%2Ft75t5mg23pibycc2qpmj.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%2Ft75t5mg23pibycc2qpmj.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" rel="noopener noreferrer"&gt;Revise dashboard&lt;/a&gt; to see your NFT ticket in action.&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%2Fw14qinl6ultgop0o2zhm.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%2Fw14qinl6ultgop0o2zhm.png" alt="Image description" width="800" height="136"&gt;&lt;/a&gt;&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%2F60cfek8s9atx6ohwjnqb.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%2F60cfek8s9atx6ohwjnqb.png" alt="Image description" width="800" height="609"&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="nf"&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="nc"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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" rel="noopener noreferrer"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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="nf"&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://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%2Fp70oaca30cvft8qczkxw.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%2Fp70oaca30cvft8qczkxw.png" alt="Image description" width="800" height="617"&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" rel="noopener noreferrer"&gt;here&lt;/a&gt; or join &lt;a href="https://discord.gg/47wkvCz3" rel="noopener noreferrer"&gt;our Discord&lt;/a&gt; or message us on &lt;a href="https://twitter.com/ReviseNFT" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>llm</category>
    </item>
    <item>
      <title>NFT Ticketing System: All You Need to Know</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Wed, 16 Nov 2022 13:18:37 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/nft-ticketing-system-all-you-need-to-know-20p4</link>
      <guid>https://dev.to/anil_from_revise/nft-ticketing-system-all-you-need-to-know-20p4</guid>
      <description>&lt;p&gt;The OG year for the entire crypto and NFT space was 2021, hands down. NFTs alone reached a massive $22 billion market size compared to $232 million in the previous year attracting eyeballs from the everyman to the celebrated. One good example is the popular Grammy-winner and American Rock Band, &lt;a href="https://kingsofleon.com/"&gt;Kings of Leon&lt;/a&gt;, which released three NFT collections to support their album “When You See Yourself” last year. Another example could be the football club, Dynamo, which released NFTs tickets on the Binance NFT marketplace for their 2021 season. &lt;/p&gt;

&lt;p&gt;So coming back to the Kings of Leon NFT collection, out of the three, two NFTs contained an audio recording and a limited-edition album cover &amp;amp; vinyl, whereas, remarkably, the third one was a golden NFT ticket that could be used as an actual concert pass to the musical band’s shows for a lifetime with assured four front-row seats. The golden ticket holders also acquired a few other interesting perks, such as concierge, personal pick-and-drop drivers, access to exclusive merchandise, and personal interaction with the band. Now that’s crazy, right! &lt;/p&gt;

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

&lt;p&gt;But, in case you’re scratching your head wondering, “what are NFT tickets?” then don’t fret. &lt;a href="https://revise.network"&gt;Follow our in-depth guide&lt;/a&gt; below to uncover everything you need to know about the NFT ticketing system. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&amp;gt; Moreover, you can&lt;a href="https://app.livestorm.co/revise-network/web3-in-30-mins-or-future-of-nft-tickets-is-dynamic"&gt; register to our FREE Webinar &lt;/a&gt;where we present the step-by-step to build and manage NFT tickets. Happening on Thursday, 17 November 2022 at 6 PM IST - &lt;a href="https://app.livestorm.co/revise-network/web3-in-30-mins-or-future-of-nft-tickets-is-dynamic"&gt;https://app.livestorm.co/revise-network/web3-in-30-mins-or-future-of-nft-tickets-is-dynamic&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s get right to it! &lt;/p&gt;

&lt;h2&gt;
  
  
  What is NFT Ticketing?
&lt;/h2&gt;

&lt;p&gt;To give a quick rundown, NFTs are non-fungible tokens that represent digital assets stored on blockchain technology. Most people think of NFTs as just digital art like BAYC, CryptoPunks, etc. However, it’s much more than that. Real estate, digital collectibles, supply chain, and gaming are among a few industries where NFTs could be seen adding more value to their working operations. And just like that, ticketing is yet another sector NFTs are disrupting. &lt;/p&gt;

&lt;p&gt;NFT tickets are exactly what they sound like: tickets in the form of non-fungible tokens which underlie blockchain technology. Unlike an artwork NFT, NFT tickets are specifically used to hold one’s credentials to an event or a show. &lt;/p&gt;

&lt;h2&gt;
  
  
  NFT Ticketing System - Is It the Future?
&lt;/h2&gt;

&lt;p&gt;Digital tickets have replaced paper tickets, whereas NFT tickets have surpassed the digitization of tickets, which is, by the way, vulnerable to internet attacks. Users can simply carry their NFT tickets in their web3 wallets - MetaMask, Trust Wallet, etc. - and use them without fearing their tickets getting stolen, lost, or damaged. &lt;/p&gt;

&lt;p&gt;Here are some of the few other challenges it solves: &lt;/p&gt;

&lt;h1&gt;
  
  
  Prevents Counterfeits
&lt;/h1&gt;

&lt;p&gt;Counterfeits or forgery are pretty normal with paper tickets or the QR codes that users get in the email, as they can be easily faked. Additionally, most of the time, scammers use a pool of bots to buy tickets online and later sell them on third-party platforms at an inflated price, also known as black marketing or scalping. With NFT tickets, users don’t have to be anxious about the ticket’s legitimacy as their transactions get stored on blockchain technology. Hence, validating the ticket’s authenticity becomes a breeze for users. &lt;/p&gt;

&lt;h1&gt;
  
  
  No Further Value
&lt;/h1&gt;

&lt;p&gt;Paper, or digital tickets, for that matter, are usually the use-and-throw thing. They don’t have any further value and can’t be used again for any purposes, which, however, is not the case with NFT tickets. The non-fungible tickets open additional revenue streams for its holders, artists, and event organizers as well. For instance, if a user trades their ticket on a secondary marketplace, the artist may also get a portion of the resale revenue if they’ve programmed their NFT tickets to work this way. &lt;/p&gt;

&lt;h2&gt;
  
  
  Major Brands Powering Themselves With NFT Tickets
&lt;/h2&gt;

&lt;p&gt;The concept of NFT ticketing might not be mainstream right now, but it’ll certainly be with time. Many brands/artists are already leveraging this invincible technology to create a robust and risk-free environment for users to own the passes to a certain event. And yes, let’s not forget how NFT tickets are a great way to expand revenue opportunities and can even be used as rare collectibles. &lt;/p&gt;

&lt;p&gt;The 2024 Paris Olympic Games, for example, would be seen using blockchain-powered tickets as the French government’s envoy, Michel Cadot, has already proposed the idea to their Prime Minister. Aligned with the same vision, the 2023 Rugby World Cup can also be seen implementing the same technology.&lt;/p&gt;

&lt;p&gt;Moreover, in 2018, Shankai sports, an international company based in China, partnered with AlphaWallet to facilitate the sales, and distribution of FIFA World Cup tickets. This idea was to make the ticket distribution more secure for the event and eliminate fraudulent activities. &lt;/p&gt;

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

&lt;p&gt;Besides that, one of the world's most popular music and arts festivals, Coachella, also announced the launch of Coachella Collectibles NFTs in Q1 of 2022. They launched 10 keys (or passes) that granted users lifetime access to their festival and 1,000 NFTs as Coachella photo books. Not just that, Coachella also introduced 10,000 NFTs for unique soundscapes and fan-favorite photos from the event, priced at $60/piece. &lt;/p&gt;

&lt;p&gt;Moving on, independent musicians/artists or group bands are also utilizing NFT tickets for their live shows and events. For example, pop artist, Pip, released Cotton Candy NFTs as a part of its crowdfunding campaign and sold out “Gold Backstage Pass” within just 24 hours of its release. &lt;/p&gt;

&lt;p&gt;NFT tickets are already prevalent in the music industry bringing in a lot of perks for artists and NFT holders as well. So, in that light, let’s discuss what NFT tickets offer to the guests and event coordinators. &lt;/p&gt;

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

&lt;p&gt;NFT Tickets as Unique Collectables&lt;/p&gt;

&lt;p&gt;NFT Tickets are more than just a one-time use thing. Due to their rarity, users or the event guests can acquire them as collectible items, coins, or even stamps. This is a great way to showcase rare art - both physically and virtually (in the metaverse).  &lt;/p&gt;

&lt;h1&gt;
  
  
  Reselling Tickets
&lt;/h1&gt;

&lt;p&gt;NFT tickets can easily be sold at secondary marketplaces if you can’t go to an upcoming event for any reason. Also, as NFT tickets are secure and can’t be forged, they can be sold at the same price the ticket was bought in the first place, or even higher, depending on the popularity of the event/artists. &lt;/p&gt;

&lt;h1&gt;
  
  
  Creating Aesthetic NFTs
&lt;/h1&gt;

&lt;p&gt;Event coordinators can sit around with artists to infuse aesthetics into their NFT tickets. This way, they can increase the chances of selling the tickets at a relatively higher price. For example, instead of using an uninteresting random image for an NFT ticket, a musician can take its album cover, tweak it around with creativity, and attract more people towards it. Not to mention, the selling and distribution of NFT tickets to consumers can be better tracked than regular digital tickets. &lt;/p&gt;

&lt;h2&gt;
  
  
  NFT Ticketing and Dynamic NFTs
&lt;/h2&gt;

&lt;p&gt;Dynamic NFTs are the next iteration of Static NFTs, also known as the ERC-721 standard. Even though the ERC-721 is the most used standard on the Ethereum blockchain, Dynamic NFTs are here to change that with their multiple use cases. One main aspect that differentiates non-fungible tokens from ERC-1155 tokens (Dynamic NFTs) is that they are dynamic, meaning, they can change over time as per the external parameters, which is done by programming the NFT’s smart contract. &lt;/p&gt;

&lt;p&gt;Now, can Dynamic NFTs be used as NFT tickets? Absolutely. In fact, it’s better than the ERC-721 standard in so many aspects that it’ll completely transform the NFT ticketing system. Here’s how ERC-1155 will take the ticketing industry to the next level: &lt;/p&gt;

&lt;h2&gt;
  
  
  dNFTs are Programmable Unlocking Multiple Possibilities
&lt;/h2&gt;

&lt;p&gt;A Dynamic NFT can be used as both a ticket and a rare collectible. By virtue of its dynamic nature, it can be programmed like a ticket at first, and then its metadata can be coded to work as a unique collectible, or anything really - like they say, the sky's the limit. &lt;/p&gt;

&lt;h1&gt;
  
  
  Revenue Sharing
&lt;/h1&gt;

&lt;p&gt;Event organizers/artists may decide to share a percentage of their event’s revenue with their ticket holders using Dynamic NFTs. The same NFT can evolve from being a ticket to being a revenue-sharing smart contract.  &lt;/p&gt;

&lt;h1&gt;
  
  
  Dynamic NFT Tickets as Marketing Tools
&lt;/h1&gt;

&lt;p&gt;dNFT tickets can be programmed to evolve based on users' interactions like completing certain tasks, interacting with artists, etc., and finally acquiring, perhaps, a predetermined trait that unlocks rewards for the users. That way, users get more reasons to complete certain quests attached to brand promotion. On the other hand, Dynamic NFT tickets can help event organizers track and receive foolproof data of promotional activities performed by the audience members. &lt;/p&gt;

&lt;h2&gt;
  
  
  To Sum Up
&lt;/h2&gt;

&lt;p&gt;NFT tickets are undoubtedly the future of the ticketing industry, and their mainstream adoption is pretty inevitable. The music and entertainment industry is already stepping in where everyone - from the artists to the guests - gets incentivized, which was not possible with paper, or even, regular digital tickets. In fact, it solves some major challenges associated with traditional tickets, such as fraud, tickets getting stolen or damaged, and a lot more. &lt;/p&gt;

&lt;p&gt;Not just that, but the ERC-1155 standard, which is the Dynamic NFTs, can be a complete game-changer for the ticketing industry, as we already saw in the above section. If you’re looking for ways to create your first Dynamic NFT, follow this guide. You can also try our free simulator that allows changing the properties, images, and automating your NFTs with ease. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://revise.network/"&gt;Website&lt;/a&gt; | &lt;a href="https://twitter.com/ReviseNFT"&gt;Twitter&lt;/a&gt; | &lt;a href="https://discord.com/invite/aMRnzBR5Pj"&gt;Discord&lt;/a&gt; &lt;/p&gt;

</description>
      <category>writing</category>
      <category>blockchain</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Re-defining Trading Cards using Dynamic NFTs</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Thu, 27 Oct 2022 10:37:05 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/re-defining-trading-cards-using-dynamic-nfts-3jg9</link>
      <guid>https://dev.to/anil_from_revise/re-defining-trading-cards-using-dynamic-nfts-3jg9</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 NFT’s will be dynamic. Dynamic NFT’s give us an opportunity to explore a new level of interpretability for NFT’s 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 sport 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;
  
  
  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 NFT’s too it and allow them to change dynamically. 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;
  
  
  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 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;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--OElKylG5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aonmyh42sa78ug4gahm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OElKylG5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aonmyh42sa78ug4gahm5.png" alt="Generate API key" 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--pB4bLMV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gue0o4ylxqauqzqlm5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pB4bLMV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gue0o4ylxqauqzqlm5d.png" alt="run nodejs command" 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--ftqjEcSi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9cuyxwc4sb7a64ppd1hc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ftqjEcSi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9cuyxwc4sb7a64ppd1hc.png" alt="NFT list view" width="880" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pI073LGH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e9ssne9v1lncoi0v8iio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pI073LGH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e9ssne9v1lncoi0v8iio.png" alt="player profile" width="880" height="880"&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 him 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="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 it’s 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--A20xtYbq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y3zz4diz9ni72snsbubd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A20xtYbq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y3zz4diz9ni72snsbubd.png" alt="Revise dynamic NFT dashboard page" width="880" height="804"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats on creating your dynamic football collection and player NFT! &lt;a href="https://dev.to/anil_from_revise/how-to-publish-your-nft-on-opensea-testnet-3n29"&gt;Publish your Player NFT 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>
    <item>
      <title>Building NFTs using truffle and revise</title>
      <dc:creator>Anil Dukkipatty</dc:creator>
      <pubDate>Tue, 27 Sep 2022 12:51:25 +0000</pubDate>
      <link>https://dev.to/anil_from_revise/building-nfts-using-truffle-and-revise-36n2</link>
      <guid>https://dev.to/anil_from_revise/building-nfts-using-truffle-and-revise-36n2</guid>
      <description>&lt;p&gt;Index for the post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;Prerequisites

&lt;ul&gt;
&lt;li&gt;Setting up Ganache&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Installing truffle command-line app&lt;/li&gt;
&lt;li&gt;Building the NFT ERC721 smart contract&lt;/li&gt;
&lt;li&gt;Adding NFT data using Revise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a quick guide to building NFTs using truffle and javascript (revise-sdk).&lt;/p&gt;

&lt;p&gt;Prerequisites: Node version 15 or above, NPM version 7 or above&lt;/p&gt;

&lt;p&gt;We’ll start by installing Ganache. &lt;a href="https://trufflesuite.com/ganache/"&gt;Ganache&lt;/a&gt; will run a sample blockchain locally on your development machine. This will allow us to build and test our NFT smart contracts.&lt;/p&gt;

&lt;p&gt;Click on &lt;a href="https://trufflesuite.com/ganache/"&gt;this link&lt;/a&gt; to visit the download page. Choose your platform and download the installer. Once it is installed, open the ganache app and click on the “Quickstart Ethereum” button. This will start a simulation of the Ethereum blockchain. We can now start developing and testing our NFT smart contracts in &lt;a href="https://trufflesuite.com/"&gt;Truffle&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Let’s install Truffle next. We’ll use NPM to download and setup the truffle command-line app. Run &lt;code&gt;npm install truffle -g&lt;/code&gt; in your terminal. Once this command is done installing Truffle you’ll be able to use it from any folder on your computer.&lt;/p&gt;

&lt;p&gt;Make a new directory, call it &lt;code&gt;truffle-revise-tutorial&lt;/code&gt;. Once you &lt;code&gt;cd&lt;/code&gt; into that directory run &lt;code&gt;truffle init&lt;/code&gt; this will setup all the boilerplate required to start building smart contracts. Make a new file in the contracts folder to write the smart contract. You can also run the truffle scaffolding command &lt;code&gt;truffle create contract ReviseNFT&lt;/code&gt; from the terminal to create the “ReviseNFT.sol” file (smart contract file).&lt;/p&gt;

&lt;p&gt;Paste the following code in the file you just created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight solidity"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Let’s start by importing the Openzeppelin ERC-721 template into our file
// SPDX-License-Identifier: MIT
&lt;/span&gt;&lt;span class="k"&gt;pragma&lt;/span&gt; &lt;span class="n"&gt;solidity&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"@openzeppelin/contracts/token/ERC721/ERC721.sol"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Next, let’s add our NFT smart contract and name the NFT token (Dynamic NFT)
&lt;/span&gt;&lt;span class="k"&gt;contract&lt;/span&gt; &lt;span class="n"&gt;ReviseNFT&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;ERC721&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;baseuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="k"&gt;memory&lt;/span&gt; &lt;span class="n"&gt;_baseuri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ERC721&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Dynamic NFT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"dNFT"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;baseuri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_baseuri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// Last but not the least, let’s add functions to enable minting and to enable setting the _baseURI().
&lt;/span&gt;    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;mint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;tokenId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_safeMint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokenId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;_baseURI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;internal&lt;/span&gt; &lt;span class="k"&gt;view&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ERC721&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;returns&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="k"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;)&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;baseuri&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you’re done pasting the above code run &lt;code&gt;npm install @openzeppelin/contracts&lt;/code&gt; to install the missing dependencies.&lt;/p&gt;

&lt;p&gt;This is boilerplate for an NFT smart contract. We’re using the Openzeppelin ERC721 template as the base and adding a couple of functions on top to enable minting and setting the “_baseuri”. The “_baseuri” allows you to add data (name, image, description, attributes, etc) to your NFTs.&lt;/p&gt;

&lt;p&gt;We’ll use &lt;a href="https://revise.network?utm=article"&gt;Revise&lt;/a&gt;  (&lt;a href="https://revise.network?utm=article"&gt;https://revise.network&lt;/a&gt;) to setup the backend and add the data to our NFTs. Let’s grab a development key from &lt;a href="https://revise.network?utm=article"&gt;Revise&lt;/a&gt;. Visit &lt;a href="https://revise.network/?utm=article"&gt;https://revise.network&lt;/a&gt; and click on “Get started”, once you make an account click on “Generate API key” in the header. Once you generate the key, copy the key and save it somewhere.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/revise-network/nft-tutorial-1"&gt;Clone this repo&lt;/a&gt;. This is a very basic starter kit, it has the &lt;a href="https://www.npmjs.com/package/revise-sdk"&gt;revise-sdk&lt;/a&gt; setup. Once you clone it, run &lt;code&gt;npm install&lt;/code&gt;. Open the index.js and paste the following code:&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;collectionId&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Collection Name&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;Collection_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 "myuniquecollection"&lt;/span&gt;
    &lt;span class="c1"&gt;//                   your baseURI wil be "myuniquecollection.revise.link"&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.digitaloceanspaces.com/sample-collection/1.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;Star Lord&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;This is a test description&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;attack&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;80&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;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;maroon&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;90&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;collectionID&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;Replace the &lt;code&gt;AUTH_TOKEN&lt;/code&gt; with the auth token you’ve generated from Revise. In the above snippet we’re just importing the revise-sdk, setting up the authentication token and setting up the function to run the revise-sdk function calls. In the above code we’re create a collection for our NFT (all NFTs belong to a collection - think of it as files in a folder) and adding some data into the NFT. Run the index.js file &lt;code&gt;node index.js&lt;/code&gt;. Now we’ve added our first NFT! We can test this out, visit &lt;code&gt;revise.link/p/myuniquecollection/1&lt;/code&gt; (replace “myuniquecollection” with the “collectionURI” you chose earlier).&lt;/p&gt;

&lt;p&gt;Now all we have to do is replace the “_baseuri” in the above smartcontract with the link we’ve generated via &lt;a href="https://revise.network/?utm_source=forums&amp;amp;utm_medium=essay&amp;amp;utm_campaign=ua&amp;amp;utm_id=ap"&gt;Revise&lt;/a&gt;. We’ve successfully built our first NFT!&lt;/p&gt;

&lt;p&gt;In the next article I’ll walk you through running the NFT smart contract we built on Ganache and an Ethereum testnet. See you soon.&lt;/p&gt;

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