 Lavro, he will be speaking on remix and other Ethereum development tools. No, I have this. No, I use my laptop. Okay. Hello everybody. I'm really glad to be here today, and to present you a remix. So remix is a debugger tool. A debugger tool that can debug smart contracts. So I am Yann. I'm working with the CPP team. Together with Christian, Yann, Dimitri, Bob and Greg and Pavel. So actually the name is remix. We already had a debugger last year. It was a mix. And mix was completely integrated inside the CPP Ethereum suite. But we have decided for some reasons to reboot the project from scratch and to start remix. The main reason of that was that as the community grows, grows and grows, it is more valuable now to propose new tools that can be integrated inside other applications than to have a single closed application. I mean, I would prefer to say, okay, you can use a plugin that you can integrate in your application that you like to use than to say, okay, we have built remix. You have to use this because this is the only application. So it's better to have something that can be integrated in another application than to have something closed. So that's why remix is born. So we have started developing remix a few months ago. Basically it's just a VM debugger. You can see a screenshot here. And this screenshot has been taken from the Etiascan integration. So we have basic features of a VM debugger. It's okay. We are working now on having a full integration of this debugger inside Solidity so you can debug smart contracts using Solidity. This remix has been developed using JavaScript technologies. You can use it using LPM. So you can pull remix using LPM. And you can use some modules of remix with Node. And the main reason of all that is just to give to the community new tools that can be used to debug easily smart contracts. So this is the integration of remix in Solidity. So we have basic features of an IDE like source code debugging. That's a must have. Like record manager coming soon. And like several trackers. Like contractor range tracker and also local variables tracker. So we have two parts, the VM debugging stuff and also the Solidity debugging stuff. And I guess that's the most interesting part with this Solidity debugging stuff. So I will just do a short demo to present you all the stuff. Oh, yeah. It's not... Okay. Okay. So here I have one integration of remix inside Browser Solidity. Browser Solidity is a text editor. It's a Solidity editor that includes a compiler. So you can just write smart contract and you can compile smart contract. And also it has some features of an IDE because you can in the right panel here create transaction. So you can in the browser write contract and then test contract in an environment. So this is not remix. This is only Browser Solidity. So in which environment will I deploy this contract? I can choose. And I have two possibilities. The first one is to use the embedded JavaScript VM. So in that way I will just run the execution of this contract inside the browser and everything will be inside the browser. Every transaction will be deployed inside the browser or I can use an external web-free object. So I can just connect the browser to some kind of external node. And I have a node here which is here. You can see that on the upper left corner. I am using the CPP Ethereum client which is... I have run this application in test mode. It means that I can just mine, mine and mine every five seconds here. And I can just deploy contract, test it, result from scratch and so on. So don't care about what is on the right side. Here I just have a node which is constantly mining. So I can just deploy this contract, waiting for transfer to be mined. I have two principle methods, functions in this contract. Don't care so much about the code here. This is not the principle step that I want to show you. So the first is the fallback function and the second one is the move fund function. So this is a donation contract. Basically I can just give Ether to this contract and then the owner of the contract can withdraw some Ether from this contract. So let's say that I will send 10 Ether here. I will call a fallback function here. I have to wait a little bit. So I have some details about the transaction here, but let's skip that for now. And then on the right side here, I can start debugging this transaction. Can you see it? Yeah, I will just... So now I debug transaction. So I have launched Remix here, which is a module that runs inside Browser 3D Team and I can start debugging my contract here. I can go forward and I can go backward and I can see here the location in the source code where is the execution going here. So I have two important features here. First is the source location, as you can see here. And the second one is those two panels in the right side. You can check out here the state of the contract. So you can see that the variable underscore giver here is going from zero to that rest of the sender, etc. And you can also check out local variable here. I will now just call this function here. Sorry, I have to copy and paste this stuff here. And I will call the movement function with two parameters. The first one is the address where I will send ether and the second one is the amount of ether. So this is not so much now, this is only one way. And I will just call my phones. I have some details about transactions, not important. And I can start debugging. And then I can follow the execution of the transaction here. Now I am in only owner modifier here. I can check out the balance, which is local variable here. Now I am in the send function. And if the send is successful, sorry, I will just trigger the farm moved event here. Yeah, sorry, it's not so readable, but yeah. Okay, so I have source location inside Browser Solidity thanks to remix. And I have the contract state with all variables that are decoded. I have the locals, and I can also, sorry, I can also obviously check out some whole values like the stack, the storage changes, the memory, and the call data. Okay, so that's for the short demo here. What's next? Okay, so this is the remix integration inside Browser Solidity. What's next? I think we could easily imagine that remix could be integrated in several other tools. Today we talked about Truffle, DApple, we talked about SIOM Studio, we talked about MIST and MetaMask and so on. So it will be really easy to integrate remix. So this is Debugger inside all those tools, because all those tools that RPC, DApple, Truffle are made for development purpose. So I think it's a good thing to have Solidity Debugger inside those tools already. And this is really easy to use. Just have to pull the NPM module and then you just have to create, to instantiate the object and to render the remix inside your HTML file. This is here. So remix is available as an NPM module, but more of that, we also provide some kind of low-level tools in JavaScript also, that can be used by everybody to create new tools and to imagine new use cases. For example, here you have TraceManager, which is a tool that you can use to check out some value in the VM trace. It provides an API to easily retrieve value from the VM trace. You have SourceMappingDecoder, which provides an API to deal with the source location in the Solidity contract. You have an HD Worker that is used to crawl and to work over all the nodes of the Solidity contract. And obviously you have also Decoder. So you can use those tools to extend your tools, to create new tools, and to also imagine new use cases with that. And I think that this is a really important feature to provide APIs and not to build a closed application. So what we already done, we have already worked on the integration of Remix in MetaMask, in Mixt. If you go in Etascan, you can already use Mix now. And as I showed you just now, you can use also Remix inside both Redity. So now, this is a personal opinion. What I want to keep in mind, and what maybe we need to keep in mind, is the first debugging transactions with Remix or other tools can be used to debug transactions that are already committed in the blockchain, either a private blockchain or a public blockchain, whatever. And I think this is really nice features, because for example, if now you come to me and say, oh, Jan, can you debug these transactions in the public blockchain? I will have to check out every opcode. I will have to check out the VM trace. It will be very, very long. Yeah. And so this is why I think this is really nice to be able to debug transactions that are in the main chain. Secondly, you can easily integrate Remix inside other app. And then, as I said, it provides a low-level API. Okay. What's next? We need to commit this work on the storage local tracker. We need to finish the Backbone Manager. We need to do a scenario builder. We need to have a full integration inside the Italian VM, a JS VM, sorry. And we have to do the missed integration. And obviously, as this is an API, we have to do a lot of documentation, a lot of documentation. And yes. So yeah, to finish, I would just say that you can go to check those things. You can use Remix, please. You can integrate Remix in your application, please, please. And you can also contribute. And I would be very happy if you can just integrate Remix in your application and if you can contribute on improving Remix as well. Because I think it's really important to share and to do stuff together. So yeah, thanks for listening and see you soon. So. Thank you, Yan. Thank you very much.