Nimbus: March Update

Nimbus: March Update

First of all, we hope you and your loved ones are keeping safe in these surreal times.

In the hope of giving you a brief respite from all the madness, here’s our March update.


Spec changes

The big change here has been the merging of the BLS changes, which means we’re now fully compatible with Spec version v0.10.1. 🎉

We’re working on being compatible with the newly released v0.11.0 – Lan party.

In the words of Danny Ryan: this release represents a post-audit Phase 0 spec, ready for long-standing multi-client testnets.

As it stands, we’re almost ready (networking is missing, but consensus is done).

JSON-RPC

We’ve built a JSON-RPC service that can be used by Beacon explorers to connect to Nimbus. We’ll be using it to create an interface to help us monitor the health of a node.

Interop

We continue making progress with interoperability. We can now interop with go-ethereum discv5 and, as of this week, Lighthouse testnet bootnodes.

Full interop with another client is our main goal at this stage.

Following some informal discussions at ETHCC, the preliminary target for a full interop between all clients seems to be July.

Audits

One of the main blockers to full interop for us right now is auditing. This can be broken down into the following steps:

  1. Make sure auditors are comfortable with Nim.
  2. Decide the scope of the audit.
  3. Audit things that don’t change much.
  4. Continually and progressively audit things that are changing often.

To get things moving on this front, we’re preparing a request for proposal.

We’re currently considering various approaches to how the audit should be performed and what the best approach should be.

Libp2p

Nim Libp2p continues to stabilise.

One of our March targets was completely dropping the go-daemon, which means stabilising libp2p. As of yesterday this has now been achieved :)

For those of you who are unfamiliar, the two main benefits of dropping the go-daemon are:

  1. Simpler installation: dropping the go-daemon will make it much easier for us to explain to people how to download libp2p (we’re talking one line instead of 10).
  2. Fewer debugging issues: since go-daemon doesn’t log everything that’s happening, we currently waste a lot of time figuring out the root of certain issues.

To prepare for our beta release, we’ve also been working hard on the documentation and a new set of tutorials – an important step towards fulfilling the grant milestones we set out together with Protocol Labs and the Ethereum Foundation towards the end of last year.

Finalisation testnet

We’ve added finalisation tests in CI.

This means that every time we make a commit or PR, a local testnet with four nodes is automatically run. This checks that we haven’t broken anything with respect to finalisation.

Since most of our errors manifest themselves as finalisation errors, this has already saved us a lot of time!

Validator and signature processing

We fixed a silly but nevertheless important bug concerning message buffering.

As a result Nim is now able to process validators and signatures 5x faster.

The downside is that we now produce 5x more logs (400mb hour instead of 80mb / hour). This isn’t great for testnet stability, so we’re now working on getting this back down to a reasonable figure.

EVMone

We’re now able to use EVMone – the fastest ethereum VM implementation – in Nimbus (for the execution layer in Eth1).

Importantly, we’ll be able to re-use this for phase 2 of Eth2.

Misc

  • Attestation aggregation work is now ready to merge
  • The Eth1 branch of the Nim beacon chain is now monitoring the deposit contract
  • We’ve made a new hire. Welcome Viktor! Viktor is our hot code reloading guy (parse that as you wish) ;)

'Til next time 💛