 So the live stream is going. Yep, you are live. Yeah, feel free to take it away. OK, all right. So I want to welcome everybody today to our session that we're doing on the Running Smart Contracts on Hypernature Fabric, which is obviously a very popular topic for, I'll quote, almost everyone. We have over 500 registered attendees. We've got more joining all the time. So we'll have an excellent session. We're fortunate that Jim Sullivan, who had done the original session for us on developing DApp contracts on Hypernature Fabric, has come back. And now we're running smart contracts on Hypernature Fabric as well. And so Jim's got a long list of certifications on many technologies, not just Hypernature, but on smart contracts and everything else, DApps, Ethereum, all kinds of stuff. So with that and his experience, I want to get the session started. First question, though, Jim, over to you is how do you want to run this from your perspective? We're going to go through this session. Do you want to hold questions to the end or how do you want to manage that? Yeah, let's hold the questions until the end. Yeah, that makes sense to me. Yeah, I think there's a ton to cover here. And it would be better if we just drive through it first. It's going to be a little review from last time. So everybody, if you did not see part one of this, which was November 3, the YouTube video is still out there, so please do. We're not going to obviously rehash any of that, but what's in there is installing the chain code that for the EVM. It is invoking the chain code for the EVM and instantiating querying, all of which are basic Hyperledger chain code or whatever, chain code fundamentals. So that in and of itself is still worthwhile. So please do take a look at that. We're going to skip all that. We're going to get right to working with the EVM and distributed applications. Yeah, one thing I will say, Jim, you have the PDF of the slide deck available for us after the call, so we'll make sure that gets posted. But then at the same time, we have these, all of the attendees came through different Hyperledger meetup groups and the public sector session as well. And I'm going to make sure that we do post both the current slide deck and even the old slide deck out there again for people. So with that, I'll turn it over to you, Jim. Okay, all right, great. Well, do you have to do this disclaimer anymore? Oh, yes, I do. Thank you so much, I've got my head somewhere else. So two things, first of all, it's Hyperledger is an open organization and we have competitors who are sometimes in these meetings and we have to make sure that we conduct ourselves according to the Hyperledger rules of conduct on a competition that we're aware that we don't want to violate any antitrust laws for sure that are in the US or anywhere else. So please make sure your comments are appropriate. And the other thing is Hyperledger is a welcoming and inclusive community at all times, but does that mean it means we show respect for everyone else and professionalism in our conduct and we're happy to have anybody and everyone here attend and contribute in this case in the code Q&A section, but the idea being that we are welcoming and do want to make sure that all interaction is respectful. So there's more information on both the anti-competition laws as well as the antitrust laws on the Hyperledger website as well as the open inclusion theme for Hyperledger as well. So with that said, I do want to turn it over to Jim Sullivan from Blockchain Academy and let him go through running smart contracts on Hyperledger fabric. Thanks Jim. All right, great. Thanks so much, Jim Mason. And we appreciate everything you do for the Hyperledger fabric and the Linux foundation in general. So just very quickly, I just want to refresh everybody's memory at where we left off. So right here we have, you're not familiar, if you're new, I won't go too far into this, but we have this Hyperledger fabric as everybody knows is our enterprise blockchain solution. Here are our enterprises and here's a little bit about the architecture here. We have the piers obviously in the wearing pier. So this would be an example, a very brief, a very simple example of the network via our client apps, which interestingly enough, we're going to look at today. And all of the data is managed on all these piers. You can see the distributed solution, right? Jim, I'm sorry to interrupt but your audio got a little quiet right there. Oh, okay. How about now? Is it sounding better now? Yeah, yeah, yeah. Okay. Let me get a little closer here. So we have our piers here and this is where all the piers is where the ledger is kept where the ledger is actually queried and then we have our ordering pier that orders the transactions pretty straightforward. One thing about this solution is, and we're going to talk about this and there will be a call to the community. So we will need everybody to jump in and say, okay, yes, we understand what needs to be done here is we could see popular solutions that are still out there right now. Are using, so this is Simba chain. I don't know if anyone's familiar with Simba chain but if you're not, please take a look at it. It is a low code or no code smart contract developer engine and it uses for this, it uses the solution that we are looking at right now. And also for Truffle, those of you that are familiar with Truffle, this supports exactly the hyper ledger fabric EVM that we are going to look at right now. So there are already two enterprise tools out here which are using this solution. And everybody remembers, if you could probably look pretty closely here, we're installing this EVM CC. Hopefully this slide is in that range a little further. It's a little zoomed out, but that's what we'll be adding. And if you look at our previous session, that's where we went ahead and installed it. So you can see that container right there, that chain code running. That's the EVM CC that we look to install. And last time around, this is the instantiation of that EVM CC. So even if you're just looking to get a, just a kind of a high level introduction, well, right here, here's some chain code instantiation with EVM CC. So at least you get a little bit of review. You get a little bit of work with the Hyperledger basic chain code instantiations, queries and so on. So you get a little bit of everything. We can see here, we can actually, here's one of the queries. So we were able to actually install and run this natively right from the peer. You can see we're running right from the peer here. The downside of running in this fashion is it gets a little cryptic because we're using all kinds of, and getting hex results back, which is not that great. But that's just running natively. You can see here with the, so we set a value. This was a basic contract. We're gonna do a smart contract that's a little more involved this time around. And then we just echoed the value back here. But then we were able to install web3 and we were able to set a value and then return that value right here. So that's what, so you can see the difference here between running natively and then running out of what we call web3, which is the protocol for a web, what's a fab3, which is a web3 provider that is part of the solution. So actually we install something called fab3 and that again is in our previous video that becomes the web3 provider. So we don't have to use these hexes and read the hex data. We can work at just regular all decimal numbers and data. Again, Truffle, which is a popular, very, very popular tool suite. Those of us that do use it, we want to be able to continue to use it. And we wanna be able to use it for hyperledger fabric. And if you look really close here, I hope this is viewable. You can see port 5000. We'll see why that is, why that's significant. Because what this solution is giving us here, the EVM running on hyperledger fabric is our web3 provider does run on port 5000. We'll take a quick look at that example. And right here, I'm sure everybody's familiar with Remix. So this is where it starts. This is where we begin to develop our smart contract that we will deploy onto hyperledger fabric. So at least this is where I start. This is a good place to start. This is where we're gonna look, at least for our example. Almost anybody that develops for whether it's a theorem or any EVM supported distributed ledger or blockchain starts with Remix just because it's so convenient, right? And we get out there and we start to load in our data and our functions. And what we are going to have to do is pay attention to the ABI, which is the application binary interface and the byte code. So we get a little introduction to that. And that's fine. But it's all knowledge that is useful to have even if it's not, it's reasonably straightforward. And we have a book to developing smart contracts on Amazon, so programming and solidity. And that's what we're gonna look at. We are looking at the solidity development language. So please, if you are interested in getting a book, this is learning by examples, should probably put that in the title. But it is published on Amazon Kindle Direct Publishing, which if any of you have ever done that, it's quite an interesting journey. So again, how do we do this? How do we develop distributed applications, DAPS? How do we take our smart contract and create an interface that is a web application and or a mobile application? Well, really what we're gonna be looking at is an API that comes with our user interface. So here we can see just, this happens to be Web 3.js, which we can use, not a problem, but it actually calls our smart contract. So if you take a real quick look here, you can see web3.term provider. And we can see what our provider is for Web 3. Now, so this is an interface, this is just regular old JavaScript. So one thing we need you to take away from this is, this is gonna need to be JavaScript, whether it is out of the box, JavaScript, Web 3.js, or React.js. We're gonna look at a React.js example, shortly, it has an API that calls your smart contract and returns, take obviously sends inputs from the user to the smart contract, and then returns the results back to the user. So in particular, you can see here, we are just really taking the results and the inputs and sending it to the smart contract and then returning it back to the user. No more difficult from that. So it is an API. And there are, you can see here again, the Fab3 provider, the public network. This is the fabric network here with the organization, the peer, the channel, the channels, which are actually run on the peers and the EVM chain code. And over here is our decentralized application. So our decentralized application is building, is going back to the Web 3 provider and building that webpage and then working with the hyperledger fabric network. So a relatively simple architecture. And right here, we'll actually come back to this, but if you want to take this workshop, you can scan this or look at the registration code that's right there. We'll actually put this up here at the end of the session when we're looking at our example. If you scan that QR code, you can get to a registration page where everything is there for you. An image, a step-by-step instructions and the ability to go through all the steps for, really what we did on the previous session back in November, but working with that hyperledger, fabric the chain code, working with it natively. And then installing Web 3 and working your way through calling a smart contract, a simple smart contract. We don't want to get into anything too complex for your first time out. And we'll have the opportunity to bring this back up a little bit later. And so let's go ahead. Nobody wants to watch a lot of slides. So let's jump right into this. Drag this out of the way. I can't wait to wake this up. So here we are on our image. Hopefully everybody can see this and it's clear. Hopefully I've made this a little bit bigger, but this is our, we have running here remix and we have a smart contract here that is going to be a roster type of a solution for our smart contract. So we will add, we have a constructor here, which is gonna run this create student function, which assigns a, well, let's see if we look up here a little bit. Let's first look at, we have a struct, which is kind of like those of you that are familiar with it, kind of like a class, a student, what does a student have? What are the properties or attributes a student has? Well, in our case, this is really simple. A student has an ID, a student has a name, which we're calling content and the student's either present or present true or present false. Then we have a mapping where we take all of these students with different IDs, different content, obviously, and different present status and we can stack those up in a data structure. And so, you know, just like an array vector or anything else, it's called a mapping here that we're using. We're gonna write an event to the log and you can see here, these two events, we're gonna write to the log. We have our constructor where we're gonna create some students out of the box. Sorry about that. I should probably close my email. So we have, again, our create student where we're increasing that student count. We're using that for our student ID and we are passing in here the student count that we just calculated up here. Their content, which gets passed in here and we're gonna initialize their status as false. So their present status is false. I, actually, for our example, we're gonna change that initially to true. But for this demo here, when we take a look at our actually running example, we change this to true and then we mark them as absent. And then we have a way to toggle that they are present. So whatever their status is, we have our little, the bang symbol there. So we're gonna flip it to the opposite of, we're gonna pass in a student ID and whatever their current status is, it becomes the opposite. And then, so if they are initialized as absent, we make that status, we change that to true so they become present. Now, those of you that are not familiar with remix, first thing we're gonna do is click this, what they call the compile module here, that little, and we're gonna compile this contract. And hooray, right, we got a clean compile. So, and one thing that's important is we're gonna look at the ABI. So the ABI is like a JSON schema. We will take a look at it, I promise you, where we can only copy it right here. And the bytecode. So anytime we're working with Solidity or the EVM, it works in a virtual environment. So all of this code here now has been compiled to a bytecode. So maybe I have a little example here. Here is the bytecode, oh boy, that's small. At the very tip top, I promise you, we will take a look at it. And it's not all of this down here. And if we look here, at a different example, we can also see the ABI, which is right here. So this is the ABI, and it is a JSON type of schema. And we can see here our present Boolean. If you look closely here, you can see some elements. So we need both of these for to deploy our smart contracts onto Hyperledger. So there are no tools right now out of the box that do a lot of this for us. Some of this we still have to do manually. So I'll be copying and pasting a little bit because obviously those are long, particularly the bytecode, those are long strings and you don't wanna see mess that up as far as typing anything in or entering anything in. So let's take a quick look at this. So we'll go here, we'll click on our deploy module and we'll deploy this smart contract. And we're just deploying this right now to our bar environment. And what this does, it gives us a little, but it's a good thing if you're not familiar with remix is it gives us this little user interface here for free. And that's fantastic. So we know we have four students out of the box. We can click here on student count and it returns four, hopefully that's visible. And we can say, hey, give me us, give me the details on student one. So we enter student one, we click there and we can see student one is Tim Baker and then we can put in student two. And we can see the student is Rob Sims. And we can also create a new student. So from here, we can enter. Just so you can see what this does. So we can do all kinds of testing here at this level, make sure everything works as needed. Click transact, that was successful, fantastic. Our student count should go up to five, did. And then, so let's look at the detail here on student five. So that's Ryan Williams and Ryan is right now initialized as false as far as being absent. So right now, Ryan is marked as absent, but we go up here to our toggle present. We'll put in a five here. We'll click that button and that was successful. And then we'll click on student five again and we should see this false updated to true, which it was great, okay, good. So pretty straightforward. We could also do this for the other student number two. I don't wanna do too much of this because you'll get bored watching me do this. But student number two here was initialized as false is now initialized as true. So this is our smart contract that we are going to be working with now. A little more involved than what we saw last time around, but exact same steps. So first thing we wanna do is we wanna hop here into our Hyperledger, one of our back to our network and everybody's probably familiar with Hyperledger directory. We'll be people of our chain code. Let me try, I've made this a little bit bigger. So let me see if I can resize this just a slight bit so everybody can see what's going on. I will clear this as needed because the screen's to get a little messy and I will be copying and pasting a little bit so you don't have to watch me tumble with the keyboard. So first thing that we need to do, so we have the chain code in both. So we've already built bab3. So that's already running. What we're gonna do right before we get into is we're going to install web3. So this is the command pretty straightforward. We're gonna install web3 and then our, great. So we have web3 installed. Now we're gonna run no. And I believe it's clear. And the next thing that we are actually going to do is we're gonna set up our, we're gonna require web3. So we're gonna have our web3 provider. And so let's put this in, but then I wanna show everybody again to refresh everybody's memory where we are. Require web3, great, and that worked. But let's go back here and let's take a look at, so if you look here, local host on 5,000 and let's just make this a little bit bigger. So we have bab3 running on port 5,000. And if we look here at our, let's come in here. No, I'm sorry. Sometimes these are, oh, great, it's here. And let me make this a little bigger. No matter how many you can see here, we are running bab3 and it's returning this information, bab3 and it is running on port 5,000. And that is running, and we have to have this running on our hyperledger network and we can't close it, so we always have, and then we can always double check to make sure it's running. By going to local host 5,000 and you can see that we have this. And we will be coming back to this browser in a little bit. So just let me close that down. So we have that, now we have that connection between this web3 object and we have our web3 provider. And let's now create another object here, web3 object, where we actually call out the 5,000. So remember I said a little bit earlier, that was important. So we've got to set that. And you can imagine this certainly can be scripted. Again, if you take a look here, what we do have to do is also set a default account. If you look at the documentation, this part, for me at least, and again, this is for me, my network, my network might not be that great. We are, I always seem to be able to run one account. So if this is a little bit different, we should have more than one account, but for whatever reason I have this. So what we actually have to do now is get this from into the buffer, because now we have to set a default account. Okay, never mind, I got to get the command to set the default account. So I got to copy that into the buffer. And I apologize here, but watching me bumble with this is not what you're all paying for. So that's why all this is done ahead of time. And again, if you go and take our workshop online on this, this is all also available. You can run these exact same steps, right? There's nothing like running them for yourself. All right, great. So you can see here, this ends in an FEBA, and FEBA. So you see that our account is set. I forgot the command out of queer, I'll have to look it up. Now, what we have to do is we have to set that ABI code. So I already have that set in here. You can see our Boolean, our present, that ABI code that we got out of remix. So you can see here, this is white, an ABI code, and it's important to get all of it. And if everybody remembers here from remix, in order to copy it to the buffer, we have to go back to the compile here, just click ABI, and then it goes into the buffer. But for our example here, we're gonna need a little bit. So we're gonna need to do some setting. So we're gonna need to set this whole thing. So what we're gonna call this simple right here, simple storage ABI code, and this is the ABI code that comes right out of remix right here. So again, this is something you're gonna use, the buffer for, make sure you get everything. So this is our smart contract that's going to run out of our Web3 provider. And we gotta get everything or else it's not going to work. Copy back in here, that runs, and we scroll back up. And you know, at least we can see it, right? We can see our present, the contents, right? You can see all of these items here that we set in our smart contract, create student, which I abbreviated to create for the example, just because when I did this, things were getting a little long. But you can see here the simple storage ABI is right here. And if everything goes right, we should end in that square bracket and enter. Ooh, great, that worked. Because sometimes these big operations can be a little tricky. Now the next thing we have to do, and this is another tricky item, is we've got to set the simple storage byte code. So again, this is the byte code. So this is very, very similar to those of you that are familiar with Java or .NET, that byte code. That runs virtually. So what we need to do here is, we need to start at the very beginning of the string and go to the end. And again, copy that into the buffer. This is really long, be pasted in. That's long, right? And then it's got to be obviously quotes, and boom, oh, great, that worked. So that point can be a little frustrating. No question about that. Now we take this simple storage ABI, we create another object just simply called simple storage. So we're taking that ABI code, we're putting it to work for us, that worked great. Again, all this could be scripted. And then we take the byte code, we have to create the deployed contract object for that with the byte code passed in. So you could see, if you look closely here on this parameter, we are passing in the byte, the simple storage byte code as our data. So we have now that object called, you might have to run it one more time. Sometimes this runs a little slow with the byte code. Bear with me here for one second. Okay, finally that ran. So that part, if you do get an endorser error, try to work with it, there seems to be a little web three issue, at least on my network. Works fine natively, but occasionally that does pop up that at least I've been having it. Now the last thing we have to do this, we are still manually doing this. I don't think this part can really be scripted because we've got to get the address of the smart contract. So here we're going to query the smart contract address and we're going to create this object called my contract. And that's going to be, now this is important because this is how, when we set up our user interface or our webpage, we were going to have to call on an object. So in our JavaScript, now you don't have to use my contract, that may or may not be a great object need to use, but we're going to have to make our calls on that. And so we're going to take a quick example or take a look at a quick example about how those calls are made. And now we have to get the contract address. And in our case, we're just going to put it here in the bumper. So we have to scroll up here and where it says transaction hash address and then right before ABI, that is our smart contract address. And you got really no choice, but you got a copy of this. You want to type it in, which that's not for me. And then we just kind of put it right here on our little list here of commands. And we're going to add the simple storage and we have to give it here. So we've got everything else. It ends in 129, ends in 129, ends in 129. Okay, good. So it looks like we are all set to go. So now let's create, again, let's update the my contract object with the smart contract address. Okay, for us, we're going to update this my contract object. Okay, good. So that seems to have run. All right, good. Now what we have to do is now we're going, now we have to get some ideas for calling our smart contract. So if you remember, if we jump back here into remix, we have what functions create student. We also have a mapping called students right here with the lower case essence. So let's make some calls and just make sure we're able to see Tim Baker, Rob Sims, Johnny Cates, Rob Thomas, we want to make sure we're able to see them. So what we'll do here is we'll call my my contract. You can see if you get that dot students and we got to pass in one. Oh, look at that. Tim Baker, that Tim Baker came back. All right, Tim Baker, all right. He looks like he's student one, that's for darn sure. So it looks like we got the, if we don't believe it, we can go back in here and type in student one and run it. And there it is, Tim Baker. And we have the, he's student one, that's his name Tim Baker and currently set, well, I shouldn't say currently set the false because these are two different. Actually they're running in two different places but you can see here it's set to false here for Tim Baker. Let's maybe bring back student three. So, and again, we have this little issue that, oh, there it is, it's being backed. So student three, here's the three, Johnny Cates and set the false. Again, just soldier through if you get this endorser. I think it's, I believe that it is, there's either a bug with the web three provider or just my network is set up to be running a little slow. So, so there are some few issues with that. So, and also let's get, so we can see their status here. Let's take a look at running up one of these functions. So let's, first of all, let's add a, or yeah, let's add a new student. So we wanna run this create student and create student, we just pass in the student name as a, we have to pass it in as a string. So that means quotes and then automatically gets a student count, gets that added because student count, we are obviously incrementing each time and then gets initialized as false. So let's lower that. We have to call the object my contract.createstudent.com. That comes out for us. And again, let's put run in here. Okay, good. So that came back. So there's the transaction ID so far and we should be able to return it was student count. And if we look here, student count is okay. It has a capital C. So let's go back in here. My contract dot student count, look at that. And let me see it in here. It doesn't look like it returned it, but let's do this. And we can see here, our, Ryan was successfully added there. So we can see our student count right there at five. So this is what we'll be, and let's also do this. And we wanna do toggle, toggle present. And now notice it says there on Ryan false. Let's set that to true. So we have to pass in the five there. Not cooperating, but keep going till it cooperates. That's it. And then let's bring back the details on student five. And there it is. So now that's set to true. So again, it seems to be in a bad mood right here. I promise you, I have a version that he's already running. That is not returning the error. So let me take a look at the data. So right now, this is what we have to, and we could do the exact same thing again with, let's see what that worked. Oh yeah, take a look at that. We can also run this two string, which also returns it instead of being in this big number format. It'll do five, it'll just do the name, I'll just do the true. So the two string function there. And this interface actually helped me add that, if you noticed it just added it on there. So that's helpful as well. And probably when we do the student count, we probably should have done two number. So right now for the student count, we'll have to figure out a way to bring that. It is there, obviously, but we've got to figure out a way to return that. All right, so let's now, we have a good idea of how our smart contract should be running from web three, right? So we can see here, we're able to call these functions. We're able to call these functions, get this data back. Once this data comes back, we format it to a web page and then have some logic for the web page. So you can see here, we have this true right here, which means that for our DAP that we're gonna do, our web page, we're going to show when this item is true here, when the state is true, the person's name will appear. When it's false, their person's name will appear. So we'll have to think of some logic for that. So now let's take a look here at how we are then now providing. And let me make this a little bit bigger. So let's take a look at the API. So we have our web page that's set up right here that's going to use our smart contract. Now, our smart contract is compiled into this project. This is using, you can use Node.js. You can also use React.js. This is going to be a React.js. React.js can be a lot friendlier, at least for me it is anyway. But I'm not a React.js expert by any means. I'm just learning it. Maybe like a lot of you are learning it too. But we can see the project here. We have the Node modules, which can be a little bit of, can cause us a little bit of a headache because sometimes the dependencies get deprecated, which can be a pain in the neck to manage those. But if we go into the source folder here, we see here they give us the source folder, which has all the JavaScripts for our project. So if we take a quick look here at, let's just cap this very quickly. I don't want to bore anybody with looking at source code. But we can see down here, we are pulling, we have the API inside of here for our smart contract. So you can see here, we have that DOM, that virtual DOM that React.js creates for us, and we're able to build in that API or pulling our smart contract. And this is something you're probably going to notice. I've reused part of this from a different, well, from a different exercise we had set up. So let's go into the components. As everybody knows, React.js has these components, which will be part of our web pages. So again, if we look here, let me just cap this briefly. I don't want you to walk away with saying, oh, I have to know all of the source code. I have to know all of the JS, you don't. But what we do want to know is, see if we have an absent button on here, and on here, it adds a learner, okay? Now, this is important. We will add a new learner, or I'm sorry, it will delete a learner on here. So the delete is up here. So we delete this ID. So you can see this delete right here. So in that, we want to mark somebody as absent, but the absent button, it calls this delete, which deletes an ID. So sorry if I confused you there. And then, so that's the most important thing here is the learner is removed, it calls the delete. So you can see here that this is our API for our smart contract. And then let's do a quick query of this. And a lot of this is just getting comfortable with using this API that calls our functions for our smart contract. And it can be a little much in the beginning, but it doesn't take too long. So let's cat here, the create. And what I do is I use this one for adding a new word. So we can see here we create. So now remember the create function? Create student, I called it. Well, I called it create when I was, I probably should have been. It was a little sloppy there, unfortunately. I just called the create. Anyway, creates a new learner. And then we were able to add them on an input form and then get created. So that's really it. And they appear on the screen and you can enter, we have a field here that just enter a learner name. The value is and on change, we load the new learner. So then you can kind of see on here the create learner, we bring in all of these. We import from react, pretty straightforward learner, right, all that. So this is, so now at this point, we wanna run our data, we should be able to run. I already have a running copy just in case something, we get those errors that doesn't have it because I prepared ahead of time. But let's try to run this. Hopefully everything will run okay. So right here, again, we're using react.js. So it is the learner name. Now the, oh, great, that's right. Sometimes the level that I run from, I get the, up now it says that something's already running on the same port, right, port 3000 is being used. And what's cool about this, it says, do I wanna run out of a different port? I'll say yes. So it's doing that. So while it's doing this, let me pause, let me pause this for one second while that's running and coming up again, let's put this back up for everybody because it's a little slow starting. And I'll resume share. So if you want to, if you can, let's do the slide show here, count slide, and then avoid display settings and swap. So you can go in here and again, you can take your screen shot or you can scan that QR code if you want to. Give everyone, and everybody will get these slides or you can just navigate to this URL. Let's see how we did here. Okay, let's, let me put this back up here for one second here. This takes a little while to store it up, but I think it's finally up and running. Let's resume share, put this down. And the browser's too big. So let's take this down a little bit. Okay. So hopefully everybody can see this. So here's our Tim Baker, Rob Sims, John Kees, and I just set up this little pagination Rob Thomas. Now as I consistent again with our remix, remix which is right here is Tim Baker, Rob Sims, Johnny Kees, Rob Thomas in this. So you notice now this is running out of port 33001. So let's go back here and we see up to Baker, Rob Sims, Johnny Kees, and then finally Rob Thomas. So all the, all, they all got created. So that's, that's fantastic. And so one component here is the end, this component does nothing because this is just something I wanted to maybe reuse possibly for later if we were running it, but doesn't do anything right now. You can see your enter learner name. Hopefully this is big enough for everybody to see. Maybe we'll try to click it up one more level. And the pagination is another component and then adding and marking the students as absent. So we have the add learner. Oh, no, I'm sorry. This is all part of the pagination is all part of the add learner. So the add learner and the pagination is all part of the save is all part of one component. So we promised we would add Ryan Williams, we had the learner. And again, this does pagination. So we'll probably have to go to page two, but there's Ryan Williams that. So now what this did is it took that, that attribute that was set up as we added the learner, but they get added as true. So do you remember when in our original smart contract we initialized the false, that's a little difficult. You don't want to add somebody, but not have them show up. So we needed to go in and change this initial, initialization here false. And that's when I just changed the create to create student just I guess so I can type us. Now here when we click on the absent button, that's where their present, their absent present status becomes false and they get removed. So let's get rid of Johnny here and that goes away. So, and then we still should have one more person on the second page yet. So, but Johnny is gone and let's also remove Rob. So let's say Rob is absent that we should have nobody on page too, which we don't. Okay, good. And you can see here my, my background is terrible. My buttons are terrible and all that. So I've got something to work on here. The good news is you can reuse a lot of these React.js. So that is what we want to do. We want to develop the smart contract. We want to start off developing it with remix and understand and obviously test all of our functions. And once we're comfortable with that, we want to go back in and we want to establish, we got to think how in the world are we going to call this or create it or so we want to go into our, into web three and hopefully you don't get something like these errors here. If you do, you can get these back to your webpage which is a kind of drag. And it's very frustrating to believe me. I've worked through this like half the weekend. So I'm just lucky. See how it didn't do at that time. So now you might not get this. It could be my Hyperledger network here, which is just running out of a VM, which is not really cooperating. So, but this is what we want to learn. How do we call that? And then finally is, maybe this is a little bit clearer out of these slides. If we go back here, how do we actually call this from our, either ReactJS or from whichever our favorite is. So we make these calls the exact same way I was just calling. So you just make the call and you pass, well, you can see pass in the web, the provider, but then you call the functions just like I was calling them. You essentially just build the webpage. It's just as simple as that. I guess with React, I would say React is probably a better way to go because, oh, you can even see here the local host, right? Oh my gosh, there's more here than I even alive. Sometimes I look at this and I just say, everything that we passed in by hand, we're seeing again here. So that even really makes our rub. So you could see here the web three, the provider, the provider here, where web three is running. So that's important to know. But so yeah, that's really it. So we wanna figure out how we're going to call this and get the API, learning the APIs a little bit. That is, there are obviously, we will soon have a course that goes over calling smart contracts or especially EVM API from either React, probably ReactJS or on web three. We actually have something right now on using Node.js. But setting up the environment sometimes could be a little bit just because you have to install Node.js but all of that's taken care of for you. But that is how we will actually build web-based, distributed applications on Hyperledger. And a few things that before we start to take questions, a few items here, a little bit of housekeeping. Is this where we wanna be? Yeah, this is where we wanna be. Where are we now as far as using this? Now you're probably familiar with the, I'm sure everybody on here is familiar with the Hyperledger family, okay? As you can see on here, what we're using, which is Hyperledger Barrow is not here. Where is it? Well, let's take a quick look, all right? It is, Hyperledger Bay Zoo is an Ethereum client. No question about it, but it is not what we are doing. We are running the Ethereum virtual machine on Hyperledger Fabric and where we have a Web3 provider and we are obviously running Web3 and we are interacting and you probably saw the error, right? We're interacting with the Hyperledger network and what we're using the Ethereum virtual machine. Hyperledger Bay Zoo is not the same thing. Hyperledger Bay Zoo is really an Ethereum node that you can set up privately. I guess we can just close this for right now. But here, we can see that the current product that we have, this is our community call to action. It is in an archive state right now. So this is right here, this is the VM chain code. It is in an archive state, meaning that it is no longer being maintained. You can still use it just like we still use it. You can go through all the steps and run it. As a matter of fact, we know people that are using identity applications, using it right from using this solution for active solutions for their business. And we saw CymbaChain is referencing this solution right here again, the VM chain code. So I don't have any information on the replacement for this. We want a replacement for it, obviously. And so we can go back to doing just what we were doing, being also taking our skills for soliditating, our skills for the Ethereum virtual machine and using it on hyperledger fabric. What does that mean? That means not only applications like we had, it means that working with enterprise level tools like CymbaChain, like Truffle, what else does it mean? It means smart contracts to create NFTs, smart contracts to create, well, fungible tokens might be somewhat limited on hyperledger fabric, but we have all of those ERC standards for tokenization, for certificates that there are certainly many use cases for even on the enterprise blockchain. So we have this call to the community here. We certainly will be advocating for a replacement and sooner rather than later for the Ethereum virtual machine or the EVM running on hyperledger fabric, but we need everybody on this call to just make their voices heard to the development community that we need to get a replacement for this and build it right back into the hyperledger fabric because we want to obviously reuse our skills. It's one thing to know how to use invoke call the chain code and all that. We don't have a problem with that, but in order to take advantage of what's available in the community, we really do need to add this product back to hyperledger fabric. So that's really all I had. I don't know, Jim Mason, are you available again? We'll take some questions. I can look at the chat if Jim Mason isn't there. Okay, so let's see, let's go in here and let's take a look at a couple of the questions. Oh, do I know why the fabric chain code EVM was archived? I've heard a few different stories, but I don't have, I'm not sure I have the exact reason why the hyperledger EVM chain code was archived. Maybe the community, the maintainers thought that they achieved, I heard actually that they achieved what they wanted to achieve and then they just said, oh, okay, we achieve what we want to achieve and now we're done. So that is, that's what I heard. I don't know why you would then not turn it back and give it to the rest of the community, I can't really answer that. But yeah, we've got to, it's one thing that it was archived, but it was something else that it's, we've got to figure out what the replacement will be. And we have a hand raised, Bobby, can you just speak up, Bobby? Yeah, sure. Hi, it's Bobby. I think one of the reasons why it was depreciated was because there was no one maintaining it. It worked and no one was actively doing reports to the technical steering committee or actively engaged in, so there was no company behind it anymore. It works and everyone's using it fine, but there was nobody supporting the backend project. And I guess if anybody wants to bring that project back, reach out to me and I'll see how and if people are interested in supporting it from an enterprise perspective, that would be awesome. Thanks. Okay, that'd be great. So right there. So there is a voice in the community and Bobby obviously has a loud voice in the community. And well, I shouldn't say, maybe a strong voice I should say in the community. Yeah, thanks. The person that can, that's certainly somebody to help us out. Solidity gives us access to ERC capabilities like ERC-20 fungible tokens, ERC-720 NFTs, absolutely. So one of the big advantages are, well, fungible, I think is somewhat limited on Hyperledger, but NFT certainly could be something that we could take advantage of, but no question about that. So what are the advantages of using Solidity over using the Go or Node chain code? Not the only, the advantages is you have the ability to use your Solidity knowledge, your Solidity skills, the Solidity tools, the community for Solidity and the EVM is very, very big. So obviously we are able to take advantage of all of that. We can still use Go, that's not a problem. You can still do that, but you have so many APIs written, so many books written, it really would help the developer community so much if we're able to support all of the EVM functionality also over to Hyperledger Fabric. I'm not gonna say it's better than Go, but there's many, many more resources available, I would argue, than what's there. So it doesn't make sense. And Bobby got a lot of thumbs up. You all can probably see that. So that's interesting, there was nobody to maintain it. So, but yeah, so maybe we can start a movement here in the community to, and I'm not saying tag anybody's it or anything like that, please don't take that away, but we should think about these things because again, it can give us all of those advantages of that community, of that EVM community, which is being used by a lot of distributed ledgers. It's not just Ethereum, Hedera uses it. I even understand Korda uses it. Korda is one of our competitors here in the Hyperledger community. So there's a lot that our algorithm, you understand is now also using, yeah, so. And exactly for those reasons, you have your own native way to do it, but sometimes developers, you know, developers get sometimes, we don't wanna learn something, you know, when I started to develop on some of those other ones, I was just like, gosh, I got a reason to earn all this. I was clumsy, I was only doing basic things where I had no solidity. I became so, I just, my knowledge and skills got so much better. I just felt, hey, I could, you know, I could do much better if I could just develop on the EVM on these networks. Okay, so another question. Are there any documented videos explaining the differences between the Hyperledger projects? Oh yeah, there are EDX courses. You can go in and look at, I think one of the out-of-the-box ones just really explains the Hyperledger family. And that is a, that course is offered, I'm not sure who offers it, but if you go out to the Linux Foundation under education, you can look at, it's not instructor led, it's 100% asynchronous, but it's a pretty straightforward course. And it goes over the Hyperledger family. Fabric being one product in the Hyperledger family. Any other questions? Okay, all right. Oh, Bobby's getting a lot of thanks again. And Jim Mason, are you still out there? Yeah, I wanna thank you, Jim. This was a great presentation. Thank you so much. Oh, good, I'm glad you liked it. I didn't, I know the webpage was not that great looking, but I was never great at coming up with a very nice looking webpage. I thought the colors were very spring. Yeah, well, I guess, if anything, they were that. Yes, this is being recorded, so there should be a YouTube out there. It's also being live streamed right now, but there should be a YouTube shortly. And also, I will put in the chat our previous, just bear with me here one second, let me, so you don't have to see me going into Google. Let me pause share here for one second. And I'll put the link in the chat for our previous presentation, where it was just the bare bones EVM. So let me, so here it is here. This is what we did last November, and this is where you want to start, but let me put this in the chat for everybody. So this is intro, so this is not today's, this is- Yeah, this is the prior one, right, Jim? Yeah, this was the prior one that I just put in, so. But that builds on, this is obviously the very beginning. So, okay, anything, any other questions or would anybody, is our session, any other session hosts available right now? Yeah, I'm here, Jim. Oh, great, great. So anything and wrap up, Jim Mason? No, just the fact that I can't tell you how good these two sessions you've done have been. Bad news is the other side of that is probably I'll be asking you for more ideas on better sessions, given how good these two were. I think the key thing is we do have the live stream for both sessions that'll, David will get out this week onto the ones already out on the YouTube channel. The second one will go out this week as well, which is already running, I guess, but we'll have that organized on the Hyperledger channel cleanly with annotations and stuff. We'll get your both slide decks redistributed, if you will, through the meetups as well as the hyperledger public sector with you as well. And then anything that you have that you think, for getting the slide decks for a second, anything that you think is important or critical from the Q&A perspective that we didn't address, if you wanna add that along, I'll make sure that gets distributed as well. All right, fantastic. Yeah, if I think of anything, and again, we've already heard the fact that the product was archived because there was no maintenance. Whatever, I don't, but Jim Mason possibly, we could send out some information, how do we begin a community movement to look for a new repository or a new, I don't know what we would call it, a new sponsor or a new incubator for the EVM on Hyperledger fabric. Yeah, that's actually a big deal to figure that out. So it's been done, obviously I think what you've done has created a ton of interest in it, let's put it that way, which is very, very useful. And you're right, we do need to figure out how to build a sponsor for that runtime capability. So my argument actually is in my awkward job roles, I'm looking at platforms and certainly fabric has been a great platform for a lot of solutions I've delivered, but the other side of it is having the ability to build and run DApps directly and fabric is good. There's a lot of good things that have also been done in straight fabric on trying to, I'll quote, operationalize that nicely. And actually I should probably do more to push some of those sessions. So some of the Kubernetes stuff they've done nicely that's platform neutral kind of deal, not cloud specific. They've got some pretty good things there that we should focus more on. But I do think that trying to figure out properly how to benefit from what I call more automation as you were showing. So what's really great about your sessions, they get me to the point that I can actually understand what's going on. They're dirt critical, I'll say. But if you're a large organization, you're saying, okay, I don't really want to be doing that, the command line all the time, I've got to figure out ways to automate that. And that's where that sponsorship comes back in again. The idea that we've got to start like fabric itself, that whole project is moving forward with automation work and so on. But the stuff that you've shown us, we want to be able to drive that as well. Yeah, it's going to be, obviously, it's going to remove a lot of friction from onboarding a lot of solution providers, a lot of integrators, and obviously a lot of developers, that's for sure. Yeah, if we could somehow through the community, again, I don't want to sound like I'm saying, tag your it to anybody, I'm not, but it's got to rise up in the community. We have to say we need a new home or what was called Breaker Ledger Browro, what new name it would have, if any. Yeah, yeah. Anyway, so, right, we're not going to answer that here, but I definitely want to follow up with you on that, because that's a big deal to figure out how we move that forward, which is important because the theorem itself and the technologies you've been showing are also moving forward all the time. So you can't just say, okay, I got his labs. This will be good for the next five years. It won't be. Right, so, yeah. Yeah, it's important in a sense, as you say, find a way to sponsor this thing properly so that it stays current for sure. So anyway, with that, I do want to say that, these sessions you've done have been absolutely fantastic and the community has obviously benefited and I think today's will be of real value as well. So thank you again, and everybody I want to thank you for attending today and look forward to the handouts that we're going to distribute on the meetups as well as we're going to have them linked over on the YouTube channel as well. So with that, thank you again, everybody and have a good day and thanks again, Jim. Oh, you're welcome, Jim Mason, and thank you for being our session host and thanks, Bobby, for your contributions. It was very helpful. Thanks everyone, bye.