 So Unlike many of the crypto projects out there Ethereum isn't really an end-to-end product It's it has always been a platform by developers for developers and as such Our kind of our primary task is to make developers happy so that in their turn there can make their end users happy now for to achieve this one of My opinion one of our most important roles is to either aid the existing tooling developer tooling out in the community Or maybe fund or create new ones that the ecosystem is currently lacking and my talk will be About one such tool that we wrote but before we dive in let's see what the actual pain point are Usually when the developers approach Ethereum for the first time they start playing around with remix this browser Solidity playground they get the hang of solidity. They start prototyping their contract now unfortunately quite fast They realize that developing in a web browser is cumbersome So they switch to more sophisticated tools such as truffle which can do automated repeatable testing and Also aided by proof authority chains or instant transactions now after developers actually finish writing their code usually the procedure is that they deploy it on a Testnet either option or on an alternative because that's really nice. It's a real-world environment many users, etc Now the problem is that this perfect testing environment often goes belly up And the reason is one of the reasons is that the test networks are can be really heavy Either due to spam attacks or to large projects such as Raiden doing intensive tests These can be unstable from time to time usually because somebody figures it would be fun to reorganize the chain and lastly it can often be Unfriendly because you have this awesome project you want to deploy, but you don't have test ether and that's annoying and The truth is that if you are a small project then running Testing on the test net is fine but if you're a bit larger projects such as Raiden or maybe have many projects such as consensus or perhaps You want to run a hackathon then the life test network isn't really ideal So the ideal solution is actually to run your own network Now this might seem like a good idea at the beginning since it's light stable you have unlimited funds You can share with everybody But when you actually start configuring your private network horror strikes in so it's actually quite a nightmare to configure because it has gazillions of different moving components and so We've been working for quite a long on a tool called puppet and the goal Our primary goal with puppet was actually to run the rink of a test net on it But we kind of realized that it will be an amazing tool for at least we hope an amazing tool for other projects too So we kind of polished it up and gave it out to the community and for the rest of my talk I'm going to do something really crazy I would like to demonstrate what it takes to actually create an entire ethereum network with bells and whistles live on stage So First up if you want to actually start your ethereum network Obviously you need to configure the genesis block the shared initial accounts the balances and you have to define what pre-compiled contracts You have what fees they have now There are different four crews that you need to take care of and if this wasn't horrible enough If you have to do this for the five primary clients, that's about 414 configuration values and That's just a snippet from parity is really extensive list So that's not really a pleasant experience However, if we try puppets now puppets is a command line tool, but kind of a command line wizards to help you So the first thing it just greets you with a nice message and asks what network would you like to manage? We'll just type defcon. That's a nice network and then ask what would you like to do? Well, we don't have network yet So we don't cannot show network statistics, but we can configure the genesis block So let's just switch that and what kind of consensus engine well We have proof of authority for click but since we want actually across client network Let's stick to eat the hash nice. Do we want to fund initial accounts? No, and Do we want a specific chain a network chains? Well, if you run a public network, maybe it's worthwhile. No for now. We just do random and That was about it. We actually managed to configure an entire genesis state for five different clients without doing anything now of course if you actually want to run your own network then the genesis is just step one you will need to get some nodes online, but One of the biggest problems that we see with people getting those online is that they have absolutely no idea what the nodes are doing So you really need to monitor the node somehow and we really want to do that via and eat stats So running eat stats, which isn't really easy to do But let's see how puppets can help. So what would you like to do puppet assets? Well, we'd like to deploy a new network component. It gives us a choice. Let's stick to its eat stats Which server? Well, that's connected to a server. We have a server called Defcon network. It's a registered domain name Yeah, sorry connects a new server Defcon network and Yay Wi-Fi works awesome. So we managed to connect Yeah, that's why you don't do live demos that's gone network Do we trust this? Yes, we trust the remote host Cool. Now what where do we want to deploy it has since we want to deploy possibly multiple websites here? Let's Deploy it on port 80 and do we want to share the port 80 with others? Yes, sure Now when we actually say we want to share point port 80 puppets will deploy a reverse and gen X proxy Automatically configure everything without us having to do and anything and what domain do we want to? host this Eat stats page on stats dot Defcon network Okay, and what's the east as password? Hello. Hello. It doesn't matter. Yeah, it's fine Now it in theory puppets now runs in the background starts up entire eat stats and everything and Now not only will it start it up. It also lists us that yes We have a server connected the IP address and what services it's running And now if you load up a web browser and look at the actual domain name then hopefully Yep, we have an east that's running and you can you can see it is actually not an image. It's a live stats page Okay Now we have a set we can monitor the thing but we actually have to boot up the network. So let's deploy now a boot node Yeah, that's sometimes the console is funky but it's Now again, we have a small scan so that we know what we're up to and let's deploy a new network component Yep, we want to deploy a boot node and where do we want to deploy it? Well, usually don't want your boot not to go down to some of these dusting your website So let's just switch to a new server. Let's call it boot dot Defcon network And yes, we connected a new server. That's fine. We can manage multiple servers at the same time Where do you want to store the data directory? Let's call it Defcon boot node on the server What you do report one. We'll just you'll go with the default Configurations, they aren't even that Interesting and what do we want to call the boot node on the stats page? Let's call it boot node that seems about as dumb as it can get and Again puppet does its funky magic in the background and if we I Think we can I can even close this Yep, and if we now stack a check our stats page Then yep, they're well fair enough. We have our boot nodes register. Maybe it's not a bit tiny But we have a boot node running and it's immediate linked to the stats page We don't even have to configure everything cool now We have a static chain that doesn't do anything Obviously, we need to mine on the chain to make it progress so we can again ask Startup puppets ask it to connect to our new little network And let's see how what it takes to deploy our mining node now We want to deploy a new network component. Let's deploy it a mining node or sealer again minor kind of Takes a kick out of the network machine. So let's do put it on the minor dot Defcon network machine yep and Yeah, where do should we store the data? Defcon minor and where should we store it? Hashtags defcon it? And the remainder can be the connectivity strings can be simple and we want to register it on the Ity hash page So it's that's page as the minor now what ether base should the ooh that was fancy What the address to the minor use we just copy paste this here and what the gas price and gas targets We'll just stick to the defaults. It's not that important and again puppets is pushing out to the mining node to our remote server And it should finish booting any moment. It does a quick health check It actually checks whether ports are reachable. We have a nice dump of everything we configured until now and If we look at the stats page finger crossed Yep, we actually have already four blocks mined and Not only that I'm really hoping that the boot node will connect soon to the mining node But since time is limited. We'll just check it in the next slide. Yep. They've connected Cool, so of course now you actually have an entire network up and running But if you tell your friends that here I have this awesome network They will just go okay, and how do we use it and then you kind of start scratching your head So it would be really nice if Well first thing first you could see what the network is doing. So for that obviously we need kind of a block explorer Which currently for example, there is no open source block explorer that supports Go Ethereum as a back end, but however, there is one that supports parity now. Can we actually deploy a parity nodes easily? Well, sure, let's try you want to deploy a new network component. Let's do an explorer Where do we want to deploy it? Well, we will put everything all our websites on the same machine So let's use Defcon network as the machine Yes, we want to porch share port 80 and let's do explore Defcon Network Where should the data be stored? Defcon Explorer and the defaults Yeah, let's call it on Explorer on the stats page and again, it's pushing it out fairly fast. Hopefully We're just waiting for the node to finish booting. Yeah, I'll just close it and let's see does it actually work fingers crossed Yep, we have our block explorer up and running and we have already 11 blocks mined and you can check that our miner already has 42 ether that's a nice number and Of course, if we check the network stats then again, we already have three machines running without actually configuring too much Okay, now we have we know what the chain is doing from the inside and from the outside Can we ask our friends to use it? Well, sure But it's kind of hard to use it for a simple client. So let's try to give them a web wallet now Of course, everybody knows the most sophisticated web wallet currently out there is my ether wallet So let's just deploy my ether wallet to our little custom test network. So let's just Deploy a new network component. We want to deploy a wallet to our website website server. Yes We want to share port 80 and call it wallet And that work where should we store them data? wallet and Just spice up the defaults a bit and let's call our Wallet on the stats page since that runs also back and no, let's just call it wallet and again puppets is just Configuring everything in the background for us and it's pushing out the data if we check our wallet now This is something that takes usually the most time to boot up Boom we have our wallet and that you guys you can see it is actually configured for the defcon network It deployed a back end node to connect to we have the front end and everything seems to work nicely cool So that one kind of was easy enough to deploy all the components But if you share this with your friend then he'll say that okay I want ether and you will be the one who has to give them ether all the time which gets boring really fast So we really need a faucet that you can just start up and it just runs there and everybody can request ether and To do that. We have actually go ethereum has a faucet built in or support for it based on the light client So let's ask puppets to deploy that. Yep. We want to deploy a new network component and Let's do faucet. That's our sixth on the list And we want to deploy it again on to our web server. We deployed everything there faucet defcon the main name Yeah, sorry port 81st and then Thank you. Oh nice Okay, how many ether do we want to the faucet to release well one ether is fine per 15 minutes We want three tears if you wait more you get more ether do we want to recapture protection against bots? No, it's a test network here for Defcon. We don't care about robots Where should we store the data? Defcon faucet sounds about right and let's just be Different port for this one. What should then faucet be called on the stats page? Oh Set Of course if I run a faucet, I do need a private key so that the faucet can actually fund its stuff out of So we have a private key pasted in here. We have to unlock it for the faucet Boom, it's unlocked and do we allow unauthorized requests? Well, since it's a defcon and we don't care about the lifetime of this whole network so much Yes, we are authorized anyone to request funds and And let's deploy it. I'm really who it managed to deploy. That's what's nice And now comes the moment of truth. Can we actually as you again? We have a nice dump of all the configurations Now can we actually load up the faucet? Yep Why is it? Yep, we have a defcon authenticated faucet and if we request funds now Into an ether address Give me one ether. Yep, the faucet accepted our funding request And if the miner manages to mine us a few blocks, yep, we just mined it and we have our account funded And we can also check the stats page that everything that we deployed until now have indeed appeared on the stats page now finally You deployed everything but you don't even know what your genesis block is You don't know how to connect to it and it's just a mess of different websites on different domains So you really want to deploy everything on a single host or at least on a single place that your users could find it And the only way to do that is to have a nice dashboard and that is the actually the last thing that Puppet can do currently Let's just try to do that We're just having a nice. Yep Deploy a new network component and the final piece of the puzzle is a dashboard. Let's deploy it to our website and Let's use the root domain defcon dot network for it and then it will ask which services do I want to list? Yep, I want to list the stats page. I Want to list the block explorer. I want to list the web wallet and I want to list The faucet and do we want the Easter secret to be public? Yes, let's make it public and Puppet again crunches everything makes the configuration files deploys a web server for us and if Everything worked correctly. I should be able to load up nice dashboard. Yep, and we have that first page We have the eat stats on on the left hand side We have a nice sidebar many where we can switch between the eat stats We have the block explore that we just configured we have our web wallet that we can play around with We have the faucet to request all the funds that people are requesting funds amazing and And beside beside all of these services that we configured we also have Detailed guide on how to connect go ethereum in archive node full node like client or embedded for embedded machines We have details on how to connect mist and Ethereum wallet we have details on how to connect Android and iOS devices and Finally, if you really don't prefer go ethereum as your client of choice Then we also have details on how to connect C++ ethereum ethereum harmony parity and by and Ladies and gentlemen that was the puppet network