 Okay, so we this is the ewasm breakout session. That's our logo This first time we have shown the logo. Please remember it If you want to take photos, we don't have time for that Okay, thank you all for coming This is all the content we're gonna have here So I'm gonna start with some kind of intro high-level intro and what was amaze, etc And then we dive a bit deeper into The tooling we have the languages we have We after that we go into this really hardcore part of evmc and evmc is like a connection layer between VMs and clients So if you are a client implementer, you should definitely watch that Also probably gonna deep dive a bit more into the interfaces. That's the EI and that's a way to write contracts in ewasm And then the most important part is the testnet So hopefully we got we're gonna have a demo here and we're gonna give you a glimpse how to use the testnet Which is already life? Still good, okay So we blend this part to be roughly 40 minutes and It's really strict a length and time So we don't have time during those to have questions But we did reserve a time like a 10-minute slot after these Introductionary parts to have a longer Q&A section. So please keep your questions to that point Then depending on you know how tired people are we can take like a five-minute break or we can go even deeper with the second block In the second block It's gonna be a lot of research questions and all the really interesting things are gonna happen there And lastly if we still have time we're gonna have a Q&A part after that Okay, so about the ewasm itself. It's just the introduction and My name is Alex or exit on a github. That's how more people know me I've been working on ewasm for a while and I also work on solidity language design in the compiler But first Let's just take a step back and this is just really just a high-level goal and vision We want to talk a bit about so today We still say that we are in a web 3.0 word, but I don't think we are in a web 3.0 word yet You're kind of like in a 2.5 stage and at this stage. We've writes my contracts in the language We write some kind of presentation and a client-side code like the front end and these are done independently of each other And then they are also independently deployed and Nobody nobody has like any connection between these and usually the person working on the contract versus the person person working the front end is a different guy or different girl and they have Maybe don't have too much connection between the two parts. So it's it's not really integrated But I think in that tree all of this should be way more seamless than it is today and I think That this is like an idea how this could look like So basically if you look at This this would be like the dot from from the front end on okay, and there's one single part Called the transfer function, which is the only part which requires consensus So I have marked that with consensus and and if you consider this screen then if you have this in an ID or whatever a Deployment time or the compiler and everything will know that this is the only part which requires consensus That's only part which gonna get to the blockchain and everything else stays outside The benefits we have here is you see all the data and everything in one block You don't have to make these decisions, you know where where it's like the consensus level data Where it's like the front end data and hopefully it will be a much easier decision to see, you know What belongs where because right now we do a lot of duplication And I think that assembly can help a lot in this there are these couple of tools which try to achieve the same thing Victor Maya made a presentation about Luna I think Luna is the name which has similar goals But we tried to to get to there from a different angle now This is just like a high level, you know future vision But what we are focusing here today on is only the consensus layer and how do we get the assembly into that consensus layer? So what is wasm wasm is a executable binary format designed for the web It is designed to be highly performant. It really models a regular computer and Basically, if you take a step back how web assembly came into existence It starts with the web itself So we had JavaScript first to you to create, you know any kind of code Which evolved into web 2.0 with a way more JavaScript And then people started to use other tools like mscripten to compile non-javascript code into JavaScript And that was quite slow because JavaScript wasn't designed for this. So there was this other step called asmgs which The the JavaScript engines could detect certain patterns, which are asmgs patterns and optimize those Now we can optimize this even more by introducing web assembly. We don't need these special patterns So that's that's where that's the reason web assembly came into existence to improve the web As a result web assembly itself is Designed to support a lot of languages. It is really low-level and a lot of languages supporting it There's this awesome wasm lengths repo which lists. I think pretty much all of them. They're like 28 today, but with various You know various level of integration C and rust would be the best ones today But go has to listen assembly script are also usable Because it originates from the web it is supported by all major browsers But ourselves you're not focusing on the web right now We are only focusing about the consensus layer and in a consensus layer We don't want to use any of the web engines and We are lucky because there are a lot of other wasm implementations. We don't have to use web browsers to run wasm There are a couple of implementations in C. There's an implementation in rust by parity. There's implementation in go So we don't have to rely on all this browser specific toolkit So wait it it kind of sounds like Java and JVM, right? It is kind of but it isn't fully one main difference is Java wasn't designed for the web it was designed before the web and It was tightly coupled with the language with Java itself So as a result it really had high-level features and didn't had like a little low-level abstraction It has these high-level features Which tightly couple it with Java's language Now we don't have we don't have any of these in wasm But wasm is designed to be extensible So wasm can actually turn into what the JVM is doing. So one quick example example I want to give you here is garbage collection Today there's like no wasm level support for garbage collection And that means if you compile a language which requires garbage collection all this garbage collection helper code Gonna be in the output as a result it will be big and it will be slow But since wasm is designed to be extensible and anybody can propose Extensions to it. There are proposals to add You know what wasm level support for garbage collection? So maybe that will happen and maybe we get closer to all these features Java has But we at the consensus layer are not forced to take these new features We can stay with the core level of functionality we have today Okay, okay, let's talk it tiny bit about the EVM itself EVM had different design Rules and different goals when it was designed It is really focusing on cryptography. It doesn't really model a regular computer. I believe EVM really has its origins in Bitcoin script Which is only focused on cryptography and you know public keys hashing all of that is So and we don't really need a lot of these things I think the reason EVM is kind of slow could be summarizing these two points It is 256 bit focused So that means all the instructions handle data with 256 bit precision We do calculations with 256 bit precision and we don't need that in most of the time It also makes us high and low level features, which you know probably is not a good idea Now I don't want to go too deep into EVM here But we're gonna have after this two-hour session. We're gonna have a panel on EVM So I encourage you guys to stay for that and learn more about the EVM You know the past present and future of the EVM But the EVM itself does have one big benefit It is kind of small Kind of easy to implement and easy to comprehend a single person can easily write an EVM interpreter and Grasp the the entire EVM You know specification I Think the same kind applies to wasm, but it wasn't specification is a proper specification So it is long and it is extensive and explains every single edge case There's no such specification for the EVM. So if you look at the EVM spec, it looks small and simple But I don't think they differ that much Paul gonna talk way more about this in the second part of the the session Okay, finally we reached E wasm. So what is E wasm? We are trying to marry wasm and Ethereum together But E wasm is really just wasn't we didn't have to change anything in it And that's the beauty of the design of extensibility it has So basically the extensibility we have to add here is we have to expose the Ethereum state access and Modification and access features into web assembly and that can be done without changing web assembly because web assembly is designed to have Way to import external calls and we're exposing all these features as external calls to the wasm bytecode That being said we don't want like regular wasm bytecode to be deployed We do want to verify that the bytecode complies to certain rules we want to enforce The good news is though that you can use a regular compiler which supports wasm and you can compile the code with that You don't need any change there And most of the time you don't even need any kind of post processing But we do have to ensure that nothing goes wrong in a consensus setting in a blockchain So we have this verification step when somebody is supplying deploying wasm bytecode We run it through another contract which we call the central contract and this contract is looking up Certain features which shouldn't be used in wasm bytecode So one feature which always comes up and which is the major one we have to restrict is floating point numbers We cannot deal with floating point numbers right now in a consensus setting So we just reject any contract which uses floating point But in most of the languages you don't have to use floating point anyway for contracts. So this is not a problem The other big part we have to do during this deployment process is to inject metering into web assembly The reason for that is we don't want to have specific wasm VMs which do runtime metering. We still want to use You know generic wasm VMs or at least have the ability to use generic wasm VMs That being said I do believe that we have to have Specific wasm VM implementations in our nodes, which you know are really designed to to work in this environment But they're still compatible with the wasm bytecode Okay, some of the high-level design goals we have followed are It's really just to have an extensible foundation for code execution And wasm is kind of like a blueprint for computational You know describing computation so you can take this wasm blueprint and you can translate it to local machine code That that's how it's designed So I think it's a really good foundation for this We're also trying to tap into a very bigger ecosystem here until more languages, but more We're importantly a lot of more tooling especially regarding security analysis, auditing, etc And there's this point of reducing complexity in Ethereum And how if we are introducing this kind of more complicated thing at least some people claim it's kind of more complicated But there are ways to reduce the complexity in Ethereum by having wasm So what example here I want to highlight is pre-compice. So today with pre-compice every single client has to implement pre-compice themselves With wasm you could just supply a single implementation of this pre-compile in wasm itself And everything each of the clients so that's you know, let's go to be written But one really interesting thing which came up before Defconn at the swarm summit Joel from the light the light client protocol What does LES stand for but that's the light Ethereum whatever But he's the light client protocol person He's designing the entire light client protocol for Ethereum and he came up with this idea to use wasm in there The problem he's facing is in the light client protocol You have to make say you make one query to get like a hash and then you receive more data and then you have to make subsequent queries So it you know bubbles up into a lot of queries. So what you could do is submit a computation in wasm To the node that the node executes that computation that gives you back all the results. So you don't need all these data exchange You can get the node to Get you the data you need exactly So I think that's really interesting, you know direction we could go But lastly a really important point is with wasm. We do get a better interaction With other blockchains. So I'm gonna expand on those a bit later So with the languages itself we are trapping into a bigger pool of languages That being said we still want to support solidity So the solidity team is working on having wasm output and hopefully that gonna happen early mid next year No commitments here though But today we already have a lot of the tooling for you wasm in rust because rust is like the the most mature Language do you have tooling for wasm? But there's this last thing which we also gonna touch on today is assembly script, which is a language similar to javascript and it is We have been working on a framework in assembly script to write contracts And so it's it's really looks like JavaScript. It is easy to use and it's compiling to we wasm Just if you know it's about other blockchains The lot of other blockchains using or considering wasm and if we also do use wasm We're gonna have way more options to do have code. Sorry to have code shared between all of them So I think that's super exciting Okay, just two more things to mention Because we haven't really mentioned like backwards compatibility So we have this tool called runvm or run evm Which is an evm interpreter? compile2e wasm and you can use this in a Entirely wasm only client and you can run evm bytecode on this wasm only client Why evm is a similar tool, but instead of having an interpreter. It is compiling Evm to wasm bytecode that these are early prototypes So if anybody's interested in working at these really cool projects, please talk to us So the next steps we have now is we're launching a testnet and then we are trying to get all of this into the main net But we cannot do that at once So we are trying to get a subset of pre-compile only supported to the main net and then I have the entirety of evm in the main net Even though it said like a goal number four I think Chesper slash e2.0 slash serenity work gonna happen parallel to all of this So that was the intro please check these back and all the code we have join Gitter Create dubs and talk to us Thank you Sorry, I didn't sort of do an intro in the beginning. That was Alex Braxassi. He's our team lead one more round of applause for Alex All right up next. I think we're gonna do demos of some of the language tooling that we've built Paul are you up first? Obviously one of the nice things we get with the E wasm tool chain is the ability to develop smart contracts and a whole host of Different programming languages Alex a moment ago mentioned some of them these include rust CC plus plus assembly script You're gonna we're gonna do quick demos of two or three of these right now and as a first Framework for doing that We created Alex created something called the WRC 20 challenge the W refers to wasm and it was just a Challenge that we put out there a few months ago to build a simple ERC 20 Style contract like a token contract using the various languages. We've had implementations done in eight or nine languages so far I think you can find this in our github repository Get hub dot github.com slash you wasm if you're interested in contributing one and Paul's gonna do CC plus plus, right? Yes You need a mic Can you hear me? Great Yeah, so we had this WRC 20 challenge to implement ERC 20 and I wanted to implement it in C and C plus plus so I think most engineers many engineers learn C as an undergrad and C plus plus is as ubiquitous and People are talking about these languages like rust and assembly script But I'm sort of naive and I am stuck in my ways and I like C and C plus plus. So that's why I wrote it in C or C plus plus So anyway, I found some Anyway, this is just a gist of the code Boy, I don't know some reverse byte stuff and I wasn't really I don't know what to really say we have some functions that we were to implement and I implemented them and This is how It's it's like I know this is like, you know a lot to just you know I don't know how I'm supposed to explain this in five minutes, but anyway Anyway, this is the smart contract and see and see for it's similar for C plus plus and we're hoping that you know If we're gonna onboard, you know hundreds of thousands millions of people, you know a lot of C and C plus plus programmers might want to write smart contracts too, so maybe we should give them tools to do it and Some make stuff so I'm using this Some LLVM back end, but there are some problems the toolings are the tools aren't ready yet But there are some people writing tools To do this kind of thing Lane, can you come and also I wanted to show another implementation of WRC 20 I'm not a Mac person. That's why Okay, so if you don't So C is one option C plus plus is one option But if you want to hand write it in in web assembly, you can do this. So this is my Version and I think this is the shortest version of the WRC 20 The most efficient one and if you're gonna use it, this might be the best one. It's like a hundred eighty lines of web assembly code No, but I did have test cases and it passed the test cases Yeah, so maybe I don't know maybe you won't trust it, but I don't know 180 lines isn't beg your pardon. Oh Okay Right so we have a WRC 20 examples repository here. It's you wasm slash WRC 20 examples And right now there's an issue open and you can see I think most of them are listed here So we have rust we have assembly script which I'll show you in a sec We have nim, which is very cool. See C plus plus handwritten web assembly Think there may be a couple of others as well Thanks Paul All right, I'm gonna show you guys what the assembly script one looks like now So I initially came up with a really clever name for this talk smart contracts in JavaScript. No really almost Let me explain what I mean by that So first what is web, sorry, what is assembly script? So assembly script is a subset of type script, which I'm sure many of you are familiar with right type type script is a Strictly typed superset of JavaScript and types are good for a whole host of reasons. We believe they produce better code It's a better programming paradigm and in particular in sort of mission critical applications like we're writing on Ethereum We think that the types go a long way to like I said writing better More secure better performant code as well And on top of all that of course web assembly itself is strictly typed. So Yeah, so so there's a really cool project called assembly script Which allows you to write In a language which looks and feels a lot like JavaScript or of course type script if you've used it and compile that down to web assembly And so sort of from my perspective, I have nothing against Domain specific languages like Solidity and Viper and all the other great ones. I think that they're very important They've gotten us quite far and they'll sort of have a role in the Ethereum ecosystem for some time to come however, my personal sort of goal for Ethereum is I want to see millions of people developing applications on Ethereum and Personally, I don't believe that way the way we get there is is by requiring People to learn brand new programming languages and brand new programming paradigms from scratch, right? Let me just go over this point one more time because I think it's important There's a huge advantage to doing that right if you're writing mission critical code If you're writing a piece of wallet software by all means do it in Solidity do it in Viper learn EVM Get that code audited, right? I don't want that process to change But if you're building something for fun, right if you're building a toy if you're hacking at a hackathon I really think that having something that as I said looks and feels like JavaScript and uses Existing JavaScript tooling tools like NVM and yarn etc. NPM Etc is We'll go a long way towards towards Opening the Ethereum ecosystem to millions of developers who are very familiar with those tools. So that's my personal motivation for working on assembly script So I'm just gonna this is as Paul said a moment ago. This is kind of a lightning talk I'm just gonna super quickly show you kind of what this looks like and the first thing. I'm gonna show you here is My WRC 20 example code so this works. This is this is assembly script. It's valid. It compiles. It runs we've deployed it on the testnet and I'm sorry if that font size is not super large. I don't think I can easily increase it But hopefully you guys can get a sense of this, you know, it's kind of funny, right? It looks sort of like JavaScript. It kind of has JavaScript syntax but we've got so we've got the strict types of type script and then we've got stuff which looks and feels a bit like assembly so what's going on here is we have a single main function, which is the entry point and What you see with this the switch here and it's these sort of hexadecimal strings. This is a simplified version of a bi so we've manually implemented this the main function receives receives a call and It sort of unpacks the first few bytes and uses that to figure out which function is being called and I think I have the do balance function over here, which is the one that returns the current balance and you see things which are basically more or less map one-to-one to EVM Operations right so things like get call data size call data copy. We're also manually managing memory. We're loading Things into pointers and stuff. I think I have another one here. This is the do transfer function so again this kind of Reads the input data gets the length of it reads input data and allocates memory You know moves pointers around etc And then there's no return because what has to happen is it has to store the return value into a pointer so This is a step in the right direction but this is not exactly the way I want to write code and so I want to show you this is what it will look like and This should look and feel a lot more like JavaScript like modern JavaScript we have You know some abstracted classes things like a contract. We have decorators So we use an ewasn decorator to indicate that this class is the class that is the entry point in this code We use a simple store decorator. So this it looks and feels a little bit more like solidity. It's inspired by solidity We have things like maps and look how much less code. This is look how much more readable This is right get balance set balance or a single line the transfer code should be pretty pretty clear So this is the direction we're going the first part here as I said this works this compiles This code is is in that WRC 20 examples directory that I showed you a moment ago. This Is like halfway there. I've been working on this myself and could definitely use help. So this is under the ether TS Organization on github github.com slash ether TS TS being type script. We're trying to build out some more type script tooling Yeah, I was gonna do a quick live demo of of showing you how easy it is to To initialize this you can you just install a single npm module you run a single command and you've got the framework But I think we're running short on time. So let's go on to our next talk. Thank you So up next we have Pavel So Pavel is a member of the ewasm team. He's also on the alif team and he's gonna talk to you about evmc Hello Yeah, okay. Hello everyone I'm C++ developer within Ethereum foundation and one of the project I was working for some time is called evmc it's a I Would try to explain was it and give some quick updates what's what has happened in the project recently and and Well skipped a lot Okay, here we go And in the second part of this presentation, I'd like to go Go from this evmc and through evm as well Go back to ewasm and Some this explains some design decisions we made and where they come from Well, sorry about Okay, so let's start with this evmc This is a project that Has mostly one goal and it wants to define the API in the classical sense of the way the evm Implementation can communicate with the full Ethereum client and how we call it here. We called we call it a host So it describes Just the functions the both sides of this equation has to implement So on the host side we we require some some functions some methods the the client has to provide to the Evm execution and On the VM side we just define what what are the entry points for execution and how the VM Should be created and how can be used by Ethereum client implementations and If we can focus on the the host methods that are there there are 12 of them and Most of the most of this this basic definitions are written in in C codes However, I decided to to show you Example of what's how this this methods looks like Taking the go part of of the project. You don't you don't need to read it all. It's mostly I wanted to show how how complex it is to to enable this evm support in in Ethereum client implementation and So So to explain where where you as a miss is all this picture. So It's not so I mean it seems it's completely different execution engine, but Evmc actually doesn't care about the execution itself. It defines what actually data has to be provided to the execution So this project was started more or less the same time the USM idea was Was brought up to the Ethereum community, but it wasn't it didn't have Didn't have the the USM in mind, but it it's it turned out it's you can also implement USM execution engine is use exactly the same API to bring it wasn't to Ethereum clients and here I is one of the examples that actually support Evmc from the beginning and it's fully compatible with any Ethereum client that That actually has also the Evm support in the back So within this Evmc project, they also try to have language bindings Directly inside the project and we started Well, the first one was the Python prototype of of of that to figure out if pint all Python being scripting language Is it is it the the C API is good enough to have Python Python support and that works Very well But now we have go support Ready to be used and Geff is using that That's go bindings in the in the go Ethereum project and and I hope there will be more But mostly I Try to keep them inside the project to be tested with all the changes we made in there and And just before Beth death con there was release six point oh point all of of Evmc We're using semantic versioning for that and also We describe a number called a DI version Which is the first number of the full version and this number is exposed to the to the Implementation to check for basic compatibility Especially we when we use dynamic loaded libraries for deployment and at the current moment I'll have the C++ implementation of of of Ethereum client and Geff within the pre-quest that was submitted Supposed Evmc and on the VM side We have a lot of interpreter which is part of a lot of project and also here are that support that currently and there is there is a note that actually uses this Geff plus all of interpreter combination that it's fully Production ready and can be used on the main net. I have one or notes running myself And we we using Geff and here are combination to run the it wasn't testnet and some of the Plans, but I changed it to wishes because there's no commitment to that. It's kind of works in the Reactive way, so if if you would like to have To bring the support to your projects or you need some other language bindings pre-express this It's needs and we're happy to have and this is like way when you can you can learn more about the project where you can find documentation there are Implementation guides both for VM side and for host side some examples and chat room when we are available So from that I would like to go to this second part of the talk and Spend very little time on explaining how this affects. He wasn't designed to some sense So I'd like to to put your attention on three three aspects of Starting with EVM that this kind of special op codes there that annoys many people but And how they map and I would like to explain how they map to EVMC design and both the he wasn't designed so this special instructions, I mean are some Some Some instructions that allows you from the con from the contract execution to access Ethereum state and some other environment information about what's going on currently on the blockchain. So you are allowed to Put some data in this database called storage read data from there and check balances of other accounts and many other things and And just for this example, I will focus on this S load and S store and So because this is this storage access is is required for for contract execution But it's not about the execution itself. It's a way to access some data that is outside of this virtual machine that it's it's conducting execution So for example for example in EVS EVMC Design, we have to provide that. So this is Like one of the required methods the host has to implement to allow contracts to access that and We cannot provide this This data up front because that would be away. We don't know which exactly Portion of data would be needed for execution And so this is this is also taken from go bindings of EVMC and this is there are two functions that this host class has to Has to provide for for VMs and when we go to E-wasm and precisely to this Ethereum Environment interface This is a part of E-wasm that tries to describe Very similar aspect of that. So how code written in WebAssembly can access Environment and information that are specific to Ethereum so here this is a snippet of WebAssembly text representation and mostly what it shows it's First of all, there's notion of important functions in in WebAssembly. So this these are functions that given WebAssembly binary Specify are required for execution. So every Every contract WebAssembly written contract will need will have a set of these and Probably will specify that okay, I need These functions provided by By the the environment I'm running it to access some Ethereum-specific information and to learn more about that there is a section if in the design design repo of Of E-wasm. So I'm a current you to to check out all other methods that are there and Maybe leave some comments if you think we can do but I mean most of them map more or less directly to EVM semantics because I mean there's many reasons for that one of them was to have full compatibility with EVM That is now Questionable if we want it or not, but if you have opinion about that Yeah, this is the place you can find more information Okay, that's all for me. Thanks for attention Thank you Thank you, Pavel that was great. What's if you don't know does it work? Can you hear us? Okay? Most of you don't know that without EVMC we wouldn't have been able to enable to test it on both alice and GIF So it's a really important project Please check the repo Pavel has shown and it is the way to to get rapid support for E-wasm in any new client And now the the most important you want to load the video the most important part is the test net So we have Jared Welcome Jared So Jared started working on Ethereum JS He did a lot of the VM work at Ethereum JS and then he also did a lot of work in Rust on The E-wasm team and he's also working on PoA stuff prefer authority stuff in Rust But in last couple of months he has focused a lot on the DevOps side on E-wasm So it's really due to Jared and Casey the DevOps team at E-wasm that we have a test net Just one last note about the test net itself. It is actually working. It has been working for the last couple of months But this is the first time we share it with you guys But keep in mind that we are still making changes to it. We're making updates to it It is a proof-of-work test net. So we're gonna just reboot it with the new updates every now and then But it's still it's already ready to be used. So big applause for Jared again, and he's gonna explain everything to you guys Is this working? Yeah, it is thanks for the introduction Alex. Hi everybody I Prepared a short video because well, we know how live demos go So it's it doesn't have sounds I'll just kind of guide you guys through Yeah, so what we're seeing here is Just the basic components of a test net. I've created an empty account. I am connecting to the RPC endpoint and Getting some ether and that we wait a little bit Okay, so the next step. I'm gonna deploy a contract I have here and this is actually a contract from our test suite and Basically, all this does is it just it's some deployment code to to put up a simple web assembly contract And this is a simple tool we've developed that should make deploying contracts fairly easy so Yeah, one of the things that you should note about this is that you'll see that at no point I mean before deploying there Well, actually, I'll just let it be deployed and then explain cool. Okay Yeah, and unfortunately these highlights a little bug that recently appeared in our Explorer Don't worry. We're gonna hot fix it, but you're gonna watch me Scroll through the list of all accounts to find my deployed contract And I guess one of the things that I want to highlight here once I once I scroll through all the pages, but so I'm if you if when you saw earlier presentations, you may have heard about metering and So if you saw the contract code I had deployed before You'll notice that there were no metering or use gas calls And what's gonna happen is that when I've deployed this contract Actually, what's going on is we have another contract called the sentinel contract which is going to take my deployed contract parse it out and apply metering injection to it so After I finished scrolling through some pages here Don't worry, this will be hot fixed. It's Yeah, there it is. Okay Well, yeah, so yeah, this is a little this is the block Explorer that we've modified Now if you can see the code now has this use gas import and the entire branch has been metered by So this if you'll see that the use gas statement is was applied by the metering contract It's applied to the entire branch leave metering as it currently works is applied by Branch so I can't tell you much more than that because my job mostly involves Breaking things on the test net and then fixing them. I didn't actually write the metering contract. So Yeah So, yeah, that's kind of that's kind of it for the demo Please feel free to go up. I mean it's up now. So go and Try and break our break our stuff We are going to be releasing Later today some instructions if you want to connect your own node to the test net so you don't necessarily have to use our tooling So, yeah, that's that's the demo Thank you, Jared for the demo. Yeah, we're really excited to share the test net. It's live as he said the RPC URL I think is just you wasm.aetherium.org port 8 5 4 5 so you can actually plug that in a metamask You can plug that in your browser. You can get test net either already There are instructions up in the you wasm slash test net repository about connecting your own node But I think it doesn't include the latest like Genesis file So you probably if you were to try to do that right now you get an error Sorry, Aviv and other people in the room who've already tried to do that. We'll update that later today So cool, we're gonna move into a Q&A For five or ten minutes so we can have all the teammates come up and we'll answer questions ZX are you good to go with the mic? Excellent And then after that we're gonna do a short break and then come back for the second half of the breakout So if you have a question raise your hand about anything you've seen I have a question about this EVMC You mentioned that it's running on one main net node What does it mean for me as a like can I run? You wasm code on the main net if you pick up my transaction a minor block or like what does it mean? So it's just basic at your notes if you go to eat our stuff eat our stats that that net There's one note called Aleph interpreter So it's combination with with the geth client and Aleph interpreter as a VM implementation So that's it. You just if you want your run your own note. You can just use this this Implementation Hey, thanks for the talks From your experience like that you have mentioned several languages solidity wasm assembly script C++ which one is like a better or worse in case of like a using like having several languages is good in one Direction, but also there might be some problems Connecting with like a using one language or possible. I don't know some drawbacks Could you share it like your experience when you were actually trying to use different languages for the same thing? Yeah, I'll just repeat the question first So the question if I understand correctly is that we just explained that one of the benefits of Iwasm and wasm is that it allows us to write contracts in many languages You saw demos of two of them right now and so share your experiences You know, which ones have been working better, which have not been working so well Are there sort of advantages or drawbacks to any of them? Anyone want to take that question? I'm just gonna put it out obviously solidity is the best to write contracts in But that's for the fact that you guys are familiar with solidity and you can take all the Existing code and compile it to wasm once we get that done, but it's not done yet So right now the the next best thing probably is rust If you know rust But it does have a steep learning curve But it has the most mature tooling around it and even our tooling around it is the most mature one if you feel Extremely confident you could try C++ or C. I wouldn't recommend it personally We do need a lot of help to finish assembly script So probably I would try to direct, you know all the effort into that direction Unless you want to work on solidity compiler to have you wasm so these are like the two main Directions to to enable contracts easy contract writing to people Yeah, forget about go We should do an introduction here though. If you want to ask proper questions If you want to start we'll just go down the line. Yeah doesn't have a mic I'm going to rotate the ramp. I'm Casey and Just to answer the question. I think one of the advantages of WebAssembly Is the interoperability between different languages so you can take a library that was you know That's in rust compile it down to WebAssembly Then you can call that from and it's in some assembly script code So being able to mix these different high-level languages. I think is a good advantage Hi everyone, my name is Hugo I've been working and Mostly on writing test cases using the WebAssembly text format, which is really really fun and Yeah, I helping a little bit on the on the E wasm Explorer as well Hi, my name is Guillaume. I'm a member of the go team and also of the wasm obviously Yes, so just to what it to say when it comes to go go as a very limited support of Well, very experimental support of WebAssembly So and it's got all those features that you don't need in the case of WebAssembly like the garbage collector all that stuff So the like the binaries you get are very very big and it's really not appropriate for for this kind of use case so far but have you seen that there's a embedded compiler for go which also supports wasm output and Trows out the GC and it's No, it throws out the GC of go so it's tiny. Yeah, okay Well, if they that would be interesting. No, I didn't know it would be interesting to have a look at it Still don't think it's a great language for that, but yeah Yeah Yeah, Alex kind of already gave the spiel on me Yeah, Jared part of the E wasm team I've also In addition to working on DevOps I have written a few adapters for bringing DNS sec more cryptography for DNS sec specifically ED 25519 to the As a pre-compile through E wasm Yeah That's it Well, you know me. I had to talk So just pass it on to Lane I'm Lane. I Have been working on tests with Hugo. I've been working on the assembly script Which you already saw and then kind of things like documentation and I don't know education Let's call it like trying to organize events and get people excited about you wasn't Yeah Writing Thank you boys writing writing code is easy building communities is hard. So community FTW. I'm Pavel and Yeah, I'm C++ that maybe we just go back to questions Well, Paul introduce yourself one more Paul trained in math. I just do some basic stuff that helps everyone out Paul's very Paul's very modest, but he's the cornerstone of the team I Was very instrumental on helping us get the benchmarking set up way over my head All right, we have anymore. Sorry. Hey guys. Yeah, I thought this assembly script demo was fucking awesome so like what what work is left to sort of get assembly script to a Good level and I like so this is my first time sort of learning a lot about like wasm and e wasm So like what steps are there left to you know, write a contract and assembly script and be able to deploy it on the current Ethereum main net. Cool. I'm glad you're as excited about assembly script as I am I mean, I really I said this before I'll say it again I really think that this is a platform that we can use to get like millions of people excited about a theory I'm who may not be excited about solidity. I'll do respect to solidity So I didn't have a chance to talk about this. So Assembly script is a obviously an open-source project. There's a small team working on it It's kind of a beta. I would say so it works, but it's volatile So they make breaking changes sometimes which has sort of slowed things a little bit What I've done is I've so they have a they have a compiler That takes the web assembly Sorry the assembly script that you saw and runs it through under the hood something called binary and which is actually a C based Assembly script compiler and then produces the assembly script code. Sorry the wasm code. They'll have assembly code So what I've done is I've hooked into their compiler Through what's called a transform step. So if you know anything about the way compilers work, you have You have a tokenized step and you have a you have parsing and tokenizing and then you have a compilation step And then so in between those two that they it hands us the AST Which is the abstract syntax tree and we can kind of move things around right so for example There were decorators like that at you wasm decorator. So in the transform step we can grab that and we can Then insert things like the init code that we need into the tree And then that gets passed back to the assembly script compiler and that gets compiled down to wasm code So that's just a high-level overview of how this works So that's all working it's just all these pieces right so getting storage working getting the init code working And then the other piece that needs to be done is hooking into tools like embark and truffle so you can easily deploy those things onto The chain so I would say the work is about 50% complete There's still a lot to do and as I said I've been doing this alone and you know working on other things at the same time So if anyone in this room is excited about this Yeah, so just check out the repository. It's github.com Slash either TS slash you wasm dash as I'll put that on the screen or something you wasm dash assembly script So the second part of your question, which is kind of like how far are we away from being able to actually write contracts? Actually an assembly script and actually deploy them on the main net That basically is a question about the you wasm roadmap. I don't know you touched upon this Alex Do you want to talk about how this might go to main net? Yeah, I don't think I have much more to say to that When it goes to the main net So it definitely can be used in the test net And regarding the main net we definitely Have the goal to have all of this in the main net, but that that's gonna take a while We do believe that we can accelerate that process by first proposing just a subset Of he wasn't for the main net and that would be only for P comp is So that's one of the next things we're trying to To discuss with other teams how we could do that We have brought that up on one of those all core dev calls and that was a good reception to it So I think we're gonna be gonna achieve like pre-compile support on the main net for wasm next year sometime perhaps It also depends on how Constantinople goes, right? That's a big question And after that Hopefully you can expand into full full main net support But you guys gonna try doing a test now and that's what matters right now And we have been closely in touch with other projects including parody polka dot I Space mesh is another example of a project. That's really excited about About you wasm and about things like assembly script So I mean none of these are like in production yet But the code that you right now and the things you learn now will apply actually across like a whole host of different chains in the future Do we have time for more? Yeah, I guess for one more question. Yeah, what? What would it take to get past? Maybe a year a while while to an actual schedule Allocated resources a series of tasks the kind of thing I would expect to see in a real Engineering project so that other engineering projects can plan their work and have Some degree of confidence that if they spend their thousands hundreds of thousands millions of dollars That they won't find out that oh no not this year next year. Oh, no not next year the year after that You know, what would it take to get a much higher level of confidence in your scheduling rather than what appears to be guesswork? You're asking a question about confidence Yeah, how can we get more than here's a roadmap and maybe we'll get there someday Versus here's a schedule that assigned resources and a fairly high degree of confidence That we will get to certain stages. We're not business people. We're engineers. We're developers We you know to define what confidence means you have to define what a human being is and how human beings interact with each other And I don't even know what that means. I'm just a developer. I don't know well then where's where are the managers? So this can I yeah, sorry Alex go ahead. I've spent years A question partially for the foundation and not only the foundation but Okay, I do think we have we have some kind of Answers to this question and I'm glad you asked this question So in the you wasn't team itself we do Started to use in the last couple of months the the project boards on github and set up projects and goals and deadlines for Those and we do have all of that mapped out for the tiny tools We have for example Hera which Pavel has mentioned we have a roadmap when which version with what feature set it gonna be released So I think we're really improving and they wasn't project itself to have a proper roadmap and and plans for those But the bigger question is really how we can apply all of this to the main net and the good news I think is that they're Recently there have been a lot of good discussions between all the different teams involved with writing mainnet clients And it seems like all these teams are interested in and improving the process the non-existing process of putting something in place of that so I'm kind of hopeful that this gonna happen very soon The first step has been made all these teams started to communicate to each other and realize that there is an issue Which has to be fixed so I think it's gonna become better Thanks, Greg. I think are we out of time for questions? Yeah, I mean the question is are you guys tired? Do you want to take a break or do you want to make questions? Because we still have like another hour or two to go and can give them a glimpse of what's coming up in the next I think roughly we have like 40 minutes of content left We're gonna start which is the wasm engines is the first right? Yeah, there was an engine so so Paul gonna deep dive into how wasm actually works and how wasm engines work That's super exciting then we have two Wisions and how we could well actually three visions the first vision is called turbo the wasm which Explores ideas how we could speed up Transaction processing speed and and increase the throughput which applies to you wasn't but also applies to EVM on the main net So that's super exciting and then we have a really grand vision for the future titled wasm OS Which tries to pull everything together what I mentioned in the very first part of the talk as web 2.5 versus that tree to have like this combined seamless system. So that's the wasm OS talk and then we have Really big topic on how to do Shasper in a different way So that's like 40 minutes and we have one hour left like 55 minutes Anybody want to take a break?