Development Update — 4th Apr, 2019

David Rugendyke
Rocket Pool
Published in
9 min readApr 4, 2019

Hello Rocket Poolers! With EDCON only a short week away, we thought it prudent to get a good ol’ fashioned development update out before we travel to Sydney for the event. 2019 has seen a huge amount of work done on Rocket Pool 2.0, our decentralised staking network, which is aiming to be compatible with phase 0 of Ethereum’s Serenity update — the beacon chain. It will provide users and businesses the opportunity to stake their ETH easily - with as little as just a single ETH and even offer their own staking services using our network in the background.

Rocket Pool is comprised of 3 main parts, smart contracts, smart nodes and a new typescript JS library for interacting with the Rocket Pool network. All of these have received significant work over the start of 2019, we’ll recap the changes and improvements to them in this months update.

We’ll also be outlining and showing the new Rocket Pool 2.0 Beta UI which has seen big strides over the past month. This next beta aims to be compatible with Ethereum 2.0. Like our first public community beta in 2018, which ran at full capacity for over 2 months, it will be fully open and public. The ETA to launch will be announced in the near future, so stay tuned!

Rocket Pool — Wait, what, who?

If you’re not familiar with Rocket Pool, here’s a quick run-down before we get into the details of the development update.

Rocket Pool is a next-generation Ethereum proof of stake (PoS) infrastructure service, designed to be highly decentralised, distributed and compatible with Casper 2.0, the new consensus protocol that Ethereum will transition to in late 2019.

We offer any user, business, corporation, pool, wallet provider, exchange, hedge fund — just about any service — the ability to provide their users with the option to earn interest on their ether holdings for a fixed term without worrying about maintaining an extensive staking infrastructure, just plug and play.

Rocket Pool has a long history in Ethereum and work on it originally began in late 2016 after the Mauve paper was released by Vitalik Buterin. This provided an early functional spec for Ethereum’s new consensus protocol called Casper which would allow users to earn interest on a deposit of Ether. Since then, Rocket Pool has grown and evolved into a next-generation staking network, aiming to allow businesses and their users to earn interest on their ether and to empower users who wish to stake on their own node by providing them with additional income on top of interest awarded by Casper.

Rocket Pool isn’t just a whitepaper, it’s actual code. Be sure to read the Rocket Pool 101 — FAQ for more information.

Rocket Pool 2 Beta UI

As progress towards our next public community beta continues unabated, we can show you how the UI is shaping up for an Ethereum 2.0 staking network and pool. This new UI approach is focused on simplicity and ease of use, you can literally start staking within seconds of hitting the site using MetaMask or other web3 compatible software.

Click here to view a quick video of Rocket Pools Beta UI in progress

The demo above gives a quick overview of the approach for this clean, simple UI. Once you login with a Web3 compatible device, you can instantly see your current logged in accounts “blockie” at the top of the screen and are given the choice of depositing an amount of ETH at 3, 6 or 12 month fixed terms.

Once the UI is completed and the smart contracts are integrated into it, we’ll be looking to migrate Rocket Pool to our own testnet for testing using one of several ETH2 clients which have currently reached some early milestones that will enable us to use them. At this stage, we’ll most likely be using Prysmatic Labs ETH2 beacon chain client for some preliminary testing, with the hope of even migrating our beta to their testnet should things progress nicely.

Look for another Medium post soon outlining our plans for the beta and a hopeful launch date for when users can start staking their own ETH with or without running a node in our network.

Smart Node CLI Package

If you want to stake your own ETH and run a node, you can do so in the Rocket Pool network with as little as 16 ETH. This is half the amount required to stake and run your own node outside of Rocket Pool. When you run your own node with us, your 16 ETH is matched up with user deposits who don’t run a node and the resulting 32 ETH is used to stake with Casper. Since you’ll be staking your own ETH, you can also get a higher return by receiving extra ETH via a network determined fee which is charged to those users who are staking on your node. Half the ETH required and a higher return — What’s not to like? :)

The Smart Node CLI is the main tool that node operators will use to interact with the Rocket Pool network and run their node. We’ve been hard at work on implementing a host of features and are very close to completing a first version, ready to release alongside the next Rocket Pool beta.

Some of the initial commands available to a node operator in the network.

Running a smart node in the Rocket Pool network isn’t just like running a node outside, you’ll need to install this smart node CLI package which has seen a lot of progress in recent weeks. This package allows you to deposit ETH into Rocket Pool’s smart contracts, vote on staking fees the networks nodes should charge + more. It will also add several daemons, which will allow your node to become a smart node by enabling communication with the Rocket Pool smart contracts, manage multiple validators on a single node and integrate with the beacon chain as well.

Available CLI commands are broken down into a few modules — here’s what they all do:

  • Node — handles initial node setup and registration. Node operators can initialise their node with an Ethereum account, register it with the Rocket Pool network, change its timezone location, check on its status, and withdraw funds (both ETH and RPL) from their smart node contract back to their account.
  • Deposit — handles node operator deposits into the Rocket Pool network, which create minipools (validators) for user deposits to be assigned to. Node operators can reserve a deposit (locking in an ETH:RPL ratio for 24 hours), complete or cancel it, view the status of their current reservation, and check on the current network ETH:RPL ratio.
  • Minipool — handles the minipools created by the node from deposits it has made. Node operators can check the status of all of their minipools, and withdraw funds (both ETH and RPL) from them if available.
  • Fee — handles voting on the network node operator fee. Node operators can check the current network fee, and set a target fee to vote on. Once a target fee is set, the CLI will automatically submit votes to raise or lower the network fee accordingly during check in.
  • Service — handles registering the CLI daemons with the operating system. Node operators can install and enable the daemons, start and stop them, check on their status, and run them manually if required.

There are currently two separate daemons: a smart node daemon for communicating with the Rocket Pool network, and a validator daemon for performing validation duties on the Ethereum beacon chain.

The smart node daemon is responsible for checking in with the Rocket Pool network periodically to signal node liveness. This also involves reporting current server load information (retrieved from the OS) and submitting network node operator fee votes.

The validator daemon currently submits activity messages to our beacon chain simulator to simulate validation duties — this is placeholder functionality which will be removed or replaced once beacon chain node software is available to use. It also periodically checks staking durations for active validators, and logs them out when they are ready.

The Smart Node CLI is written in Go and the repo containing the source code is currently private — our plan is to publish only compiled binaries for now, but to open-source this work later, once it’s been stress-tested in the wild and has stabilised.

Rocket Pool JS Library

Rocket Pool is an open network that can be integrated into virtually any existing Ethereum business (or new), so to enable easy access to the network for front end websites or even nodejs server side applications, we’ve created the Rocket Pool JS library.

The library can be used to integrate the Rocket Pool network into any JavaScript application. Developers can clone the source repo or install it as an npm package (it will be published as an official package later, once it’s ready for release). We’ve written the library in TypeScript, to add some extra checks and balances and ensure integrity in our code.

Feel free to clone the repo and give it a run for yourself!

The library’s API should look familiar to users of web3js — we’ve split it into modules grouped under one main object. Initialising the library is as easy as creating a web3 instance, and passing it to a new RocketPool instance:

import Web3 from 'web3';import RocketPool from 'rocketpool';const web3 = new Web3('http://localhost:8545');const rp = new RocketPool(web3);

From there, you can access module functionality easily and concisely:

rp.group.add('my cool group', 0.05, {from: …}).then(txReceipt => …);

All asynchronous methods return promises, so you can choose your own preferred flavour of promise chaining or async/await syntax.

The library provides the following modules:

  • Deposit — track a user’s queued deposits
  • Group — register a group, create and add depositor & withdrawer contracts for its users, and make/handle deposits through them
  • Node — register a node, reserve and complete deposits to create minipools, and withdraw resources from the node contact
  • Pool — check on network utilisation and minipool stats, and individual minipool information
  • Settings — check on current network settings
  • Tokens — check RPL and RPB balances and handle token transfers between accounts

It also provides a contracts module which handles dynamic loading of Rocket Pool contracts, and is used by the other modules under the hood. For any advanced functionality which isn’t provided by them, you can retrieve raw web3 contract instances and interact with them directly:

rp.contracts.get('rocketNode').then(rocketNodeContract => …);

Contracts are always loaded from the latest stored ABI and address in our eternal storage, so you’re guaranteed to be working with the latest version of any upgraded ones.

While the Rocket Pool JS Library was written primarily for our own use, we can’t wait to see what you all do with it!

EDCON 2019

It’s almost time for EDCON which Rocket Pool will be attending with great enthusiasm. If you see any Rocket Pool shirts making the rounds, feel free to come up for a chat (or a beer), we’re a friendly bunch and don’t mind having a chat or anything Ethereum. Also EDCON is in our home turf this year, Australia. So unlike every other Ethereum conference we go to with a 24hr flight time, we won’t be horribly jet lagged, hooray!

Questions or just say hello!

Well this turned out a bit longer than expected. If you have questions or want to know a bit more about us, why not swing by for a chat and say G’day! You can view our website or have a chat with us in our chat room that anyone can join. If chat rooms aren’t your thing, we’re also on Twitter!

--

--