 Jim Sullivan today from the Blockchain Academy is our presenter so welcome Jim and Ryan who are going to be working with us today and leading the presentation. Before we get started I do want to just take a minute to let you know that this is a hyper ledger sponsored event and there's two things that are important about that. One is we have an antitrust policy the Linux Foundation meetings involve participation by industry competitors and it's the intent of the Linux Foundation to conduct all of its activities in accordance with applicable antitrust and competition laws so you know please don't participate in any activities that are prohibited under any US or foreign antitrust and competition laws if that's an issue then please you know stop your attendance today at the meeting. The second thing is the hyper ledger code of conduct which is very important to us as a community so hyper ledgers committed to creating a safe and welcoming community for everyone we treat each other with respect professionalism fairness and sensitivity for our differences and strengths at all times so any feedback you know at the end of the presentation or questions or whatever please just be respectful of everyone else and be professional about it that's all we ask and there's more in the hyper ledger code of conduct and that antitrust policy at the linuxfoundation.org so with that let me stop my side of it and turn it over to Jim Sullivan who is our presenter today Jim you want to take it away okay great so thanks so much Jim Mason and again welcome everybody a special thanks to Dave at Boswell over the Linux Foundation one of our Linux Foundation leads and certainly a community lead and thank you to my colleague Ryan Williams also for putting together all the documents of that we will all take a look at afterwards and again thank you to Jim Mason for for being one of our session hosts as well as running the the hyper ledger communities and particularly the Boston hyper ledger community so again welcome everyone we're going to discuss the ethereum virtual machine running on hyper ledger so there's a lot to talk about as a lot of you know or will know we'll so let's let's get started please let me know if you can see my screen or if anyone can see I am sharing right now um bear with me here one second I do have to do the swap so what we'll talk about is we'll just refresh everybody's memory here of our hyper ledger fabric architecture including the ethereum and the solidity components we'll look at a some demos of smart contracts and smart contract examples on solidity why we use the ethereum for hyper ledger fabric applications we'll take a look at some of the tools including remix this is a big one for building smart contracts and again we'll see uh solidity running in remix some data types and some functions we'll do a deployment demonstration we'll also take a look at the the truffle suite as well because that's also supports the hyper ledger fabric evm and we'll do a what we want to get to obviously is most likely our distributed application so we want to get our hyper ledger applications running as dApps or web at least web applications possibly even mobile applications and then we'll discuss the next steps so I'm sure everybody's familiar with the hyper ledger architecture we'll see a few examples of this running live we have our client applications we have our various peers our ordering peer as you can see these between we have set up here this is a private network it's running here in in this case at more than one enterprise so this is a this is obviously a consortium network and we can see here that both enterprises have access to client apps and these all of these peers are in communication ordering peers guaranteeing uh that the guaranteeing transactions that are being stored in the ledgers at these various peers and these peers have several ledgers since the name hyper ledger fabric so we call those channels and not everyone so not not everybody in this consortium will have access as we can see here some of these peers have channels that are not necessarily accessible to enterprise aid here uh you're probably quite familiar those of you that have worked with hyper ledger and when we install it this is a typical install path so under the hyper ledger directory we have our fabric samples and we are going to install a directory here with our evm chain code and then we're also going to update our one of our yaml files for docker with this volume here pointing us back to this evm chain code so um look for this and i'll try to point this out during the uh presentation but i'm sure a lot of you are familiar with this directory structure and so why use the aderian virtual machine for hyper ledger fabric uh well uh for reuse certainly so what you have developed for um for any evm applications whether they are on ethereum or whether they are on quorum or some other evm networks some dlts you can also now use them on hyper ledger fabric so and there there also is commonality so we want we want to preserve that commonality so you can participate in the community have a common approach to creating our applications our dlts applications our blockchain applications but there's obviously a big community already for the evm there are multiple multiple resources as we can see right here right there are already resources out there for the evm and hyper ledger evm we can see here this is actually documentation on using hyper ledger fabric and the evm so we can see here just from these two different enterprises here and there's certainly a lot more reasons but those are those are some good ones uh what we want to get to ultimately is if we can hopefully you can see this i know we will get a look at this but this is here are our peers and our orderers here this is our hyper ledger network this is going to be running virtually uh first thing we'll do is we'll install the evm on hyper ledger fabric then we'll deploy the evm smart contracts to hyper ledger fabric and then we'll install no j s web 3 uh a certainly a more friendly way to run the evm and that will ultimately we're not going to do it today but that will ultimately bring us to uh running dApps in the form of web applications and maybe even mobile applications uh not in uh that that would be the next step but we'll go we'll actually run node and web 3 from the uh hyper ledger command prompts or from the node command prompts so for uh so we can see here we'll deploy the evm on hyper ledger fabric we can see here our chain code running or uh we're instantiating that that chain code evm chain code and if we go backwards here just for one second this is what we want to get to we want to get to that evm cc running so a lot of you may have a lot of questions already you're like oh jim you're doing that evm cc we've heard a lot about that we'll i promise you we will touch on the subject of the archive of that repository and then part three is we are going to get uh we'll we'll have our we'll run our uh solidity contract both natively from a hyper ledger peer and then we're going to go back into node j s and we are going to uh run our smart contract from node j s and it's certainly a much more friendly approach okay so let's take a look everybody came here nobody came here to listen to me talk bear with me here one second okay so uh hopefully everybody can see my command prompt here so we're just running out of out of an a bunch of image and okay it looks like everyone can see it so what i've done is i've cloned you can probably so hopefully you can see it up here uh i've cloned the github repository this is it right here so we have our hyper ledger fabric evm our chain code evm and this is the repository i've cloned i'm sure you will all familiar with git clone right just uh essentially just run the command uh for the git clone and it installs right here so we have our hyper ledger directory and we can see our fabric chain code right in there so what what we'll do first is we'll start it off docker so let's go down i'm sure you're again familiar with this the basic network okay sorry gotta go down one one level and then we'll go down to our basic network clear the screens it's a little clear what we're doing we're on our start so let that start there'll be a few times where we have to watch things running but i promise we'll we'll keep it to it an absolute minimum okay great so that's that's up and running now and now we want to go back to uh i'm sure you're familiar with the first network and we want to follow some of some steps and i'll show you where those steps are again we will have access to all this information when we're done so what we're going to do is we are going to follow the steps here in this repository under examples so now what we're going to do is uh we have all these steps in here so we'll go through we'll we'll update some uh we'll configure some volumes start our hyper ledger network go into our pier set some environmental variables then we will install our ebm chain code we will instantiated with the channel name then we will invoke the the chain code again with the channel name uh that will also give us a contract address so there's there's a few little laborious items we have to do like pass and contract address and channel name and all that um this is actually our smart contract is the fight code for our smart contract then we'll invoke our smart contract with the contract address and the channel name and we'll run it natively and when we run it natively it's going to uh we're going to be using some hex data so you can see the hex data right here in the hash uh but that's that's still important we will uh go ahead and do that it's still important to do that and then we will after that we will uh scroll down here a little bit and we will use web 3 we'll install web 3 and node and run out of that with our rub fab proxy service so what we'll do here is we'll we'll edit our docker compose file and we'll add that volume so we have our docker compose file right here depending on your favorite editor i'm just picking this editor just because it's more of a friendly editor and i don't want to make any typos or struggle with anything so uh down here under volumes so under cli volumes so we actually pass cli on here there there's the cli that we show here in this documentation cli volumes this is where we want to add this volume and because this is really long i have put this in a little document for me so i can just uh do a quick copy paste so forgive me if i'm copy pasting a lot but i just it's it's a smoother way to go for a presentation i don't have to watch me type and type incorrectly now it's important put some space that in here it may be tempted to tab but don't have okay that looks good and what we'll do here is we'll save that we'll exit that and what i like to do sometimes is cat it and just for a sanity check okay good so there is our here is our volume that's added here so that's fantastic and i'm just catching up here my documentation now we're going to run our hyper ledger network so let's clear this and we're going to use the brand your first network dot sh now i already have hyper ledger installed on here so that is a pretty obviously prerequisite we will need the network installed and running uh and just bear with me here while this double the network starts up it takes about two minutes for it to start up so next while that's running uh what so this is where we bring the network up and next we will be going right into a pier and installing some environmental variables and the evm chain code i'm hoping this is clear for everyone to see i am on like a lot of you that are developers and for software engineers i have managed to uh completely uh let's just say i've uh i've stepped on my my main uh developer desktop laptop and i've had to switch to a different one so i don't know i guess it's called posing the environment i'm sure many of you have opposed the environment i did something to the uh the hypervisor and it just doesn't want to restart for me so instead of just wasting a lot of time with it i just moved to a different laptop it's a good thing about virtual images are we can work them anywhere so this you would do in really any instance oh great so our uh so we have our hyper ledger network up and right and we have our uh genesis block and all that so that's that's great it's clear this and now let's go into the docker okay so now we're we're in this pier and the next thing we're going to do is set some environmental variables so here we are this is a document that that i'm using and but i am following this documentation so here we are in the pier and now we're going to set these environmental variables so we have a configuration path right here we have a peer address you can see here uh we have some of a local process id and then we have a path to a certificate so we want to set me it's important that we got well that's that so what i'm going to do is i already put this in here and it's a little tedious typing so we'll run this and set all these environmental variables this way okay that looks good so we have those set and what we are going to do next is we are going to uh install the chain code on all the peers right here so we have our peer chain code install and this takes yeah about maybe a minute or so oh okay that came back already so status 200 quick that's what we want to say then what we want to do here is we want to now instantiate so we've installed the chain code but now we have to instantiate it and give it a channel name um so i gave it the channel name my channel which is probably overused however the uh there is later on in the documentation my channel is used so just so it's a little less confusing i have just chosen to follow what is in the documentation and i'll i'll try to point that out so here we are now we're going to get the instantiate command and we'll paste that in and i have already added my channel in here now if you are using the these documents obviously you've got an overwrite here of channel name with a channel name and this takes about another minute or so so this is instantiating we're giving it our the channel name so this is installing the evm on all the peers okay great that ran now now uh let's very briefly open another terminal and take a look at our evm running hope we do your ps just from here and so we can see all of our order we well or you can see our peers our order peer zero peer one a certificate authority the couch db and if we scroll up right here we can see the evm cc right here and and the name has wrapped you can see this name wrapped to the second line so anything that's on the second line here evm cc so we got it we we have the evm now running on our hyper ledger fabric network right now we want to now we're moving into part two here we want to deploy the evm smart contract on our hyper ledger network so before we do that let's take a look at the smart contract we'll be working with and what's needed to deploy so if you are from now this is remix i don't know if uh hopefully you're familiar with remix this is a uh well it's uh it's a solidity development environment but it supports other development languages as well not just uh solidity but we can see here this is a very basic smart contract so but won't really matter what you want basic or whether you run a more complex smart contract all the same steps we in our remix here and again it's a remix dot ethereum dot org uh we see here it's a community it's great it's a community based um ide and it gives you it ships with a an environment a back end or runtime environment a virtual environment and it also gives you a very basic uh user interface all which are good so we have a contract here called simple storage and if you're familiar with java and how java works there's the java virtual machine we're going to use the ethereum virtual machine so our contract simple storage that's like a java class very similar to a java class although we don't have a unique function here uh we see here we have an unsigned integer called store data and then we have a function to set store data and then a function to return store data so it's pretty basic but when you see how we'll be running this we kind of need a a basic type of user interface first thing we're going to do is compile this so we're going to click on this compile solidity compiler button what they call this a module and we're going to click this button to compile the smart contract oh good that compiles now what's important here well number one the compiler version is important but also this abi and bytecode so the abi stands for application binary interface so if i click this button here from the compiler i can copy unfortunately all i can do right now is copy this to this text file but as you can see the application binary interface is in jsoc format and it's this is what part of what uh our smart contract is compiling to whenever runs on the ethereum virtual machine so very similar in approach to the uh again to the java virtual machine group if you're familiar with that and the other item here is the bytecode so we're going to get the bytecode and then we're going to copy that into this document as well and let's just get a lot more of this so this is the bytecode we're interested in it begins with 6080 or 68 i'll point that out and if we scroll all the way over here at the end it ends in 0029 so this is the bytecode for our for our contract for our smart contract and if we when we run this another thing solidity gives us and you know we're here to talk about tools as well you can connect to solidity you can connect i'm sorry to hyper ledger i'm running out of a VM with a very crazy network here i'm just using the the out-of-the-box virtual environment here for remix and you can see there's several but you can also connect to an external http provider so it is possible to connect but unfortunately today i can't do that the way i my environments have been behaving but what we can do is deploy now this smart contract and when we come down here to this section that says deployed smart contracts and we uh expand and we can see here the user interface so we can see the set function has a button here and our get function has a button and so we can set our stored data to an unsigned integer so we can click the set and remix gives us some feedback there so you can see that that was successful and now we can click the get to return it and then we can see it's 101 look we might change it to 1910 and we could also do we know i've been hearing a lot about the lottery uh at least here in the us so 777 that might be lucky and we can see here so pretty straightforward the important things here are the bytecode and the application binary interface because that's how we're going to deploy our smart contract we're going to have to use these tools to deploy our smart contract so now let's come come back over here and let's deploy our smart contract so again i have this this is a very long command here i'll take a look at this and why don't we clear this so if we look closely in here we can see that my channel is set you can also see the bytecode for the smart contract sticks stick 080 and all the way down here 0029 so right there this is the the smart contract so this is how we are invoking and deploying the the smart contract so again if we go out here we can see here this is the invocation of the smart contract with the arguments you can scroll all the way over here it's very very long and it ends up with a path to the certificate as well so that's important so let's go ahead and so that was successful so uh but very important here notice the payload that's returned from this invocation this is the contract address and we're going to need this this is not obviously this is going to be different every time so you never get away from your copy pasting and we're going to have to come down here to our contract address over right right here and then let's say that once we do that we're going to have to update this item here to make sure that they all have the correct contract address if you want everything to run smoothly okay so the first item we're going to do now is we're going to validate uh we're going to query the channel and get the code that was up that was loaded as our smart contract so we are going to run here we're going to we have to pass in obviously the channel name and the contract address we've already done that at least in our text file and then we should get back the the payload here what's returned is the bytecode for the smart contract again beginning in 6080 going all the way back to 0029 so again this is the query of our channel here so let's get our query copy that let's paste that in and great so that's what we got back 6080 and 0029 hopefully everybody can see that so we're we're getting back the bytecode of our smart contract so so far things are looking up so we and now we want to it we want to pass in so we want to invoke our smart contract and passing the channel the smart contract name now you can see here what we're using to set and get we're using the we're using this hex value of 10 which looks like this if you're familiar with hex which I'm sure a lot of you are right because a is 10 right doesn't we don't see what looks like 10 until 16 in the hex world so we're we're going to pass this in this would be 10 and also the set in order to call set the hash for set is right here so it begins with 60f so that's what we'll be doing here and so let's get our okay we've updated this command and which is some of the most tedious parts of this and let's go ahead and clear this and then let's paste in here so what we're going to do is we're going to call our set and we're going to have this long set a and we and we have the smart contract for us so that was successful that's great now what we want to do again is we want to run the get so the hash function for get is right here so we can see it right here and obviously the channel name and the smart contract address so 64 you can see it right here 64 we've already put in our smart contract address in the my channel so what we should get back here is that long date this long data that ends in a and that's we got back great so that's all good news now that we've pasted in all these we can just do some manipulation we can run another I just did some I just did the up key just to return our history and let's change here we can do so we can manipulate our hex data a little bit let's end it with seven and run that so now we have a different set and then we can also so this is the chain code invoke and now let's do the chain code query right on that contract address with the get and there's the get right there I know it doesn't look like yet but and there's a seven brought back and then let's go to our history one more time or let's put a three in there and run that great that's successful it's always good to say and then run our query there and that's brought back one other query we can run is our account which will always be useful it's clear here this gets a little cluttery and what this is going to do is query our our account here in my channel so that will be our our account so as far as the EDM that's our account and then one more number here we'll put a five in there run that that's successful and then we'll query that we could get that's right here and we get that back so that's good so that that gives us a lot right there so we know that we know what to do we know we can run smart contracts however we then we have all these hashes uh we have all these hex hex data with who the heck wants to use that certainly not me so what we can do is use node js and we can use web3 and what they have here for us is a a service this is the fab3 service which is going to run on port 5000 so if we navigate in here and we go to this file we will have several environmental variables that we will set here this is part of the actual what we're going to want to build of this shortly and we're going to see the channel the port name so this is what we are this is what our service our fab3 service is going to connect to so it is going to be our evm provider running on hyperledger fab so if you're familiar with evm and the and node js and web3 you need to indicate who your evm provider is in our case it's going to be this fab3 service and i know you probably have some questions about the fab3 and i promise we will get to that in the second hour of today's presentation so where we're going to go with this is okay so anything else here nope we got all that so now we're going to go through so we have this we have to set up our fab3 proxy a little housekeeping we have to do before we we use our fab3 proxy at least i have to do it is we have to set the go path and for whatever reason i have this but my maybe it's my permissions on my network i'm not sure but my permissions don't seem to be correct so you'll notice there are a few imperfections everybody's network is going to have a few imperfections i'll point that out so let's just exit that here and clear this so everybody take a brief like brief breath we got our we we we have our evm running here on hyperledger so if you are a if you're an evm developer a solidity developer you also can say hey i'm a hyperledger developer now i know how to develop on hyperledger fabric i know how to deploy my chain or i'm sorry my evm smart contracts on hyperledger fabric now we're we were running it natively so and that was not that friendly of an environment but hey you know we're able to do it so which is a big thing so quickly here and i gotta switch back to this network here i've got to run so my permissions are not correct now you may not have this problem but this is the workaround that i have and all of us at work works around oh i ran that command room so that looks like it ran correctly and then let's just check our go path so we have to echo i've already set the go path but we in our document we actually included how to do that at least for this environment okay so there's my go path now we've got to navigate down to back to our hyperledger chain code directory so first thing we have to do is again set these environmental variables so our environmental variables are going to be here or we're going to set a configuration path where we have the user of the of the fab org and it's our org name the channel name notice it says my channel are we're using our evm chain code deployed in our fabric network here evm cc and we're going to be listening on our fab proxies going to be listening on ports 5000 and again where does that all come from well if we go again into tab three here is the config that we saw the user the org the channel the provider and the port so that's where that's what we're looking to do in this step so again just to make things easier we'll copy all these into the buffer and then the right place and that looks like it's all set and we'll just double check that our go path which is right up here is returning because that can be a big headache if so we'll just echo we'll we'll echo our fab three config so now what we want to do is now we want to build our fab three service so we'll run a make on fab three and build this binary so again this might take a minute or so if you don't have the permissions right it's not going to work if you don't have to go past right it's not going to work in this case see here that I that was one of the items it's not always it's not always obvious what the problems are particularly when it's environments and permissions you don't always get the feedback from particularly a make that's a lot of you know okay good so that ran and what we can do here is see what it gave us so we can do an LS on the binary or the bin directory and we see we have this fab three executable so now let's let's run it okay great so now this is running it's running this service so let's don't close this once this is up and running you got to let it let it run we'll have to open up another terminal window and we can actually see it from the browser so we know it's running on port 5000 and again the fab three is our evm provider so we pass in 5000 there and we say okay great so that's running right there okay for hopefully everyone can see that okay so the next thing we have to do is we have to open up a new terminal window and hopefully this is big enough for everyone to see because now we're interacting with web three so we we have now our web three running so what we're going to do now is install node right here let me make sure I'm running out of the right place nope I'm not so we got a seat down to okay good this is where I want to be running out so let's install web three now we're we're recommending a certain version here if you install the latest I believe I did install the latest as well I didn't really have any issues with it but now I have some issues here with then we actually have to run a node session I'm having some issues on my network my network is a little slow so it is it does there are a few times that we have to run run a command you might notice it I'll point out don't get discouraged if when running our node application here if it returns some errors or if it runs an indoor if it returns an endorser error it's um just that it's well in my kid you might not have this problem but I am having a little bit of uh of those a slow network so I'm up against that let's just come back here and let's require web three for application that's great that runs and now what we want to do is create this web three object and what we are going to do is create the object but call web three with our with where our ebm service provider is listening so that's what we're doing here so our provider is listening on port local host 5000 right so here you get a lot of feedback when you use node uh so we've got to do control l that'll clear that node console and now we want to return our accounts and we want to set a default account now I'll show you how this differs a little bit so here I have that account brought back now if we look at the documentation here uh you can set your default account to the first item that's returned in accounts but for me that's not working so what I have to do is again this is I don't know if you want to call to work around but for me what I have to do is I have to copy this in and then I have to go up to the account that was returned here maybe the data structure is not exactly the same I'm sure and then that works so notice this hash feedback or this hex feedback that we get from from node now what we're going to do is we're going to go back to that abi so we have we're setting abi to this we're setting this value simple storage abi we're setting it to the texturing of the smart contract ebi so I think we looked at that right so that's what we're going to do here so this is how we're going to deploy it so we're going to do the simple storage again there are tools that eliminate a lot of this uh but we don't want to necessarily want we want to go through this and get familiar with this process and then you know obviously we'll have a better feel for the tools and we'll add that and if we look up here now a simple storage abi is now set to our smart contract abi we'll do a control hell there and the next thing we want to do is get our bytecode and this is our bytecode is really long so it seems to work better from this browser here if I um so you definitely want to do some copying and pasting out of here so if I get it from here seems to get a little friendlier to work a little bit better so up from that that already came back so we can see here the 608 and the 0029 or 6080 and so we can see that then what we want to do is we want to let's go back in here so now we have our simple storage abi set we have our bytecode set now we want to set the simple storage object with the uh with the abi the simple storage abi so we want to create that object and set up our web 3 to call this function with the simple storage abi obviously it's very unforgiving good so that worked like I said sometimes I have a I'm having a little problem with some slow response so right here now what we're going to do well let's say what we're going to do first now that we have that now we're going to set up this deployed contract object with the simple storage abi from up here and we're going to create a new instance of it with the bytecode in there so here's our our bytecode and the upper so we're going to deploy the contract and there's my little endorser issue that I've been having and sometimes just have to hang in there and it will run so there it is it runs so that is a problem you might not have but for some reason my network seems to be a little slow now what we want to do is we want to create this smart contract object we're almost done we want to create this more contract object of calling this whole function here simple storage at and then we're passing in our deployed contract hash so here's deployed contract you can see it here and see it here and we'll have this my contract object that we can use to actually get a response and interact with our contract and again I've already said all these up ahead of time so here it is my contract again the simple storage the deployed contract and this is important this will return a contract address and this isn't always clear so we're going to have to at least while we're practicing this we're going to have to learn at this point to go up to where it says address here right after transaction hash and we're going to have to get our smart contract address just like we did before now obviously there are tools that can manage this for us and we want to paste that in right here want to paste that in right here at least for this exercise for for through this workshop okay so we have our smart contract address and now we come back out here we we can actually set now our smart contract address and then we can actually start doing some setting and some getting so let's set our smart contract address update our my contract object which we are this paste that in so there's our smart contract address okay that worked and we can see here let's do a control l we can actually go in and now we can start calling some sex and some gets so let's type in my contract dot and it's giving me the preview there the set and let's do i don't know three one it's a pretty good number so there we have we have some of the we have our our hash that the transaction was successful now we want to do the get so in a lot of times you might we might want to set up some way to wait and if you look down here at this preview you can see all of the items here that we're able to so we'll call it get like this right now we'll we'll there are actually other functions available and again we have our endorser issue so let's try it one more time okay good so that came back that time apologies for this my network you know it's slow anytime you see this endorser issue you know it's just something that you have to soldier on through so here's our our 101 that's returned in the form of what it's calling a big number but we don't want the big number we want something obviously a lot more friendly that we can return the value and then use to build a user interface like a web app or a mobile app so we want to run the get but we want to call the two number function on it and that will return it as 101 so set 101 now we're returning 101 so if we want to run that one more time do our set and you can do our 777 maybe that's lucky and give it a second again if you see this processing for endorser it's just something just have to soldier on through anyway the transaction was successful there's our feedback our hash feedback which could be important right we can always admit that to the blockchain uh blog as well and then let's call the get and we see the 777 came back that time and then again we don't want to see it as this big number so we want to see it as more friendly just the just the the data just the counting number data brought back so we'll call the two number function on our get and we have our little endorser sometimes you gotta soldier on a little bit more and there it is it finally came back so if we do our control l that should okay sometimes you gotta soldier on a little bit now there obviously are going to be ways to manage issues like this just so if we do get one we can obviously work with it handle the error and then just move on until we get our the result that we want so this is running the the ebm here in a more friendly environment okay let's do our control l i think we got it back here on anyway so this is a more friendly environment and the next steps would be to have it within no j s my water install a web browser so we would use the no j s browser and we would use the web 3 j s why not right we would use web 3 j s to to essentially call our smart contract using the api to call our smart contract from behind the scenes and then return that back and essentially build a web page with it so that's that's where we're going to and that will be and look for look for a class or a workshop on that in q1 of next year so watch out for that we will be obviously taking you to the next step but again we are very very close here to running our smart contract we're out of no j s and web 3 in fact we are and again if we are solidity developers now we are hyper ledger developers because we can obviously go into our smart contract and then take it to the next step especially using web 3 we can call more functions and we can build more applications to return back to a client interface with using the the ebm for hyper ledger so that's that's really the great thing is the big thing the big takeaway here is we if we are already if we're familiar with solidity we can also be hyper ledger developers and again a prerequisite here is what is was to install the hyper ledger fabric we do have all of the steps as well and that can be in a future presentation or a future workshop if anyone so looks to install the just the basic install on hyper ledger fabric so what I'm going to do right now is I'm just going to switch and we're going to look at some other tools that are available to the community I'm not going anywhere but we're going to look at some other community tools that we can take advantage of to build our smart contracts and also our distributed applications on hyper ledger fabrics so just bear with me here I've got to stop my sharing and hope okay am I oh boy okay hold on okay am I muted no okay oh I think I know the problem how about now okay okay that should yeah that should solve the problem okay okay so hopefully I'm back with with everyone um so we can take a look here at can is there any can everyone hear me yes you're coming through fine now everyone here see me try to give me a thumbs up or something okay yes yeah can you hear us okay we can uh so right here we have our we have our truffle suite and if we scroll down here we can see we can see very clearly that we have hyper ledger fabric as supported by the truffle suite and truffle is a good tool it's the it's an open source tool I believe so anyway there is a vendor for it though the vendor is consensus I believe at least the current vendor and if we navigate in here to hyper ledger fabric work with the hyper ledger fabric EVM we can see maybe I can make this a little bit bigger uh well we can see here our local host our port 5000 right our fab 3 right here so it is this is this approach using our fab 3 service is still uh the uh the way to go at least this no no vendors no no solution providers have dropped this yet and we'll we'll discuss the fact that the the current approach that we just looked at is currently archived we will talk about that and and some that and some next steps so this is a good this is a really good way to go and let's just go back to our presentation briefly and show you what we're going to discuss in for the next hour so again we have will be we'll take a look at some tool suites so we have here truffle which is a great tool suite for developing hyper ledger EVM applications we we've already looked at remix and like we've talked about the way we can develop smart contracts using remix in a very lightweight approach getting our ABI and our bytecode now if we use tools like truffle that takes away some of that overhead of the ABI and the bytecode truffle gives us tools that manage that for us but it's it's good for us to get a little bit of work with it because that comes up quite a bit and we also have a book so take a look for our book for programming and solidity it's available on amazon so you know developing a solidity smart contracts and give it a book review if you like it and we can see oh boy look at this tonight the eagles are on so i've got to uh got to make sure i'm uh we're all wrapped up by that time uh one of the things truffle will give us is a project so we do we run truffle in it and it gives us a project and one of the items that we'll get from this it will have our contracts directory we'll have a build directory when we compile because we can compile deploy and build and we can connect obviously you saw right the connection here the port 5000 and the local hose so uh fabric type EVM so we can run that build and that deployment to our hyper ledger environment you've got to obviously have the network up and going uh the correct way have it configured the correct wire else you get stuck doing it kind of the hard way like we just did it and then we get this source folder which stores javascript and html uh to use the web three smart contract ap api so this truffle uh dash config that is where that that this is the truffle uh dash config right here so that has it gives us all of that and we can deploy right here so it's pretty straightforward we get some feedback and then we're able to run out of the console so the truffle this is what we want to do first at least to validate that everything is working uh as uh as uh we had hoped and this is very very similar to what we just did on um with directly on hyper ledger fabric so we'll take a brief look at this and then the smart contracts ap api so this is something that we have so with web three this this happens to be a web three uh we're actually uh instantiating our provider so here's our provider just like we just saw you can see it right here and then we're actually calling our smart contract so uh we're calling our smart contract returning it back to this javascript and then using that data to build our web page and we can build a web page similar to this we can see here this is actually a voting dep again we'll need just the the dependency for this one is really just the the web server the application server and but we can see that how we can progress and use that on our have that already installed in hyper ledger fabric because we've installed node on hyper ledger fabric you saw it we installed web three on hyper ledger fabric so the very next step is taking advantage of the job the web three javascript or it could even be react j s if you're a react j s fan you can even use that and are setting up the web application server which as everybody knows comes with node j s let's take a look at another quick uh demo here and just bear with me here one second so what we want to do here is we have a smart contract let's take a look at the smart contract here this is going to be called tally and very uh in a way this is uh not that much different from the smart contract we looked at actually in hyper ledger fabric we're going to compile it and again we have the abi and the byte code we don't have to worry about it here because truffle is going to manage all that for us but let's deploy it here now notice we have our contract tally and it's in a file called tally sol uh similar uh to other uh object oriented languages you can develop all of these contracts in one file and so just be careful make sure you are when you're running and deploying make sure you have the right one selected we don't have that problem right now because we just have one contract one file but if you we had another contract in there that that would matter and when you use reusable libraries like open zeppelin that matters so be careful of that so we just deployed and again we have our user interface that we get for free very basic user interface uh so of our we initialized our count here to zero so if we click get count we're going to get zero back then we have an increase here and that increases the counter and emits that to the log to the blockchain log and then we then we decrease and then we so we can see here we decrease so we reduce the count by one and then we have the get count to return so we can click here on increase and get the count and it's one we can hit increase two times get the count now it's three and we can say it decrease and get the count it's two so pretty straightforward but that's what we are going to do now we we I have already copied our contract in here so what we want to do is run and this is a lot better than some of the now I always pass a reset in here because there are sometimes you could have truffles a little funny sometimes with contracts of the same name so I always use reset just to make sure it overwrites and that's one of the items here so good so that that ran and we deployed to our environment and now again we want to use the truffle console so this will be a part of what of what we have to do so we just want to just go in here and just make sure everything's running as we expect so one of the items we can do is we can and these are all ways to manage the API the calling of the API so we're going to create a new instance of our deployed contract you can see tally is our deployed contract notice the await and all that that could be a solution for some of those errors that we saw before and we can actually then bring back this new instance because now there's lots of data because new instance has now been instantiated as a new tally contract the address you can see the address you can get lots of information brought back here and control l is the way to clear the console and we can bring back the address of the contract as well so we saw that address was in there but we can actually call address on new instance and that brings back our smart contract address and then we can start in calling our functions so we don't have to work we don't have to work with any of that hash accounting or anything like that that hash data here because we're running directly within node and web three but we want this we want to set a constant result zero and we want to call get count on this new on the tally contract we call the tally contract new instance maybe there's a better name for it but again we can call res zero or result zero and we can see oh okay there's our zero okay now we have that very big number it was big number on hyper ledger fabric here it's just called bn for big number but as you can imagine right we just do the two number which we have to do with the api and then we get our zero back so let's call our now we're not obviously getting those those errors like we got before but we can also call our increase on our new contract so here is now we'll call this result one because it is always going to return something so our constant result one tally we you know we probably should have named it tally or something like that but we're calling increase on that on the contract which we set to so we know we're at zero so and again we should be able to do res one and somewhere in here but this is the result of the transaction and then we have to run on res one we have to return get count or run get count so we have to do constant res one equals and this will wait it all looks right to me yeah so a little bit of a typo in there oh res one has already been declared that's right so we've got to make it res two okay good and again we can bring back data on res two and we can see it as a big number and we can see the one in there and what we can do here is call again the two number function and luckily we're not crashing into those little errors we had before and we can call it let's try increase one more time so increase this time we'll make it res three hopefully that hasn't been used before and great and then we'll call get count on res three and here it is get count but we have to use we can't use res two we have to use res three you have to use res four okay and again our res four it should be now we're up to two and again two number and we see that now the two has returned and we can even try the decrease and this time we'll go with uh we'll go with a completely different constant we'll call it deck uh as in decrease on new instance and we'll do our get count and our res six and we can see we're back down to one and two number there so that's how we this is how we interact uh with the smart contract using truffle uh we saw also uh remix so these are a lot of the tools that we can use to develop our smart contracts and for uh for hyper uh for hyper ledger fabric i'll just clear that out we'll exit out of here and i just want to we'll get to this in one second so let's go back to our presentation so this is what we want to install on hyper ledger fabric and there actually is a github repository out here and if we take a look at this we'll take a look at an example of this uh so we have our evm chain code our fab three proxy right our fabric network and our decentralized application out here uh which will enable just a contract for uh for in this case for voting and uh so but you can actually download this if you want to experiment with it or read about it this is uh this github repository has been working and it has a little bit about this application again all of the the documentation in the community is all out there around the fab three approach which uh we we will talk about we can start to talk about right now but before we do that let's take a quick look at how we would do this uh with uh with hyper ledger fabric oh well let's one thing that we need to do is let's just make sure we're in this case in this example we need metamask metamask appears to be up and running okay that's good and the way that we we run this application m m p m run dev and what that'll do is it'll start the light server and we'll just open up a new tab and we see oh okay one one item that we have to do is we have to go back here and we have to run truffle migrate reset because i was doing a little experimenting before and now we should be able to run again here get this updated oh okay okay now now we have it and we can in this election here we can vote and metamask is called on by the api here we'll just confirm that transaction and we'll see here that ryan williams has one vote for the coolest kid uh this this smart contract is also running in solidity so if we go here to election we can see here that if we deploy or compile and then deploy let's delete that one we can interact with the contract so here here are the candidates that were listed back on the web page we can vote for our candidate candidate number one which happens to be ryan we can return the candidates names here you can see here and we can cast the vote now if we try to vote again there is uh we we require that they haven't voted before so if we try to vote again we returns an error so that's but we we actually set up the the dap to just not allow a user interface here we just see the one vote and that's it so that that is very similar to the ibm solution here that that they give us and one so one item uh so all of this are tools that that will be that are available will be available obviously are available for hyper ledger fabric and uh look in q1 for uh more information on that some training on that as well some workshops we do see now the evm chain code that we have been working with is currently archived so um and there's some concern about that uh at least i was a little bit surprised by that uh you can take a look at it uh i did contact the community the hyper ledger community and currently there is no replacement the evm is not packaged natively with at least this version of hyper ledger fabric however though it still can be used we just used it and it is still obviously the the choice of the community right we see here from simba chain the steps that we just went through right using the fab 3 uh doesn't it doesn't say fab 3 in here but if we look through this documentation you will see the fab 3 uh the rest of the uh very similar to what we did the fab 3 installation and we already talked about truffle suite and other products as well uh using the fab 3 um service uh for the evm for uh for hyper ledger so we will be uh like it says here the blockchain academy we will be working with the community to figure out what the steps are but for right now this is this product the um the fab 3 approach is you can still complete all the same steps i think you saw i was able to still clone the um the fab 3 repository and obviously we were able to instantiate and run it so it's all still there to use we'll have to as a community going into next year figure out the status of the of this repository i'm sure if there is a replacement it'll be something very very similar right why would we start from scratch okay uh hmm all right i don't know where this came from who put this slide in here i don't know who did that okay uh we'll investigate anyway so uh so currently for next steps uh like we said there is there was uh look for uh future workshops uh this is a qr code that you can use to register to get uh the materials that we use today uh have that even access to the virtual machine that i used snapshot and everything so if we register we can get the document that uh that we use to scan the qr code uh we will have a hands-on workshop coming up in december and uh january and we will be like i said it will be hands-on with virtual desktops snapshot and everything so even if you run into trouble manage to get yourself wrapped around the axle which we all do we will have snaps there is our there are snapshots for you to move forward so again scan the qr code here is the link that's associated with the qr code and also just want to thank everybody for their time we will be opening up to questions shortly and we want to thank the linux foundation again thank david boswell my colleague ryan williams for all that was done here for setting up this community page and also thank uh jim mason for uh for being our session host so maybe i'll temporarily kick it back to jim mason and yeah possibly there are we can take some questions or have a discussion or talk about some next steps or anything anybody knows about the status of the ebm on hyperledger fabric hi jim can you hear me okay am i coming through hello i hear you jim okay great uh so i don't know that jim can but um yeah so the good news is we have some questions jim if you can answer those in our chat if you look in the chat we've got four of them right now let's see could we okay some questions here that are in the chat i'll just look what's in the chat and again jim mason or david boswell or ryan feel free to take yourself off of mute and speak up uh jim i know you might not be hearing us jim service runs on every node on the hyperledger network well i can tell you this the one when we instantiated we did uh that we instantiated to all of the peers correct so we did do that so that service uh runs on all of the peers on the network and could we run the the fabric evm on a production environment uh sure i mean i think you're going to have to right you're going to have to have it running on that runtime so whatever that runtime is so if you have a cloud and i'm not trying to sell you on cloud in any way but if you have a cloud obviously you can spin up multiple instances template multiple instances oh i may not be hearing you oh okay apologies let me let me change up here i may not be hearing you uh so let me uh switch over to a different computer bear with me i'm having all these environmental issues here okay i think can someone speak up yeah hi jim can you hear me now oh i think i know the problem can someone speak up now hi jim can you hear me yeah yeah i can hear you now apologies okay great thanks all right so if you want to go back to your questions that'd be great okay bear with me here one second uh let me just get back here into zoom oh and there's a question here i think you answered the one on the fabric evm in production i think the there's one that came in on the bottom which is really sort of i think out of scope but it says are there cloud solutions you could suggest which is more of an open-ended thing i think uh right now uh aws well i'm not aware that the what you would do is you'd spin up a hyper ledger instance on aws interestingly enough amazon web services seems to be the leader as far as temporarily as far as hyper ledger fabric i'm sure ibm wants to get there on the ibm cloud you can open up a free account uh on on the ibm cloud light because it's ibm it's much more difficult uh than it is with um with aws or azure anything else uh for whatever reason but you can eventually get a free account on there and you can run a hyper ledger instance on the ibm cloud uh as you can on aws you'd have to go through the same steps though to install the ibm on there unless aws has within the last couple of days provided that and i think uh maybe aws would would be a little distant right now because of the archive for the fab 3 being i guess you could say officially up in the air yeah that's yeah i will say it on the cloud side jim um i've run uh fabric production applications on a couple of different clouds including ibm cloud aws and azure um i've had uh in the past been running in production on all three of those environments and i know a friend of mine ran google cloud fine one of the bigger things when you think about the cloud though is obviously the clouds are how called proprietary and different from each other um you're right about the ibm account setup taking much longer than it should the reverse of it was when we ran in production on the fabric side um because ibm in a sense uh a quote ibm blockchain is a fabric implementation on the ibm cloud it was actually easier on the setup for what's worth than aws is but um you're right that the majority of my knowledge anyway of applications are running over on aws one other major consideration though is if you're either like where we are now on my end we're trying to deal with cross network issues so it's not about you know all of us being in one fabric network it's now about the fact that we're in a fabric network and i've got two or three other networks that we have to in a sense work with uh real time and to do that one of the things um we're uh i haven't done it but a friend of mine did earlier actually wrote the book for fabric on how to install it in kubernetes and so there's a fabric tutorial um out there in the fabric samples that actually looks at setting up fabric under kubernetes which at least gives you i'll put better portability across clouds and we're looking at the idea on the interoperability side of these networks now trying to figure that out and one of of all the things you can do invoking apis and all kinds of things sharing private files the ipf whatever else you want to do the one thing that's coming out clear um on this cloud integration side is the problem of integrated workflows so we have it's not just that i have multiple separate networks it's the fact that in my organization when i do something in my organization jim's organization has to react to that so not only do we have to connect across these clouds and be able to interoperate but the bigger thing is honestly um being able to enable what i call event workflow processing across networks which is really something that's not what i call well addressed but at least kubernetes provides a platform along with some other what i call um utilities you'll need to start to address something like that but that whole thing about cloud um deployment and interoperability um is a big big deal so i agree uh yeah so somebody asked me that or i was in a i got dragged into a discussion on that with a potential client and they were interested in running uh hyperledger fabric on kubernetes but i was just like well if you can run it on docker you can run it on kubernetes right because docker is one of the container solutions i didn't really but whatever uh they didn't seem to um they wanted some yeah they didn't seem to think that it was going to be that uh that straightforward but it's well and the good news is i didn't at least documented it two different ways so first um front of mind chris actually wrote the original book on how to do that he actually put um fabric on a completely different cloud i think it was blue ocean or whatever it was or fast com at some other cloud provider and then uh from there built it on kubernetes sort of from the ground up but then there's a fabric tutorial under the samples the fabric samples um a latest one on the asset transfer that actually specifically talks to the set up on kubernetes kubernetes which is easier for you to test i would argue okay great yeah so i i would look for as soon as we get this settled which you know as a community we certainly should uh as far as running the evm uh one of those cloud providers probably aws knowing how slow i used to work for ibm so i'm uh i have some experience there right ibm tools are always more expensive than other its competitors are more difficult than its competitors uh but i guess the support right is always there 24 hours 365 but anyway uh you would expect that at least uh ibm the ibm cloud to have something competitive with aws which we'll probably say i i can't uh i i think they'll finally wake up and you know devote some resources there yeah i'd say you're right on the ibm side there's two differences i say aws you're right has the largest share of the market right now for sure especially in the fabric space and then the reverse of it as i said if you look at ibm cloud there's only two things that sort of make a case there one is if i already have other ibm assets i integrate to then maybe ibm cloud offers advantages there they have all these cloud packs they're already pre-built integrations and the third the only other point and i can't speak to the validity of this yet is ibm is trying to with open shift uh leverage kubernetes to become what i call more cloud independent so um so that's that's something that i'll call it i haven't experienced but that's the strategy that they're trying to implement for what it's worth yeah that makes sense so anyway that's that's all i can contribute on that okay great any other questions out there from the community i see a lot popping up how should we answer some of these uh i'm sure i guess the amount of customization a ec2 instances uh over others microservices can be handled separately um but um let's see yeah i'm not sure yeah i don't somebody made a comment about the customization ec2 instances um yeah i don't know what they're comparing that to is my problem i can't comment meaningfully on that um and then there's another one down here link on the Linux ibm may i know which ibm client is built into fabric ibm can we run basu ibm as fabric ibm well you you weren't using basu though no i was not using basu basu is a little bit different right than what i was using i was using right and that's actually a huge difference to be aware of because basu is fine in itself but what's i'll put more interesting i'll say is what jim did today to me because it says i'm just saying i've got a fabric network i can in a sense take solidity contracts and put them on my fabric network and run them directly which actually seem to be really well done yeah so that so that was a very what we did was a variation of burrow hyperledger burrow which as everyone sees is now is currently archived who knows right if if that will be the uh if how long that will be for or if it'll become active again or just become a different product right we all know sometimes i'm part of a bigger product uh so but it's it's not the same thing as basu basu is what they call well basu is almost like a standalone right that uh it's considered an ethereum client not a uh doesn't run yet absolutely an ethereum client and so the thing with basu is i guess if you look at ethereum mainnet is a public internet period a public network i should say and so yes you can run over there but the thing with basu you could also set up ethereum on a private network right and that's where basu with its permissioning also can operate in that model so i'm working with a company now that is actually been running basu on a private ethereum network with the idea that it's not the main net for what it's worth okay good anything so yeah there there it's not swappable it's not considered to be uh one one is not the other so basu is right correct it's it's its own standalone product right what we did today was actually run the ethereum first machine on hyperledger fabric instead of the right that supports the solidity smart contracts uh as opposed to running in your your golang uh chain well i should say yeah chain code yeah excellent actually the other thing you point which was really good about what you just did today for me is it doesn't get enough press when i go to another platform i can pick any platform i want but for the most part i'm pretty much stuck on the contract language what's really nice about fabric is you showed us in a sense um that i can run in other languages so i can not only do i using what you did today with solidity there's a contract language but i can also create contracts and no j s java or go as well well right yeah exactly and a lot of networks are adopting the evm right we see nier also runs the evm tasos cord out even has support for the evm even though that's uh i guess a competitor to hyperledger fabric in a lot of ways yeah it is because i run for it as well and you're right but the evm stuff over there isn't where i guess that's in data or whatever because most of what we're running is really uh cotman contracts over there you know for what it's worth because that's the native jbm that's the native one right it's it's fine if everybody has their native way to go that's great but in order to really open it up to the community uh evm is i guess you could say the low hanging fruit uh or building up the community and it's already got support out there like it or not you know tape um uh consensus is a big influential member of the community and uh they're able to drive market share and uh you know we all know it's a uh it's it's a very compelling product it's a great product it's got the support there the community there a lot of resources there already yeah and your point on the fact that a lot of what i call the public networks run evm compatible for sure it's a separate it's not the main net it's a separate network of course but the advantage there is you then have lots of choices so like you said near and you've got probably gone on a bunch of others that are running in a sense evm networks if you will even though it's not main net it's not a theorem i think we have to hear us more contract languages is solidity so there's a lot that are grabbing it just because it's just to grab the community yeah excellent all right so i don't see a lot of new things uh coming in chat but i certainly appreciate this uh session jim it has been fantastic and i would say um you know for those of us that need to go to the next step i would certainly look at your aws book i'm gonna guess the aws book you have is only available as a kindle format it doesn't support pdf or uh you know you can you can get uh let me just move back here a little bit uh you can get it in kindle form and no in kindle form i can or physical i can't get it in epub or pdf form is my problem oh uh pdf i believe you can is ryan on uh ryan we can support pdf so i believe um it looks like uh you can get right here it's just the uh so if you can if you buy it in kindle right isn't pdf an option um i don't know no it's just me and jeff bezos having an argument till the end of time over the fact that they don't support pdf or epub only kindle format which hurts it actually it's hurting the authors because i wind up there's another company that actually produces um registered pdfs which is something that uh amazon could easily do but they choose not to they're trying to force you into kindle and so um but the registered pdfs i you know we buy i'll call it hundreds of books over and that other publisher manning.com because they offer that format and it's a challenge because for those of us that have what i call better technology for pdf than kindle you don't have that option with amazon unfortunately uh we had a really hard time with the formatting in fact we still get some feedback that the formatting still not great uh we even hired somebody from up work to go on there and help with the formatting and he it took him two weeks to do it well and then i think the bigger thing for me is the technology so different with pdf i couldn't begin to tell you the 29 things that i can't do with the kindle and so it's hurt it hurts the it hurts the authors and it hurts the community badly that we don't have more formats than just kindle over there but you know there's nothing you can do about that but anyway the book i'm sure is worth getting period regardless of what the format is it definitely has to move forward on and get a book review now we had a question here uh are the can we expect the recording in the slides jim mason i believe right you should have all that yes i will be sending out at tonight's thursday it'll be probably by tomorrow morning you should look to see the link that's going to have the uh recording the entire session recording will be over on youtube and we will have whatever the slide deck as i received that will also be a link from the youtube uh location as well yeah and if you send me that text i can send it out to everyone who registered yep absolutely thank you david that's awesome and we have a we have a question here are smart contracts tied to one specific blockchain i'm gonna say that well a lot of a lot of the networks a lot of the blockchain or dlt networks are have their native uh or their native programming environments however a lot are also adopting uh the ethereum virtual machine as i i don't want to i don't want to use the word bridge but as a way of opening up to more community members and just like we said the reuse the resources there's so much out there that are available that you know it's hard to say a community is going to devote itself to the native language of say a near uh or um an algorand uh where yeah those right those unfortunately are not going to be well received and they haven't been even on their own networks honestly so as a result you're right the fact that you have evm support in many of these um public chains is really a big big deal uh it's it's actually why that whole community has grown so well because you can easily build and develop solutions so you get a few customized ones on those other um chains but for the most part you're right it's always solidity that's the default on those other public chains yeah and we have a questionnaire about gas fees uh well if you're running on hyper ledger fabric you might get some data just because it's part of the ethereum virtual machine on gas fees but it can be just nothing right because uh we don't have on a private blockchain typically there aren't uh the transaction costs are absorbed by the enterprise or by the consortium so uh right might see the gas fee on there and you might be able to use it maybe for your consortium members you might be able to make use of it at the point i've never tried it but you're right when you set this up and run it the gas fees unless you do something with it or basically ignore it there are no gas fees by default and then the reverse of it is i'd say well you run into gas fees on ethereum but one of the things and there's other choices out there but there's a bunch of public networks that are faster in ethereum and have much lower gas fee so i recently had experience on polygon and the gas fees are really low so running i just saw a thing the other day somebody else was running a defi security trade and the cost on polygon was like two cents a trade kind of a thing it was very very cheap oh yeah that's the big thing that they're offering right over ethereum i mean ethereum was the first right so you can obviously make improvements on that that's what that's what we're saying yep cool anything else anyone who has before we close if not jim this has been excellent uh really a tremendous job on your end and the team's end and you know obviously we want to get everything out to the community on the recording and the uh handouts as well and certainly i think the book would be a great next step for a lot of people to take a look at a lot we're like i said you can register here get the documents we will be putting on a workshop in december and another one in january if you want to get some hands on you can imagine that whatever the whatever the i guess you could say replacement is that the word we're going to use it will be very very similar to what we did because it's working right and it's already been adopted by solution providers so we as a community jim mason david obviously are going to be active in uh getting all that information out to to the members of the community on what our next steps are or what product we use for evm on hyperledger fabric great okay well thank you again everybody for attending and can't thank jim enough for a great session you did today was tremendous oh good i'm glad i'm glad everyone enjoyed it the world series i don't know where the slide came from that's right somehow don't worry about it jim i'm sure we're tracking that on the blockchain that's right we'll figure out what happened right here i am in florida philadelphia so um so we have the eagles tonight playing in houston ironically enough and the houston astros are up here oh that's funny yeah cool well thanks jim mason for hosting and thanks jim mesulavan for running that and yeah thanks everyone for joining thank you and thanks thanks for what you do david baswell talk to everyone of course thank you thanks all yeah thank you