movimientoantipiquetero.com.ar

chainlink expected valueBuild a Chainlink Random NFT Collection with Moralis


link chainlink crypto chainlink in euro chainlink expected value Build a Chainlink Random NFT Collection with Moralis
chainlink expected value link ltc ratio litecoin chainlink Build a Chainlink Random NFT Collection with Moralis
whats up Morales Community welcome to another morality tutorial video today we have a really cool project this is a random nft mentor on which you can get one of three randomly selected nfds so the first step is connect your wallet once connected lets click on the mean button we have to pay a small fee lets confirm and after the transactions went through we can click on get my nfts and we are going to have a list of all the nfts these wallet address has minted so far on this contract this is going to be a really complex project because for the nfts we are going to use chain link brf to Generate random numbers we are going to go through the scripts to upload the images and the metadata to ipfs using Morales we are going to develop the smart contracts in solidity and we are going to have two options to deploy both on remix or using brownie the python framework for smart contracts and of course we are going to create a backend and a front end to create a full stack application so if you want to know how to accomplish this keep watching because we are just getting started whats up YouTube my name is vasili your web free instructor from Latin America Ecuador Ive been wielding on the space since 2020 with cool crypto projects my free time I really enjoy singing and playing the guitar and if the time is good I like to go out and take some meditations but enough about me lets go back to the video and start building lets get started here I have a simple the smart contract for a NFD with the standard things you will expect from a nft a token URI I mean to function the nft a token counter and so on but we dont want simple things doing we are going to over engineer this and make it a really Advanced smart contract but first we need to talk about chain link chain link is one of the biggest decentralized Oracle networks outer and it provides a lot of cool features and services for web3 developers and companies the most popular one is chain link datafits which give you the exchange information for a lot of crypto pairs on the blockchain and you can get this information live but today we are going to be focusing our attention on chain link brf chain link brf is the way to get truly verifiable random numbers for or smart contracts the way it works is kinda complex because they have a subscription manager on which we are going to pay the link token they use this as a fee and then when a smart contract ask or a random number is going to connect to a lot of decentralized test notes in order to return a random number we are going to use later on or a smart contract but Randomness we already can get a random number on a easiest way right modern JavaScript on python or any other programming language we can use libraries like method random or random.random and get a random number why do we need such a complex scheme let me tell you that those numbers are not truly random when you ask a computer for a random number its going to look into a space memory and its going to say okay this is random enough and its going to return you as a random number but these numbers are actually pseudo-randomic and they are easy predictable and vulnerable to manipulation so your decentralized application might be at risks if someone predicts which those random numbers are so chain link uses a different approach because they are not getting that random number out of a single computer they are getting that random number using a lot of different nodes which allows you to get a truly random number and why is this useful well it has a lot of applications first we can build a fair RNG on or nft games and collections as we are going to do on this tutorial we can choose a truly random representative for a decentralized autonomous organization or we can also randomly assign duties and resources on a theme or on another Dao so as I told you instead of using this simple NFP contract we are going to use chaining brf to get a random number and with that random number we are going to generate a random nft but first of all we need to understand how to get that random number so please go to the channeling documentation and follow along with me this part dont forget all the links are going to be on the video description so check that now for a basic implementation of the random numbers chain link requires a remix ID this is the solidity ID for smart contract development which works on any web browser metamask we already have it and they go early testnet just be sure you have enough phones on your account to be able to deploy the smart contracts so first thing first lets open Channel subscription manager lets connect our wallet on the go early Network because we are going to use the test nets for now lets connect with the mask sign over once we are connected lets create a new subscription this is going to use our wallet address so lets create that subscription we are going to trigger a new transaction lets confirm this and on the meantime that transaction goes through I want to explain why we are doing that and the reason they have a subscription manager is because we as the contract deployers are going to be able to pay the fees and not push our users to pay that link token fees we need in order to generate that random number once the subscription is created we can add the funds and we need to provide some link token just go to faucet.chain.link connect your wallet pass the human verification and request your 10 test net link tokens once the process is done you can check the transaction details in order to get the information of the token you can add to your meta mask in order to check your balance so lets go back to brf.chain. link open my subscription and add new fonts I have the link for this tutorial too could be enough but lets use all of the time lets confirm this again confirm the transaction and now we can see that our subscription has a 10 link token balance so with this subscription we get a subscription ID this ID is the one we are going to use on our smart contract in order to get that random number so lets go back to the documentation and down here we have a button called open in remix this is going to open us a template smart contract to get that random number which uses brf consumer base B2 basically the logic is really simple we are going to have a function called request random words which is going to ask chaining brf to connect to the independent nodes in order to get that random number this request random words is going to have a request ID which is going to be generated each time we call this function and once the random number is generated by the notes and return to the smart contract we are going to have an internal function called fulfill random words this function is going to decide what happens when that random number returns to the user and is going to do whatever logic you want over here so first thing first lets go here the deploy section select injected provider metamask I am already connected on the go early Network and lets try to deploy the Constructor needs just one parameter the subscription ID so Im going to take the subscription ID and paste it over here and click on deploy this is going to trigger a new transaction as always and once the process is done we are going to have a new deployed contract over here which is on address so lets copy that address go back to our subscription model and here we need to add a new consumer the consumer are going to be the lowest smart contracts which are going to be able to use this ID and these fonts to generate that random number so lets click on that consumer Im paste over here the smart contract address lets click on that consumer again we have to approve this once the consumer is added we can close this and now we can return to our remix ID now we can use this function request random words which as I told you is going to be the one responsible to ask for the prf nodes to work in order to get that random number and also these request random course is going to generate a request ID we can call the last one clicking here once the Oracle Returns the information with the random number we can use this request ID and use it over here to request the status and we are going to have this randomly generated number and this is it this is how China brf works so lets apply all this logic of calling this request random words and they fulfill random course functions into or nft smart contract so I have another control here called random nfd.sol which is importing from open sampling the rc20 standard and also is going to be a honorable contract also I have here some some errors for error handling and here I have a really standard smart contract implementation with just its name and its token initials so lets get started with this we need to import chaining vrf from official chaining package so import add chaining contracts ERC the version brf consumer base B2 and also the brf coordination interface.sol Im showing you right now the exact impulse you must use but if you are not sure which kind of packages chaining has is as simple as to go to GitHub and check the official chaining repo with all the contracts they have over here and all the implementations you can use so this contract is already a ERC 721 UV storage and its ownable and now its also going to be a prf consumer based B2 once we add this this is going to Mark us as a mirror because we have some implementation we must add but dont dont worry about doubt now I have some variables here these variables are for the nft so lets say nft variables and lets talk about the actual nfps as I showed you at the beginning of the video we are going to have three different type of nfts lets say breed or nfts lets create Anonymous of the breeds that are going to be artificial natural and shiny Anonymous on solidity works as an array so artificial is going to be so artificial is going to be the index 0 natural 1 and shiny two now lets make our compiler happy adding all the information we need for the chaining brf lets say a cure training brf variables and we need to add a lot of these we need the brf coordinator so brf coordinator B2 interface its going to be a private variable immutable and lets name it I brf coordinator and now we need more variables over here in order to understand which ones we need we can go back to chaining documentation and here on supported networks we are going to go to our Network here go early and we know we need the all these parameters the link token the prf coordinator address so lets create them we are going to need the subscription ID we used before so you win 64 private immutable description ID and Im going to do the exact same for the gas Lane the Callback gas limit the request confirmation and the number of words and again that information is over here and also you can check them on the remix contract now we need to create a helper for the chain in brf remember I told you each time we ask for a random number this request is going to have a request ID so I want to map that request ID to the address of the person which is asking that random number so lets create a mapping of uint256 to an address going to be a public and is going to be called s request ID to Sender just as good practice Im going to add two events over here and now lets use the Constructor The Constructor is going to get all these parameters we just created as input when we are deploying the contract so address erf coordinator version 2 the same for the subscription ID the gas line the mean free on the Callback gas limit finally Im also going to add a string array of the token Uris for the nfts we are going to use as we are have three different reads we are going to have three different token Uris now we have to declare on the Constructor that brf consumer base so brief consumer base B2 and we are going to send the BFF coordinator we declared here as an input parameter now lets assign those variables so I brf coordinator equals to brf coordinator interface with the prf coordinator V2 and once again the exact same for the guideline the subscription ID and the Callback goes limit the token counter I already have it at the beginning but unfortunately our contract is still mad with us because we have implements and functions in order for this to work so lets create a new function over here called request nft this request nft is going to act as that request random words function we used before its going to be a public variable because we want the users to pay in order to get that nfts and its going to return that doing to fix 5 their request ID I was talking about before lets say if the message dot value is less than the mean fee lets revert this transaction so revert random nft need more fonts which is one of the errors I showed you before also I dont have a main fee yet so lets create that here on the nft variables lets create it you win by six private immutable I mean b okay this is good this request ID is going to be equal to the prf coordinator dot request random words and we are going to send the gas Lane the subscription ID the request confirmations the Callback does limit and the number of words and again we are just using over and over again this exact same variables because they are the ones which are required by chaining brf so we are just copying the functionality of this brf consumer.sol we use it as example before as we already have this request ID we can use that that helper I created before in order to map the request ID to the message.sender and now we can emit that nft requested event I created before and thats it with this request nft we are going to request that random words but as you can see the compiler is still mad at us and you might know already why because remember this is the first part we need to call the request random words in order to get a random number from the Oracle now we need to decide what we are going to do with that random number so we need to implement that function fulfill random words which is going to take the request ID and of course the array of the random words in this case its just going to be 1 because the number of words we are requesting is just one going to be a memory random words this function should be internal and also as this function already exists we need to override its functionality so lets create a new address called NFD owner which is going to use that mapping using the request ID thats why we created that to assign the address of the message dot sender so we can use it as the new nft owner lets create a uint25cs for the new Item ID this is going to use the token counter of course we need a new ID each time a new nft is minted so the token counter is going to be equal to token counter plus one and now we have to decide what we are going to actually do with that random number so lets create here function get chance alright which is going to determine how probably we are going to get one of those nfts its going to return an Ewing 256 its going to be an array of three elements in memory this array is going to store all the chances we are going to have to get one of those monsters remember we have three breeds artificial natural and Shadow and lets say shadow is going to be the rarest one so I want to return other here so Im going to say return the index 0 is going to have 10 out of 100 chances to appear the second one is going to have lets say a 25 chances to appear so lets put here 35 why because 35 means 10 its 25 and now lets put 100. again we are going to add this up this is 45 and 100 minus 45 is 55 so this is going to be the nft which is going to be the most probable to spawn let me explain better how this is going to work we know we have a random number so we are going to have a modded ermg which is going to be equal to that random number module 100. the reason is because this is going to always returns a number between 0 and 99 and we can use that on this array so if the modded ERG is from 0 to 9 is going to be equal to shadow in the motor EMG is between 10 and 35 is going to be a natural and if the motor Eng is between 36 and 99 is going to be an artificial the most common one monster easy isnt it so lets apply that logic over here lets say join two five six modern ERG going to be equal to the random words in the index 0 model 100 remember these random words returns an array we are just asking for one random number right now but we can get more of the though so thats why we are asking for the index 0. now we have these these modern ERG on the range from 0 to 99 we can now ask for the breed so lets create another function over here function get read from modded RNG this is going to receive that motor RNG remember from zero to 99 its going to be a public your function and its going to return a breed remember we created that enumeration here zero one and two and Im going to create a really interesting mat over here so lets create that U in265 total sum its going to be equal to zero we are going to have a u in 265 an array of those of Link 3 which is going to get this chance the right over here and now we are going to use a for Loop so were going to five six I equals to 0 I less than the chains array dot length which we know its 3 e plus plus Im going to say if the motor RNG its greater than the total sum and the modded EMG is less than the total sum plus the change around of that index return the read on that index if not well lets just add to that normal sum let me explain how this this is going to work lets suppose they murdered RNG is equal to 12 or say or something thats also the index of Y is going to start 0 and of course the total sum is going to start on zero so lets suppose we get a 12 when we do that this much over here remember its going to return a number between 0 and 99. so lets suppose we got a 12th so the motor RNG is greater than the total sum well yes because the total sum is zero and the motor ERG is less than the total sum plus the chains are right the chains are right here on the first index is 10 0 plus 10 is 10 is not greater than the modded RNG so this is going to be false we are not going to return the read and we are going to add up to that total sum so now the total sum is going to be I now is going to be 1 and the chains are right on the index one is going to be verified so lets do the math again motor RNG is greater than the total sum yes the modern ERG is less than the total sum plus the chains are right okay so the total sum is 10. plus 35 this is 45 and of course 12 is less than 45 so we are going to return that breed on the index I the index I remember is natural because index 0 artificial index one natural and Industry Shadow as easy as that and just to be cautious maybe the mat goes crazy lets just revert the transaction if something goes wrong over here so now we can also add that breed to our nft so lets continue on fulfill Randomness and lets put here read read equals you get read from motor RNG and use that this motor RNG variable and the only thing we have left here on this fulfill Randomness is to actually mint that nft so safe mint remember this save mean function comes already with the ERC 7 to 1 standard so we dont have to implement that function we are going to send over the nft owner and the new E10 ID and also we want to set the token URI and the token URI is going to take that new Item ID on the token Uris based on this token your eyes we are sending as parameter over here which again is going to use that breed to get the information finally Im just going to emit are a band over here and yeah this is it we did it we called these request random words in order to ask to the Oracle to create a new random number and then we use this fulfill random words once we get the response to Mint a new random nft based on the math I chose this plane now just to have good practices lets create some Getters over here Im going to do it really really fast so we need a getter to determine the mean fee want to get the token your eyes and want to know if the contract is initialize it or not and finally lets add some torches over here as we are using a mint 3 in order for the users to pay for the nfts lets create a withdrawal function for the owner of the contract to receive those fonts so a simple with route function over here and also this get nft token Uris is using this variable we have over here nft token your eyes Ill show you at the beginning of this smart contract but we are not using this at any time so lets create another function called initialize contract lets put it over here and this initialized contract is just going to take those nft token Uris we used as Constructor parameter and add those to the variable nft token Uris and set the initialized value to true so we just have to add that function here on the Constructor as well this is it this is a really complex and advanced smart contract to create random nfts using chain link brf how do we know this works well lets test this out so so the first thing we need to prove is the contract actually compiled so brownie compiles and yes it seems everything goes okay but wait a second maybe you might be thinking okay I understand solidity code but I never used brownie before so how can I do this on remix dont worry because if you check the GitHub repo you are going to find another contract choose a similar this one called random nfd4 remix on which you are going to be able to use all of this but on remix and instead of using those variables as input parameters on the Constructor we already declared them out at the beginning and you just have to adhere the token your eyes you want to use for your nfds and of course the subscription ID you are going to get from chain link with that said lets deploy this using brownie for time 6 we are going to go through this process really quick so first of all I have a script here called helpful scripts which has a function called get account and is going to return me the account depending on the context so lets deploy that random NFD we need to provide the ipfs URLs for or nfts and here the things get more interesting if you checked out the code repo you are going to find this upload to ipfs so basically this is a simple python script which is going to take all the images we have on this image folder the artificial monster the name neutral one and the shadow 1 and upload the image to ipfs then on this ipfs upload we are going to take that ipfs image script and use it to create all the metadata I just made up some descriptions and statistics over here you can change you can change however you want and of course you can change these images and put maybe 5 10 100 all the ones you want as this is a tutorial of course I just have three simple nfts this ipfs of blood script uses the Morales endpoint upload folder for ipfs so and of course we have a cool video on that matter I highly recommend you to watch if you want to learn how to accomplish this and understand how this API endpoint works if not as I told you this the script is good enough for you to just use it however you want you just have to add here your Morales API key on your dot amp file and thats it you can use this to Loop through all the images on this folder add all the descriptions abilities and help points you want this is going to Loop over those and return you with all the ipfs addresses you are going to need for that metadata ipfs addresses like this one on which you are going to have all the information as you I just showed you and also the link burn the image of that monster as easy as that so lets go back to the code on deploy round on nft and Im going to add that ipfs directions I already have Im also declaring the mean fee remember we need this on the Constructor on our smart contract and here lets deploy it so first of all the easiest part is to say account equals to get account Escape I created here on helpful scripts to get account depending on the context and we need here Tom parameters you already know we need the brf coordinator the subscription ID the gas line the mean fin the Callback gas limit and all of this is that on brownie projects we always have a brownie config.yaml and here I already have set up all the dependencies we need for this smart contracts and also for the quality Network which is the one we are using I have the subscription ID the call about Gods Lane because the inadres dvrf coordinator address the lean token and Etc and maybe if you want to deploy this smart contract to a minute I already left you here the information for that Network as well the only thing Im going to change over here is the subscription ID because we just created a new one so Im going to copy over this and paste it on my brownie config Dot lets save this and go back to the code so now we can get all that information from the configuration file so for example prf coordinator is going to be equal to config networks Network dont show active remember we want to deploy this on the go early Network prf coordinator B2 which is the exactly name I put it over here brf coordinator P2 and now were going to do the exact same for the rest of the parameters we need so the same goes for the subscription ID the gas line and the Callback gas limit and remember if you dont know where to get that information besides my brownie concrete on yaml remember you can always go to chain link prf documentation and you are going to have that information over here for the query testnet and all the other supported blockchain so now lets deploy this contract so Random NXT is going to be equal to random nft dot deploy and lets put here all the variables we need so we need the prf coordinator the subscription ID the gas line the mean fit the Callback gas limit and the ipfs URLs remember when you are deploying a smart contract with parameters on the Constructor using brownie remember to use the exact same order as you have on your actual Constructor on the smart contract so if you have brief coordinator on the position 0 also use brf coordinator on the position 0. first we need to sign this transaction so Im going to so that from my account and I also want to verify this contract so public shows config networks Network show active get verify again this configuration comes from this brownie confita DML and therefore go early network is set up to true now lets print the address of this nft contract and return it in case we want to use it on different contexts and yeah this is it this is the deployment script we needed and in order to deploy this we need three things a wallet private key a either scan API key and an inferior project ID all of those we are going to set up here on the dot all of those we are going to set up here on the dot amp file so lets go through that process really quick on our metamask lets select the account we want Account Details or private key put the password confirm Im going to have the private key for this wallet remember not sure this with anyone and in Fiora please be sure you have a project Creator click on manage key and you have to copy this API key and paste it on your Dot and file and for either scan is the same go to either scan login to your account go to API keys and copy one of the API Keys you can get for free if you paste all that information here on your dot amp file well you are going to have all the things you need just remember on brownie config.dml you have to specify dot amp in order for brownie to know where to find those things so in this context we need to get with all of that we are ready to deploy this smart contract so as we already know this compiles properly lets clear my console and lets say brownie run scripts deploy random nft dash dash Network work lets hit enter and this should work properly the transaction goes true and now lets just wait once the process is done we are going to get the address of that smart contract and as we are using either scan API we have that control already verified so lets go to girly.itterscan.io paste that address over here look for that and look we have that random nft contract so we can go to the contract tab as this contract is verified we can get all the code for that but we can also interact with the contract so for example lets just connect metamask over here lets get the mint fee and the mean fee is this amount of weight and we might also want to use this request nft functions and put here the value 0.001 but this is not going to work and you might already know the reason we choose deploy it a smart contract and we have its address however we should go to our chaining admin panel and add this contract as a consumer so lets face over here that others are consumer based accept and confirmed and transaction when the transactions go through we can return to our brf subscription model lets reload this and now we have two consumers so now we can actually actually use that function we wanted to use over here so lets click on right we are going to paste some gas lets confirm this go to the metamask and open that on the Block Explorer and lets wait once the transaction finishes we can check that we already have that nft so we can use one of Morales endpoints get nfts by wallet put here the wallet or the query testnet and lets click on try it and boom we get the information of the nfts we have I have more than one because I already Mint one before this part of the video and this is great we just created a deploy skip for this really Advanced NFD contract which uses chaining brf a of course there are some parts I didnt went through for example this mint nft script for example this mint nft script or the scripts to upload to ipfs just for time C brand remember of the code of the lesson is going to be on the description so check that out and just like that we just finish it the chaining brf section the ipfs section and the deployment section the only thing left is to create a simple front-end connected to this smart contract and also have a backend connected to the Morales API in order to get information out of the blockchain just as I showed you here used in this endpoint this is going to be a really straightforward process so lets go for it so I have a front end you already saw before which these buttons to connect the wallet to mean the nfds and get the nfts of the collection in order to use the smart contract functions on the front that we need 3 things designer which is going to be the one we have on metamask so the signer is already here and we need the contract API and the contract address and of course we can come back to itrescan and get the contract API from here and they contract others but as we are using brownie to deploy this smart contract we can send that information to the front-end folder as you can see here I have a front-end folder here so I can send all the information to this folder when you compile a smart contract using brownie you are going to have this build folder and here on deployments you are going to have the information of the contract apis and also a map.json which is going to have the addresses of the deployed contracts so here on my scripts I have a simple script called update front-end which is going to take the information out of this build folder and send it over to the front end to a new folder called chain info inside of and Im going to also send over the brownie coffee video DML as a good practice so lets use that brownie run scripts and instead of using deploy lets use update front end and Im going to choose Gallery just to be able to send the information of that Network which ID is 5 and once this is done here on the front end older I have this new folder called chain info on which Im going to have all the information I want well for to get the API and also the deployment others so lets close all the things we are not using right now and lets get started with the front end here on the app.js first of all be sure you import from eithers remember npm install eaters this is the library we are going to use to connect metamask2 or web page and we need to take the contract address and the contract API again this is from chain info contracts random nfd.json and the deployments on the map.json so here Im going to have two variables contract which is going to take that random NFD deployment address and the country tracked ABI which is going to get all the functions we need so here I have a new function called handle connect this is going to create a new provider using ether.js get the account with it request accounts and then get assigner remember I told you we need assigner a contractor kbi and a contract others these ones we already have here and we are going to get the signer from the accounts once the user authenticate themselves using metamask then Im just going to update these variables we are going to use later designer account and something to check if the user is connected we are going to use this handle connect function every time we click on that connect button the one we have over here so we can click on connect sign this with a cone we want connect and thats it now lets talk about this mean function again we are going to use either JS to trigger that function lets go back to the code and here we have is a really simple function called handle meet its going to take the nft contract from ethers ethers contract again send the contract address the IBI and designer we already have all of those we are going to get the mean fear remember a needle scan we used that function get mean fee to get the minimum amount we need to mean that those entities so we are using the exact same function over here and then once we got admin field we are going to send a new transaction and if the contract request nfds remember this is the name we used to request an unfd we are sending over a gas limit and the value the value is going to be the value we just got and we are going to wait until that transaction goes go back to the front end click on mint this is going to trigger a transaction on which we are going to have to pay 0.001 it lets confirm this and in the meantime this transaction goes by lets talk about this get nfts this is a part of the video for us to use that Morales endpoint Ill show you before to get the nfts on this case we are going to use this endpoint called get owners by contract as we are going to have a just a small portion of elements let me make this bigger for you to be able to see it properly click on try it and then we are going to have the response of all the nfps this control has because I mean that a lot more and also look at this this contract call went really good so yes so the only thing left for us is to add functionality to this get my nfts button so lets use this endpoint on the backend project on my code I have a folder called backend which contains a Django project and here I have a script called Services dot Pi this Services dot Pi is using that get and if the owners endpoint to get all the NFP owners on a specific smart contract we also have a video on this specific endpoint if you want to check that out on this case Im just sending over the address as parameter and Im going to set all the other parameters as fixed at once because for this use case we are just going to just go early these Services dot Pi is used here on my project views as a new view called get owners which is going to get that address from the front end transform it into a Json and return the information again to the front end just dont forget we have to add that endpoint to all protein settings as well so on the front end code I have another function here called refresh nfts which is going to connect to that endpoint we just created saying over the contract address we got from chain info and this is going to update a variable called nfts with all the information we got put out that response which as you can see is this big Json over here I have a variable called render identifitis which is going to map all that response and create a card out of each one of those and Im going to take the most important information such as the image the name the description the token ID and the attributes this NFD hasp and Im triggering this refresh nfts each time I press the get my nfts button so lets connect again the volume over here and lets click on get my nfts and as you can see here we get the nfts this wallet has the important part here is to check if the nft.owner off is equal to the account so for example lets disconnect this account over here and connect the account number two so lets connect this connect okay this is connected and if I click on get my nfts we are going to get that different response because these wallet address has different nfts for this contract and that was it this was our project on which we can connect our wallet mean that random nft using chain link and get the information of all the nfts each user has on this smart contract some parts of the video we didnt go through as detailed as smart contracts because we have a specialized video for that endpoints but remember all the code we use on this project is on the GitHub repo on the description so you can clone that repo and use this as a template for any future nft projects you might want to have and yes on this case we just used three different breeds for teaching purposes but you can use the same logic to a large Peak collection of 100 500 1000 nfts I hope you enjoyed this tutorial so far thank you for watching till the end and please leave your comments down below subscribe to see more content and Ill see you on the next occasion bye Learn how to create a NFT minter using Chainlink VRF and Moralis API.Check out the repo used in the video here : Check out Twitter API Documentation to request access : START USING MORALIS: Join Our Discord: Moralis Docs: Merch: Twitter: Reddit: Subscribe to all notifications: Moralis Academy: moralis ivanontech ethereum programming, ethereum developer, dapps, ethereum smart contracts, blockchain programming, ethereum dapp build, create a coin, ethereum coding, ethereum development, polkadot programming, cardano programming, moralis, web3, web3 programming, blockchain coding, blockchain for programmersn, blockchain archive node, blockchain nodes moralis,ivanontech,