 start the recording. So, okay. And today, yeah, that's me. So, in this short presentation, I will give you a first taste of how we can use the Fabric 2.2 version. And with today's agenda. So, this is a beginner tutorial. We start with a control 20 server, which a private server or a droplet or whatever you want to use, you can use it on your own laptop, maybe with a virtual box or with a digital ocean droplet or with an AWS virtual machine or whatever. So, the only important part is that we use the in Ubuntu 20 version. And this first step, we are going to show you how you can install the needed requirements. So, we need some requirements for Fabric. And then we install the Fabric binaries and sample samples. And with this, in this Fabric samples, there's a new test network. And we will show you how you can use this test network to test your chain code to play a little bit and to study and to observe some things in the Fabric world. And these are parts from the second point today. So, we install the first network. Then we try to understand what is installed. So, I think that's an important part that you know what is installed, what is the chain code which is installed, how this chain code works and so on. And then we can interact with this chain code and with this network. And for this, I have provided some examples. So, we can do it step by step. And you can easily follow these instructions. All these instructions you can find here in the references. And we have here some, all my instructions are here in this Github repo. Then here, this is the reference from the agenda. So, we have a global agenda for this series so that you will see what will come in the next sessions. But this is a little bit under construction. So, we change this a little bit. So, when you want to know what is in the next session, then you go to this Google docs and then you can see what will be part of the next agenda. So, there's a question. Could you just quickly mention the main features of 2.2 compared to 1.4 that we previously looked at. Yeah. So, for this, this is a good page. So, I don't know any new features. But I think what I have seen now is that the basic system, I think the basic system is the same. But there are some points are changed. And one point is, I think the image size of the Docker images are changed. There is a switch to L pine images. And they are much slower and much smaller. And you will see when we install the network that this is very, very quick and faster than we have seen in 1.4 mine version. And so, but that's a small point. Another good or important point, which we will tackle also in the next time is how you can install the chain code. And with the new chain code lifecycle management, you have something called the governance of the chain code. So, when you have a network with different organizations, so you can imagine organization 2 and organization 3, and then you have a chain code and you want to install the chain code, then you need the confirmation from all these organizations. And for this process, they have introduced a new lifecycle management. And this is a little bit different from the kind which is used in the 1.4 version. So, in the 1.4 version, you have to install the chain code and then you instantiate it, and then you can use the chain code. And in the 2.2 version, there is a new approach where you have more control over the governance of the chain code. And also, in the chain code, when you install the chain code, so, in 1.4, there is a small delay when you first install the chain code container. So, in favorite kits, when you install the chain code, then the chain code is running in a separate Docker container. It is called the chain code container. And this chain code container is started on the first invoke request. And so, for the first request, you have a small delay until this chain code container is built and is ready for the usage. And this is also changed in the 2.2 version. So, this chain code container is built in a step pre-order, and then you don't have this short delay. And another improvement what I have seen is that when you use CouchDream, I don't have mentioned this before, but so it stands in the documentation is that there is performance improvement and so on. But a detailed list of all changes from the Fabric, from the version 2.2, from 1.4.9 to 2.2, you can see it here with the docs. There is a release on this release page. There is a page where you will find all changes and you can go step-by-step through every block in this document. So, then you see what is changed. So, I think to wrap up, the process is, I think it's the same. It's basically the same, but something has changed. Also, one change is when you do a chain code development. So, the process through this death mode, this chain code death mode, where we have used these three terminals to test our chain code, this process has also changed now in the 2.2 version, which I have seen yesterday. So, there are small changes, but I think powerful changes. And a change what we have seen today is that there is no bigger first network script anymore. So, this has changed to the system test network implementation. And I think, so for my, I used this for two weeks, I think. And what I have seen is that the examples are really good. I think they are better structured and it's more easier to learn, I think that in the previous version. But I don't know. So, maybe it's because I know the 1.4 version and so it's a little bit similar, or it's easier for me to understand what is new. But these are the changes, I think. So, the main changes which are, which you can see now. And when we come to this fabric, so I think everybody in this room or in this class should know what is fabric. So, fabric is a permissioned blockchain system. And yes. And in this, in this world, we have different, I think, different fields. So, we have here the fabric network. So, that's basically what we're saying. This is, this is what we are doing today or in the next couple of meetups. So, we have a network. We have a network components. We have an Ottawa. We have Ottawa organizations. We have a peer organization and the second organization or a third organization. So, and then we have a channel. So, the channel is an element which is a secure place where we can install chain code and through this channel and the permission system, which is implemented in the fabric, we can interact with this network. And for this, we have a chain code. And the chain code is the so-called asset transfer basic chain code. This is the default or basic chain code which is used in the new version. So, and this part is done maybe by system administrators or operators, I think. And then we have a developer section. So, this part here is for the administrator or for operators or for DevOps or for people. They are handling the Docker containers. They are responsible for the infrastructure and so on. And the second part here is the favorite client or you can say it's a backend application. So, and there are some officials and unofficials SDK. SDKs stands for software development kits. And with this SDKs, we can interact with the fabric network. And one important part I have forgotten in the difference between 1.4 and 2.2 is that there is no CLI container anymore needed. So, I think that's an important part for today. When we install this system here, today with the fabric network, with the test network, we will see there is no CLI container. So, I think that's a change from 1.4 to 2.2, which we should know that there is no CLI container. So, the peer commands, the order commands, this config or crypto commands can be called directly from the console and will be installed through the prefix samples in the installation process. So, that's also a change from 1.4 to 2.2. And for the backend here, for the favorite client section, so we have official SDKs, Node.js and Java. So, we will do it with Node.js in my sessions. But there are also unofficials SDKs from Goland and Python. So, I think you can try this, but they are not so robust, I think, or I don't know why they have an unofficial status. So, but these are the client SDKs, which is new. And, yeah, another point that I have forgotten to say is that for chain code development, there is in 1.4, we have seen that there is the shim API. And with this shim API, we have developed the go chain code. And when we use go for chain code development, then we have this shim. And in 2.2, there is a new contract API. And that's also a change in the 2.2 version. So, but I think you can use both versions. But the new version is with this contract API. So, but from the favorite client side, so these could, this could be a web developer, for example. So, this could be a web developer, which is familiar with Node.js or a backend developer, which is familiar with Java or Goland or Python, for example. So, and this is the second word. This is the second word. So, we have here the system administrator part, then we have to install the chain code. So, that's a thing that the chain code must be developed, I think, from a developer. And when the chain code is ready, the chain code has to deliver to the administrator. And the administrator has to install the chain code and in the system. And the front end application, or the backend application here, this could be a completely different person. So, this could be anybody who is responsible for Node.js, Java, and so on. And then we can, with this, we can build a REST API, maybe with Express, for example, and build a bridge between a front end application with JavaScript, for example, or with PHP, or whatever you want. So, maybe you are familiar with Angular, or PuteChairs, or embed backbone chairs, or whatever you want as a front end application. And this front end application can query the Node.js application, for example, with a REST API, or with a G-RPC connection, or whatever. And then you have here a completely different person again. So, and when we have seen this, the whole picture, so now, today, we're going to install this system. So, with an Ottawa, that's like the test network here, we have an Ottawa organization with one Ottawa. And this is also a change from 1.4 to 2.2. In the 2.2 version, there is no, I can say, solo Ottawa is duplicated. And I think also Kafka and sokeeper are duplicated. And the only stable ordering system is REST. But REST is a crash-fold tolerant system. So, you need more than one Ottawa to be crash-fold tolerant. And in this favorite network, in the test network, there's an implementation where you can use a single REST ordering system. So, in the end, when we have installed the system, we will only have two containers, one for the Ottawa, one for PNUL from R1, and one for PNUL R2. And that's it. And that's also a change from 1.4 to 2.2, because the numbers of containers are limited, are reduced. So, okay. So, and now, a short overview of what we have to install in this process. So, I think the installation process is very easy. So, when we start with an Ubuntu Box 20, so that's our starting point. So, I have prepared an Ubuntu 20 digital ocean droplet. And based on this, we have to update the system and so on, so the basic setup. And then we can install some helper tools for us. So, maybe three is a good choice to install. So, with three, we can we can list the folder structures, or request the folder structures, and especially for the membership service provider. So, we can see which certificates we have, and so on. So, to inspect this a little bit more. And then, Jaikou is also a nice tool. So, this is a command line JSON parser. And a lot of, I think, I think a lot of results which you receive from the system is in JSON format. And also when you query the block configuration or whatever, then you will receive a JSON format. And with Jaikou, you can pass this JSON format, and then you have a nicer print on the console, for example. So, these are also some helper tools, but not needed, but it's helpful and useful. Also, Tmux terminal multiplexer, but this is installed by default. So, with the terminal multiplexer, we can have in one terminal different hanners. So, we don't have to open more than one SSH terminals to the virtual machine. And then we have to install .com. So, favorite is .com-based. So, we need .com itself and .com-compose to use it. And then we need a Golang. So, when we do chain code development, so the first languages, so the primer languages for chain code development, I think, but it's only my opinion, is Golang for the chain code and in the client application, it's Node.js. So, Node.js is very popular. It's like JavaScript, and a lot of people know it. So, because it's also easy to use. And when it comes to Waste API, you can use a lot of frameworks like Express.js or Next.js or whatever to develop really cool software. And then we have to install the Docker images. So, and Pineries, so, and the favorite samples. So, and that's also a similar step. And this is very fast. So, because the Docker images are through the Alpine Linux implementation, this is very short. That's more. Okay. So, and now I will skip this. So, and then I hope I can switch this again to this. So, can you see my desktop again? You should see a terminal on the left side, on the right side. Yes. Perfect. So, then we can do this side. So, a little bit larger. So, and here, on the left side, you can see this is the step-by-step introduction tutorial, where you can follow these steps. And then, and these, these steps are on the GitHub. And the link is in the presentation. So, now here we have a Ubuntu 20 machine. So, for this demonstration, so I use a doorplate from Digital Ocean. So, and the configuration of this is one CPU, two gigs RAM, and the 15 gigabit storage. So, that's, it's a $10 machine. So, I think that's enough to test and to do some experiments. But as I have mentioned, you can do it also with virtual box or with other virtualization software, if you want. So, okay. So, the first thing, when it comes to installation of such a system, we have to, we have to look that we are up to date. So, this is about I have prepared. So, to, because we don't have to restart the machine. So, I hope I'm not on the wrong machine. So, then, so then we install our helper tools, premium JQ. So, in my case, I would like to set the time zone correct. So, now we're in Vienna. That's the time. So, these are some basic operations steps. So, and then the first step is to install Docker. So, these instructions came from the official Docker repository, Docker documentation. So, these are some points to copy in. And then we can finally install Docker itself. And then we can check if Docker is installed. Yes. So, I think Docker version 19 is current version. Yes, I can share this. So, these are the instructions. So, okay. So, Docker installed. The next step what we need is Docker compose. So, the reference here also you can find the reference from the official Docker site. And there are some commands we have to copy for this. These are execution rights. And that's it. So, then we should have Docker compose version. So, now, I think the main parts are done. So, then we can install Go. And this is maybe also a change. So, in the 2.2 version, the one, the 14 version is recommended here. This is the latest version. And we can install this here. So, with this command, we, with the, we, W get a command, we can get the, the, the version. And then we, we uncompress the Go packages to use a local, to use a local directory. And then we have to set some environment variables for the Go installation in the, we can do it in a profile.profile or in the PashRC file. So, that's a little bit depends on you. So, when we do this, we can use the VI to do this. And so, here, that's a, a copy here. Also, the path to the Go pin file, to the Go pin directory. And also, to the favorite samples. So, in the, in the last step, we are going to install the favorite samples. And they will be installed in, in the path root favorite, favorite samples pin. And we need this path, this pin directory, also in the path. The reason is, in this pin directory are the tineries, for example, the peer command is there. And that's new in the 2.2 version, because there is not a CLI container. And we need the Go path. So, the Go path is the favorite directory. This, this directory will be created in a minute. So, and that's it. So, and with the source command, we can reload the environment variables. And when we check the Go version, then we should see Go version, Go 1.14. And this is also a good command. So, printN, printN prints you all environment variables, which are currently used. And when we use the web command on this, then we can, we should see our changes to the changes from the profile. So, we see here the path is changed. And we see here the Go path to root. And this is a very good command to see which environment variables are set. And favorite used a lot of environment variables. When it comes to the peer command, for example, or in the Docker compose file, we have to set environment variables to express some settings or express some paths to certificates and so on. So, to check which environment are variables are now set, that's a good technique to know how you can do it. And also, the source command is important, I think. So, we can, to provide a continuous copy and paste from environment variables, we can collect all needed environment variables to a situation or to an organization, for example, in one script. And then we can call the source command and then with the script. And then we can have one command and all environment variables in this file will be passed to the environment now. And so, it's a little bit easier to work. We will see it a little bit later how we can do this. But these are Linux techniques. So, I think every system administrator has its own way to do this. Okay. So, go and install it. And the next thing we need is Node.js. So, this is for the SDK. And I think Node.js 10 is allowed to use and thread. So, but we are going to use the new version. And for this, we can download the install script. So, here we go. This is the script. And we can call this. I don't need this to the command here because on this machine, you see it. I'm a root. So, and then we have to call go get install Node.js. So, that's it. And with Node, minus we see version 12. 12 is installed. And now you have everything installed as a preparation which you need to make a network to create the client and so on. So, there is not so much to do for the first installation process. And then the last step is only to install the favorite binaries and samples and docker images. And for this, we can call this curve command. And everything will be installed. But here you can see, but when we call this command in this way, so the latest version will be installed. So, when we try to use this setup for the 1.4 9 version, which is I think the latest from the 1.4 version, then you have to call here this version numbers. So, there is a short syntax. So, the first number here is the favorite version. So, when you try to install the 1.46 version as I have done here, then you have to can say, okay, I want favorite version 1.4.6. I want the favorite certified authority version 1.4. And the third party version here, that's me, is for the CouchDB. So, that's the CouchDB version. And so, you can look which version you want. And then you can here explicitly define which version you're going to install. And when you leave everything as it is, then the latest version will be installed. So, and that's what we're going to do now. So, you see the version 2.2.1 will be installed now. And I think that should be very fast because of the small docker image size. And we will see this in a minute. And now we are ready. And you see the docker images are installed. And yeah, now we can just watch. So, okay, so this is not working. Okay, we leave this for a moment. I don't know. So, I did the mistake. So, I did the mistake. So, I have forgotten to create a favorite directory. So, and that's here. So, okay, it's not so easy to speak and doing speaking and doing. It's not so easy. So, okay. But that's not a problem. So, the only thing what we have to do now is to change the profile here. So, we change the go path here. And we have to change this. And we have to change this. And you see now it works. So, peer version, we see the peer 2.2.1 is installed. So, okay, what we have missed, we have missed this step here. So, but that's only for to have an folder here. And it's called Fabric. And in this folder, we have the examples installed. So, but it doesn't matter. So, that's only now with the change of the environment, we have done the installation. Okay. So, with this in mind, we can try the installation. And before we're going to do this, we switch back to the presentation. So, can you see the presentation again? I hope so. And this is a short overview of the test network. So, this is the default network. And with this network, we can test and do some things. And also, we can learn from this examples where a lot of, I think. So, and the network is here, this is called a consortium. And as you have mentioned, we have an order organization with single rough paste ordering system. We have peer organization one and the peer organization two, also with one peer organization with peer with peer container. And so, in fact, we have three are three Docker containers, one for the order system, and one for organization one as a peer zero, and one for the organization two as a peer zero. And then we have a channel by default. The name of the channel is the same like in 1.4. That's my channel. But we can also set a custom channel, for example, the channel one, as I have done my example. And then the basic chain code will be installed. This is the asset transfer basic chain code. And this is, I think, a replacement for the app store chain code or the chain code example 02. These are some names for the default chain code in the 1.4 system. So, and with this chain code, so maybe the term chain code is also a little bit changing, I think. So, from the beginning, it was the term chain code. And the chain code is that what in other blockchains a smart contract is. And now I think in more and more documentations also in the official documentations, a little switch from the term chain code to smart contract. So, but smart contract and chain code is the same here in the fabric word. And I think there is a change from the term chain code to the term smart contract. And this is the default asset transfer basic smart contract or chain code. And this chain code has this method. So, we can group this together to two groups, one for the query command and one for the invoke command. So, and for the query, and that's also an important part. When we do a query, we don't query a particular beer, for example, the beer zero from organization one. And for this query, we have to set some environment variables. And when we do invoke, then we have to give more environment variables to the command, because we need a concept. So, and then it comes to the endorsement policy, how much endorsement we need. So, in this system, it's like that when you don't say the default configuration is that you need the majority. So, the majority of the organizations must confirm to this transaction. And for this, you need an invoke command. For this, you will see you will need an order and you need a lot of commands for the peers and the TLS certificates and so on. So, but for the query, that's for the first from now, it's important to note that for a query, we don't query the order, for example. So, we query a particular beer. And for the invoke, we have to use an order to invoke this transaction. So, and the query functions here, we can use is get all assets. And you will receive an JSON response with all assets. And you can read one particular asset. So, and that's also an interesting term asset. So, what does it mean an asset? So, an asset is anything you're going to store into the blockchain and an asset has a value. So, and that's it. So, you have an asset that's a name, a key, the key stands for everything, for anything. And you have the value. And the value can be a number, the name, an object, or whatever. So, and this value will be serialized and congratulated in a byte stream. And this byte stream will send them the value. And this is the asset. And so, and when we have in this example, so we will see then the asset so we can give the assets a name or a number. And then we can query the assets to see the latest state of this asset. And as you know, in the blockchain system, you cannot remove this asset. So, when you change this asset, a new version is created. And you have a last state from this asset. And you have previous states, you can have as many as you want previous states. This is also called the history of an asset. And when you query the asset, you will only get the word state. This is called your word state. So, this is the latest state of the asset. So, we can say that an asset is anything you would like to store in the blockchain. It's like a key and the value. You can also say it's a key and the value store, but with a state. And when you update this asset, as we see here, we can see we have an update asset. We have a transfer asset. So, it's also an update. But in the update asset here, the whole asset can be changed. And in the transfer asset, I think only the owner of the asset is changed. But this depends on the chain code. So, but this is only in this example. So, and when you delete the asset, then the asset will be deleted. And, but the previous versions are all stored in the blockchain. So, and these are the functions which we are going to use. And we can do this from the command line. So, and now this was the short overview. And then, so, and to start this network, we have to switch in the first examples directory. And you see here the structure from this directory. But, and that's also, this is also changed. You see here other folders. So, and you see the test network, you see a test application. And, but you have also seen here, you can see the chain code directory. This is a directory where other chain code is provided here. And the upcoming sessions, we can use this chain code here to install the second channel or try other chain codes how they work. And, and here's the transfer basic chain code folder. So, and you have here a lot of different versions. I will show it. And you see here, and you see here. So, for the, for the chain code, you have a go version, you have a Java version, you have a JavaScript version, and you have a TypeScript version here as well. So, and that's the version we are going to install. And that's also changed here from, from the, from 2.4 to 2.2. But we have the favorite samples in a little bit different structure. And, yeah. So, and what we are going to do now is we're going to test network. And here, everything is provided. So, the only thing you can look here with the help command to see which commands we can do. So, we have different combinations where you can try and test different things. So, you can start a single, a simple blockchain. You can start a blockchain with CouchDB. You can start the blockchain with Certificate of Society. And that's also, I think, a new part. But I, this is what I have to look into, into a little bit more. I have read that when you start the test network with the CA option, then the crypto material will come from this Certificate of Society. And not from Cryptogam, from the Cryptogam tool, as it's in the 1.4.9 version. So, this could be also a change, but I don't have, I don't have this tested. So, I think I have read about this. And this is something I have to look if this is really in this way. And with this command, you can test different scenarios. And we will try here the simplest way. So, when we try to bring up the network, so then we have to create it, we have to, with the app command, we have to start this network, which we have seen before in the, in the slides. And then we can say in the same command, create the channel with the name channel1. And when we do this, and everything is agreed, then you'll see that this looks good. And now the network will be generated, and the channel, channel1 will be created. And also this channel will join to the peer. So, when you see this, and there's a lock command, so organization1 and organization2. And then we have successfully joined channel1. And so now, and then we can see with Docker peer's command, and we see here, okay, something is running. And you see, I'm going to make this a little bit larger. And you see, we have only these three Docker containers here. So, we have the auto container, we have the peer serial container for org1 and org2, example.com. And we don't have a serialized container. So, I think that's the most difficult, the most difference from now in there, from 1.4 to 2.2. And, yeah, so the network is running. And then we have to deploy the chain code. So, and that's the second step. So, and we've deployed chain code without, without any command, then the simple basic chain code will be installed. And we have said, we have used the channel1. So, and then we can say, okay, the basic, the default basic chain code is installed in the channel1. And this is also new. So, some binaries are downloaded. So, for the first, on the first time, so some go packages. And now you can see a little bit about this new lifecycle chain code installed process here in the log command. This, this is something we are going to invest a little bit more in the next session. So, where I have a presentation about this lifecycle, how we can install this and do the whole process, not in the script. So, a little bit by hands on so that we can see what happens under the hood, under these scripts. And we can learn a lot of these scripts. So, and then we understand more how the things work together in this system. But this network script is a script where you can test and and play. So, and I think it's very easy to do this. And when you look into this script, and when you're looking the scripts, which are called in this script, then you will see how the things fit together. And here you can see this approval process. So, when you see that's also this check commit readiness, that's also new here in this version, that's part of the new lifecycle chain code management. So, and then I think we are ready. So, yeah. So, the docker containers are running in the background now. So, we don't see any docker containers until we use docker peers. So, and now you see a little bit more. But we can use also the docker compose command. And docker, as I have mentioned, docker is based on docker. And we have installed also docker compose. So, the question is where the docker compose files is coming from. Because when we look into this directory, we don't see any docker compose general file here. So, and for this, this is also a little bit changed. So, this docker compose file is in this docker command here. And it's docker folder. So, when you see tree docker. So, it's the first time we use the tree command here. So, now you see for what is tree help for it. So, and you see here, that's the Yammer, this docker file, which is used in the script. And then we can also check this command. So, but that's not related to Fabric. So, that this docker and docker compose things. So, and you see the same. But with the docker peers command, you can see here that there are some chain code containers here. And you see here, this chain code container. So, we have here chain code container for organization two, devpnul. So, that's the marker, the name for this. And here the same for the organization one. So, and now we are ready. So, the system is running and now we can start to interact with this. And for this, we can use this term in multiplexer, for example. So, and then it's helpful to see the logs here. So, and then we split this panel. You can do this with control B and then the single double quotes. And so, and you can split the terminal session here in two panels. So, in the first panel, we have the lock output. And in the second panel, we do our queries. So, and to switch between, you can control B, C, C0, 0, 0, 1. Then you can switch between. And so, and to query. So, we have to, in this example, for the, for the chain code. So, we have to initialize the lecture. So, and then we can query the lecture. So, when the chain code is installed, we can call this initialization. And with this initialization, some sample data will be installed. And that's, that's the, the, the, the, the command which we have to use. So, but that's a little bit complicated here. And that's everything in one line. So, that's the reason why I, I have here split this to see what the single commands are. And so, as we have seen before, when we can call the peer command and the peer chain code. So, we can call the chain code. And that's a different between the 2.4 version. So, we don't need the CLI container. But in the CLI container, we also have to use this environment variables. And, but this peer, but this peer command is in there when we look here. We have seen this here. And here's the peer command. So, and we can call this directly from our position. But, but for this, we use some, we create a shell script where we can put in all environment variables which we need. So, we take this so, and store it. So, and I think most environment variables speak for itself. So, what is needed is the fabric config path. So, oh, and you see here, we have to be a little bit careful. So, we have to change this. So, we have missed the fabric folder. And so, that's the environment variable where fabric knows where the config directory is. So, where the favorite sample is, where the config directory is. And the channel name is my choice. So, you can put in here also the channel name directly. So, but you can set an environment variable for this. It doesn't matter. And then we have some peer command environment variables. So, and that's because the basic this default network has TLS enabled. And when TLS is enabled, we have to provide some environment variables. So, and you can see here this TLS enabled is true. And then the TLS root certificate. And we can take this as it is. And the important is here maybe the local membership service provider ID. So, that means that we create a file for the organization one. And that means of course that we are from the organization one. And this represents the local MSP ID. So, one MSP stands for the organization one. And also the peer address is local host and this part number. So, and this is an information we can find in the docker compose YAML file or in the in the ps command in the output from the ps. And these are the environment variables which we put in this file. And you see here some paths to them. You can for the first time here now, you can say that's okay. So, it doesn't matter what it's for the moment now. And then we start this. And then we have to execute this file. So, and now we should check if this environments are environment variables are set. And then we can send that core for example. And you see it's the same like we have done by the path. And you see okay. Now these are my environment variables which I have sent. So, I have used this channel name. So, I'm going to look what about the channel name. And you see the channel name is channel one. So, this should work. And now we have to invoke this and we call a function in the lecture here. And so, for this, I would like to show you a short moment. So, can you see this with the studio code? So, and this is the chain code. And then this chain code we have different functions. And you can only call these functions. So, when you want to query something from your blockchain from the system, and then you can query a function in the chain code. So, you cannot make an attack query. You can kind of get an attack information from the system. So, you need the function for this. And this depends on the chain code. And this is the global picture when you think that when we have this chain code, and we need in the new lifecycle management or governance process, when we have to improve this chain code, the administrator from organization one has to improve this chain code. The administrator from the organization two has to improve this chain code. And when they improve this chain code, that approved this chain code, then they can say, okay, this is the chain code. We are conformed with this and we take this chain code. So, they can inspect this chain code and say, okay, in the first step, we do this in the process. And we see we have here asset one to asset six. So, these are the assets. These are the IDs. And then we have different properties here in the field. So, and this is the function we are going to use. And when we call here this, when we look at this one. So, and then the invoke command has a lot of commands here. So, but it's not so complicated. So, we need an order. So, for the invoke, we need an order that we can handle this transaction. So, the order, this is the address of the order as we have seen. And then because we need to use TLS, we have to override the TLS host name with the order example.com. That's the name for the TLS certificate. And we have to use this TLS command that says that TLS is basically an node. And when we have this, we need this TLS certificate certificate. We need the path to this TLS certificate. And that's all for the TLS part here. And then we need a channel name. So, okay, we call a chain code in a particular channel. And then this particular channel, we have installed a chain code. So, so that's like above. So, when you call something, then you have to set which channel. So, channel one. And on this channel, we have a chain code installed. And the name of this chain code is basic. Because that's the default name of this chain code. And that's the path. When you don't use TLS, you don't have to, you don't need this free parameter. And then we have to tell the order one or the peer something about our infrastructure. So, when we do it by hand, so we don't use a discovery service or something like this. So, we have to, because the default endorsement policy says that the majority, so when we have two, the majority is two. So, one is not the majority of the two organization system. Then we, the peer command here has to know what are the peers. So, our peers is the peer and local host here. And the second peer is the local host on this part. And they communicate over the part, over the part numbers here. And then this represents the organization one, the TLS root certificate from the organization one, because the request is encrypted with TLS here. And the same is here for the organization two. And that's why, because we have, we need confirmation for this transaction for both, from the majority of this system. And we're in the system, we have two organizations and the majority of two is two. So, we need this, we need this both peer organizations to be confirmed that we can invoke this transaction. And then, and that's the final part. So, with this C here, we can call it function. We call it the function in it ledger. And in it ledger is the function in here. So, and then this will be called. And we'll see a little bit later here when we query this ledger. So, you have the same here. You have here a name, get all assets. So, and then you can see, okay, that's the name here, get all assets. Okay. And that's all. And when we copy this now, and paste this, then you see a train command. You see here in the panel above, the blocks are created here now. And when we're going to query this, so then we can call the peer train code command, not with the invoke, because we don't want to make an order action to start an order action. So, and when we query something, then we query only a specific organization or a specific peer and then and which we are going to query. This depends on this environment variables. So, when we change this environment variables to R2 MSP and the corresponding paths here, then we can query the second organization with this. So, that's in this simple scenario, it's simple because both organizations are running on the same machine. So, in the real scenario, I think this is not the real scenario. So, when we have the real scenario, then we will have the organization one in the first data center and the organization two in the second data center. And we have connected these two networks, maybe over docus one or other overlay network techniques. So, and but here in this test scenario or in this trainings environment, we can switch with the environment variables and then we can query different organizations. And yeah, and then we now we can look what is there what we have here and you see you can in your queries, get all assets. So, your response is a JSON format, which we pass to the JQ parser. And we see here this nice output. And we can query a particular asset. So, when we say the asset one or the asset two. So, here the last one is the asset six. So, we change this to six. We copy this. And you see as a six color by size, 15 owner Michelle and a price when you is attending. And that's the difference between an invoke command here and the query command here. So, and we can create a completely new asset. And for this, we call a particular function in the chain code. So, we cannot create an asset. If there is in the chain code, if there is not then create asset function. So, and that's the band depends on the chain code container, which functionality is implemented here. So, it doesn't matter what the chain code here is and how this work. So, the only important part here for now is that we know that we can only the query invoke only function which are implemented in the chain code. And that's the reason why the chain code developer or the maybe also the back end developer from the Node.js SDK has to know which functions are available and which they can query with Node.js with the Node.js SDK. And also the operator, the system operator, when they try to test something, they have to know what is implemented. And so, and that's the reason why it's important to look into the chain code and see what is the chain code for which methods are implemented and how we can use this. So, because the function name is the one part, and then we have arguments. So, and all arguments delivered to the function through an string array. So, this is, you can see here. So, and when you call a function, then you have here the function. So, here you have the function create asset, then, and then you have arguments. And these arguments is a string array. So, also integers here are string arrays. So, also here are when you have double or flows. So, when you have other primitive types here, then you, because that's, I think that's the reason why it's a chasing structure and this has to be strings here. And then, but in your chain, in your chain code, you can convert this then to an integer or to whatever you want. So, and you can have here also objects. So, when you're, when you look like this, this is an asset. So, and in the goal length, you see here, this is an struct. So, an object with these properties. And you see here that this is the internal name. And then you're actually chasing representation, which is used from chasing. And, but when we see here, when you see this, this, this, not the init ledger. So, what I have mentioned earlier. So, and when you have here the put state. So, that's, that's the key and the value. So, and that's the end we have in this blockchain an asset. The asset is the ID and the asset chasing here. That's the value from this. And that's the reason why it's so important to see what is in the chain code and how we can call this in this way. So, okay, let us create a new asset. So, this is the asset 7. So, and you see that the term is created here. And then so, and now we are, we are on organization one, when we query this again, so I will show you in this way. So, we query this again. So, and look at this here. So, when we see, you see the query finished chain code basic, you see the query here is PSU organization one. So, now our query command has used the peer one, the PSU from organization one to query this information. And now we are going to change this. So, we make the same file organization two with the wide environment variables. So, but with the change here. So, and here you can see that's basically the same like any organization one file. But here we have organization two membership service provider ID. And we have also, they changed paths to the organization two. They are PSU organization two TLS certificate. And here to the administrator. So, the membership membership config path, that's important path for us. So, fabric is a permission blockchain system. And the question is, what does the permission mean? So, where the permission came from? And that's the reason. So, here the admin is an admin is needed to do some things. And this is the membership service provider path where all the certificates are included from the admin. So, and we work here as the user admin at organization two example.com. So, then we call this now, when we look at the court command, we see this is changed. So, and with this environment variables, when we call in all the same command like before, this one to read the asset seven. So, the peer command will use this environment variables is here to query this chain code. And here you see the query is now on PSU organization two example.com. And now we have changed the situation. So, now we have created organization two. And you see, we have the same information back then before. Yeah. So, and then, okay, the time is a little bit is flowing away. So, I think the transfer and asset chain code invoke command is basically the same like the update, but it has only limit, a limit functionality. So, it changes only the name of the asset seven. So, we can do this, we call this. And you see here the owner is Roland, and now the owner here from this you will see is Joanna. So, and what what does what that mean is that we have updated now the word state of this asset seven. And we have one, we have two versions from this asset, asset seven version one is the original version, this one, and the version two is a seven with this one. So, and in this scenario, we don't see this so easy. So, but when we use maybe couch to be to this, so we can start the network with couch to be then we will see in the in the couch to be administrator tool, then we can we can see very easily diversions. And then we can see that the version number is increased on one. And so, we can see that's not the original version, it's the version in a third version. And I think in the in the 1.1 for version to query the history. So, the, that's a functionality which is provided to the SDK or from the SDK. And I don't know, but I think that's the same in the version 2.2, but I'm not sure, but I think that must be the same. So, when we are going to do to query the history, then we I think we have to use the SDK for this. So, that's I think it's not possible to from this year. And okay, so and then the delete, I think it's the same. But the important part here is that you have here to call the function, yeah, with a function name, and you have an arguments. This is a JSON structure. So, this command is always a JSON format. And we have here two elements in. So, we have a JSON with the key function and the value of transfer asset. And that represents the function name in the train code. And then we have an argument which is called arcs. And that represents a string array. And then this string array, we can deliver some information inside the transfer asset chain code function. And then the chain code has to work this and have to work with this. So, and you see, we are feeding the owner and then, yeah. So, but I think you got the idea. So, for now, it's important to see this is the chain code, the chain code is working. And how we can call different functions from the chain code. Yeah. So, and then we can leave this. The cool thing is that when we use a Tmux, this terminal multiplexer, we can detach from this session. And you have here a running Tmux session. So, and then you can leave this machine. And when you come later back, you can attach, well, we attach to this session again. And you have all this, everything is in place. So, you can do your queries again. And the thing is working. So, okay. And finally, we can bring down the network. So, and that's also a good thing. So, when we call the down command network from the network script, then everything is closed. All Docker images are deleted. We call Docker PS. You see nothing is running. And Docker PS 8. And you see also no expired containers are running or broken containers are running also in the Docker network. You see there is no Docker network. The default Docker network is also replaced. And also the volumes, when you call the Docker volume LS command, and you see no volumes. So, that means your blockchain is gone. And when you start it again, you can start with a completely new version and try a different configuration. So, I think that was for my site. If you have any questions, please ask me. Write your questions in the Slack channel or in the chat here. So, and then I hope I, you have seen a little bit from the new version. And feel free if you have any questions now, then you can ask. And if not, I wish you a good learning week or good two learning weeks. So, and then next week, we are going to look a little bit deeper in this installation process and especially in this new life cycle process where we can achieve this chain code governance, which is new and one of the new features of it. So, that's for my site. Thank you, Roland. Really informative. Thank you.