Dynamic NFT Creation - Code-Along | Chainlink Hackathon Workshop

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments

Dude, love your videos. I'm halfway through a coding bootcamp and it's so cool to see how accessible coding smart contracts/blockchain is even if you don't have years of experience. I'm certainly going to be applying to Chainlink when I start looking for jobs

๐Ÿ‘๏ธŽ︎ 8 ๐Ÿ‘ค๏ธŽ︎ u/ksnyder1 ๐Ÿ“…๏ธŽ︎ Apr 01 2021 ๐Ÿ—ซ︎ replies

If OpenSea didnโ€™t exist how would you display the NFT? Iโ€™m assuming it would just be a JSON parser for the returned NFT data via web3?

From what I can tell Binance Smart Chain doesnโ€™t have any of the ecosystem like OpenSea to make something this seamless yet and Iโ€™d like to try there since itโ€™s so much more affordable right now.

Amazing video by the way.

๐Ÿ‘๏ธŽ︎ 5 ๐Ÿ‘ค๏ธŽ︎ u/SiON42X ๐Ÿ“…๏ธŽ︎ Apr 02 2021 ๐Ÿ—ซ︎ replies

Question about NFTs...I just recently started reading about and experimenting with OpenSea. What's to prevent me from just grabbing any old picture from the internet and creating my own NFT? I'm aware of the associated fee to list it, which is a barrier, but say I found a really cool art online and made it my NFT. That's a serious copyright issue, right?

๐Ÿ‘๏ธŽ︎ 2 ๐Ÿ‘ค๏ธŽ︎ u/Immediate_Depth532 ๐Ÿ“…๏ธŽ︎ Apr 02 2021 ๐Ÿ—ซ︎ replies

Thank you !!!

๐Ÿ‘๏ธŽ︎ 2 ๐Ÿ‘ค๏ธŽ︎ u/1shadygrey ๐Ÿ“…๏ธŽ︎ Apr 02 2021 ๐Ÿ—ซ︎ replies
Captions
hello hello what's going on mike check my check how we doing it is 8 31. it a couple minutes for some other people to show up and then we will get right into this we have a lot to cover today a lot to cover today there's a good chance that we're going to go over but we're going to be doing something insane so um we're basically going to be going through a project that if you follow along with this you copy the repo this is basically kind of like a full-scale project this is nearly hackathon submission worthy uh just doesn't have a website to go with it but i'm really excited to go through this with everybody today so if you're just tuning in this is exactly the um this is exactly like kind of the end to end code with me code along where like like i said we're going to build a dynamic nft well a randomized nft completely from scratch so we can do it together you can definitely follow along with me exactly so really excited for this one and uh yeah and we're in hd now you see that i'm looking i'm looking at that resolution looks good i think it's uh the hd is coming through nice and clear oh i love it excellent excellent excellent [Music] hey how's it going everybody fox raymond mr nguyen how are you doing just give it one or two more minutes for some other people to show up you should get some makeup so it could be more careful because hc now now that it's hd i can't uh i can't i can't shy away from all my blemishes i appreciate that you're good hey how's it going welcome welcome to the stream welcome welcome got all my comments down at the bottom here which is why i'm looking down welcome welcome we're gonna give it one or two more minutes just for some extra people to trickle in really excited for this one great job i haven't even started yet but thank you [Laughter] oh for sharing welcome welcome absolutely thank you check this out look what we can do we can like show comments and stuff now thank you appreciate that all this production value going in i love it hello welcome exactly the topic you need right now well excellent we are exactly going to get into it in just one or two more minutes appreciate it welcome welcome everybody we have a lot to go over today a lot to go over today so i will give less time than i have in the past workshops and we will jump into it there's a good chance we're going to go over um i'm going to try to code as quickly as possible but in the most sensible way that i can oh i have let's open this up okay welcome off them i can even give you guys a sneak preview actually i guess we'll give it one more minute one more minute and then we'll jump right in so again i am monitoring the comments i love for these to be interactive please ask as many and all questions as you would like to ask here how long would you go uh this will probably be actually an hour and a half um instead of just an hour i will try to keep it to the hour and a half but we'll see we're doing uh like i said we're doing a full scale dab here okay 843. excuse me let's jump into it so welcome one welcome all uh welcome welcome to our nft workshop here where we are going to be building end to end from totally 100 scratch our own nfts uh which we can actually we are going to deploy real time uh to the rink be test net and we can actually even render it on openc so we have to do a lot here there's a lot to cover in an hour and a half um let's get to it it will just be available later yes this will be available later thank you for asking so uh let's jump right into it though i'm going to switch to the stream here hopefully you guys can still hear me okay uh i'm gonna put my face in here so this is what we're gonna be working on we're working on deploying an nft uh dynamic nft to openc so here's an example of what we're working on so this is openc if you guys aren't familiar with it it is an nft marketplace where you can deploy sell and work with all your nfts it's a ton of fun and so what we're going to be deploying what we're going to be working on are these uh are building and deploying these nfts right so nfts again stand for non-fungible tokens so these are tokens that are non-fungible it means that they are unique right there's only one of of of their kind so if we look at these these are ones that we have deployed these are ones that i've deployed to mainnet um and that we actually gave away as part of like an nft like almost like escape the room treasure hunt uh which is a lot of fun uh but what they have is something that's really cool is they have stats right so they have different statistics that are generated by the chain-link viewers there's are verifiably random nfts that we've actually created and this is something similar that like avagoji's for example is something that they use they use the chain-link vrf to create these nfts with purely random statistic purely random stats so uh if we look at this character we see it has charisma constitution dexterity intelligence strength and these are these are random numbers that were given to them right these are random so this creates provably scarce and provably random uh characters that creates you know basically uh cryptographically provable um a digital scarcity and rareness which is really cool uh and uh kind of a great way to show up hey look i have this awesome nft here it's stats and then you can use these obviously to build any type of games on top of them uh you can show them off in any type of art gallery do whatever you want to do so this is what we're going to be working with on openc you can even check like the contract address and this is this is kind of more the code of what's going on behind the scene right so this contract is verified so we can actually see so if you guys even want to just look at this you can go check this out i'm actually going to comment um i think that this post to youtube uh i'm hoping this post to youtube but um yeah so so here is the the code you can go check out the entire code base uh we can actually even interact with the code or interact with the contract so we go to this read contract bit here let's go to characters let's see let's see what character zero is it's query up and we see all the stats on chain of this character so we have the name which is chain link knight uh charisma wisdom you know all this stuff which is showing up here uh in our uh nft marketplace so and again this is where you can buy and sell do whatever you want to do with these chain link of these but just a really really fantastic way to to take your nfts deploy them and again kind of here's the whole collection so this is what we're working on and this is what we're going to be building and like i said this is basically my my setup is falling down this is basically um hackathon submission worthy right here uh it would be great if we added like a website on top of this as well um but these are these are great kind of as their own so let's go ahead and jump into this if you guys want a written format of this we've we've written a blog deploy sell your own dynamic nft we have another one another blog that's kind of the precursor to this if you want to go through as well but or just follow along with this video because we're doing everything here um are there any questions before we get started so we see we have a couple notes that looks so awesome yes it does yes it definitely does um can they put rinky eath into an nft uh real east for sale yep you can do whatever you want anything in code um no so the cost of the to generate the nft depends on the network that you're on for the vrf so cool let's jump into it so i have my code editor here and oh this is uh this is d5 brownie let's go to mmos nfp clear i'm just gonna double check i think that's the right one yep okay this is the right one uh we have a blank vs code here so we have absolutely nothing and i'm actually going to hide my face i know my somebody told me i needed makeup um so i'm going to hide my face just kidding but i'm going to have my face so you can see the whole terminal here and um i think that's big enough right yeah if that needs to be bigger let me know in the comments here um but so we're going to start a project off the same way we're going to start off any other project you know it's either going to be brownie bake or it's going to be starting a hard hat project we are going to do a truffle project so remember in order to use truffle um and again you can use truffle hard hat burning you can use whatever you want to do i always always type in truffle even like it should be truffle up there and because truffle is obviously going to get me kept me like candies and stuff um but if you don't have trouble you do need node.js right node.js you can download node.js right here uh and then you'll know that you have it if you do node-v it'll tell you what version of node you're on right now um and then node comes installed with npm uh npm which these are these are what we're gonna be working with and you can do npm ins install sg truffle i've already done it so i don't need to do it here um again we're gonna be doing this from scratch but github dooms and dragons i should show up i'll get a dungeon patrick i'll just see but if you want to just get the see the end zone uh see the end product here i'm going to put this in the comments as well uh does metadata uh have to be on on chain or ipf is good enough great question we're going to go over that we're going to go over that um so done this is the this is the um the repo with everything that we're gonna go over so if you want to just get clone this and go to town absolutely have a blast but i'm gonna show you how to do it from scratch uh because this will be this would be really helpful so we're here and we have truffle installed so we're gonna do truffle unbox smart contract kit box remember this is going to place into our terminal a um just say sample chain link repo here right so we have our contracts you know like we went over yesterday our migrations our scripts tests blah blah just gonna give us all kind of the nuts and bolts here um i'm gonna go ahead and just strip this down because there's a lot of stuff in here i don't care about i'm going to delete this i'm going to keep this one in here you'll see why in a minute delete this so oops i'm not going to rename it i'm going to delete it this is random excuse me this is random number consumer we want to keep this in here because we are going to be working with the chain link vrf we are going to be calling a verifiably uh random nft so we're going to keep that in here we're going to delete two of these we're gonna again we're gonna keep the random number consumer this is just to get us set up just because this has a whole bunch of boilerplate code in here you know why reinvent the wheel and we're gonna do two uh random number consumer.js we're probably gonna change the name but we're gonna leave it in here for now so we're also going to remove these goodbye move the trash price number consumer goodbye goodbye uh and then we have this fund read randomness request let's even do cd scripts to the random number consumer scripts copy copy copy copy dash r star uh so we're gonna move everything down one yes and then remove random number random number consumer strips now in scripts it should just be those great tests um we're gonna remove this we're probably not gonna have time to go over tests but if you want a production value application you should definitely write some tests uh we have testing um testing um workshop later today definitely don't want to miss that that's going to actually speed up your environment or your building here so here's what we have we have a new finley truffle repo which is going to go over everything that we want in here uh what we want in here uh hopefully this makes sense where we are so far because we went over a lot of this yesterday so what do we have in our contracts folder so we have this random number consumer dot js right and remember what this is going to do is this is going to zoom in what this is going to do is it's going to uh our contract is random consumer it is vrf consumer it's going to create a random number excuse me it's going to create a random number and um and return it that's it so we can even um we can even run the script so i'm not going to run it just in the interest of time but this is kind of the boilerplate code just to get um get an nft started so which is great excuse me just to get a random number what we want to do is we want to get an erc 721 or an nft so the first question is okay what the hell is that what what is this what is this nonsense what is an erc 721 look it up so erc721 and we're going to go to open z1 but here c721 similar to in year c20 it's really just a standard right so it's a standard that says here are the functions that define an erc721 uh if we go to opensup when openzeplin is a package that you're going to use a lot they have a lot of fantastic tools for for deploying smart contracts and using smart contracts so an erc oh and we want to use the version three we will definitely use the version three so the easiest way for someone to deploy in erc721 is just like this right import um import solidity we import this open zeppelin contract and uh we just add this my nft is we inherit it and then we set the name and the um the symbol here right so what is this erc721 package here so we can even google this what is this code that we're importing so we can see it here there's a whole lot of stuff going on in here right and you can see these are the functions that define what an erc721 looks like it has balance of it has supports interface it has owner of name symbol this token uri which is very important it will get to an emitted base uri approve there's a lot of there's a lot of stuff in here but again an nft is just a set of standards that everyone kind of follows right that's really it near c721 and ft they're the same thing okay so if we wanted to make a really simple nft what we can do in our contracts we do new file nft simple.sol literally copy paste this in what we're going to do is we would we need to install this and install mi opens up on contracts double check that i'm installing this correct opens up the docs open zipline docs it's installing for some reason i can't find their uh their get started page well we install it with mpf install anyways um but we installed this uh this mpm install uh i opens up like slash contracts this way we can actually interact with this stuff in this way we import this code at the top and it's basically taking those standards and slapping it right at the top of this uh of this contract right here right so it's importing it's importing thank you for importing i think we also i think we did install stuff from the uh the truffle box as well but if we didn't we will just uh we'll do we'll redo an npm installer just to be extra certain extra sure installing installing and we even do a really sample migration uh to test this out okay great so just to make sure how did i do it there whoops oh no they're doing scripts oh no we're good yeah okay then we can do truffle compile if everything compiles awesome everything compiled cool so now just just to deploy this really simple nft we're going to do a quick new migration so we're going to do migrations new file 3 nfp simple.js ssn uh we're going to do nft simple effects that require ft simple this is going to pull in this nfp simple in here we're going to get rid of this because we don't need that um we're just going to we're going to make this really simple um it's going to be some not super great code because we're just going to say hey we're just going to deploy to covet we're actually ring p we're going to deploy to ring b the deployer.deploy be simple and we're not going to take any parameters so boom deploy deploy nfp simple and then we're also going to add one extra thing that's going to help us out a lot and i'll show you what that looks like in a [Music] second going to add this truffle plug-in truffle plug-in verify so what this truffle plug-in that we're going to add in it allows us to verify our code right on on ether scan okay so we're gonna do api keys we're gonna set our api keys up like this uh eat the scan process.emv api ether scan and um what this is gonna do is if you create a dot env file or you set your environment variables correctly it's not uv file you do api each scan api key equals blah blah blah blah whatever you eat the scan api key is in this way when we go back to ether scan remember how before i was showing you actually let's see if it even either scan when i was going through this contract and stuff in order for the code to actually show up on etherscan on our block explorers we need to actually verify the code and verify that the code actually works so we're going to add this um this truffle plug-in and then let me let me just undo this we're going to add we're using this truffle plug-in verify to actually work with it we actually verify our our stuff and we can even google it and we'll npm install it start the plugin with npm or yarn and it even has like the instructions here all you gotta do is do plugins truffle plug and verify and then add your api key so if you ever get lost you can always come back here and then we have this this usage here and this is how we actually verify so it's gonna be truffle run you know verify blah blah blah or excuse me the way that i the way that i did it in the readme it's like this but you know same thing so first we need to migrate it so we're gonna do truffle migrate and this is actually gonna deploy it to um rigby actually before i do that i should mention once again remember we do need our mnemonic and our rpc url your mnemonic is going to be you know remember it's going to be exported from metamask it's going to be your mark from here uh if you didn't watch the kind of welcome to truffle hard hat definitely go back and watch that video because that has um that explains a little bit more rpc url again that's going to be your infera you know it's going to be your alchemy or what have you it's going to be the https you know url from one of these sites and again you can get keys for free no worries these are what defines you know where to interact with stuff we also are going to need um in our in our meta masks let's just double check uh in our ring because we're going to be testing on ringpie we do need testnet rinpy and testnet link again if you we ever get lost we can come back here test that link is here test.ring b is here boom boom that's how we can get both of those uh so because we need both of those in our wallets um but great so let's go ahead and migrate this so we're gonna do truffle migrate and again it's going to be deploying it directly on chain to the wrinkly chain truffle migrate dash dash reset dash dash network rinkaby and let's just make sure we have rank be set up in here uh we don't whoops so let's just get right into setup rank a b uh network id i believe is the three four it's four is for mnemonic url rate great so rank b network uh reset and we're gonna do uh f three so this should only deploy this one this uh this nft simple.js i believe so let's go ahead and see if that works so we're gonna compile actually might not work because i don't think i did the initial migration the network id is specified in the trough config 4 does that match the one returned by the network id 42 ah whoops because i'm using uh the kovin rpc url so i also have a rinkeby rpc url so we're going to switch to that and again if you're like what are environment variables you can always set them in here you know like rpc you know url and there's one for rink b there's one for coven you know etc so this error makes sense i think it still might error out actually because didn't do the initial migration but i'm curious to test that now now that i'm here oh i guess i can just do yeah hold on it's to say could not find artifacts for and then that probably actually means that i didn't do yep because this is actually called my nft so nfp simple now because if we go to build right it's going to say my n of t it's not going to say nft symbol yeah it says mine of t now let's do traffic compile now we have nft simple in here now we can actually migrate i think unless we have to do the migrations first but we're going to find out all right great so it says we can we're going to go ahead and deploy awesome so we're actually deploying it to rink b we get a transaction hash again you can go check that out on ether scan once we're done here we're actually going to verify it i'm going to show you why this is so fantastic it's going to be truffle run verify nfp simple we are on the uh rink b network and we also need the license which is going to be mit so it's the mit license and so what's going to happen here is since we have where's the contract address since we've defined our ether scan api key which again if you're like water environment variables you can just set you know ether scan api key in here come back to ether scan and you can sign in you know get an api key right from here what's going to happen is it's going to say pass verified here's where it is and that contract that we just deployed with an nft boom now we can see the code we can read the code we can read all the the variables we can write all the variables we can do whatever we want uh and this is this is a a really you've if you've gotten this far and you're like i just want to deploy an nft i don't care um uh i just wanted to point nft you did it this is it like you just deployed an nft and it's verified on chain so we can do whatever we want here right the name is going to be my nft which we probably should change but this is this is as simple as it gets when it comes to um working with and deploying like nft so that's kind of like the hey bare bones we have an nft what are we how are we doing on time we're doing okay on time um great i'm going to answer one question can we do truffle verify and test net yes we can should you change the constructor for label and token um if we wanted to yeah like if mnfp simple um yes if we wanted to do that yeah we could but um we already deployed it so um excuse me right so this is the simplest way so now that we know okay we we've done a little practice doing the simple one now let's do a really cool crazy one okay let's let's get with it let's let's get into this let's do one where we actually can like be like boom check out my nft on ether scan look at this it's crazy uh we're gonna do a really cool one here there's gonna be one with verifiably random stats this is gonna be one with uh true randomness that we can view on etherscan so this is going to be let's let's pop off right let's do let's do the darn thing so we're going to creating that dungeons and dragons nft right from scratch feel free to code along with me let's do the solidity first so now that we know okay this is all it takes to build deploy an nft get it on ether scan we didn't show you how to put an open c yet we will get there okay so we're going to be using literally kind of the same setup as we just did here so we're going to start with solidity 0.6.6 and same thing we're going to import the erc721 we also need to import a couple of other things so we're going to import the chain link code so this vrf consumer base is how we're going to um interact with the chain link bureau so we also have to make this inherited vrf consumer base so my contract nfc simple is this in this let's even change the name let's change this to something crazy maybe we want to do like um you know verifiably random dogs or something like that actually i think i do have a cute dog that we can use uh [Music] uh yeah i do i do i do have a cute dog we'll do ratifiably ver uh uh verifiably random pugs this was actually provided by um a um [Music] uh chain link uh community member who is awesome so uh so shout out to them so we'll do a rng prop contract r d pup is erc 721 brf consumer base so uh again so we're gonna do constructor and it's going to be rng pup the name of this it's going to be rng pup and so the symbol will do rng unless somebody else is uh unless somebody else is like hey we really want to see you know dungeons and dragons characters let me know in the comments you know if you guys have any suggestions for any fun and a few stuff um keep it civil please um thank you uh thank you tomas um but yeah so we'll do rng pop unless people are like yeah no we want to see the dungeons and dragons stuff um actually no we will uh no i changed my mind guns and dragons i changed my mind sorry i have i have a lot of stuff uh a lot of artwork for the d d stuff so we'll just do that um so this so the name is going to be dungeons and dragons character dragons character uh and then the symbol will be d so uh we have those two uh main pieces here so uh what we need in all of our uh contracts is going to be a constructor like i said it's right here um but we also need it to be we also need to work with the vrf consumer base so it we this this part right here is this is erc 721 this is kind of um the constructor of the erc721 we also need the constructor of the um rf consumer base so constructor and then actually we're going to constructor public you also need the vrf consumer base which remember it takes the vrf coordinator and the link token right so we can find those in the the random consumer contract here um i'm going to go ahead and and grab some code from the final example that has everything in it actually does the truffle no it doesn't okay i'm just going to grab some stuff from the main piece that already has all this information scripts or migrations oh actually we do it all on the uh we do all on the migration so so these features actually when we do our migration scripts like this when we do our migration scripts these are some of the uh important addresses that we're going to need we're going to need the vrf coordinator which is right here we need the link token for this right here again these are specific to rink b if you ever like what where are these what's what's going on we can go back to the documentation link token contracts rank b or whatever other channel you want to work on you know matic for example finance marching um you know matic where polygon is a sponsor here they have super cheap fees a lot of projects are being deployed on polygon um [Music] and uh and yup and if you want to convert it you can use the new peg swap which is awesome uh but but we're not looking at that now so mumbai you know they're sponsored they're doing awesome stuff x die you know whatever you want to work on these are these are what we're going to need for uh rink b so we need the vrf coordinator which again is going to be this we need the link token address which is going to be this and um and that's really it so in our constructor here what we're going to need to do is we're going to need to to set these variables so that we can work with them later so let me scroll this down usually i like to make some contract variables up here so i'll do uh excuse me up here so i'll do like fights 32 internal cash because nobody really needs to know the key after work with cash we'll make it public just for this demo so that we can kind of work with it and see it we'll do uint 256 public um vr vrf coordinator and then we'll do [Music] we don't need a link token address so cool so those are the pieces that we need what we also need for working with the vrf again if we look back here we need these three uh variables as well so we're just actually going to go ahead and copy paste oh i still call this i'm still calling this nft simple i have to rename this to rename so dungeons and dragons character that's all so we need the key hash and the fee and then the random result we actually don't need the random result but we'll keep it here for now so the key hash and the fee again these are important pieces for working with the chainlink vrf again we went over that recently if you're like what is the channel of vrf go watch our channel vrf video it will explain everything and what all these pieces do um great so what we want to do now let's let's set these up for success so the vrf coordinator is going to be equal to this address that we give it um key hash is gonna be equal to uh the key hash which we actually have to excuse me we have to set these in the constructor so um just for clarity here we're passing variables to the constructor and then we're going to pass the variables that we pass to the constructor to this constructor right so if i do address the rf coordinator when we deploy this we're going to pass it as an input parameter to deploy it and then it's going to automatically pass that parameter into the vrf consumer base which is very good because we need it so we also need the address same thing here of the link token which again we're going to pass that to the vrf consumer base and then again we need the bytes 32 key hash and these are variables that we need order two and i'm gonna do this because i hate not having word wrap on um he has key hash we're gonna be passing this down here so this one doesn't go to the vr consumer base but we do need it to make our vrf calls okay and then we're going to do fee equals uh we're just going to set it to something hard coded here um we're setting it to 0.1 link this is saying take 0.1 times by 10 raised to the 18th or you know 0.1 um on different networks this fee is is way lower uh in different we're just kind of defaulting to 0.1 to make it easy to understand and what is the error variable must be mixed cased okay well don't tell them what to do um so we have our constructor set up great i'm gonna have to speed up if you want to get through everything um next what we're gonna do is we want to uh create uh a struct for a character right so where how are we going to store our characters right each one of our characters is going to be unique it's going to be different how are we going to do that well what we're going to do is we're going to create a struct which is like an object in solidity um or whatever right so we're going to call struct character and this is going to define this is going to almost be like the class it's going to define all the characters that we're going to create and we'll give them some stats we'll give it you in 256 strength um you went we'll keep a little bit small strength speed right you went 256 stamina uh and then we'll do string name uh and uh and we'll just we'll just do that for now so in the actual example we do a lot more but for simplicity's sake we'll just do strength speed and stamina here so these are the characters that we're gonna have they're gonna have strength speed and stamina uh and to keep track of them we're gonna need a list of these characters so we're gonna create a character array public characters and this is where we're gonna store all the characters that we create okay uh we're also gonna need some mappings but we're not gonna go into that yet mappings will go here but we will come back to that uh and again uh we're gonna put this comments in right above the constructor again this just has all kind of the stats for rank b it's literally the same as what's up here don't worry about it for now so cool so we have the constructor now what do we need okay well let's let's build a function that will request a random number so we can you know create a new character so let's create the function function request new random character what are we on for time i have 50 minutes time to go fast uh we're crossing a random character what do we need we need a unit 256 user provided seed and again what is the user provided seed needed for it is needed for the chain leak vrf we'll give it a name string memory name and this will be a public function because we want to name our guys and we're going to have it returns um bites 32 again this is going to work for truffle brownie whatever the solidity is going to stay exactly the same great and we're not uh in in the actual example that i gave you we're gonna have a couple more um like bells and whistles and some other stuff we're gonna keep it pretty simple for the video here but what we need to do in this is we need to uh request randomness right how do we um how do we actually get that random number so f32 uh by 32 request id is going to equal request randomness user provided c right so what are these these this request ramp press random loch ness request randomness this is imported from the chainlink vrf we need to give the key hash the fee and the user provided seat in order to uh in order to make that now what we want to do is actually i'm going to skip that for now and we'll come back to it and i'll show you why we're going to return request id yeah actually we're not going to skip what i just kind of mumble them or breath we're going to skip so this is great so this is going to request a random number and then in some fulfill number uh in in a fulfill method once we get the callback once we get the round over back we're gonna do function fulfill randomness which is gonna take that request id and the random number that gets returned uh internal override don't worry about that for now this is where you need to define the creation of the nfp so this function all it's doing is it's requesting a random number from the chain-link vrf and then our fulfill randomness function this is actually where we are going to uh call back and and get it set up uh yep and this is vs code emma oh i still have oops let me hide that person's comment um great so this is where we're actually going to find it define it and this is where we're going to request it now since it's asynchronous right so since we're um requesting a new random character in a different uh stack or a different um uh thread than where we're gonna fulfill it we need a way for the random number that we requested to match the random number that gets called back so we actually have to set a mapping to do that so when we request um when we request our new random character we want to do a couple things we're gonna this is where we're gonna scroll back to the top create some mappings i know i'm kind of bouncing all over the place but it makes sense i promise so we're gonna create a mapping of byte32 string and we're going to call this request to character name mapping vice32 to address and this is going to be request to sender mapping of bytes32 to uint256 request to token id and these are the three mappings that we're going to need let's go down and figure out why we need these so again when we create this when we request this random number it's going to get fulfilled it's going to get called back the node is going to call this fulfill randomness function back and it needs to know okay which character is this round number associated with so what we want to do is we'll do request to character name of request id equals name so we're saying i should probably spell things right huh i probably will be helpful um we're saying this request id that we just created this random number um this random number request is going to be associated with this character name that we just gave right and then we also need requests to sender of request id this is going to be message.sender so whoever kicked off this function is going to be the owner of this of this nft right that's who we want to be the owner of this nft so those are the two important functions that we're going to need here so let's scroll down to fulfill randomness now so what happens is we call the random number we say hey chain link vrf give us a round number please it gets returned here in fulfill randomness and now we can actually start doing stuff so the way it works is the chain link vrf responds with random number and the request id and what we're going to do is we're going to create a new character id so unit 256 new id is going to be equal to characters dot length okay because we have this character's array and we're going to set the id of this character to being the the new length of this array of n of ts so let's give it some strength now unit 256 strength strength equals we're actually going to just grab um uh we're going to grab a modulo of the of the random number but we're going to get a number between 0 and 99 for this but strength is going to be between 0 and 99 and it's and it's going to be um from the whole random number until 56 dexterity equals uh and we're going to do some some fun stuff random number i spell that right random number module 1000 divided by 100 this way we'll get uh different random numbers for each one of these right because we're going to use this the same random number to generate a few different random numbers and actually what are the what are the sets speed stamina up so strength speed and stem excuse me not dexterity strength speed stamina and you went 256 eminent equals we do the same thing random number modulo but this one will be uh one two this one will be this many divided by one thousand so this is just a way for us to get multiple random numbers from the same round number so we're basically splitting the rounded number i'm just gonna switch over basically splitting the random number into like little little sections right we're saying okay these these uh these digits are for this round number these they just are for this round number um although this first one is just kind of the whole thing but we're basically splitting up in a way that makes sense we can have multiple random numbers there um [Music] great so let's continue then what we want to do is we're going to push this new character onto the array of characters so we're going to do characters got push we have this character's array remember it's called characters characters are right called characters right here uh we're going to push this onto the character array we're going to create a new character care boom i'm going to give it the strength feed stamina and we'll give it request to character name request id so this mapping that we did above here when we set the name of the request id now once that request id is fulfilled and returned back down here now we can actually use that name to set the character and add it to the uh add it to the character right here and then once we do that we're going to call this safe mint function this is uh imported from opens up one drc 721 we're going to call this safe mint function what's going on here okay i'll fix that recall this safe min function which this is where we do request to sender request id new id so we're minting and we can actually even we can see uh what safeman does um safement mints uh minced the nft right so uh and it sends it to um the owner and um with the token id so we're saying request sender this is how we make that message again request a sender up here this is how we make the message.sender the owner of it even though the chain link node is what calls this fulfill function so awesome now what we want to do is we want to just set this last little bit so in the in the example we have a couple other functions we're not going to go into that now because we're just going to use etherscan to kind of check it out but we want to set a token uri so what is a token uri um what is a token uri so so here is what happened when people were figuring out nfts they said nfts are awesome we can put art on chain this is great you know life's a breeze this is awesome really excited however storing a lot of stuff on chain is really expensive and if you've probably interacted and if you've interacted with any chain you've realized wow okay you know doing a transfer costs like you know maybe a dollar or something like that um imagine you know how much it costs to put a whole gigabyte on chain so to kind of get around this um the art world in the nft world says okay here's what we're gonna do we're gonna create what's called the token uri or token um uh our uri lookup uri versus url because aren't those the same thing they're often used interchangeably but they're not you know a uri could be ipfs it could be http it could be whatever but it's a way to uh identify a specific something so they said okay well here's what we're going to do we're going to give it a token uri that will return some attributes about it just so we can render it on open on these different platforms so we are programmatically making these so that um they can battle they have these on-chain stats so they can do whatever they want but in order to render them um and make them viewable like for example on uh oh i closed the uh i did closed a closed open c open c chain link wizard they said they said we don't want to deploy this big image to the chain that's going to bankrupt us so what instead they said okay instead of that we're going to use a token uri which is going to define where the image is stored right so you can do some type of decentralized storage and this kind of brings if you guys want to talk about like full stack blockchain i'm really excited about the topic ipfs and protocol labs is really excited about that topic and again they are a sponsor of this technolon which is really cool so in this token uri [Music] it needs to return a json object that looks like this so it's just any api call basically which can be ipfs a server api whatever we're going to use ipfs again because we want a you know we want a more decentralized transparent one where it just has the name description the image and the attributes again the image hold on let me just uh make sure this looks good the image needs to be something like this right so the image is going to point to something like this and this is what we did for the chain link nfts that you guys saw before uh we have them stored we actually have this image stored on ipfs so it's more decentralized um although we can talk about some of the uh intricacies of how that works filecoin is actually going to be a major improvement um so if any of you guys figure out how to do a filecoin backend for something like this that would be really really cool um but anyways so this is what we need so we need a token uri that represents that that follows this so because setting that up um or let's let's let's let's define the function that that makes the token uri and we'll explain it in a little bit so if you're like well you feel like i'm a little bit lost don't worry we'll get there so we're gonna do function set token right 0.256 token id i remember new id this is what defines the token id when we minted it string memory token uri this is going to be a string that we're going to give it click um i am going to just copy paste this requiring don't worry about this for now but all we need to do is do the set token uri token id uh token uri um yeah you can go check out the description to uh go look up these functions to figure out why that those are important so we're going to set the token uri and then you can also do this on the fulfill but we're just going to do it in a separate function here so we're going to set the token id to have the token uri and again this is how we're going to be able to render the image on something like open c right so great so we have a really um we have pretty much all the functions that we need here um to get one deployed obviously it doesn't look like much right now but let's see if we can deploy this to the chain and see if what we can do next right so let's go ahead and create a quick deploy script so in our migrations i'm actually just going to delete this yep goodbye we're going to delete or delete this and we're just going to start from scratch and our contracts we have what do we have dungeon dragons we're even going to delete this actually because we don't even need this either goodbye goodbye so we're going to create a new migration again to deploy character.js um and this actually isn't even gonna deploy the character we're gonna do rename this deploy character contract because that's that's more accurate so let's see actually let's see if i our if our stuff compiles i'm just assuming i'm a amazing coder and never make mistakes which definitely isn't true we all make mistakes okay let's see what mistakes i made visibility already specified as public constructor public is public okay well that's uh makes a lot of sense uh we don't need this one try again second time's a charm nope didn't do right the second time let's see they spell something wrong add address is not implicitly convertible to expect the type of unit 256. uh that's because this is an address and not a un-56 so that makes a couple sense here and there by the way key hash is defined twice they're like right next to each other thank you let's see is that with the yep there it is previous declaration is not uh here wait what does this say identifier already declared okay let's try again a couple compilation errors and boom okay cool so let's look at build uh we'll be we should be able to see what do we call this dungeon dragons boom dungeons and dragons has been built successfully awesome great now we can go ahead and create this um deploy script here so i'm just going to copy and paste a couple of things in here again i said i was going to copy paste this um before wrap these are the uh the variables again you can find these in the chain link docs uh it's the vrf coordinator address for rink b the ring be linked token address and the ring b key hash again you can find those in the chain link docs so next what we need to do const dungeons and dragons character equals artifacts this is how we get uh the stuff in the build build folder re-q-u-ir we're just going to copy and paste this because it's silly to do the typos again uh so we're going to grab this is how we do the um this is how we get those builds and then we're going to create the uh the scripts so module.exports equals async function if this is if you're like what are you typing i would say don't worry about it copy paste this um and then you can kind of google a little bit later what this syntax is right so this is just javascript's way of saying hey we're this is how we're going to uh this is how truffle is going to know what what we're doing here okay then we're going to do we're going to deploy it so this is just going to be truffle syntax we're going to do let d and d equals await because it's asynchronous a dungeons and dragons character deploy deploy here excuse me whoops sorry it's gonna be uh apologies we need to play first deployer dot deploy runs in dragon's character and again this is where it takes in the parameters that we gave it so what are the parameters of the constructor around the coordinator the link token the key hash okay so we need to give it again i'm just going to copy paste the coordinator link token yeah how are we doing on time not great but super speed a d and d equals await runs in dragon character dot deployed so we're saying okay great this is what's going to deploy that contract and then we are going to let d and d equals this dot deployed okay and that's it so we're just going to deploy this to the ringplay network this won't work on other networks because we're hard coding it to ring b but let's see if this works so we can do truffle migrate dash dash reset dash network rank b again because i have all my environments variables set up correct we should be able to deploy this no problem and this is going to be our super sick contract here export default to be full es6 esc6 friendly yes es6 es6 friendly es6 es5 common js these are things that i got to learn more about recently and i decided that javascript is wild so i messed something up deploy invalid or does not take parameters so we gotta take a quick look scene we'll see where i'm messed up here wait deployer to deploy dungeons and dragons character maybe dungeons and dragons character constructor constructor so we did something wrong uh-oh what do we do wrong here guys so we can even look at the the build contracts duns and dragon's character looks like it takes an address an address that bytes32 let's say in the deploy address address and a bytes32 okay so what did we mess up here [Music] i actually did mess up require is approved or owner i think this is only for ownable oh no that is for that invalider does not take parameters what did i mess up guys anyone see where i messed up department deploy rigby vrf link token key hash [Music] but just copy and paste my my working demo this is pretty much the same code it just has a couple ifs if ends saying if you're working with ring b great if not you messed up let's see let's see where i let's see if it was the script or if it was the contract so if this works then i messed somewhere up in the script if it doesn't work then i messed up somewhere in the contract so let's find out together we have a half hour left i think i can i think we can do this to open c and uh and rip this out i think this will be this would be perfect timing actually so we're saving migration to chain keep track of all our migrations that's what this first one does this initial migration deploy to deploy migrations and then we're just going to do this one and it looks like i messed up my [Music] uh i messed up my script here that means because it's working so sorry guys um it's working now yeah do you guys see where i messed up before i don't see where i messed up before power deployment well in any case this one's working um bytes 32 check maybe there's a bytes 32 check or something oh actually there's a good chance you're right oh no it looks like that's right well in any case um this one's working and we just added a couple like if network starts i thought this was exactly the same module that exports did i did i do module that exports wrong oh my gosh i did i didn't do exports wow okay embarrassing uh well any in any case we'll keep this in here so it worked so we deployed we've deployed it right so we can go see this contract address an etherscan this is we're gonna go to rankb scan and remember it's not going to be verified yet yeah module dot exports that was my mistake whoopsies thank you thank you for looking out here but we can see great we've deployed it but that's about it so you can't really do anything much with this on open c right so we can even copy this put a rink um right we want it to look like this let's go to the rink be test net right it could be test net or sorry rank b open c open c ring b so this is the test net on ring b um are we on the ring b network let's just double check great we are this address in here or actually let's go to my profile we're going to sign in this is my metamask that's associated with the private key that i'm using saying i'm unnamed and i don't know of anything oh because it there's uh there's nothing to have it's like what are you you're what are you talking about you're there's nothing we have nothing for you so let's verify let's verify this contract so again we're going to do that truffle run truffle run verify because we have this the truffle plug-in installed truffle run verify i'm just going to copy paste so i don't want to spell dungeons and dragons character dash dash network rinkabi license mit 25 minutes here we go here we go we're doing it we can do it so now we're verifying this on ether scan because again i have my api up now we can see it on openc excuse me we can see it here great and we have this thing verified which is awesome and can we see it now on openc i don't think so actually i think we can't um see all items aha here we go so we can see oh so i've deployed a ton of stuff from here oh whoops i cheated so so these are the ones that we just deployed right and obviously it's empty um chain info is this the token id two hours 30 minutes ago maybe this isn't the [Music] well in any case one of these is it so uh clearly i've deployed this a ton of times but um because i've worked with this time time so we can't see anything though it's just a blank nothing so that's not helpful to us at all so what do we want to do now well first this was just um this code we we deployed was just the code um for forgetting like all the uh all the frameworks set up we haven't actually requested anything yet right we haven't called this request new random character so this is going to be an empty array so remember if we if we go to openc excuse me if we go to dungeons dragon's character we go to the contract read contract let's go see characters zero let's see is there a zero character it's gonna be nothing right because there's no characters have been created yet so we need to actually create a character so um in the example i have a script that actually um that actually calls this request new random character we're just going to call it from ether scan in the interest of time but if you want to see the scripts um that actually do it um definitely go check those out there's a script for funding the contract for sending it link this drink script for generating a contract but again just an interesting time we're just going to call it right from from etherscan so we're going to connect to web3 here connect awesome and what i'm going to do is i first need to send this contract some link right because in order to request a random number which could send it to just case we want to create a whole bunch of these if we want to create a random number we need it to be able to um to send a link to interact with a chain-link vrf and again you know this is another one of the major benefits of doing everything in like in your coding environment you know like vs code because you can just put these put everything that we're going to do right here into a script so that you can just kind of repeat it and not have to do you know all the kind of manual work that i'm about to do so it failed uh it's a test net sometimes things fail on the test now killing maybe let's make the gas crazy high 50 50 way we're going to send it link and once we send this contract link then we can actually request a new random character right and then we'll be able to actually see it uh great so we actually did it request a new random character and we're going to give it a name so we'll do we'll do the a random seed of like i don't know one two three four five six seven or four five six and we'll give it a name of we'll do stainlink painlink hackathon knight right can i read property methods of undefined oh did i mess something else up can i read property oh i should probably should connect to web3 right [Music] that's probably helpful connected web 3 is important guys so now we're going to we're going to confirm this transaction and we can view it and this is the transaction that's actually doing the random number getting so it's calling we just call this request random number which kicks off a request randomness to the chain-link vrf and the chimney vrf is going to return by calling fulfill randomness and it's going to create this random number or excuse me it's going to create this random character for us push it onto the array and then mint it and we're going to be the owner right so that's what's happening behind the scenes right now so let's refresh and remember we have to wait two transactions for this right so we have to wait for this transaction to fulfill succeed which it did which is great and then we have to wait for the vrf to actually return and create this digitally um provably rare um character here so now if we go back to read contract remember how there was nothing here before there probably will still be nothing no just kidding there's a there's a there's a character here now so we see it's strength it's speed and it's stamina so it's called the chain-link cactuathon knight it's got some pretty abysmal stats but you know what it's the first one so we'll go with it so okay awesome so we have an nft we did it congratulations we we can we call it a day we move on no just kidding we still want to deploy it onto openc we want to see it on openc we want to work with it on openc so we still have a little extra work to do so remember how before i said okay we have this this token uri thing so let's even go to this on the ring the openc no items found that's so annoying my profile unnamed sound of this account okay here we go copy this there's a good chance it's just taking openc some time to propagate clms again yeah open c is probably just being a little slow to update which is fine activity of course there's not gonna be anything activity created i'm gonna go oh to you a minute ago oh so we did create it great okay here we go so this is the nft that we just created so and it's like what there's something on chain i don't really know what's going on i can't really render it because it's looking for that metadata that it doesn't have yet so this is the one that we just created right it's like dungeons and dragons character aca right and that doesn't mean anything to anybody so what we need to do is we need to set a token uri and to do that we're gonna we're gonna add this to ipfs and again in my example i have some scripts that actually a script called like create metadata that do a lot of this stuff for us we're just going to do it manually because it's going to be a little bit quicker so i have ipfs installed if you don't have ipfs you should you should definitely get it it's awesome it's a lot of fun and what we're going to do is we're going to create this so we're going to do we're going to do files and here and we're going to create the metadata for this guy so i obviously have a bunch of different files in here because i've done this a bunch of times but we want to create some metadata that looks like this and we're going to set the token uri of this equal to um [Music] equal to that right we're going to excuse me we're going to set the token uri equal to the uh the api call that we're going to create in here so let's actually create a file and then we'll import into ipfs so here's we're going to do new folder metadata in this metadata folder we're going to do chain link hackathon night jason okay and in here we're gonna have the metadata and again in the interest of time i'm just gonna go a little quicker so uh this we're going to define everything so i have a script that automatically creates it based off what's on chain if we look on chain again where's the read contract is this that that's gotta be it yeah character zero we do have to manually set it um in our in our metadata folder so we're going to set strength 248 that's speed 34 and again i have a script that automatically does this and then this was stamina for 48 and then we're going to get rid of the rest of this goodbye we're going to call it link hackathon night and then we're going to call a description you just win just kidding we're going to call it um gene link hackathon is where i learned to do this or that's a stupid description hola can link rolls we'll go we'll go with that gently rules and so this is the the token uri that we're going to set and again we have this um oh it's it's blanking because i have uh ipfs up let's sorry we'll close it real quick and this is going to take us to an image of the chain look nice so this is the image that's going to be rendered right and again this is also stored on ipfs so so great so we have this this metadata here now let's pop into our ipfs desktop and we're going to import a file actually i'm going to hide my screen real quick just so just in case i don't go somewhere stupid in in my folder here all right here we go so chain link hackathon night.json we're going to open it imported it great we're even going to pin it uh turn the hackathon knight we're gonna pin it so it stays up uh if you guys want to check out ipfs pinning services i definitely recommend that you do um they will help keep your pins up longer but this is what's going to define how openc actually knows what our thing looks like so now what are we going to do share link we're going to copy this link oh whoops two files whoops now that we have it in ipfs share link copy the link we're going to go back here and again i have a script that does this but we're going to do it here oh yeah we do it live guys oh yeah i'm showing you this stuff works and stuff is fun and we're going to go back to the right contract we're going to connect back to web3 okay and we're going to do this set token uri so the token id is going to be 0 right because it's the 0 token that has this token in your eye and we're gonna set it to this and again remember we have access parameters so that only the owner only myself can set this we're gonna do write confirm view our transaction and this is pretty much the last step that we need to do in order to get this to render on ipfs i'm just checking out my notes here to see if i missed anything and once this is up we can go back to this and it will show up here that we actually uh the metadata is actually here so we'll do a quick refresh and we'll see if we did this properly if we did it properly openc will be like oh okay that's what you meant i can understand the token uri i can't understand the entrant attributes i'm actually looking forward to when these um marketplaces understand the on-chain attributes uh instead of having to do this token uri thing but again ipfs makes it really easy um and uh and blockchaining if you will right uh filecoin and ipfest together is gonna be a way to have like a decentralized database and do this which i think will be a lot of fun and really cool so let's refresh let's see if it worked and boom there it is so we have our night here right we have we can check out the levels we see speed stamina strength we can see the chain info we can see who owns it right it was created by me eight minutes ago and now we can do whatever we want with it and now we have it list we have a okay i'm like i'm super excited that we did this real time uh so we have in an hour and a half in less than an hour and a half we've created a digitally scarce piece of artwork deployed it to a test net and showed it on an nfc marketplace and you can reproduce this exact same thing from mainnet just swap out um obviously the addresses and the api keys for their ringt for their main equivalents of the ringpi ones that we did um but this is like end to end we've built an nft obviously we did a little bit of the artwork before you probably want to do some of the artwork yourself um previously but i know we went through a lot of stuff right here um and again the uh the full repo for everything with with more the scripts uh with more of kind of what we uh more of the stuff in here is uh is available here again i will drop this into the chat pop that into the chat here the article that goes over that everything is in here um i just updated this to be able to do uh env files so if you're confused with environment variables you can use emp files um but with that oh i am i'm sorry i i wasn't showing hold on [Music] um this is the uh this is the repo that has everything it's recently updated to have dot env stuff in it um here is the article like i said that goes along with it i will drop this into the chat as well um there are two uh there are two nfp articles that you guys can read that will go over more of this as well i know we've sped through a lot of stuff here so uh we definitely have time for questions so i'm gonna be looking down on the questions now um are there any any questions so okay hey patrick is it possible to change the stats of your nft after minting okay triggered by some sort of event also would want to restrict it so the only the owner originally admits it has permission to do so yes great question um and the answer is is absolutely so if we go back to the stream or if we go back to here [Music] right the way that we set it up and the way we set up the contract is that uh it only gets minted once right so this is digitally scarce but it's not so much dynamic a dynamic way to to add this in would be to say okay maybe add another um like a function and this is what i wanted to do but we don't know enough time function battle right and it pulls a random number and it sets them uh and it sets holds a random number like pull rng and then like uh excuse me use rng to battle base battle weighted on stats or something like that and then winner updates stats right and so that is something that you absolutely could do um for for other dynamic nfps right obviously what what else you could do is um this is something a lot of people talked about is like create an api um or something that connects to weather data and it updates the nft real time uh whenever it's like raining or something like that or whenever the president changes or something like that that would be also a dynamic ft and just a crazy cool um something that we haven't seen yet so uh great question absolutely great question let's see what other questions props for coding what thank you thank you i tried bidding for i wasn't promoting it um you should be a dungeon master i want to play that game i actually love being dungeon master i prefer being done in a master um thank you okay what else what any other questions why did you use truffle over hard hat uh great question and really the reason is when i was first making this uh i knew truffle better so i used truffle if i were to redo it uh i definitely would redo it with hardhat um i mean truffle still gets the job done obviously uh and all these contracts will still work with hardhat right it's it's no different it's just a different framework so so if you're like hey i want to do this again just copy paste the contracts into hard hat is it possible to make an nft burn itself if certain conditions are met or would that incur a network fee is it possible to make an ft burn itself uh yes it would it would also incur a network fee right because any time you make any type of state change to the blockchain you do have to pay a little bit of that a little bit of that gas parameter so it would incur a network fee however um that would be really cool you know maybe you burn an nft if somebody does something bad or something like that they or their pokemon dies but yes you could you could do that absolutely great question any other questions here these are good questions i'm going to move this up so i'm looking at the camera any other questions here these are great questions and if there are no questions i'm assuming that means you guys all got it um you guys all could it um oh sorry i didn't see i skipped a couple questions sorry uh can set your eye be called anytime after the minting by the original owner we would like to change metadata triggered by events wondering if that's possible oh i think i did just answer this um yes right because the way that i set it up here just in this example is we have set set token uri the way we have it set up is it just any time it can be set right but this is the the token uri again is only what is going to be shown to the world right on chain uh this won't change the attributes at all right this won't change the on-chain attributes at all in order to change the on-chain attributes you'll have to have some type of function that can actually do that so really the answer is anything is possible through code you can set these functions up to to be in any way in any way that you please so uh absolutely great question can anyone other than the original owner set the token uri uh let me go back to the code um so this function right here is approved owner i kind of skipped over it when i was talking this is a function from the erc721 import from open zeppelin and it it basically says um it checks to see if the message.sender is an approved is is an approved member of the token id so the owner of the token id can quote unquote like set approvers who can update stuff and um and this is just a really easy way to do it so right now the way i have it set up only i can set the token uri because i haven't set any other approvers and i am the owner so this is a this is a function that protects you against that so access controls are really important if you want to learn more about access controls again opens up one's going to be your friend here go check out the opens up packages to to do that great questions really good questions here what have what would have been different with ave protocol um i'm not sure i understand this question so you could do like flashlights with your nft that would be kind of cool thinking about avagochi ah um you should check out the abugoshi code actually if you want to learn more about how theirs work they definitely do really cool stuff can i use photoshop to create nft art yes yes you absolutely you can use whatever you want wouldn't updating nft state from weather data for example also incurred gas link fees yes it would great point however if you had it just be like a view function right for example on a data feed right if you're just pulling you know the data feeds it wouldn't occur um it would not occur a fee fee which would be really cool actually so if you set it up the right way no who created the images shown in openc um that would be our amazing designer julian he is a monster he makes super cool art right what about generative art would that be possible to have an organic nft based on a script like processing yup yup now you can do that so i mean again the answer is you know anything's really possible through code um all this is really possible through code so uh great questions great questions any other questions here i'm gonna leave uh i'm gonna i'm gonna sit on here for another two minutes and answer some questions these are great questions i know we went through a lot here uh this was a ton of fun we actually deployed like an nft with art with stats with on chain you know verifiably random stats live which is insane which is so much fun what a way to start the day feeling inspired excellent i'm glad to hear you're feeling inspired i'm glad to hear that you're you're ready to build you're ready to be excited uh because this is how i feel you know i feel super excited you know you guys are you guys are working on some really cool stuff and i'm really excited to see what everybody's working on and especially in this nft space right so so thank you any other questions any other questions i do have to hop off in two minutes because ave is actually going next and they're going to be a blast as well um so if you want to see ave kind of give their demo uh mr david will be uh will be going on and he will be explaining more stuff about uh about ave which will be a blast uh later today we have a ton of cool stuff lined up for the hackathon workshops uh we are doing testing and multi-chain at the end of the day today which is going to be a blast i know a lot of people um we we do a lot of demos where we deployed to test nets because it is kind of the best most accurate way to test your stuff against uh real oracles however uh testing and deploying locally is obviously a blast as well because it's uh it's gonna be faster you're gonna be able to iterate a lot faster i'm gonna show you guys how to use mocs and everything so uh data feed example in the future would be nice thanks um i will put it on my to-do list but my to-do list is pretty long uh i would love to see somebody make a data-fit example because i feel like it would be very doable here i have a problem activating my metamask account how can i log back into it um that's a longer question i would say you might want to ask metamask support but if you have your uh your seed phrase you should be good to go and you should 100 have that backed up is it possible for the original mentor to burn an nft after it has been transferred if you set up the code that way um the one that i just set up no the original mentor cannot burn it um so it depends it depends on how the code is written so this is why audits are important they check for that stuff all right well it is ten o'clock i gotta jump off thank you all so much for coming uh looking forward to you on the next one bye oh
Info
Channel: Chainlink
Views: 19,414
Rating: undefined out of 5
Keywords:
Id: EzZEx0lumr0
Channel Id: undefined
Length: 90min 48sec (5448 seconds)
Published: Thu Mar 18 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.