 and I work for Protocol Apps. I'm a software engineer responsible and focused on the JS IPFS and the Leap year to be a projects. Throughout this amazing conference, we have been seeing a lot of technologies and solutions to build decentralized applications, pushing the boundaries to a complete distributed scenarios. However, something that hasn't been covered as much is the networking level. It is required to do a lot of magic. I might even dare to say black magic to be able to do this peer-to-peer applications work in the infrastructure that we have today. Things like NATs, firewalls, lack of connectivity, completely offline scenarios, sensor networks are some of the problems that we peer-to-peer software developers have to overcome in order to build these decentralized applications. And it is not by chance that both IPFS and Ethereum have built fully mature networking stacks from the ground up to solve these challenges. We peer-to-peer for the case of IPFS and that peer-to-peer for Ethereum. And this is simply because there was no transport in the network that offered the primitives that IPFS and Ethereum needed. Things like authentication and encryption, being able to cope with several network topologies in several different scenarios, are some of the challenges that we must overcome and face when we are building these systems. However, there is a small key difference between the designs of these networking stacks. We peer-to-peer is modular. This modularity gives us the ability to increase our reach in terms of devices by using the capabilities that the system has to offer. Every single module in we peer-to-peer exposes a well-defined interface for peer discovery, for routing, for transports, stream multiplexing, encryption, you name it. And we can pick the components that we want and bake our peer-to-peer solution for the device that we want to run. This modularity gives us the opportunity to keep our primitives for authenticated process addressing intact. It is a very powerful construct to be able to address any other process in the network just by a public key so that we can find the process in the network and not only dial to it, but also make sure that we are talking with the right endpoint. So this means that we can go from the traditional physical network to a super-connected graph with a physical and virtual overlay that is not bound by the capability of the system. We can use things like Bluetooth to create some of these channels. Even radio or audio can be transports. We can upgrade unreliable channels and become reliable with reliability upgrades. We can encrypt any channel that we want with SACI-AL, TLS, CurveCP, and others. And this means that we can also enter in the ecosystems that don't have the full networking stacks that we are typically used to. Huge cases for this is, for example, the browser, which is constrained to just have WebSockets, HTTP, and WebRTC, or Internet of Things devices that sometimes don't even have TCP stacks. You have to rely on some radio protocol in order to be able to dial out of that device. For example, one very good example of how Leap Your To Peer is so pluggable is that our friends from OpenBazaar needed and wanted to have a Tor transport for their use. And all they needed to do was to create a Tor transport that fulfilled the same interface as the other transports on Leap Your To Peer, and they can just plug it right in. And once that is done, every other application that wants to use that transport can just bring it, and you don't have to change anything from the codebase of your application. The primitives stay the same. It is really powerful. Think, like having full Ethereum nodes running in every single device with no limitations. So we think and we see the Leap Your To Peer being able to converge and to join efforts to make a way a much better ecosystem for the community that uses these network stacks. Leap Your To Peer offers a lot of primitives that can augment this ecosystem. And since we already did the work, as Juan mentioned earlier, of getting IPFS running on the browser, we kind of went ahead and asked ourselves, what would we have to do in order to get an Ethereum node running on the browser? So I'll just show. We started hacking something. It is very in the beginning, a very early stage. It's a hell of a beginning, but we want to show you the process, the progress. I have two demos for you. So looking for the demo one. So the first challenge is really getting the Ethereum VM working on the browser. Here, basically, you might be familiar with the standard setup of getting a browser app nowadays running on the browser. You have to basically transpile everything. And then once it's transpiled, we can load it. And we prepare this really nice dashboard so you can see what's going on. And here, we are going to simulate the Ethereum blockchain. We are going to create some blocks. And we are going to process them through the Ethereum VM. Since these operations are very CPU intensive, it takes a little bit to warm up. But once it's there, you can just run the rest of the chain. You can see we get Ethereum VM on the browser running blocks from the Ethereum blockchain. But there is more. So now I'm opening another tab. And I'm basically connecting to the other peer that was opened before. And I'm connecting these two browser tabs. So instead of generating blocks, I'm just going to ask that peer to give me the blocks. So it happened seamlessly. Like I just said, dial to this other peer. It found the peer and fetched the blocks from that network. So we can get the Ethereum VM running on the browser and finding blocks from other nodes. This is pretty exciting. But there is more. So you can see I can pop more nodes and define each other very quickly. But now, the real interesting demo is can we get these browser nodes connecting to the real Ethereum network? Let's see. demo2, are you already playing? Awesome. So same dance, getting the application to run. But here we are doing something extra. We are going to run a Go Ethereum node patched with the peer to peer. So it does an address in the peer to peer ecosystem. And now instead of simulating the blockchain, I'm just going to dial to that Go Ethereum node and fetch the blocks. Like basically, I'm using this Go Ethereum node that was augmented with the peer to peer to connect to the rest of the network. Again, generating the genesis block dance takes a little bit. This can be greatly improved, especially with the recent work from Martin on Elasm, I'm sure. But once that's there, we'll start receiving all of these blocks. There you go. And you can see, this is fetching from the real live network. It's pulling all the blocks in, into the browser. Awesome. So let me explain in a graph what it keeps going. It might take a while. If you all know that the blockchain before, you might know that. Can we go back to the slides? So what is happening? So we know we have the Ethereum network that already exists and is very well connected through the peer to peer. And then we added this Go Ethereum node patched with a peer to peer. So that does a presence on the peer to peer network. And then we throw the Node.js node running with peer to peer as well. And then we have our browser that connects to this Node.js node that connects to the rest of the network to the other Go.js node. Go.js node. The Go Ethereum node. So you can see, we're already using multiple transports here. I'm using TCP to connect Go between Node. And then I'm using WebSockets from Node to the browser. Next up, I can connect several browsers together. So what I'm going to do is just use WebRTC, the peer to peer transport of the browser. And just to add it on top, what I can do is I can connect the browser again to the Go Ethereum node. And this way, any browser that has common transport can dial to another node that supports peer to peer. This is pretty exciting. This means we can have finally Ethereum in the browser running full Ethereum nodes. And it's just another browser. It's basically any device with any network capabilities. The network is not the problem anymore. I want to give a huge shout to Martin, because Martin basically did all of the magic of getting Ethereum running on the browser. I just had to plug the wires together. That was easy. Thank you so much for all the help. And what you've seen here was basically a couple of nights hacking. It was actually very impressive how it was so easy to attach peer to peer to Go Ethereum and to bring the blocks to the browser and run them on the Ethereum JS VM. It's pretty exciting. So we will continue to pursue this endeavor. You can follow the development on the peer to peer organization on GitHub, the peer to peer development on the Ethereum org. And you can check all of those examples, all the demo on a repo called JS Ethereum with peer to peer. I can post the links after in Twitter if someone is interested to check it out. That's awesome, David. Thank you so much. Thank you.