Eth 2.0 Dev Update #51— v0.12 testnet on the horizon

Terence Tsao
Prysmatic Labs
Published in
6 min readJun 5, 2020

New v0.12.1 Version Testnet Incoming

With the recent releases of v0.12.0 and v0.12.1, the Prysmatic Labs team has been hard at work to align Prysm with new scoped features and bug fixes. We are happy to announce that the restart of Topaz testnet for v0.12.1 is just around the corner. If you have any preference on what this testnet should be called, please suggest that in our Discord, we’d love to hear them! This release contains the long-anticipated update to the BLS signature standard. It also contains a tweak on how inactivity penalty is applied to performing validators. Yay! No more seeing balance decreasing for the performing validators during those tough times. We have also updated our libp2p Gossipsub to version 1.1. This version contains great features on addressing various attack vectors. v0.12.1 will be the target for multi client testnet and mainnet assuming no bugs found during this test period. The amount of v0.12 work done on Prysm can be tracked via #5935 and #6076. Be sure to keep an eye out as we announce the testnet restart plans early next week.

Community Feedback Survey Results

Thanks to some feedback from Ethereum Foundation researcher, Protolambda, we started thinking carefully about the biggest pain points for contributing to the Prysm project and decided to run a small community survey asking everyone about their experience running a node, interacting with our team, and reading our documentation.

And it ended up yielding excellent results! The biggest feedback comes from the pain of learning and using our build system, Bazel, for external contributions or to integrate Prysm into other Go projects. Other feedback revolves around account management: i.e., how do I move my account to a different machine? How do I change my password? How can I run tens of validators on one computer?

Another highly requested feature was being able to run any sort of eth1 node with Prysm, such as Nethermind, which is now fixed in our latest master branch! Overall, people’s experience with our team seems fairly positive, but integrating with our codebase, testing it, and understanding its complexity received mostly negative reviews. Code health is going to be a big priority for us going into the mainnet release. If you still have some feedback you want to give or didn’t get to fill out the survey, please take a look here.

Merged Code, Pull Requests, and Issues

Full support for Nethermind + other eth1 node implementations for Prysm

Previously, Prysm nodes required access to both an http eth1 endpoint as well as a websocket one. This limited the options of which eth1 client to use for Prysm to only go-ethereum, which was unfortunate as we noticed many users requesting Nethermind support. We took this feedback seriously and refactored our eth1 code to only use an http endpoint, meaning you can provide any endpoint you want to your node as long as it can read smart contract logs from eth1. This allows users to run Nethermind, Besu, go-ethereum, or parity for Goerli eth1 testnet support!

Additionally, the Prysmatic Labs team runs a goerli eth1 endpoint for users to try, which is enabled by default in Prysm beacon nodes as https://goerli.prylabs.net. In the spirit of decentralization, we are encouraging all our users to either run their own eth1 node, or use a reliable third party provider such as Infura. We have updated our instructions for how to do this in our official docs portal here.

Full support for building, testing, and running Prysm with the native Go tool

Although Bazel is great for our team and monorepos in general, it has a massive learning curve for anyone wanting to contribute to the codebase with pure Go. For example, with our build system, you’re not able to:

  • Run go get, go build, or go test
  • Use a lot of popular IDEs or text editors except for VSCode with a Bazel plugin or IntelliJ IDEs
  • Import Prysm packages into other Go projects easily

For an open source organization, not providing these benefits is a huge no-no. Instead, we decided to offer pure Go support. This is huge because now anyone can do a `go get github.com/prysmaticlabs/prysm/beacon-chain` and start developing in their favorite text editor, or importing Prysm packages into their Go projects. We’re really curious to see what people will build! You can also run tests in pure Go with `go test -v ./…`. We have updated our contribution guidelines on how to develop Prysm with pure Go here. All the hard work that went into this feature was done by our teammate Preston Van Loon. You can check the pull request which enabled pure Go support for Prysm here.

Initial synchronization improvements

Several important init-sync related PRs have been added, with the main purpose of improving performance and robustness of the process.

The most important step towards better robustness is #5975, where system was challenged to overcome a very long period of skipped blocks (a week of skipped blocks)

The current implementation is capable of handling such cases, even better, all this without excessive network requests and without overwhelming peers (load is balanced using weighted round robin routine).

Another important improvement was related to how batch requests are processed: previously, the initial synchronization queue was epoch based, meaning that it relied on the number of blocks per epoch, when deciding on the size of block batches to sync. This limitation is fixed now, and the queue works with batches of arbitrary size (64 blocks, currently). These and other improvements allowed for better blocks/sec values (85+ blks/sec on average). Everyone is invited to test the updated synchronization; do not forget to use the ` — dev` flag to have all the optimizations enabled:

Upcoming Work

Code Health Improvements

As we are heading towards the milestone for large scale multi client testnet, it’s natural there will be more eyes looking into the Prysm codebase and more newcomers wanting to contribute. That’s a great thing! Which means It becomes very important that Prysm’s codebase maintains a high standard for readability and clarity. We are in the process of updating the docs portal, user guides, and general node logging for better user experiences. We are also refactoring some of the most used prysm service for easy reasoning. Expect lots of great changes on those items in Q3. Also thank you to Protolambda for providing some awesome feedback, and thank you to Quantstamp for pointing out some great issues so far

Preparations for coordinated multiclient

With the restart of v0.12 Topaz testnet, we are also one step closer to large scale coordinated multi client testnet. Our plan is to relaunch Topaz, which will serve as a good testbed for other clients to also sync with v0.12 of the specification. Although it will be majority Prysm at launch, the goal is to allow other client implementations to easily run on the testnet as well. We will keep you all posted on our progress.

Interested in Contributing?

We are always looking for devs interested in helping us out. If you know Go or Solidity and want to contribute to the forefront of research on Ethereum, please drop us a line and we’d be more than happy to help onboard you :).

Check out our contributing guidelines and our open projects on Github. Each task and issue is grouped into the Phase 0 milestone along with a specific project it belongs to.

As always, follow us on Twitter or join our Discord server and let us know what you want to help with.

Official, Prysmatic Labs Ether Donation Address

0x9B984D5a03980D8dc0a24506c968465424c81DbE

Official, Prysmatic Labs ENS Name

prysmatic.eth

--

--

Terence Tsao
Prysmatic Labs

Building Ethereum 2.0 client at Prysmatic Labs @Prylabs