 Okay, so web 3.js, which is like a very core important part of the whole ecosystem a lot of people use it Shortly about me. I build a condimentary system open-source libraries worked as a web designer for like 15 years or so wrote a book about meteor and build the miss Browser and the theorem wallet how it is today now our team is a big bigger than Then just me and Alex we also have Ram, Everton and Luca as part of the team if you're somewhere here, maybe you want to stand up or you're probably standing already on the side There he is. That's Everton So and if the JavaScript API or web 3.js how it's called So I contributed to this as you can see here. This is kind of like the graph of Github contributions, I'm there in the middle this green figure But it was originally started by Jeffrey who wanted to have a simple way to Access or like deal with the node and JavaScript Writing simple scripts to interact with the node building little dabs later than joined Marek He took over the project and basically Build most part of it what is currently the web 3.js. I joined like almost two years ago and Helped refactoring a lot of this under the hood code improving the API and adding additions. I Rewrote or restructured the RPC endpoints to make them more readable more understandable and Basically because Maric is now part of ETH core and working on parity. I'm maintaining web 3.js We've also other contributors Alex there, too And a lot of others actually who also helped out So the main reason of web 3.js is because The node only understand understands JSON RPC So basically what JavaScript or what we're 3.js does is it translates this JSON RPC code Calls where you send a JSON object into something you can actually easily use in JavaScript and it looks like Calling simple JavaScript objects the EVM itself only understand spite code and That's not easy for JavaScript developer and that's probably not easy for most people and it's not really human readable So basically what web 3.js helps is translating These function names through what we call the ABI the application binary interface To something which the EVM understands and to do that you basically take the You take the function the transfer including its parameters You shall three that and you take the first four bytes and this is becomes the function name And then you add the first parameter and you add the second parameter And this you send over JSON RPC to the to the node and this way the node understands what to do in the smart contract And basically web 3.js in the contract object does all of this for you So you only have to deal with JavaScript object. They look like normal standard functions But under the hood it translated to this ABI in web 3.js. You also have a bunch of other Tools and utility functions you can use in the application But because it grew over the time. It's quite messy right now It's it's it grows it grew just over time with a lot of people influencing the decisions And that's why there's time for new web 3.js So the whole idea is that it's Like the way it grew it became to a point where it's it's influenced by so many sites that it's not really easy to use for JavaScript developers and There are certain parts which actually doesn't don't make sense as a as a JavaScript library and It became clear to me that this needs to have a refactor at some point and the community also asked for a lot of features And things and want to have things changed and that's basically what I'm right now working on is like making the new web Web 3.js, so it will be a refactor. It's not built from scratch And it will not completely change, but it will have core pieces changed and Probably one of the main one is that the communication will be socket-based So currently everything is done in HTTP request and this will still work, but it will not work for everything because of the nature of What we do with I will show later that we have subscriptions and subscriptions need sockets So you can either use the IPC socket, which is like your local socket You you use to talk to your note on your computer or you can use web sockets So before we had this concept of the filter and this concept was rather confusing for many people So basically what you would have created a filter Watching for log events and then you watch it and then you get result or the lock at some point but this whole like it's not very descriptive and it's also in the JavaScript world not common to do it this way and It confused people because I thought a I can filter for a transaction For an address and I get all the transactions of this address that was also my first understanding of that function But that's kind of like wrong right it's it's not clear and makes no sense like this So the real way of doing this actually is subscribing to something and with the new logs It's actually even technically working as a subscription So you basically just subscribe to logs to pass in another options object Which can be the topics in this case and then you just wait for the data changes to arrive Web 3.js right now is like a big bulky Library you have to use if you want to use web 3.js in the future. This will be more Split in separate packages where you also can require the large package web 3 Which we have which will have everything you need for your DAB or you only need the utility functions or you only need the ether functions or only this one functions and one big part of the refactor is the Way how we call functions. So we currently had this way of calling function synchronous Which is a terrible idea because in JavaScript when you have synchronous functions Your interface freezes the assumption was that the responses from the node will be so so small that you never have a problem with that But reality teach us that that is actually a problem and it's also not the way you can do that in JavaScript. So From the future on everything will be based on promises but There's this special case in Ethereum that one action can have multiple end results. I Combined that with events and you basically get an promised event back So you can chain it and then will be called once the transactions mind, but you can also Listen for specific events. For example, when do you want to get the transaction hash or like the mind event and in the future? We could add more events. We could add for example a confirmation event or an event for each single confirmation up to 12 confirmations and we can think of way more things we can actually look for What happens on the theorem network with your action you did? The same goes then for other functions the question here is do we need like the events here, too? That's to be seen, but it at least keeps consistency Deploying contracts and the main change is that actually you now instantiate the new contract object using the new keyword You then have a deploy function and this will be the same as the transaction. You basically just get the The promise we solve once the transaction is mined and you actually have the contract address object But it can't the contract address and the contract object attached with the address and yours also have this event So basically you have two ways of doing it and there's also a debate going on should we add still callbacks or not? When you calling methods? So that's actually a better way than we did it before so you basically will call the method You give it all the parameters and because because before we basically mixed Parameters with the transaction object. We had the problem that you could never pass is trucked in As a parameter object because web 3js would have detected this as being the options object for your center action So doing it this way it allows us to basically pass any kind of parameter And it would be clearly only a parameter and then you get an object back Which has different functions like estimate gas which gives you the gas estimation for that kind of call encode which encodes you the The ABI for that kind of call which you could then use and pass it into in the contract for example, if you have a proxy contract or Calling the function or sending the transaction for the function and this again will return a promise or an Events You also will have other utility function, which you right now don't expose But there is very necessary if you want to build more complex application and you want to do things yourself Means you can encode like you get this chasing the face just of a method and you can code the whole Thing if you want to do this in the contract object you already have to encode functions Function you will also have a constructor function, which you cannot call or send transactions to but which you can also encode There's more to come for example like passing instructs return instructs from smart contracts and I would like to get feedback and ideas so my main idea is doing everything which is currently in the 1.0 milestone and Working through it and doing it this way and then releasing an alpha getting feedback from the community and Then we can go on and release at some point a web 3.js 1.0 which Everybody's happy with and which will be hopefully the only breaking changes for the next few years But it will be a few breaking changes, but necessary ones. So your feedback is welcome to get a channel and the issue is ideally and Let's talk about what's what could be next. Thanks Thank you for the end Did you want to take a question? I Can take a questions. Yeah, if I have time any questions for Fabian any questions come on Yeah perfect microphone with the next rewrite you plan on utilizing TypeScript to help Make it cleaner and help to check for standard bugs and things like that. Yeah, it would make sense, right? I want to keep it as minimal as possible if other people want to build on top like something like a TypeScript compiling Version. Yeah, that that makes sense, but I want to keep it as like a bare minimum library Otherwise, it's getting a point opinionated again And then there's a bunch of discussions discussions and other people would then use coffee script and Everybody wants to do use something else. So I stick with the pure JavaScript Anyone else? Okay. Well, thank you very much Fabian