 to Jay. Where's the link? Invite, right? Yeah, click click on the link and then then join meeting. Up the invite link. I'm just going to stick it in the uh stick it in his one chat. There we go get on the lead. I don't know maybe message and mic if you want to join. I can put the uh Zoom meeting one into uh the chat as well if you want. Yeah if we. Oh this is the longest message. So you're going to you're going into live stream Zoom right? So I'm just going to share off of Zoom. Yeah yeah so Zoom sends the live stream to YouTube so we'll pick up people there as well but yeah people can dial into Zoom. Okay okay good. I don't need to I'm not going to try to open that on mine because that'll probably kill my laptop. Yeah yeah I'll share screen first and then we can uh end Dave will. Great yeah well whenever you're ready Chris if you want to kick it off the live stream is going and people can join you know probably we'll probably see people join. Awesome thank you David and uh thank you all for for joining today uh we're doing a joint one today along with the Denver Meetup chapters so uh I'm really pleased to have uh Dave present here today. Michael as well on uh Xbomb and uh how it works with Hyperledger and I'm looking forward to hearing more so I'll leave it to you guys to present and uh just as a reminder we're live streaming on YouTube right now as well and we'll be monitoring the chat and we'll bring up any questions that come through. Take it away. All right fantastic everybody thank you very much for being here. My name is Michael Holdman and I'm founder and CEO of Prasaga. Uh Prasaga is a uh it's a blockchain project um and we have two avenues that we're uh pursuing at the at this moment. The overall project is for an open permissionless chain uh that we are now doing a raise for through a token sale. The other side of this started out as a proof of concept for one specific aspect of our technology and that's what we're going to talk about today which is the extensible blockchain object model. Um just real quick history extensible blockchain object model is actually a first class object model. Uh it's uh it's a proven architecture for operating systems uh for the five decades now uh it's almost six and uh what it it's uh the same underlying functional architecture although they were modified uh of both mac os 10 and of windows and what we've done is created a way to decentralize a first class object model which will allow us to create a single instance class tree on the open chain it'll be permission it'll be a single instance globally on hyper ledger uh we're looking at each chain of course uh would have their own global tree for all of the suppliers and and all those associated with that those specific chains. So uh we'll jump right into this um we call it we call it beyond smart contracts because that's exactly what we're doing is going beyond smart contracts. So let me make sure i'm working here there we go. So the first thing is uh is chain code and the issues that uh we we discovered are the same exact issues that are sitting in uh in smart contracts as well uh they're static they're not dynamic um chain code and smart contracts are not easily created or updated uh they uh you can create a very simple transactions in fact some of the individual in the conversations we've been in are specifically around the fact that they haven't gone past anything complex processes because it's just too difficult or impossible to do. Second it can take years to create and deploy multiple FTE years depending on how many people you have to have on there and what the complexity of it is the code requires reloading for each new contract you have to turn up another chain or you have to take down the all nodes and then restart them with a new contract. I know that in two uh I believe and Dave can talk about this a little better in hlf 2.0 and above there's supposed to be a way to dynamically add chain code but I don't we haven't heard of anybody actually doing that yet and in fact the the last thing is code has no global repository so you're what you're doing is you're going and copying you're finding a smart contract or chain code somewhere copying that putting it into a text editor making your edits and then uploading that chain code uh well that's the same as uh writing the word application every time you want to write a word document and we don't agree that that's a efficient way to run. So XBOM the extensible blockchain object model uh we came on to Hyperledger for two reasons for one reason one reason was to prove out the underlying technology that we could yes uh create accounts which all blockchains have accounts but we could actually uh instantiate objects inside those accounts or assets inside those accounts. So what we've actually built is a decentralized global operating system we do have it on Hyperledger proven out and it is a blockchain an object oriented blockchain not an object oriented programming language we've we've moved past there and again Dave can talk a little about that. The first review we've had on this was from KC Tam and he's a well-known instructor in Hyperledger and he does he's done some on XBOM he's done Damol he's done other types of reviews and such and uh what he came down to was the fact that theoretically the developer does not care about the blockchain as it's well handled by the infrastructure and the infrastructure we call the class manager infrastructure which is that piece that goes between the classes and objects or applications uh for lack of a better word of understanding and the actual blockchain itself. So as the as the the CMI the content class manager infrastructure advances in the development cycle and we add more uh integration pieces to it it'll at some point we won't care what what programming language you write your classes in your your applications in it will just run on the black on the on the blockchain and in this case Hyperledger right now it is all written and go because that's what it was and we were here to not change anything. Dave will have stories on go. Okay so why this what does it do? Well first of all it makes to go to market 10x faster we actually expect it to be much more uh you're no longer copying and and and editing and pasting you're instantiating uh code and object from a class that resides live on the blockchain uh you're instantiating that into your account and then you're changing the parameters or values of it what kind of asset is it? It's a it could be a spark plug in there's a this bin has you know 500 million spark plug in it and you want to fractionalize those out to your supply chain you know whatever it is it's again you're just instantiating the code that everybody else is using so what that also does is it moves away from a lot of the issues or mitigates a lot of the issues with bugs and malicious code being actually put into into the blockchain and into your systems. It's real-time updates with no service interruptions and Dave is going to show you actually how code is going our accounts are going to be loaded how objects will be loaded into accounts and how assets can be fractionalized and transferred from one account to the other without writing a smart contract and then it creates a repository of reusable code again it's a single instance class tree so you're utilizing the underlying classes and then just changing the parameters and I think the real one of the real benefits of this is the many to many relationship visibility on here at this time what we mean by that is one supplier may have four or five different OEMs that he's supplying to and that's great if say General Motors, Ford, Chrysler and and two others in automotive right and now if they're not using the same chain or even if they're on different hyperledger chains they have to each supplier underneath has to has to support each one of those instances which is taxing on the operations with the XBOM what this allows is the supplier now can have all of the classes from any of the different hyperledger fabric chains from any of the different you know the IBM blockchain platform Oracle blockchain platform whichever it the XBOM doesn't care who owns it or whose platform it is it just cares that it's hyperledger so it's a way to now have the downstream supplier have a more efficient and cost-effective way of working with their upstream suppliers or vendor or customers so what is XBOM on hyperledger what this is is an application blockchain application framework there's six layers to it of course the bottom layers and nodes the second layers of blockchain in this instance that we're going to be showing it's hyperledger then you have your class manager infrastructure and that's that integration between classes and objects and and blockchain that's what allows the two to talk to each other and XBOM classes and objects right now we are introducing the very the first two major classes and subclasses for fungible asset and smart asset which allows the transfer of first of all the the creation of an asset in your account with a number of units that are in that asset and to be able to fractionalize that and transfer those actual possession over to other accounts and then there will be times when developers whether the core developers or other developers want to expand within those classes and such so that developers could integrate within that layer or interact within that layer of XBOM classes and objects there's then layer two is the application developers this is where most of them will hang out and again what we're doing is opening up a breadth of the breadth of the developer world because it doesn't they don't have to know Solidity anymore they don't have to know Golain they don't have to know the underlying develop the underlying technology of the blockchain they just have to know how to work with classes and objects in the first class object model which will just be an education and of course the applications is a top layer so the users and the application developers don't know anything or don't have to know anything from layer three down we and we've created that ease of development and use so when we now get into the integration at the peer note stack you can see where each one of these integrates within the blockchain or how it works on the peer note again you know the application classes and objects are basically where the developers are playing in and such the built-in classes are the ones that Dave will talk about somewhat and as in the creation of we are not going to just to let everybody know go into the the first presentation we did for Hyperledger India which talks about and shows the functionality of the actual class manager infrastructure how that loads into Hyperledger and loads all the on all the nodes and such what Dave is going to go into is actually more on these lines where we're going to the blockchain will be up the Hyperledger will be up the nodes will be up and we'll show how classes are created and instantiated in accounts and in making transfers you can go to xbomb.io and at that point we have three videos at the bottom of the overview link that go deep into the actual the first part of this what is a class what is a first class object model how do objects and classes the concept work within a blockchain and and then of course the the inspector so that you can get all class information object information from the tree and I will go ahead and pass this over to Dave now if anybody has any questions please ask real quickly it is a for the developers all class build code is open source the enterprise there will be a per node SAS license in order to interact with those class classes that are built by the developers no royalties taken from per saga on that all revenues that the developer can make off of that goes to the developer for licensing ours is just on the CMI and then just corky and I'll leave this up for a second because you can reach out to corky absolutely on any information going on he's our CRO chief relationship officer chief revenue officer but we're not for profit so we call them relationships right and all the information is there and we'll put this screen up again at the end so I'll end it there and if there's any questions before Dave starts please do ask you have to stop again yep there you go okay so I'll come up all right so what Mike just said the one of the core pieces here is that a lot of this will make sense if you've seen the earlier videos I've done a voiceover talking through just basically how the system comes up the class manager infrastructure is loaded that type of thing for background since everybody's used to the term chain code the class manager infrastructure is the chain code it loads as chain code everything else is then dynamically loaded as shared objects into that environment on demand and this is a big difference from just running chain code if anybody wants to really get into goaling to figure out how to do that that's an interesting problem that we worked out but it does work now and it's pretty stable let me say it's very stable it works very well in the environment it's very stable goaling itself as a language is a little bit verbose and let's just say a little difficult what I'm going to do is show you what I'm going to I'm going to show you what I'm going to do I'm going to do it then I'm going to tell you what we did right so this is the what it looks like right now get that over here this way you call the foundation classes there's a handful of others but for this conversation there's a class object there's a class x bomb there's a class x bomb container and a class account these are actually these have all been loaded into a running hyperledger setup right now this is I'm literally running the test network script itself to set this so it's a couple of nodes and whatever it's using I think it's using raft or something for consensus then these are actual shared objects that have been loaded into the environment on top of the class major infrastructure as part of the init in which it's kind of you have to bootstrap somewhere before we go into further class object is the root of all objects right now this is a single inheritance where you can do abstract classes and interfaces we haven't implemented a multiple inheritance but we will eventually class x bomb is the root for all x bomb classes class x bomb container is the it's like a thing of it like a window container you put object you know you put a window the layer windowed environment so each window contains child windowed so on so this is the object that you inherit from that could contain other objects class account inherits directly from class x bomb container to actually implement that containment model so what we're going to do is we're going to create we're going to load a new class called class fungible asset oh by once they're loaded into the environment everybody can use them it's set up that the classes are now part of the blockchain they're not uh and they're loaded dynamically at each node for any transaction use it might say use inheritance from some classes it will go pull them into the environment so it can run so that's that's a key point here is that you think of these each one of these each one of these shared objects is completely separate on the blockchain and maintains inheritance through them so we're going to create we're going to load a class we're going to create an instance of that which is a first one called asset one because it doesn't have a name i'm going to create a i'm going to take that asset i'm going to create another object where it takes something from this asset to start with 20 20 count and now there's 15 in five now what i'm going to do is create a couple of accounts i think actually technically we've already created the first one i'll create the second one i'm going to move this asset to the new account so what happens if this is literally the constant of moving assets back and forth and adding and subtracting the way we've set this up right now for a class fungible asset is that once it's instantiated once you instantiate an object the total count is fixed so no matter how many times you transfer assets around the total number of assets will always stay the same that's kind of like a tge on a smart contract i think then going to do something a bit more we subclassed class fungible asset that's actually written wrong that's supposed to class smart assets sorry and i'm going to create a couple of smart assets what's different about them is you can name them and they have a unique object identifier the way we work is that every object has what we call ledger object id so every class sorry every every ledger object id i mean every class and every object has a ledger object id they're unique across the entire blockchain in this case we can also then give them an internal name that's hidden from everybody that makes sure that they're unique so that when i do this and create another asset of it so then i've taken you know seven and put them in here these are completely separate from anything from say another um asset name okay um that's basically it what i'll do is walk through show you a bunch of scripts to do that now we are doing all of this from the command line using the pure node this is all jason though there's nothing wrong with running this to a you know you could use a jason interface for it the existing libraries for for a hyper ledger would work with it the other important thing which i'm not going to demo here because it's in one of the other videos is that as you load new classes you're actually creating new api so um is similar to the open api uh capability you can inspect a class an object rather it'll give you all its class ancestry in all of the um input and output arguments in methods you can send on them now the only the doubt it's it's a gives you full scheme in other words the only downside to that scheme is that um we it's not conforming to the open api right now um but um we'll make it do that in the future okay so um this is up and running i didn't run the startup things for it but if you look at it you can see that i've created a few new things and i think there's a knit i'll scroll backwards through here can i find it yeah there's there's the init from we're running 2.0 oh one other thing i forgot to mention this runs as an external blockchain uh external chain code it's not uh if you can't run it internally because the uh way that um the uh at least the 1.x version built um the chain code is that it would force a vendor operation and it was doing it by hand and you can't do that and make the uh shared objects work correctly with the goaling because there's conflicts with the package names and that's just uh it's nothing to do with hyperledger at all it's just a goal laying a limitation so we use the external builder approach and we launch it that way with the handful of scripts that's all written down in the um getting started online for hyperledger here i'm calling the init bootstrap which loads these types of classes and a few others so your class foundations are all set up and then this just literally created a new account so there's actually an initial account even though i don't have it on here so now we're going to do the first class load and um this is what it looks like everything i'm going to do is cut and paste over from here um if you notice there's this long string of numbers this is the ledger object id it is a 256 sha um and then i you know continually hash it each time so that you're doing a unique numbers the entire time and then i'm also verifying that the each each new id comes up with is unique against anything else sitting in the database and so what i'm doing is this is the uh system account ledger object id sitting over here is actually the other this is saying what object to send it to the way the the way the transactions work is you always specify the account that you're sending transaction to and the object in the account that you want it to do and then you're sending it the method that you want it to call in the parameters the parameters are done um explicitly um as a jason because i'm doing internally is using jason decode to take these strings out decode them do the operation make the method call and the objects and then the result is being re-encoded so you get it back as jason so let's run one if i can get the little where you go yeah i'm gonna go a little down like this there we go and just straight cut and paste so it does a straight call turns output and it now says i've created a new i've loaded a new class when you load the class library there's a function that it calls called create objects where it'll create new classes it's all in the source code and you can see examples of that in the git lab uh sources although these classes have not been up there yet i will be uploading them and adding to the read me there but all the basic functionality is the same these are just implementation pieces and so i've now created a uh the fungible assets so in this slide we are here i haven't created the asset yet i'm about to do that and uh that is you'll notice that it says new object asset count over here and it actually wraps around but i'm going to create 20 of them so it says though you know that could be you know a million count of whatever you wanted it to be it could represent anything from uh you know screws from a screw factory to uh financial assets and what'll happen is it did a create if i get return that is and it just says i created new object here's the new objects and now that's an object instance so i've instantiated an object from a class remember it's a first class object model so the classes are actually objects as well so we actually did it they sent a message to the class to create an object so that's how that works there's a meta class actually in this environment called class class which is also subclassable so you can create your own classes that create classes if you really want there's reasons to do that i'm going to prove that the numbers are currently in here so i'm going to ask it i'm going to do it this way first i'm going to ask it what its current count is calling that method put this window a little higher and you'll notice that it returned and here's which returning the jason syntax in the parameter was asset count that's actually what is in the output argument data structure if you dumped out the schema and of course it equals 20 so this now works so now the next thing is i want to take that asset and i want to create i want to take some of it away and put it in another object so i can take that object and put in another account so that i have a you know so we have a way to move assets around so first thing you need to do is be able to make a copy of it with a new asset count and that's with with a subtracting out the accounts from the previous one and adding to it and that's this call whoops i think this sorry you know that's here's the new asset method right there it's going to make it from five and i'm giving it the object i'm sending it now to the object they just created the asset they just created rather you can see this number if you have here's a piece of it here here's the same number here and it made a new object so we now have this so so far i've loaded class code i'm just using it dynamically loaded it's currently being loaded by the way from a path to a file system but there's no reason why that can't be set up as a url or a search of url you could have you know multiple locations for backup for prototype purposes it's a local file system i'm you know got the container up set up the docker compose to go look at a local file instead local directory rather and you could even you know nfs mount that or some other sambar or something like that okay so there's the new assets so we now have a new asset where am i right so first thing i'm going to do is show that the two counts are now changed so here's the first one and so i now have an account of five and where did i just do that where did i just do yeah that's right okay and oh this is the other one i need to call where i'm confusing myself which would be the first time nothing like doing that in the middle of the demo so the original object now has 15 instead of 20 as you would expect you know simple math adding and subtracting amazing that our computers can do that okay so now what i'm going to do is create the account that it's in so as i said the first account already exists i just didn't put in the diagram but i'm now going to create this i need an account to put the objects in so i'm going to create one obviously you would have one but for a demo i'm just running it through and you know the and the call is to class factory which is the factory mod factory design pattern it's actually in the inheritance tree i just didn't put it in for simplicity purposes you know i've created a new account and this is the account id for it right here you can actually ask it to do multiple accounts if you want i just did with the new count parameter i can say create a whole bunch of these in the factory design pattern can be used for other things too you know it's uh it's uh you know these are all foundation class capabilities so now i have a account i'm simply going to put the asset into the account which is right here it says transfer asset here's the account object and it's you know anticlimactically going to say yep and here's the asset object that it moved it turns that and then i'm going to ask the using the ancestor inheritance to the x-bomb container to show that it's now a child of that account so it is now owned by the other account by the new account and that's going to return back here it is what i'm going to do later is show you actually ends up with i add more than one type of asset into the same account so the nice part about that is there's nothing in the containment relationship that says i can only have one asset or one type of object that can put anything i want so you can create all sorts of protocols so next thing i'm going to do now is load the smart asset class so dynamically loading this which is again a go shared library let me pause for a second to show you really can you do that yes so these are actually the classes this is the directory that i set up to docker compose and these are the shared objects go shared objects then the so that they're not it's not part of the tar dot zip for doing the doing the external build it's not built internally they're literally just externally available at the moment i don't do anything that verifies hash you know to verify that it's valid code or anything that's not been tampered with but it's easy enough to do okay so we have we're at this point whoops i can't oh it looks okay well i've created the smart the smart asset but i haven't created the assets under it yet so i'll just go do those so here i'm going to create one called dgt here's the asset type which is part of the class smart asset but it also inherits from class asset so i have another parameter here for setting it to the count to 20 on this one you'll notice these numbers are saying here's the class that i want to in the initializer in the parameters for it the ancestors and here's another class that inherits from and the parameters i want to initialize there so we do regular inheritance they like just like you would do with any other language only it's done dynamically on the blockchain the same thing here paste um as you uh if you watch through the videos the other things will explain that this is actually being written out to the database and it's using these numbers the ledger object and these as the keys to the database so i just created a new um object that's of a class smart asset with dgt of 20 that's right here the screen guy and where are we and let's um create the other one you know i made up a name call it rap teeth the these these string names that's that field for this you know this is a demo but that's um just a um a string field could be anything you want in there i didn't i didn't um it's it's an unformatted string of course you could subclass this and put any sort of format you want in there as well just wanted to make it as easy as possible and clear so now i've created a second object so i now have both of these and they're actually owned by the first um asset account and you can see that it's actually this is the account that um the message was sent to remember account plus object it's always specified the account in the object there is a small bit of um a way to think about this is there's something called object call something called object send um these are names that i used from a language an environment from the early nineties called penpoint i happen to like it people come up with better names send means that you're moving into the context of the target account you're sending the message to whereas call means you're staying in your current account in your call that you're sending a method to an object that may a class that may not be in your current account and obviously you can't do the call type thing if the data you need is in the other account and so there's uh fields to there's flags to turn on and off whether or not an object call or an object send is allowed on any given class so i'm going to um go show that i just created the asset types so that you can now ask the smart asset what are you it's going to tell you that this one is a dgt okay and we're going to do the other one which is going to tell you that it's the wrapped but these are arbitrary strings and somebody could try to you know make more than one of these and then you get into all sorts of funky behaviors and lying coins and all that type of thing so internally they have a ledger object ledger object they do that i'm calling a uid for unique identifier and so let's ask it for that and here it is here's its number and this is an internal number it's not an object it's just a number that's unique among all objects in every other id because i'm comparing it against everything else to guarantee it's unique hey dave we do have a question in the chat here right now jaycar here we have i can i can just read it to you okay so in a network of native hybrid cloud server network of nodes for a global infrastructure if we have cloud foundry replacing the network operating system what would be the architectural change that you would recommend in that case read that again because i think i know i know the i think it's missing something ask that again please sorry jaycar if you want to just ask it yourself here please feel free to unmute yourself and and ask it uh maybe not but yeah dave you can click on the chat window as well to read it if you can where's the chat window again you know i'm sharing my screen i can't see anything uh wait wait no like even when i put up here all i get is okay let me pause i can't see it oh wait wait wait chat i found it i found it okay in a network of native hybrid cloud server network of nodes native hybrid over those for a global infrastructure if we have cloud foundry replacing network operating system what may be cloud foundry as in the company is pivotal interesting so you're talking about containers and you're running documentaries and containers that works fine the i'm not sure if you're asking for the architectural change to hyper ledger because there's none this is strictly a configuration in your loading chain code everything else works as is until you start of course doing these types of messaging so literally you're just running hyper ledger it does have to be two point own above and there's a couple of configuration issues one of them is that your underlying operating system the default for hyper ledger at least in the open source is using a very very limited linux version that doesn't have shared object loading you have to replace that in the docker image with an actual one that'll do shared object loading otherwise it can't do it the other thing you have to do is set the config.yaml to use external chain code there's a model for that other than that you can see the rest of it in my in the git lab for it that's basically about it if you're running your hyper ledger construct with cloud foundry and rolling out containers that way you'll you know whenever consensus algorithm using as long as it works will work fine because we're sitting on top of that i don't know if you call that a layer two or above but we're literally as far as hyper ledger is concerned it's just maintaining the replicated database nothing changes there hope that helps okay thanks thanks David it should help sure and i'm just going to show the other one yeah we actually have had conversations with a couple of the majors about putting it into their environment one of them wasn't actually ready yet they were running a one point x and unfortunately you can't do external chain code one point x so it couldn't get around it and as you go to 2.0 you 2.x and beyond you can whoops somebody else responded and uh real quickly i'm just showing that these before I get through that the two UIDs are completely different from each other here's the other one and where is it i gotta scroll up to see it but i don't know if i can get my thing to scroll yeah come on really slow scroll okay no with that any case they're different i'm not gonna waste the time with that okay did somebody else get somebody think asked a question and then it yeah there it is yeah i'm a rot i'm a rookie i believe what are the numbers and the arguments mean oh so these are not specific to um hyper ledger they're specific to the class measure infrastructure chain code we create um a unique identifier we like we call it a ledger object id for each for each object whether it's a class or an object an instance of a class which an object you need some way to reference it so the database model for hyper ledger uses a key in a keyword and a key value capability level db does that coach db does that as well coach db does a few other things you're not using um what we did is we set the key to be this value okay and it's being printed out in jason syntax as an array but each one of these is byte i'm sorry it's 256 so it's yeah 32 bytes so it's a 32 byte now 32 byte number using the secure hash sh a 256 which is the standard way to do a low collision hash capability and so i'm just chaining for everyone what happens is given the previous hash number you use that to generate the next hash number that's going on internally and then it's guaranteeing it's unique just in case there was a collision by also checking with the database do you already have this key if so pull another one up so that's specific to this is one of the keys to making it possible to have a dynamic object environment like this because you need to have the objects themselves have guaranteed unique references at runtime that's how we're doing it that's one of the that's actually one of the core pieces that make this possible without that you can't without that you don't you can't guarantee uniqueness and therefore you don't know what you're sending messages to okay i'm going to uh then prove that the assets are there this is the get asset count and the new uh in the newer smart assets the thing about this is uh once you the nice part that is once you create the code and load it anybody loads it everybody uses it so you don't you only in general you assume that we'll have a large enough uh environment of classes already on the blockchain so your job really is to create objects and instantiate them if you need to configure things together so you don't spend a lot of time well you don't spend any time uh with the code and that gives you a nice way to avoid you know typos in your code and errors like that so a lot of it can be reviewed once and we haven't done anything to be something you'd put a certificate to it and run so the answer to this question on an already running network or would it be separate so uh somewhat yes somewhat no so as long as you can load the well if your hyper ledger nodes are configured correctly to be able to dynamically load um uh shared objects which a lot of them may not be but if they were and you can create say a new channel um you could certainly load this cmi into it class major infrastructure the other problem though is you tend to have um database that already been set up with some sort of configuration whatever your records look like what you could do is front end those with objects that represent them and then use methods to them so you'd write a class knowing what your objects already look like and be able to load and interact with them we've already thought through that that's possible the one that i don't know if you could do is given a running uh a channel can we load the cmi into it and not interfere and have a non interference with the existing chain code in that environment um that's one to look for i think it's probably case by case basis theoretically as long as they don't interact with each other sure but then you have an issue where if you're up if you had the same objects hitting the same database hitting the database is fine if it's hitting um objects uh key values in the database you're already using for something else um with the other chain code you might um mess something up that you know that somebody has to code it for you um but theoretically as long as the configuration pieces are there as long as you can put the external chain code model in sure maybe uh because a lot of these can be bring the nodes down change the these are the config flags in the config.yml and bring it back up you probably do it that way also take a little bit of work but not not impossible okay so i approved that the asset counts here cool questions are good because the rest of it is just me demoing it can explain class directly with the existing chain code already oh got it thanks okay cool thanks and let's do the next one unfortunately blockchain is running in command lane or even in the in a thing or not really uh great um whiz main demos but um where'd it go yeah what just happened can you idea so i was gonna do this guy let me do this guy okay so i've done is shown that one is 41 is 20 so i'm gonna hit those right with the interruptions what i'm going to do now is take the dgt asset i'm going to do the same thing as the previous thing and i'm going to bring this down so it's like this i'm going to take a seven out of it i used a different number to make it clear that there wasn't some you know magic um you know they happened to use five because that works or something so um here we go so now i've created a new object that has and here's the object id for it and to prove that it now has seven in it we go to this guy which says get the asset count i mean obviously one of the tricks for these uh unique ids is that um the seed that i use at the beginning is fixed when i start this up for demo in a real world every time you if you're going to start a new hyper ledger chain up you wouldn't do that you would pick a random value and there's a there's a function to pick to let it pick a random value you can give it a random value and then it'll always that'll be the seed forever but of course for demos i can't make scripts if the uids change all the time somebody's did that nice and easily okay so i prove that there's seven in the new one i'm going to prove that there's uh 17 uh 13 can it can subtract in the old one that was the wrong message that's the good asset type well i guess it didn't ask the new one i'd have to rewrite that here's the get uid the reason why i want to do that show that you that it's the same uid as the original asset so that this number for both the dgt over here and the dgt uh t seven button but both of these have the exact same reference inside them that's important because that means that i i can't you know take one asset and add it to another asset type so now i'm just going to move this asset to the other account and that's literally same transfer assets same method that i called for the previous one two different asset types two different classes subclass inherited all of it works moved it now of course i have to prove that it really moved it so i'm now going to ask the the account it's containment it's containing the uh because remember the account inherits from the xbomb contain container which implements the concept of containment in paste and what you'll see is two objects now this is the original one this is remember i put the uh i just put this asset in here and now here's the second asset because i return the an array of all the object IDs that are children of the uh main object so this is the account object and this one is this guy isn't there and i believe that's it for the demo but what i did want to do actually we're supposed to be an hour we're actually out of time um any but any questions then i was going to show a little source but i think we're probably out of it um yeah jim mason a couple of things that strike me the first question is just to be sure i understand it's right so the i'll call it the framework that you have is in a sense free has open source that we can add on to an existing fabric environment right yes two things about it yes it's intended to avoid ever changing any of the source code in hyper ledger the second part is that about hyper ledger though i'm not worried about hyper ledger leave that alone just say it's a runtime assume it's a runtime what you're doing basically saying here's a quote a free open source stack if you will that you can add to hyper ledger and within that environment if i have this right you can in a sense create your own classes and objects um that will be dynamically uh defined and invoked where normally we would go through a chain code deployment cycle to deploy it i'll call it changes or new contracts kind of a thing correct right you do it yeah you bring up the chain code you never need to bring it down absolutely um another piece sorry if i could just uh real quick uh jim michael holman here yeah it's um it the the class code to build the classes and objects for the developers that want to create apps to sell to enterprises that is open source at this time in the hyper ledger uh environment um the uh cmi it's it's free to use but it is binary it's free to use over the developer but once the but the enterprise does pay a license fee a monthly license fee per node for that uh that class manager infrastructure once it goes into a all right so in effect i'm working right so it's your point i need to license the cmi runtime for development for run for for do you run it in a i'll quote a business application number one but what's really strange is using go which is a language that has no classes to define a class-based network which is really strange because there's a lot of great what i call more dynamic languages than go far more yes that make it easier to develop those kind of things for dsls and stuff and for some reason you didn't go that way right so normally you would do something like take python and modify it um i would use something like groovy that's really dynamic in class-based right i'm sure um the reason why is that uh when i started out in this hyperledger had go it started with the language because that's what it was and okay i'll deal with that it's not really meant for it i jump through hoops to um uh work through its type system i use unsafe types and things like that but they're all heavily wrapped so you don't really have to touch them i understand that like i say that normally because i've built languages like this um in the past and in doing those it made sense to start with a higher level object-oriented language by far it made it not only productive for me to build the framework but also far easier for the what i call consumer the developer i was targeting to in a sense describe his own uh uh dynamic classes and objects at runtime kind of a thing yes with the exception of the uh fact that this is using a um a class manager library approach so you need to integrate any existing class-based language with that environment some of that would probably be the equivalent of doing uh java native uh callouts to make the transition over to it but yes that's about the rest of it well actually so that's one way to do it i'll say there's other ways that are a lot easier to do it than that but that is one way it could be done you're right it basically have to modify language slightly to support yes the the short answer to this is i started with goaling because uh hyperledger at the time that was what they set up they have since added um javascript and java i think into it and i don't know what else they have because i haven't looked at the site in a little while they have one but you're right java and java and javascript are no js are the only other two that are i call really stable at this point in the vision of govine yes you could i could have taken javascript probably to uh do it that way uh i know java very very well i'd be writing some java native interface to make that one work um literally at the time i started this though neither of them were stable or available so go was there said aha so the rest of hyperledger is written in go so i'm going yeah okay um okay um any any other questions newer did we we're coming up on uh two minutes to one this is a one hour shot i believe if anybody's interested uh you can go to git lab uh you can go to our xxbom.io register to give you the link to the git lab and you can see all the sources uh for um a good number of these they're not all up there yet some of these are i haven't uploaded the latest version you'll only see the part that brings it up to the um class account and basic objects the rest of this will show up shortly uh and then there was one other comment oh um the other thing is that um in this type of environment using golang for this the um actual shared object the actual classes are compiled you were you were mentioning about a dynamic environment so yes we we made it we made uh golang actually looked like a um inherited a model class environment with dynamic class capability um it's um a little funky yeah demonstrate the concept what we were by the way what we were after is demonstrating the constant putting using the blockchain as a means for doing inheritance on classes so you can create an environment where you every time you bring up a new capability you don't have to write an entire smart truck smart contract in hope that you're getting all the right code this is it's already on the blockchain you're only using it now that was the fundamental reason for it there's some other reasons that have to do with uh performance as well that are outside this conversation one more kind question and then i'm going to have to drop two any l l v m up to no no what's in the roadmap is to get rid of go no this is a we're proving it out i think that long term we're not going to stay with golang we'll we might keep the class major infrastructure and go and then interface other languages just being discussed that's all okay any i actually have to drop but thank you very much everybody hope this was interesting and useful yeah thank you both uh david and michael and the rest of prasad it seemed great presentation and uh you know we can ask everyone else to feel free to follow up with you guys if they have any questions or want to learn more and again everyone on the call you know feel free to reach out to myself you want to present it a future meet-up and uh we look forward to uh one next month uh thanks and have a great rest of your time yeah thanks for inviting us and listening in and awesome thanks guys thanks christin team hey carol bye thank you have a great day