When I first saw the name Schlesi mentioned in the news I wasn’t sure how to pronounce it. It took me a few attempts to learn how to spell it. I wasn’t exactly sure what it was, but I quickly found out: a multi-client testnet for Ethereum 2.0. And now, having nobly served its purpose, it’s dead.
All drama aside, Schlesi satisfied an important milestone in the Ethereum 2.0 roadmap: successfully launching a public multi-client testnet. In this article I’m going to talk about the Schlesi testnet and its successor, Witti.
Some Important Definitions
Before we go any further let’s explore some common definitions so we are all on the same page.
What is a testnet?
A testnet is an alternate network used for testing that reflects the conditions of a target production network as closely as possible. Users or clients planning to use the production network can test their software against the testnet to ensure they don’t have any bugs. Testnets are important because they help expose bugs before they make it into production.
What is an Ethereum 2.0 testnet?
The first phase of Ethereum 2.0, phase 0, delivers the Beacon Chain. Here is a nice description of the Beacon Chain from Ben Edgington back in October 2018:
“The key function of the Beacon Chain is to manage the proof-of-stake protocol for itself and all of the shard chains. There are a number of aspects to this: managing validators and their stakes; nominating the chosen block proposer for each shard at each step; organising validators into committees to vote on the proposed blocks; applying the consensus rules; applying rewards and penalties to validators; and, being an anchor point on which the shards register their states to facilitate cross-shard transactions.” (source)
In order to test the Beacon Chain, we need to run it and connect to it with one or more clients. An Ethereum 2.0 testnet is an instance of the phase 0 Beacon Chain running in a test environment. An example of a currently running (single-client) Beacon Chain testnet is Prysmatic Labs’ successful Topaz Testnet.
What is a multi-client testnet?
A multi-client testnet has multiple clients from different developers connecting to it at the same time. Schlesi and Witti are multi-client testnets. It is a challenging undertaking because each client has different characteristics, bugs, and configurations. Most clients start with their own private single-client testnet first before migrating to a multi-client testnet. Multi-client testnets are useful to expose bugs that relate to multiple clients running simultaneously against a testnet. From a FAQ by Afri Schoedon:
“Before … a mainnet can be launched, we need testnets that mimic mainnet conditions as … [closely] as possible. This requires us to have stable, long-term, and persistent testnets up and running that are supported by not only one client but multiple clients, ideally, all clients.” (source)
What happens when an Ethereum 2.0 testnet is forked?
The Ethereum 2.0 Beacon Chain is a Proof of Stake (PoS) blockchain. Validators act upon the chain to validate blocks of transactions. Blocks in lots of roughly 100 are confirmed on the chain when 2/3 of the validators agree (attest) to the validity of the blocks. This is known as reaching finality and when that happens the blocks and their transactions are permanently written to the blockchain. When the blockchain is unable to reach finality it becomes unstable and forks can occur. A fork happens when different validators propose competing blocks. This is what happened to Schlesi as we’ll see below.
Multi-client Testnet History
Now that we have explored some common definitions let’s move on with some Ethereum 2.0 multi-client testnet history.
Schlesi was not the first multi-client testnet. A previous iteration simply named ‘multinet’ was committed on October 24, 2019 (GitHub). It was configured for multiple clients: Nimbus, Trinity, Lighthouse, Prysm, Lodestar, and Artemis (now known as Teku). Notably it was more of a simulated multi-client testnet. Afri Schoedon explains:
“The ETH 2.0 Multinet is a collection of startup scripts to simulate multi-client testnets with various parameters such as number of validators to run the network with. The multinet is based on a minimal ETH 2.0 specification.” (source)
Moving forward to early March 2020, according to minutes from a developer call, Ethereum Foundation researcher Danny Ryan expressed a desire to get “multi-client testnet efforts to kick off”. And so, enter Schlesi.
Named after the Schlesisches Tor train station in Berlin, Germany, the Schlesi multi-client testnet genesis event was on April 27, 2020, as announced by Ethereum developer, Afri Schoedon.
Schlesi targeted the Ethereum 2.0 v0.11.1 and v0.11.2 specs during its lifetime. An earlier version targeting v0.10 destabilized and was discontinued.
After launching with an even split of validators between Ethereum 2.0 clients Lighthouse and Prysm, Schlesi successfully onboarded Teku as well. Nimbus and Lodestar were further behind but were catching up.
Then on May 17, Afri Schoedon announced that the testnet was forked.
Despite a relatively short run, Schlesi presented opportunities to organize documentation, configuration and bootstrapping, and simultaneously onboard multiple clients. Members of the public (including myself) were able to stand up nodes to sync against the beacon chain and stake Göerli testnet ETH as validators. Developers were pleasantly surprised with how long Schlesi ran and client teams were recognized for quickly fixing bugs in their implementations. Overall it was a successful outcome.
So what caused Schlesi to ultimately fail? The root cause analysis is summed up beautifully in an update by Ivan Martinez of Prysmatic Labs:
“[At] around 11 AM UTC on May 15th , it had been observed that Schlesi had been nearly 50 epochs away from finality … [which] eventually lead to instability in the chain, causing several temporary forks in the network.
After almost 300 epochs of no finality, there was a block that split the chain between Lighthouse and Prysm at slot 150496. A block was submitted that had an attester slashing, which surfaced differences in how all clients tally rewards and penalties for slashed validators. This revealed 2 different penalty calculation bugs in Prysm! After this chain split, it was decided that the best course of action would be to restart with a fresh slate. While the chain could’ve still been recovered at this point, we decided it was best to immediately use what was learned from this event and get started on a new multiclient test network!” (source)
And thus Schlesi is dead. Long live Witti!
The Witti Multi-client Testnet
Witti is the latest multi-client testnet in development. Its deposit contract was created just hours ago on May 25, 2020 in block 2758066 on the Göerli Testnet Network.
As tradition seems to dictate, Witti was named after a subway station (Wittenbergplatz) in Berlin. According to the GitHub page, Witti will support three Ethereum 2.0 clients at launch: Lighthouse, Prysm, and Teku. Nimbus and Lodestar are listed as WIP.
Ethereum 2.0 v0.11.3 is the target specification for Witti as most clients have implemented or are close to implementing the features/changes in that update. With v0.12 recently released, we can reasonably assume that Witti or a future railroad-station-inspired testnet will incorporate those changes.
While it is not ‘live’ yet, the pieces are coming together quickly. An expected genesis time of May 26, 2020, 9am UTC is listed.
UPDATE (May 27, 2020): Witti went live on May 26, 2020 at 12am UTC. It was live streamed by Afri Schoedon.
Some Final Words
Wrapping up, we will very soon have a brand new Ethereum 2.0 multi-client testnet called Witti. Its predecessor, Schlesi, while no longer running, played an important role in reaching this point.
Personally, I’m tremendously excited to get a node up and running on Witti. Besides assisting the devs with testing, it’s lots of fun, and I encourage everyone to try it. I have authored a step-by-step guide to get started with Prysm on the Topaz testnet (give it a go!) and as soon as Witti is available I will put another guide together based on that.
Finally, I wanted to express my gratitude to all of the developers. The Ethereum ecosystem and community is full of passionate human beings working toward a collective goal: Ethereum 2.0. Countless developers, researchers, tinkerers, and leaders have worked hard for years to make all of this possible. Thank you, all.
Disclaimer (because I’m a noob)
I’m not affiliated with the companies/developers mentioned in this article. Opinions are my own, and information is based on my own research from publicly available information. I make no recommendations or endorsements, nor do I warrant the accuracy or completeness of the information herein.