RPN-1 Development Update: Drop 1 Complete
Those of you following progress on the Radix Github repo may have noticed the latest development status and the update to our roadmap showing completion of our first “Drop”. Completing the first Drop is a major milestone that we wanted to tell you more about – and demo for you!
Why the First Drop is Exciting
As we described last month, our Drops break up our development of the RPN-1 network protocol into milestones, each of which gives us a functional system that we can test before layering on more complexity. We chose the content of our Drops so that we attack the most difficult and risky (and generally lowest-level) problems first. This makes the first Drop especially important and exciting for us.
The focus of the first Drop was on the most critical part of the network protocol: core consensus. As we describe in our current consensus roadmap, RPN-1will use a BFT (Byzantine fault tolerant) 3-phase commit consensus approach. While unsharded for now, this consensus design provides a foundation of safety, liveness, and quick consensus that we will expand into Cerberus – the final form of our massively scalable, sharded consensus design.
So while we need much more than just consensus to create a decentralized, resilient, incentivized public network, our first step was to implement our BFT 3-phase consensus and make sure it gives us a rock solid foundation. Spoiler alert: Drop 1 works!
Testing A Functional Network
So what’s working in our first Drop system?
First, we actually have a functional network! It’s pretty stripped down, to be sure. It currently has no notion of Sybil protection (ie. proof-of-stake). It has only a very simple way of inputting transactions to be processed (ie. very simple mempool). We have to manually stand up a fixed and static set of nodes that only know how to conduct consensus with each other. Nonetheless, we are able to set up simple networks – either simulated on a single machine, or running on multiple machines. And crucially we have the Radix Engine running on top, allowing us to push transactions with the Radix libraries, just as in our betanet in 2019.
In fact, check out this video where Josh Primero, one of our leading consensus designers and developers, demonstrates spinning up a network and using an early Radix wallet and Explorer to see it in action.
With the ability to spin up these networks, we were able to dig into the first parts of a test plan that will stretch from here to RPN-1 launch and beyond..
We start with a network that is “perfect” (nodes behave predictably and faultlessly) and move to a network that is “latent” (some nodes may be laggy or go MIA), then to a network that must deal with “crash faults” (any number of nodes may barf completely and unpredictably), and finally to a network that contains Byzantine nodes (bad guys trying to break the network, or just nodes that don’t act according to protocol at all).
Then for each of those network types, we test at increasing levels of real-world network deployment. We start with a simulated network on one machine, where we can rapidly test core behavior in depth. Then we move to a Docker deployment of a set of nodes, a true cluster of nodes on different physical servers, and finally to a global network where we can look at real-world latencies, bandwidth, and reliability (or lack thereof) representative of a public network.
Our first round of testing of core consensus was very successful in highlighting some implementation bugs that we needed to squash before moving on, and giving us confidence that our consensus works like we expect.
In addition to other testing, our plan is to continuously operate an internal test network that we can continuously test, upgrade, and beat up. (The eagle-eyed Github watcher may have briefly noticed a “Cerby’s Rads” project we’re working on, which is an internal toy that will let our whole team push transactions through the test network.)
Where We’re Going Now
With the first Drop behind us, our current sprint has us digging in on some of the most important elements we need to add to consensus for the second Drop. Top-of-mind is the close integration of a proof-of-stake mechanism into consensus (with delegation of stake coming in the third drop). Closely coupled with PoS will be validator registration; this will allow our networks to flexibly allow nodes to come and go as they will in a public network based on delegated proof-of-stake. Also it will generally let us run more flexible test networks in the meantime. Finally, we also want to get the basics of requiring fees for transactions done in the next Drop.
As always, we welcome the whole community to follow along with our progress on Github, and we’ll be sure to keep you updated as we keep knocking out the sprints toward RPN-1!