ChainSafe@Systems:~$ ./gö

Authored by Aidan Hyman
ChainSafe@Systems:~$ ChainSafe Systems Starting Görli Testnet...

This past weekend ChainSafe Systems participated in ETHBerlin. We worked on the Görli Testnet, the first cross-client proof of authority testnet for Ethereum. What is a testnet and why did we build one? Before deploying smart contracts to the Ethereum mainnet, it is vital to first conduct a series of tests. This requires a network that is almost identical in practice to the mainnet but with different economic incentives. Testnets are used by developers to test contracts for free, without the concern of gas costs. What makes the economic incentives different between the two clients, is the use of Proof of Authority (PoA) as a consensus mechanism as opposed to Proof of Work (PoW). The main contrast between the two, is that one is protected by mass computation (PoW), while the other is protected by a set group of validator nodes (PoA). For a more detailed proposal about the Görli Testnet please read this document by Afri Schoedon, our incredible teammate that made this project a reality!

Geth and Parity

Currently, the two major clients that are used to run the Ethereum Network are Geth and Parity Ethereum. The testnets of these clients, Rinkeby and Kovan are isolated from one another. As someone unfamiliar with Ethereum, this might seem confusing and illogical from a ecosystem standard perspective. The main reasoning behind the isolation is that both clients use a different Proof of Authority consensus mechanism. Another reason is that Parity Ethereum includes features such as pwasm (WebAssembly support), which Geth does not. This means that the two clients require separate testnets to support the testing of different features. We do not suggest the removal of current testnets but we do suggest the inclusion of more options for the average developer when it comes to deployment.

To create a cross-client testnet, our team had a few options. We could implement Clique, the PoA consensus mechanism used in Geth, into Parity, or implement Aura, the PoA consensus mechanism used in Parity Ethereum, into Geth. Since our team has more experience with Go then Rust (the languages of Geth and Parity Ethereum respectively), we decided to start by implementing Aura into Geth. To do so we had to break down the specification (Thankfully members of the Parity team were actively mentoring us throughout the night) into an Ethereum Improvement Proposal. Next we had to add a flag for the Görli chain in each client and, most importantly, write Aura in Go. Our main issue was getting the block hashes of the headers to be the same across both clients, as there are some specific differences in how the seal is added by Parity Ethereum to the header.

The Görli Testnet Roadmap

So what is the Görli Testnet? Simply put, it is a new testnet that allows for both Geth and Parity Ethereum clients to act as validators on the network. The main advantages of a cross-client testnet is that it will allow for a specific client to experience an issue without bringing the entire network to a halt. Moving forward the Görli team will be continuing with the project, specifically reaching out to the Geth and Parity Ethereum teams to better understand the specifics of the Aura consensus mechanism. After this short research period we will begin reimplementing Aura into Geth readying it to hopefully be pushed upstream. Once we have attempted to push the Görli testnet upstream to Parity Ethereum and Geth, we plan on implementing Clique in Rust. If you are interested in contributing or supporting this project please reach out on github or on gitter. Thank you to all the mentors and organizers for the incredible hackathon!

Thank you again to the entire ETHBerlin team, the Parity mentors, Martin Holst Swende and Afri Schoedon for being part of our team and always pushing the community around him to be better!