 This is, yeah, a thing we call browser-solidity, and it's a fully functional IDE, which does not require you to install anything, it just runs directly from the browser. It is even able to run an offline context, so it does not have to load stuff from the internet. And the, you can find it at the following URL. Okay, that's actually not the URL, that's the offline version I saved. Okay, and yeah, so it's divided into two parts. On the left side, you see the editor with multiple tabs, and on the right side, you see automatically generated information about the contract you're currently writing. Let's start with a simple contract. That's just a contract which has a variable and a function, and you can use the function set the variable. Here on the right side, you see the currently loaded compiler, which is 0.44. Using this dropdown, you can change it to an older compiler version. This goes back, yeah, yes. So for zero, one, one, we don't even have a date. It's a bit confusing because that is not the active version. If you want to see the current version, you have to look here. And if auto-compile is clicked here, then it automatically compiles with every keystroke, basically. If you disable that, then you can click the button to compile. And the compilation result here is an entry for each contract. You get information about the bytecode. You can copy that. That's the JSON-ABI interface that you have to, you can use that if you want to interface with your contract using Web3.js. And then here's a JavaScript snippet you can use, you can paste into the Go with URIM console to deploy the contract. And that's another snippet that is useful in other contexts. You can even get a lot more details by clicking this button here. It gives you a list of functions and their signatures or their identifiers, the hashes of the signatures. What is very important is you also get gas estimations here. So creation costs 57 gas plus 30,000, 1,600. One of them is the gas required to run the constructor function and the other one is the gas required to deploy the code. Yes, and then gas estimates for all the functions. These are upper bounds, which means that they are not always accurate. And especially if you put a loop inside a function or something which is a bit more complex, then you will get infinity as an upper bound. Another thing I have to say here is that these gas estimates do not reflect the recent hard for gas changes. So we still have to update those. Yeah, then runtime bytecode is the bytecode that will be deployed in the blockchain. Then the same, the full code is a list of opcodes and the full code as assembly. Which is sometimes also quite useful, especially because you have the, so on the right-hand side, so on the left-hand side, there's always the instructions and on the right-hand side, you see the part of the source this instruction was generated from. Okay, let's untuckle the details. Yeah, and then also very important, below the compilation results, you have a list of errors and warnings. If I put garbage inside here, then I will get a compiler error. And we should actually respect that warning. It says we do not specify the version of the compiler required. Let's add that here. Now it's, so there's no warning. You should always try to create source code without warning because most of the warnings, so we try to be really, we try to generate as few warnings as possible and if there's a warning, then it's usually quite severe. And any warning that is generated by the compiler can be silenced by some way. So as an example, if you use the send function, okay, that's a stupid example, but it just sends one way to the address zero and there will be a warning that we ignore the return value of this function. And if you really know, yes, I really want to ignore the return value, then you could do something like this and then the warning is silenced. Okay, that was the compiler part of the IDE, but that's only one tiny aspect of it. And much more interesting is the, kind of the blockchain simulator that is part of the IDE and you can click this red create button to create the contract, which does not work now. Let's see. Okay, let's try an older compiler. Okay, as I said, yeah, that looks better. Okay, and so this creates the contract of this address in memory, which means it's just a simulated blockchain and you have buttons for all the functions in the contract. Functions that are constant, which means that they do not have side effects are evaluated immediately and you get the result here. So that's the value of the X variable. You get statistics about the actual transaction cost of this specific invocation and not the upper bound. And a decoder result. And then you can invoke functions that make changes to the state. Okay, so I called F with 34. The result is the empty string, which is fine because it doesn't return anything. And yeah, we have the gas costs here again. And now we can click the X button again to check the update value and correctly results in 34. Okay, one thing to consider or to, yeah, remember is that the input boxes here always require proper JSON, which means if you have a large number here, then this won't work. But what you can do is you can put them, you can basically hex encode them, for example, and then it will work. And you have to put quotes around it. So this is basically the stuff you enter here is directly forwarded into the web3js encoder. Okay, what else do we have? There are some tabs here, which I want to explain quickly. Here you can change the transaction origin if you want to test the contract that has to be invoked from different addresses, then you get five preset addresses here. You can modify the gas limit and you can send ether together with a function call. So if you set it here, then it will be valid until you change it again. And you can also use browser solidity to interface with other blockchains than the simulated. That's done using the third tab here. If you load browser solidity from within mist, for example, then you can click on injected web3 and you get the web3js that is available inside mist, so you directly interface with the attached node. Or you can use web3 provider, which means that it tries to connect to this address using JSONRPC and it doesn't work because I don't have a node running here. Oh yeah, one important thing here. If you load the website from HTTPS over SSL from GitHub, then this doesn't work because browsers do not allow non-encrypted requests from encrypted websites. So you have to load it from non-SSL GitHub. Okay, then on this tab, you can publish the source code you have here as in GitHub or you can copy it over to another instance of the IDE. And on this tab, you get an interface to the debugger, which Jan will talk about later. And we have another tab, which allows formal verification of contracts. Yuichi will give a talk about formal verification, but it will be about bytecode level formal verification, whereas this module here is used for source code level verification. And then the question mark here takes you to the Solidity documentation. Okay, that's all I wanted to talk about the IDE. If there are any short questions, I can take them otherwise. I think Jan could chill the debugger. Yeah, so just another question, just that's a compliment because I've been using that a lot in the last two, three months and it's really great. So thank you for that. Just, I think last week or two weeks ago, we added actual browser unit testing purple request, which will result in this website breaking much less. So it's quite complicated to do browser testing because it has to load the compiler, which is an 80 megabytes file and usual, so these hosted services for testing can't really cope with that, so yeah. Okay.