 Hello, my friends. My name is Mark Saiz. I'm CEO of Go Ledger, a company that specializes in blockchain development here with me in San Moevenzi, Go Ledger CTO. Before we begin, we'd like you to explore a little bit who we are. We actually are a software house basically on Hyperledger Fabric Artifacts that have been developing this, in this way for up to five years right now. Basically, what I'm going to show this part of the development and the chain code in the library, we actually use in our clients. These are some of our clients that we do have for this time. For example, Prince of Bras is the biggest Brazilian company, but the Brazil the biggest bank of Brazil, and also Ledger Bras, the Brazilian electricity company, and also Echo Trace, that's the branch of the one of the biggest companies of the world. It's JBS that do animal protein traceability using our artifacts. Some startups as well, for example, this is Tomb Traders that do tokenizations of music, copy, writes, that's some of our examples that we have developing using Go Ledger CTOs. But for us, they are developers. The basic thing, when we start to develop a new chain code, and start to architecture a new blockchain, there are some steps we need to pass by. For example, data mapping, we need to architecture all the assets and see how they work and see how it's going to be shared among all the organizations that are defined by the Hyperledger Fabric MSPs. And also, all the definition of the transactions that the most probably the most important part of the chain code are all the methods that I'm going to create using this so they can go to the Hyperledger Fabric workflow. But there are some problems we need to tackle when you start developing and you're doing this for a while. For an example, the code standardization to make everything the same way to all people, to all my team and to other people that all the other employees and the other developers that are going to work with the code. And also, the definition of the assets, the properties inside the assets, all the permissioning. For example, if I have, I want some part of the assets to be modified or created only by certain MSPs that define it this way. Also private data, the transactions, its parameters, all the permissioning, for example, which organization can call a method, that's something important. And also, when I create a transaction, the integration with the APIs, that's really important for us to work with. But let's watch one of the examples, the basic examples of Hyperledger Fabric providers this is the, comes from the GitHub Fabric sample. This is the Fabric card example that you can see here. If I want to define a new card, I have to make this struct and make out, this is a GoLang code. So I can make and create all the definitions, the properties. And also, when I receive an invoked transaction, I can, I must send to one method or another. It's not a such a good way to work with. So for us in GoLedger, we start to develop a library that would make everything more easy to the developers, led by Samuel Venzi. We did a library with GoLang, so we can work with some, issues like standardizations of assets keys, asset reference, for example, if I have an asset inside an asset, how can I work with? And also to customize data types or property inside the assets. I want this property to be only an integer or only a string or only a date or something like that and no other than this to make all these data types and also managements of the MSPs, as I told before, the manage of transactions, the right permissions of the assets, private data managing and all the PDCs, the private data collections. One thing that we provide is a group of transactions that are already available. Probably it's not only a crude, but also if you use GoLedger CC2's library, you will able, instantly, to use create asset, read asset, read asset history, update the asset, leave the asset, search with Poisonation. It's not niche for you to develop everything again. It's already there for you. Customize the transactions, transactions, all the transactions are integrated with the API and permission it. Okay, let's go. This is a quick example. I'm going to give a live example. This is an example of a definition of an asset that we do using GoLedger CC2's, so we can see all the examples and also the example of the transactions. I'm going to go in a more detailed way in the live example. This is a transaction example that you can see how we define all the little details of the transactions, the parameters, and how it's called by the API and stuff like that. And also some other artifacts. For an example, unity testing, if you want to. We also provide a source code for an API that's also compatible with GoLedger CC2's that already had all the unique points necessary for you to do the basically calling, the basic transactions. And this is one I like the most is a web app that's already, that you can use for you to make all the calls, to see the assets and to read them and to call and to call all the transactions and stuff. You can, we call it GoNitus. It's available for anyone that can work with. And if you develop anything with GoLedger CC2's, you can integrate with our orchestrator. If you want to go, for example, to a production network, from the development mode to a production network, for those of you who did not watch at my earlier presentation about orchestration with GoFabricade, I recommend, it's probably gonna be in YouTube soon. So you can see how it works using that. And this demonstration right now, it's already available on YouTube. You can watch them if you want the demonstration we have. Right now, I'm going, and the other thing I forgot to say, it's open source. For anyone that wants to use GoLedger CC2's, it's open source. So right now, we are going to do a live demonstration for us. Let me show you. When we start using GoLedger CC2's, the first thing you must do, first of all, is to go at the repository. That's GoLedger Dev-CC2's demo. So you can download this repository right here. You will be able to see the, to test, to make out the testing. It basically will create a three-organization network inside the machines for you to test everything, and to make a simple test with several transactions that are available for this code. Let's watch the code right now. Let's see how this repository is defined. For example, I have these directories here. The first one is the chain code directory. That is separated, segregated in some other directories. For example, the assets types is where I define all my assets. Right here, I have some examples. Let's see the person asset. This here, I can see how I create it. First of all, I write, I define how it's going to be called by the APIs or inside the chain code. It's assets called a person. And after that, I define all its properties. And each property, I can show how it's going to be defined. For example, if it is a primary key, or if it is a composite key, and other than that, this writer argument here, I will define which MSPs will be able to create or modify any of this information, this simple information here that we will be defined here. And the other properties as well, I can see, for example, the next one, it's a string property of its name, its name. It's the name of the person. And it also does have a validation function. This validation is called whatever these properties is supposed to be modified. And other than the validation function, I also had another feature that are the Kiehlstone data types. I can create and organize it in this directory here. Kiehlstone data types for you to define more complex data types for each property. For example, this is the book type that is actually a set in noon for my properties. Let's go back to the book. Let's go to the book asset right now. For example, this is the asset book that I can see here. Here is a composite key. It actually uses two keys, two strings, to make a composite key. The first key is the title, the second key is the author as the string. And they do have this writer permission here. That's really the only organization to be allowed to define, to modify this information. And other than that, we can see this other property here that's very interesting. This property is its type. It's the type person is a reference to other assets. So other than I have the information here, I will refer to other assets. That's the asset. This is the property coordinate of the book. And the asset and the data type, it's the person. And the data type is the person. And we also have other than that. Let's go to the library. Let's go to the library asset right here. So I can see, for an example, this property here, it's the books. It's actually a list of referency of assets. So we can see how complex it's go. Let's make a transaction right here. This network is already up. It's a tree organization network that's deployed on somewhere else, VM. And I already connected the web app I had told you. So I can create, let's call the create transaction right here. We can say we can pass. As you can see, the web app already been set up to connect to all the properties that have been defined. And right now, if I click cur, I can see how the legacy system, any systems, can call the API to call the transactions right here. And of course, let's call this the transaction. OK, I've just created a person. And that's it. So I can see all the information. If I click cur right there, I can see the search method that's available. Let's modify this information. Let's modify the person right now. Let's do a live modification and upgrade of the code. Let's create a new properties. Let's call it address. The address of the person. So after this network is already online, and I want to change the property of the property schema of an asset. OK, that's it. So I just need to put all the information here. And then I do have some artifacts. I do have some scripts. And this script right here is going to upgrade the code. It takes some seconds. We are very shorted on time. As long as it's being upgraded, let's see a little bit about the QSIM transactions. So this is here the TXDefs directory. I can see some transactions I can work with. For example, this is the create new library transaction that let's see how I define it. It has a name. It has, for example, I define the method that the REST API will call this transaction. We invoke this transaction. This is a POST method. And it also has some arguments. I define all the arguments that it should have here. I can do very complex things. So after that, I receive all the arguments. I treat them. And I call some. There is a rep for the chain code interface. So I can use all CC2's library methods. For an example, this put new is a method that's reps, put state method for the chain code interface. And that checks if there are any other assets with the same primary key and stuff like that. So after that, I finish and everything works OK. It returns to the API. Let's see the chain code upgraded. It's still upgraded. So let's continue. Let's see, for an example, upgraded. OK. So let's go back to the web app. As you can see here, I'm reloading right now. I can see. Let's see the person right now. I do have the address. Let's call the update address information. And let's create new information. For example, this is Brazilia. We did not have the address, this property before. Right now, let's click on the read the asset history. Let's see the ledger. This is actually an endpoint that we provide. That shows the ledger, the MSP, the sign of the transactions, the timestamp of each transactions, and now the modifications that we had right here. OK, guys, this is basically what we want to show a little bit for you. If you have some questions, we'll be willing to answer it. Thank you so much for your attention. OK. There's this edit button. And so I'm kind of wondering, if an edit button and immutability somehow don't match up. How do we lose immutability? OK, you're asking about the edit button. It's asking, calling the update asset information. So although it's editing the asset, you can see here that the old information, the history, is immutable. This information here that you can see, this is immutable. It's impossible for you. You have to destroy the network and now the nodes and now the peers for you to erase everything. But other than that, this is only going to create a new transaction and add here so you can upload your word state at HyperledgerFabric. It's actually the same instance, but it has a ledger. It just has a ledger for the same instance. And actually, this ID here is a primary key. Whenever you search for this primary key in your blockchain network, you see the same ledger and the same information. All right, thank you so much.