Nimbus Development Update, June 18th
Here's what's new in Nimbus land!
Attestation pool improvements: Overlap
The inner workings of our attestation pool will be explained in detail in an upcoming post. The TL;DR is that we now have support for overlapping attestations. The aim is to combine attestations into big sets of singular information being attested to, and discarding those with duplicate data as attestations are often subsets of each other. This is a purely technical matter of optimizing how Nimbus works and helping validators maximize profits on a technical level within the client, nothing in particular in regards to the mechanics of Ethereum 2.0.
We're almost in-sync with spec version 0.7.1. The end-of-June phase 0 spec lockdown is quickly approaching and everyone is scrambling to catch up. The more clients are in sync by then, the sooner a large scale phase 0 cross-client testnet will launch as everyone will be able to focus on making networking work between the clients. Apropos networking...
Introducing Lightbus + Networking updates
We've been working with the Lighthouse team on making Nimbus and Lighthouse talk to each other. So far, so good - the clients see each other as peers in the network.
It should be noted that this is using the Go Libp2p daemon under the hood, we're still working on a native Nim version of Libp2p because delegating calls and polling the daemon as well as managing it from within another binary is suboptimal. More info on that soon - we've had neat progress there, but mobile devices (which are a target for Nimbus) kill connections when they go to sleep and that's kind of a hurdle we're not sure how best to overcome yet. We're also in the midst of discussing practical changes to the general Libp2p approach in Ethereum 2.0 - the full discussion can be found here.
Still, the libp2p approach works fine on desktop so our next plan is to release a libp2p testnet between Nimbus clients. Up until now we had been using RLPx to connect them. These networking issues should be further ironed out during the September interop - a planned event where Ethereum 2.0 client teams will meet and hack together on a working cross-client testnet: by far the best chance to get it out in time for Devcon 5.
Ethereum 1.0 - almost there™
Our Ethereum 1.0 progress has been accelerating and we're nearing block 6 million! 🎉
The aim is to ultimately be able to read Ethereum 1.0 deposits for the 2.0 beacon chain from within Nimbus, but naturally we'll support connecting to external nodes like Geth and Parity as well - the RPC interface is being built already.
Right now, we're syncing blocks by cheating and grabbing them from geth, then processing transactions manually on previously downloaded state, applying changes, and checking if the state after the change matches what Geth gives us. This works well to make sure Nimbus works in terms of EVM and processing transactions, but right now our P2P layer is a bit wobbly and Nimbus can't actually stay connected very long and get to block 7.5 million or so without external help. We're working on that next, as soon as we can process all the blocks without EVM crashes.
Other Minor Updates
- we're working on request parallelization to retrieve blocks faster
- we've split the branches into master and devel, master making sure a testnet is always operational and devel is obviously for breaking things
- we're in sync with official shuffling tests
- we're passing official BLS tests and have integrated them into our pipeline so they get re-tested with every spec change
- we have support for environment presets - crucial for cross-client connections
- backward sync lets you request blocks up to a certain block from a certain block (block ranges)
Docs Suite (in development)
We have a new home for the docs for all the Nimbus-team produced libraries. Because they're all Nim, and because we feel like they're high quality, we decided to give them a proper home that would encourage reuse across different project, even those unrelated to blockchain or Ethereum.
Introducing, Nimbus Libs.
This is what makes the docs stand out (or will, once done):
- A single hub for all our libraries, with search spanning all of them.
- Automatically built from individual libraries' documentation and READMEs. This means that fixing bugs and typos in the docs is a matter of submitting a fix to the library repo where the docs came from, and it will automatically rebuild.
- The docs support manually added input, so we'll also be enriching them with guides, tutorials, usage examples and more.
In short, this hub will be the ultimate location to find inspiration, examples, and explanations on various software libraries and packages the Nimbus team has put out without having to trawl through Github READMEs and supporting docs or wade through StackOverflow.
The documentation generator is here but keep in mind that it'll change dramatically in the near future as features are being added daily.
Want to play with our stuff? We're looking for experimenters so if you're interested in helping our please get in touch. There might even be a bounty or two in it for you!
That's it for this time around - we're already preparing another interesting update pending some developments, but if you're impatient waiting for that one, give the Two Point Oh series a read to learn about Ethereum 2 or join our testnet!