 We may see some more people dialing in as we get going, but I think let's get started. So thank you everyone for joining today's meetup to talk about the newest Hyperledger project, Hyperledger Web 3J. This is an Ethereum integration library for enterprises. And today we have Connor, Nishal, and George who will be going through and giving you an introduction about Web 3J. And note that this is just an introduction. If you want a deep dive on Web 3J, we're following this up in a few weeks with a hands-on workshop on Web 3J. I'll share that link, the registration link here on the Zoom chat. So if you want even more information about this new project and you really want to get your hands on it and understand how you can use it, this will be a starting point and then we're going to follow up in a few weeks with that workshop. So I will drop that link and we would love to see you there as well. But thank you for joining today. And with that, I'll hand it over to Connor, George, and Nishal. Okay. Can I just check that everyone can hear me? Okay, loud and clear. Yeah, your audio's fine. Yeah, so can I just confirm everyone can hear me? Yeah, yeah, your audio's fine. Cool, cool, perfect. Okay, so yeah, so thank you for the introduction there, David. It's really exciting to be having this session today because I guess Web3J is a project that started a number of years back and to kind of see it now part of Hyperledger as well, it's a nice home for the project. And so I'm gonna unpack a little bit of history about the project and everything else to give some historical context and then we can get into the technical content that I'm sure many people here are interested in learning about. So if we just move on to the next slide. So yeah, the agenda today got an introduction, but I think the exciting part's always the getting started and seeing the demo and these sorts of things and just coming away with a sort of overview of the project as a whole. So you can kind of see if or where it's applicable to you in your day-to-day work because with open source, we build this for the developers and users. It's stuff that we want it to be useful for everyone so hopefully after today's session, you'll have that firm idea about the project. So if we keep moving forward. So a little brief background about myself. I come from, I guess, an institutional finance background always on the technology side though. I'm a technologist first, that's what I have done throughout my entire professional career, but after working in more, I guess what people call TRAD5, traditional finance, I got very interested in blockchain in 2016. At that time, there was a lot of talk about blockchain technology and the transformative potential. And when I started kind of peeling under the hoods, I came across a Ethereum and I think the thing was is that Ethereum in my mind reminded me a lot of Linux in the early 2000, well late 90s and early 2000 period, those of you who've kind of been in the tech industry for a while and the parallels there that struck me were that there was this transformative technology but it had this amazing community of developers around it and that was in my mind, what made Linux so successful. Yeah, it was a great technology, it was open source and so on, but it had an amazing community around it. And I always felt with when I got interested in Ethereum, I felt a similar thing about it and that's really what kept me interested in the space because I really want to see this technology flourish and with all of the work that's being done within open source communities as well, it's just a wonderful thing to be a part of. I was lucky when I started playing with Ethereum, I saw there was this kind of clear gap that existed and that was that for people who were working on the JVM, there wasn't really an easy way for them to work with Ethereum technology. You had JavaScript libraries, you had like a Python library, you had .NET library but there wasn't anything for the Java community and so that was really the genesis of Web3J and I released the first version of that back in 2016 and then the following year later founded Web3 Labs. In the years since, I was very involved in the Enterprise Ethereum Alliance, so responsible for chairing the working group that developed Enterprise Ethereum client specification. I also wrote a book called the Blockchain Innovators Handbook which is there available on Amazon and so on if you want to have a read and there's a podcast as well Web3 Innovators that I did for a number of years. We can move on to the next slide. And I'll let Nishal and George each introduce themselves now as well. So George, do you want to take it away? Sure, thank you, Connor. So I am a senior software engineer. For the past seven years, I deal with several systems in different industries like Parma, Carer Manufacturing, Finance, but for the past two years, I've been with Web3 Labs and I've just worked especially with blockchains and different type of blockchains but the most I've been involved with Web2J and I'm as a maintainer and also I work with Corvda and other different other blockchains. And yes, Nishal, if you'd like to step in. Oh yeah, thank you, thank you George. So yeah, I'm Nishal. So I'm located in Bangalore here and working with Web3 Labs for the past one year. So I have like more than three years of experience in blockchain and Ethereum and like I have been developing or like work with VMware also past the previous time and work with their Concord VMBC and then currently I'm maintaining Web3J along with George and it's really nice to have you all this on this call. Thank you. Cool, thanks guys. So just to give a brief background about Web3 Labs, we're a decentralized infrastructure solutions provider but there's really, there's three things that we do as a company. One of them is our chain lens blockchain explorer and analytics platform. So I'm sure many of you are familiar with blockchain explorers but chain lens is a blockchain explorer that's very focused on being fast and providing a clean user interface for working with blockchain data and accessing information such as tokens and so on. We're working with it on EVM and compatible blockchain networks. Then of course we have Web3J which we're going to be talking a lot about today and we also, we work on Hyperledger Basu as well but Basu is both a user of Web3J and Web3J is a user of Basu and so there's this a nice reciprocal relationship between the two projects there. We've worked with a number of customers over the years but let's, we will keep moving because we will want to get into the more interesting stuff about the project. Okay, so just to kind of tell you at its heart what Web3J does and this kind of goes back to what I spoke about at the start with respect to when we first started working with Ethereum technology, there was just, there wasn't a way for Java developers to easily integrate within Ethereum clients. So when we think about blockchain networks they're made up of a number of distinct clients. Those clients are responsible for processing transactions producing blocks and the actual consensus of the network. Now the Ethereum networks evolved over the years and there are in fact two clients on public Ethereum networks that have been used here a consensus and an execution client but just to think about it in more simplistic manner I think the important thing is, is to think when you integrate with a blockchain network you need some sort of software to connect to a client on that network to integrate with it. And this is what Web3J facilitates. So you take your Java or Android application you use the Web3J library which talks behind the scenes using a protocol called JSON-RPC to Ethereum clients. But the thing is, is that certainly what I found was that it started off being just a sort of straightforward protocol type implementation. Here's this JSON-RPC protocol and this implement in a Java methods for that but then you sort of start going down the rabbit hole and discover that there's all sorts of additional functionality that you need to take care of. So you need to think about if you're working with a smart contract for instance how do you convert native Java types into types that are compatible with the Ethereum virtual machine? How do you sign transactions, create Ethereum wallets ensure that you can guarantee delivery or provide optionality for that? What about if, you know where are the keys being stored that you're using? There's this myriad of different things that come into it and what this meant really was that Web3J grew a lot from its sort of humble beginnings to providing much more, a lot of fuller functionality to support developers in the different tasks that they had there. Can you move on to the next slide please? So Web3J, it's had a nice amount of traction over the years and so like I said earlier it was initially released back in 2016 in September and it's been downloaded over two million times since. This is a very conservative estimate because when you have these downloads that's from package repositories such as Maven Central and so on, there can be a lot of it can be slightly misleading there. So we tried to err on the side of caution rather than just put the biggest number we can find. The project's close on 5,000 GitHub stars almost 200 unique contributors, over a hundred releases over a thousand result issues. So I think this is an important one to draw attention to as well because it shows that people raise issues but also the Web3J team aimed to respond to those issues and actually deal with them and ensure that they can be closed off. And it was at the beginning of this year in January we got the green light from the Technical Oversight Committee to actually donate Web3J to Hyperledger at the start of the year. Okay, so to talk a little bit more about why we want to work with Web3J and the JVM from my own experience working in enterprise going back to the early 2000s. So you had two decades where a lot of large organizations had, well, it would have been hundreds of thousands of developers, possibly millions across them working on the JVM platform building a lot of core enterprise infrastructure with it. And so what this meant is that you've got enterprises with a very significant skill base on the JVM there. And so that's the group that we wanted to cater for. But the reason why, the nice thing about the library having been around for so long is that it's been very heavily battle tested. It's been out there in the open since 2016. As we saw from the previous slide, lots of people have used it and contributed to it and everything else. And of course this is, I think what makes free and open source software such a force for good because it is open. People, if they find ways to improve upon it or also find issues with it or vulnerabilities or whatever else, that stuff's out in the open. It's not sort of hidden behind closed doors. And so we have a high degree of confidence in the quality of what is there. The type safety is another crucial thing. I know many, many people over the years have had the whole static versus dynamic typing debate. But I think this idea of being able to safely from the perspective of a developer ensure that they can work with these Java types and get in translation through to native EVM types. Using the library is a very powerful thing because it just takes care of a lot of the lower level complexity there. We've done a lot as well with testing there too in terms of finding ways that you can actually unit test codes to execute on an Ethereum virtual machine within the confines of your ID or your standard unit test without having to go off to a blockchain network. And so these are all things that just have made the developer experience a lot better. And it's a very modular library and it provides, you've got specific support for some of the basic API there as well and some of the other Ethereum clients. Keep going. Yeah, and here I would like to step in and to give some of the reason for which Web2J had all of that attraction that was mentioned to Slice before. And that is because some of the key features that are mentioned in here. And I will start with the first one which is one of the most important and that is the full support over the Ethereum JSON RPC client API over the HTTP and APC which means that we can make a RPC request using the methods as 80 Ethereum send transaction in Ethereum estimate gas or transaction pools or transaction pool status or all the other specific Ethereum methods that are available for the RPC call. Also can interact with the account and the account means smart contracts or wallets and that interaction can be done via the key store file or directly by using the private key of the account. The most used functionality that we can mention is that this library is able to generate the Java smart contact wrappers to create and deploy and also execute the transaction by calling the smart contracts from the native Java code. Other cool thing is that Web2J is up to date with the most important Ethereum implement proposals. Some of them, for example, are the AP155, IP1559 and IP2030. And also last but not least is the IP4844 and for this it's the first in any Web3 library that was added for now in order to be supported. As you can remember this AP, it's still very fresh as it was adopted last month by some of the networks. The communication with the hardware security module is facilitated by this library throughout some interface methods that are being disposed. And also there is a version of this library that gives Android support. Also it supports the Ethereum name service discovery and one of the smartest things that I can see as a software developer. It's the CLI version for this Web2J library that is really handy when you want to just speed up the development work. In terms of supporting networks, Web2J can interact with both public and private networks but the requirement that will be for that network to be EVMs or at least EVM compatibles. For example, we can see as EVMs some of the networks that are mentioned here, but also just to give you an example of an EVM compatible network will be Avalanche. That we also worked on and used Web2J a lot on. Also in terms of roadmap, few of the things that we are aiming for to do in the next quarter are to update the Web2J Android library with the last EVM features that were adopted also by the main Web2J library. There is also an IntelliJ Web2J Solidity Debugger plugin which allows to debug smart contracts calls and to see the stack as we can see it, for example, in the remix, but it needs to be enhanced in order to improve the user interaction because right now there are some minor settings that needs to be done in the IntelliJ in order to be able to use it. But it's still working and if you'd like to find it, just can go and get hub and pick it from there and for sure it will work. Other thing it will be to implement the support for the account abstraction. And also right now the way that we use, the way in which we are generating the contract ropers, the Java contract ropers more exactly is to create a static inner class for the struct type. But this is not that handy when it comes to interact in code and to just speed up the course and everything. So for this, we are looking at that in the next quarter to add a generic struct functionality to facilitate the interaction with the Java smart contract ropers. And hopefully we will see all these implemented in the next major release which will be web to J5. And in order to get started, I will pass this over to Nishal. Thanks, can I share my screen? Sure. I hope it's visible, right? Yeah, okay. Yeah. Okay, so thank you, George. Thank you, Connor. So right now the first step is getting started with Web 3G, right? And basically there are two ways to get started. First is Web 3G CLI. So we have very easy to install and use CLI tool which we can create new projects, generate Java wrappers, create Ethereum wallet and do all those things. The second way is to include it in any Java project as a plugin or as a dependency, right? And we support both Maven and Gradle. Okay, so first talking about the Web 3G CLI. So you can easily download it and install Web 3G CLI in any platform or OS that is Windows. So for Windows you can, you have this command basically and then for Linux or Mac OS, you have this command and it's very easily it gets installed. But yeah, there's a pay request that you should have Java 17 or else it won't work. And once you have the Web 3G CLI installed then you can create a new Java project and it's a simple command Web 3G new and you can currently we have default projects like Hello World, ERC 20, 721 and ERC 777 also. So it becomes very easy for any developer to get started with Web 3G CLI. Okay, so that was about Web 3G CLI but as a project dependency, we have like, you know, if you have already have a Java project and you want to include Web 3G in it, you can directly in Gradle, you can include it as a plugin and dependency and also we have support for Maven. So we are going to share all this code and also in the docs, we have all the information. You can check it out. And also in the demo, I'm going to show all these things. And so when we talk about, you know, Web 3G, what the, you know, the most valuable point of Web 3G, like what's the most interesting thing? So I think the best thing about Web 3G, which all the developers love, is it's the ability to create Java wrappers, you know, out from any solidity smart contract. So if you have a smart contract written in solidity, you can create Java wrappers out of it automatically. So you can, you know, interact with it or the smart contract directly in Java language. So it makes very easy for a developer to create their own Web 3G project and in very, very less time. And they don't need many, like much experience with Ethereum, which it becomes very like for any new developer to, you know, get started to, you know, get started easily with Java if they know Java and they don't need to get too much into the details of how, you know, like how to create, like how to interact with the Ethereum client and all those things. So in the background, we create Java wrappers for all the solidity smart contract. And also like how it does it, basically we have the solidity code. So it converts, it compiles it using the sol-c and to bin and creates the dot bin and dot ABI file. And once we have that, you know, dot bin and dot ABI file, it uses it to create Java wrappers out of it. And I'm going to demo this all. So don't worry if you are not able to understand right now because like, yeah, in the demo, I will explain it again. And the other thing, so once you have the Java wrappers, the other thing, you know, for the developers, they face problem is testing the smart contract. Like if it's working properly or not, if whatever they are inputting, they are getting the right output and they are not facing any errors or anything. So in WebTJ, we can, you know, directly create, so it basically helps to create Java writing, basically Java test wrappers. So you don't need to worry about writing test cases for your smart contract or WebTJ unit, it makes it very easy and fast to test the smart contract, by generating these wrappers. And you can quickly test it. So if you see, this is the annotation, like EVM test, and you can provide the type. So like it basically uses JVM to spin up all the nodes. So if you want to, you know, test it with BESU. So if you have your node type dot BESU, it will automatically run up a container, a BESU container, and run all your smart contract test and give you an output. And so this is very, you know, you can quickly test your smart contract. Okay. So once you have the smart contract tested and you have, you know, the smart contracts, so the next thing is to deploy it on a basically network, on a production or a test network, right? And so this is the code, basically, it is very easy. After we have the Java network, we just need account details, like credentials. We can use like wallet, password and wallet path for it. And even we can give a private key so it will create a credentials. And then we just need a JSON RPC endpoint of an Ethereum, right? So suppose we have like main net, so and we have a JSON RPC node already running. So we can use that endpoint and give it to here, like HTTP service node URL. And using this, it will create a WebCJ object. And once we have that WebCJ object, so suppose, hello world, this is a smart contract, right? So we can deploy it very easily. You just need this WebCJ object, the credentials and whatever input we have, and then we can send it. And it will deploy the smart contract and then we can get the contract address basically out of it. And once we have it deployed on a network, on a test net or on the production on main net or any other SQL net test net. So we want to interact with it. So our users can use that smart contract, right? So there are, so if you have deployed, you can directly use the contact address out of it. And because we have all the Java wrappers, it basically what it does, all the functions are converted into Java functions. And you can directly call this Java functions and interact with your smart contract. And also like after this slide, I'm going to demo it. So it will become very easy for you to understand. And for whenever you call a function, you will get a receipt or transaction receipt for that transaction. If it was successful of it, it failed. So basically, you can get an, basically you can wait for the transaction receipt and get it to investigate. Like, okay, what happened to my transaction and all those things. Okay, so I will switch for the demo. This is my terminal. So first of all, we wanted to get started with Web 3J. So the most easiest way is to download the Web 3J CLI. So that's what I'm going to do. Although I have already like installed it, but I will still show you. So it basically downloads it and then it checks if we already have the Web 3J. And as you see, it's already latest version for me 1.5.2. So we don't need to install it again. I will show once more the version. So it's 1.5.2, right? And then we can check help. So to create a new project, we can directly call this command Web 3J new. So basically right now we support Hello World. That's the basic smart contract then ERC 20, ERC 721 and ERC 777. And also you can directly create a new project out of any authority code you have. So it will basically create Java Rappers for that. And so right now for just basics, I'm going to create a new Hello World project. So it will take some 20, 30 seconds to create the project. So if you see project successfully created and I will switch to my IntelliJ basically and open the project. And if you have any questions, please stop me there and you can ask me. And George also, like if I miss anything, you can stop me also. So I can, okay. So I will open the project. So we will quickly go through all the files, the project structure we have right now. I hope it's visible. So if you see in the build.gradle, there's a gradle project. So we have as a plugin Web 3J version is 4.5.0, that is the latest one. And then in the dependency, we have already added the Web 3J port. So there are many modules modules in Web 3J for crypto code gen. So if we need anything else from port, so basically port provides all the major things basically. And if you need any other module, you can include it also as a dependency. So this is the gradle. yeah. Build.gradle, now I will switch to my solidity port, basically what solidity port we have. So this is hello world.solidity. And if you see, we have normal string, greet. And in the constructor, we will give a string and it will store that. And if you want to change it, we can call this view to greetings thing and to get the greet, like what is the message it is stored right now, you can call greeting and we will get that string basically. And so now I will switch here. And in the task, you can see this Web 3J, yeah. And you can see two options, generate contact wrappers and generate test contact wrappers. So I'm going to, for this solidity code, I'm going to generate contact wrappers, right? So it has created a contact wrappers. It is inside a build. And if you see generated, this is the generated contact wrappers. So now what it does basically, compile this solidity code, this is the solidity code. We have the dot pin and dot API and it creates this Java wrappers, right? And if you see, we have functions like deploy. So here is the load. We can load any, load the smart contract. We can deploy the smart contract. We just need to call these functions. It becomes very easy, interacting with Ethereum client and getting started with Ethereum development. And if you see, we have this function also greeting. So we can get, so this was the function greeting and it returns this grid. So we get this, basically, we get the grid result, right? And then to get, to change the greeting message, we had that new greeting. So we just need to provide the new message or the new string and it will call the function, right? It becomes very easy to interact and we don't need to, you know, understand like how solid it is working and we don't need to deal with that, those things. So once we have this Java wrappers, we also want to test it, right? We want to test our smart contract. So we have the test wrappers. If you go into test, then we have hello world test. So if you see, for all the methods, new greeting, greeting and deploy, we have the test cases, right? So we can call this. So I will, first, if I don't provide any node type, it will use the embedded EVM. So I will, I'm going to show you both, like with the embedded EVM and also with the PSU. So if you see, the test was successful and we can see all the results here, all the lags, all the logs and I'm not going to dig deeper into this, not to, yeah. So we can, so all the tests of like tests are working fine. So whatever we are, like giving the new greetings, the tests are working fine, right? And if I suppose want to test it on Beisu, so I just need to give the type and node type.beisu. So what it does, it basically spins up a Beisu container, Docker container and runs our test on this. So it's really, it becomes really easy, you know, to test it on a real, real environment. So I'm going to test it and we're going to go through the logs. Okay, so test completed on this, going through the logs once. It's too much logs because of that debug thing. Debug flag is on on the Beisu. Okay. So if you see the Beisu started, this is the Beisu version, that is 23.7.1 and we have the own Genesis file and htb port is 8545 and it's using the Java 470, right? And then if you go a little bit below, the network has started. So these are the calls, basically this is the JSON RPC call we are going and this is the result we are getting. And if you see below, they are like blocks produced. Like if you see, this block has been produced, block number three, block number four. And we are basically, we are sending the request getting the result. So even you can see the transaction receipt, right? This is a transaction receipt for one transaction. So it becomes very easy to test it because it automatically creates these test cases for our smart contract. Okay. So there are no questions right now on that. So once we have the test, we have the Java wrappers. I will go to the main Java code. So this is our main code. Basically using this, we can deploy a smart contract and we can interact with a smart contract if you want to deploy it in a production network. So node URL, I'm going to comment this out. I'm going to give my own, I'm going to start my own Ethereum network. Let me just go to that. Okay. So we have this forum dev quick start. So I'm going to use that to create, to quickly start my network. So what it does, it basically needs what version of BESO we need and which consensus algorithm we need. So currently I started with our QBFT. And if you see all the dockers are up and these are the HTTP end points. So RPC JSON RPC endpoint is at 8545, right? So we are going to use this endpoint to send any request to this network. And let me just show the containers also. So these are the containers basically BESO. And then these are the explorer and then validators, three, four validator nodes. Then one RPC node is the RPC node. We are going to use this to send our transaction. Okay. So let me just give. So these are basically node URL. And I'm not going to use the wallet path or wallet password right now. I'm directly giving the private key. So we can create credentials out of it directly. And for the private key, I'm going to take it from the network we have just created. This is the Genesis file. And I'm just going to take this private key because we have the balance this much. And now we can deploy our contract. So to deploy a contract, we directly, we have this hello world, right? So we are going to use that function deploy this one. And for this, it needs web3j object. Yeah, it needs web3j object credential and the gas provider. So we are going to use default gas provider and whatever string we need to initialize it with. So right now we are initializing it with a hello blockchain world. So as you know, in development field we have, the first thing is to do hello world. So we are going to do hello blockchain world. After that, we can get the contract address once it is deployed and we can get the result out of it. First I will run this, you will understand. So yeah, it's deploying the hello world contract. If I go down, yeah, too much debug. So first is deploying hello world contract. Then we are going to get the contract address. Let me just find it. So this is the contract address it printed. And then to get the result, so this is the result hello world blockchain, right? So this is what we are given as the initialize, right? Now, if you want to, in this already we have, if you want to give a new, basically greeting, right? So we need to call this new greeting. Now, what I'm going to do. Nisha, just one second. Can you go please here in the log to, because it should be somewhere trace with the gas that was consumed because we have a question about that. Yeah, sure, sure, sure. So basically, if you want to use, to check the transaction in SIP, so if you see the gas used, so this is the gas used to deploy this contract and this is the effective gas price. So we are using actually the default gas provider. And if you see, these are the values for it. And you can give your own gas price and gas limit. So if you want to calculate, read or estimate gas, so you can call the estimate gas API and you can get the gas limit and their gas price. So right now to simplify everything, I'm using the default gas provider. So this was the question, right? How much gas it was used? Yes, I mean, the question was about if there are any gas fee, but yes, there is a gas fee and this is how much it took for the transaction. Yeah, so basically right now I'm running a PSU not in the gas remote. So there will be some gas for it, some gas price. So this was effective gas price we have created. But this is just my test network. So it's not my ethereal or anything. So now, right now what we want to do, we need to create a transaction and set a new greeting, right? So we need transaction receipt and I will just call it transaction one. And we have this object. So I will call the new greeting thing and we just need to give a new greeting. So I can say, hello George, maybe. We'll try that. And I will, okay, so I will send this and if I, when I will send this, I will get a transaction receipt. So I can print that one. So it will print the transaction receipt for me. So I will run it again. So it will again deploy the smart contract and initialize it with a greet with hello blockchain. Then I'm going to do a more transaction of hello George. And then we will get the transaction receipt. So using the transaction receipt, we can understand. So if the transaction was successful or it got filled. Let me run this. Okay, so we are getting some, I think it is the Kotlin version we are using here. Okay, so I think it's due to the Kotlin version we are using it right now. You can try to change it in there. Just go up and switch to one, eight, 10. Oh, here. Let me just change my Kotlin version. Let me run this again. Okay, so yeah, it has started. And first we will try what's the contact address deployed. So right now it's deploying the contact, I guess. Yep, called the contact address. So our smart contract has been deployed to just a contact address. Then let me find the, what was the initialized. So we initialized with hello blockchain world. And then we tried to change the, basically change the result. And let me just find this is a far transaction got successful or not. Yeah, so this is the receipt. And if you see a transaction status, it will be, yeah, zero X one. So it means a transaction got executed. And so it must, so it has been updated to the hello, George. And actually I forgot to print that also. Let me just do that again. And also, if you know, yeah, I will, I was about to say that maybe we can try to load the contract from the existing address and to just call the greeting method to see if, like, I mean, the users will be, see another approach like this. Yeah, so what we can do instead of like, we don't need to deploy it again and again, right? We can load the hello world also because we have already deployed it and we can load it from there. So we have this load. And for this, we need to provide the contact address. We already have the contact address. We'll just copy it. Then we need credentials, we have credentials. And I'm going to use the default gas provider. You missed the Web 3J object. Okay, okay. After string, we need Web 3J. So we have also basically what I'm doing because I have already deployed smart contract once. I don't need to deploy it again and again. I will reuse that smart contract. I will load it. So for that, I need to provide the contact address, the credentials, Web 3J and the gas provider, right? Once we have that, I will again, like, check if this is the same contact address or not. I will print that and the greeting method result. This time it won't be a hello blockchain world. It should be hello, George. So we will test that if it's correct or not. And let me just comment on this. So let's test how it works. Okay, so if you see the contact address, this is the same contact address which we have provided. So it is the already deployed smart contract. And then if you see the message, yeah, it's hello, George. So we can see how easy it has become from getting the solidity. So if you have the solidity file, you can create Java wrappers for the solidity file. We can get the Java wrappers or these are the Java wrappers. And these Java wrappers provide every function to deploy your smart contract, to load your already deployed smart contract. And then you have all, you can all call all the greeting method. And if you want to give a new greeting, you can call those method and you can get the transaction. And I think, oh, yeah, that's it or anything else. You have any question or anything else you want me to show? Well, we received a question if it supports best of private transactions right now. Yes, it does support, but we won't do it in this demo. We'll do it in the workshop that will be in one month. Yeah, so there will be a workshop in after a month. So we are going to go in depth in that. And just to show you, like we have the support for private transactions. So we have this integration test in Web 3J. And I will just go through that, just to give you an idea. So basically, this is a test test. So we create a privacy group. So if you see, we have the privacy group. And then we can basically check Alice transaction. Basically, once we have the privacy group between Alice, Bob or Charlie, right? So we can do a simple private transaction. So if you want to get started, get anything like how to write a code can go through these integration test. So this is the basically group. We can provide the group name. This is between Alice Bob and Charlie and we will do a simple transaction. And so this is the private transaction we are doing. And if we check like anything, any other node, if it tries to get the result out of it, it will get an activity. So I won't go much deep into it, but yeah, we can do a base private transactions. And even on Quorum and base, it is supposed both. So I will go back to this project. Anything, any other question we have? Not so far. Yeah, so we can basically take... Wait, just, sorry, we just received one question. Yes, and also, I mean, the ERC-20 tokens are supported, but also you can generate a new project using the Web2JCLI that it creates automatically the Java wrapper for the ERC-20 contract. So yes, it is supported. Yeah, so as you have seen already, the Web2JCLI, so we have a support for ERC-20 and ERC-21 also. So let me see if I can, it will take some time to generate, but let me show you that. Just close this project. Let me create a new ERC-20 project basically. So basically using this, we can create a new ERC-20 project and we need to enter the token name or let's give test token then token symbol or TST and then initial supply, I'm just giving a random value. So it will create a ERC-20 project directly and you can or test it out and you can deploy the ERC-20 contract to any network. It becomes very easy for developer to get started with the Ethereum development. So it has, if you see, it has already created the project. Let me just import it. I will open the solidity contract. So there's the ERC-20 contract we are using from the open zip link directly and we can see all the Java wrappers for it. So if you see, we have the events, we have the, we can basically transfer, approve, do the aligns, check balances and get the total supply, all those things directly from here and it becomes like really easy to get started with ERC-20 and also we have support for ERC-721 and ERC-777. So this is the sample of quotes. You can test it out. You can do all those transaction, transfer tokens and everything. Is there any other questions? No. Okay. So there's a question like how the, how the non-spanagement is done? Yeah, so that one in the chat, like it's done throughout the course through the network and based on that RPC course, it will retrieve from the network for the next expected nones for the privacy group. And also like if you need, if you need to give the non-spanagement by yourself, so we have different transaction managers also, like fast transaction manager. So basically in fast transaction manager, it handles automatically. And if you don't want to use that, you can use default gas manager and it will, you can give your nones directly like whatever nones you want. So even ERC, like nones management is done with the, within the website. You can use that. Yep. So shall I stop sharing or anything else that you want me to cover? We got a new question and I will answer that one. Yes, that's true. You can, you'll be able to obtain all the access to the network with Web2J, I mean throughout the request. Okay then. And even like if you want to learn more or get more insights, like how to do other transaction, how to dig deeper and get advanced. So we will talking about it in workshop. So you can attend that workshop and learn about it. And so I think it's on March 28th. So don't forget to register for that. Yeah, just stop sharing. Okay. And just to continue, I'll just go again through the summary for the demo. We've seen how to interact with the Web2J and how to use the most handy tool which is CLI. We also seen how an ERC20 project is generated and how the wrapper looks like. And also for all these, and I mean, you can also, as Nisha said, you can also use the CLI, but you are free to use the Web2J as a dependency and take from Web2J any module you need because Web2J is doing a lot of things and obviously in order to be able to take only what you need, we split that out into the models. And just to give you an example, we have the core module that is doing the RPC connections and RPC calls, but we have also the crypto modules, which is doing the handling of the accounts, signing and hashing of the functions. And also just to, don't lose my idea, just to go through the summary, we interact it with the Ethereum node with the best one of more exactly that Nisha has been up on his local network and deploy the contract. And also what we did was not only to deploy it, was also to load the contract from an existing address and to still continue to send transactions to it. And now in terms of getting involved, if you notice anything, please don't hesitate to let us know, especially more especially if it's a bug or even if it is like a small typo or anything that you guys think might be improved. You can reach out to us by creating any GitHub issue or go directly on us on Discord. In order, here you have some QR codes, one for GitHub and one for Discord. One thing in order to be able to get to the Web3J Discord, you first need to join the Hyperledger server. Then only after that, you'll be able to see the Web3J Discord channel. One other thing, if you intend where you have any idea about a great feature that might be added to Web3J where you have maybe an existing PR or work already with Web3J on the side and create your own repo and you added some stuff in it and you think it might be worth to add those to the main repo, please create as many requests as you want and we'll try to take care of those as app. And yes. So... I was just... So you had George and Nisha, well, one other thing quickly, and that's just to say, we're looking for more maintainers as well, like as George and Nisha have given you an amazing overview of it and there's plenty that's still happening, but now that Web3J is in Hyperledger, we really want to find, get more contributors to the project. Hyperledger is all about bringing more and more companies to contribute to this open source. And so we're at this... It's kind of a good period right now because the project's only just come in, it's going to be easier to sort of get involved than it will be a year from now, say, once it's more established. So that's just one ask that I have as well, is that please do get involved, contribute, start chatting to the guys on Discord. And yeah, sorry, back to you, George. Sure. And also, I think you can refer to mentioning that because we need some help. There are a lot of things that still needs to be added and to be improved and every, I mean, every small PR matters. Yeah, so this was us Web3Labs. And thank you so much for being here today and taking part to this presentation. And please let us know if you have any questions. I think we have one question, like can we show some filter examples? So let me just show that once. I will stop sharing then. Okay, this is visible, right? Yeah. Okay, so what I'm doing right now or trying to show filter examples. So we have already deployed that smart contact, right? So I'm going to load that. And this is the code for getting the filters. Let me put every classes. So I'll just turn it. So what it is doing is getting all the events from the first block to the last block for this smart contract. So we are giving this contact address there and it will all try to print the old greeting, whatever we had, and then the new greeting. So basically, if you see the smart contract here, we have old greeting and new greeting, right? So that's what we are going to show. So let's see what's running. We have the hello George old greetings. So if you see the old greeting event was hello blockchain world, then the new greeting is hello George. We are getting both those things in here. So this is how we can get all the events, whatever events were generated in this smart contract. I hope this was what's each filter example he wanted. And also like we are going to cover many other things in our workshop. So you can attend that and learn from that. So just stop sharing again. Or let me just go to that. If you have any more questions or anything. Yeah, we received another one. If it can be integrated with the existing Hyperledger Fabric 2.5. I was about to say that I don't know exactly as I have an interact with Fabric. I don't know what that might be. I mean, what would it be? Yeah, actually Fabric, I don't think it works on EVM. So it has its own, or it doesn't, or like Solidity Code doesn't work on Hyperledger Fabric. So it won't work with Hyperledger Fabric. Could you go initial please to the slide 22? Because someone is asking. Because someone is asking for it. And also I think there's a question like what is the real-time use case for Web 3J? So suppose like you have a Java project and I will give one example from my experience. So we wanted to make a blockchain benchmarking app. So we want to benchmark what's the throughput and what's the performance of a blockchain network. Like I'm creating a Basu private network and I want to benchmark it, like how much or TPS we are getting. So we used Web 3J to create a benchmarking tool and we used ERC20 and we can send the transactions synchronously to that network and how many transactions were successful. We can get those responses. So I think we did this last year only in our project and we got around 400 to 500 TPS with 2BFT and IBFT network and we used Web 3J for creating that benchmarking app and it really helped to fast forward all those things and we can do other experiments also. So what if we send batch request? So Web 3J also supports that. So we can create these tools and you can basically deploy your own contract and you can interact with it. So these are the some real-time use cases. You can basically interacting with Ethereum network with Ethereum client. So you can use this library to communicate with it. Or if you want to add anything else for real-time use case. One useful use case will be to just send the transaction to the EVMs like in order to avoid maybe creating some... I mean going through all those type proof all kind of wallets and like getting your finger stacks in there in order to create public or even private transaction. You can just directly use Web 3J and create a simple class and just run it and they really help you. And also as you were mentioning just before as an answer to one of the questions the way that is handling the private transaction the private transaction manager and that one is really helpful in the production environment that in terms of sending private transaction or public transactions to the network. And also other thing where it can be used I also just an example I use it in identity provider and that identity provider more exactly it was a decentralized identity provider and Internet of Things that was using Avalanche. And I used Web 3J in order to interact with the smart contract that was placed in there in terms of as a repository for my credentials. And that was really helpful because I put use in the application that was managing the Internet of Things app the Internet of Things objects I was also able to interact with and it facilitated me the interaction with the Avalanche network and also it can be used with the hardware security module and we got some new questions. Is it possible an example of featuring a new transaction so it is the same like what I showed so basically using this you can get the events from earliest to the latest one and also we have other methods also for filtering in which you know it will continuously check for any events so we will cover all those things in our workshop so don't worry about it and if you need any help we can we have all the docs and those things and so this is the example for filtering the new events and then we have another one if it can create the smart contract in Java and push it to EVM well in order for a contract to be able to be pushed into the EVM we will need the binary code which is the compile the compile solidity code and unfortunately without that it won't be possible to push the smart contract to the EVM could you please initial to a smart contract wrapper to show the binary core where exactly is located exactly here on the line 40 there is the binary and this binary is generated when the solidity smart contract is compiled because what we are doing before creating this smart contact wrapper in Java we are first using the solidity compiler to compile that solidity smart contract to make sure that it's fine and only after that we are going further and in order to deploy it or push it to EVM we are taking from this wrapper we are taking only the binary and send it because this is what it's interested us we have a question maybe if you know initial please answer because I haven't interacted with Fabric and I don't want to give a wrong answer so basically what I understand Fabric is not an EVM compatible network so it won't be possible basically even if you write smart contracts in Java for Hyperlegis Fabric but what EVM basically like EVM networks require is a solidity code right so we won't be able to convert directly Hyperlegis smart contract into solidity basically deploy directly on the EVM machines that's what I understand it won't be possible directly or the same contract because Hyperlegis Fabric is not an EVM compatible do you have any other question for that Fabric I can but yeah we will check Hyperlegis Fabric we will explore that how we can utilize that if it's even possible for sure if it's such a demand we should try that yeah yeah yeah and as I remember I think it uses chain code right smart contract but we will explore Hyperlegis Fabric why just or shall I stop sharing it yeah you can so I think that's all of the questions answered there and so I think we're ready to wrap up cool so as the guys said please do reach out especially on Discord it's a great place to start to connect with the team and we look forward to you know the Hyperlegia community and getting involved with Web3J and continuing to see the project flourish for many more years to come yeah thank you all for joining and I hope we were able to clarify all the questions and if not we'll explore that Hyperlegia Fabric thing and we will get back to you if you have any question you can ping us on our mail or on Discord okay I know that David will wrap up the session now okay thank you bye bye thank you everyone see you thanks everyone