Let’s hone in on a specific part of that and explain in more depth how I built an underlying Ethereum private blockchain for testing purposes.

I mentioned that I predominantly used testrpc to stand up a simple, single-node Ethereum instance which had the APIs exposed and some accounts pre-filled with Ether for testing.

Testrpc is a great tool, super simple and fast to get started, which makes it ideal for development and if you are new to the tech. However there are some situations where you might want some extra flexibility or you need to test different scenarios where you require a more “production like” setup. These include -

Testing the effects of a network of nodes (e.g. a multi-node Ethereum cluster with each node in sync with other nodes via the P2P protocol)

Easier integration with or ability to test alongside other tools or technology such as IPFS

If you find yourself having to set up a private Ethereum cluster (as I did) you’ll find that it’s not actually a straightforward process.

While there are one or two pretty clear tutorials out there as well as some scripts both for me had some problems. The scripts prefer that you are running Ubuntu, the preferred/recommended platform for Ethereum and the tutorials contain anywhere between 5-20 steps.

I wanted a simple, repeatable and cross platform way to bring up and tear down my clusters. Enter Docker and Docker Compose.

Today I’m announcing our open-sourced ethereum-docker which contains a bunch of Dockerfiles and Docker Compose scripts for bringing up standalone full Geth Ethereum nodes or multi-node clusters along with the very nice eth-netstats web dashboard for viewing the status of your cluster.

There you go, you have a private Ethereum cluster you can scale up, down and test your applications with.

This provides basic support at the moment for Docker and Docker compose, as always there are a bunch of open tickets on Github for improvements. We would like to add things like support for deploying on top of Kubernetes and Marathon, support for deploying a cluster with IPFS enabled and ability to interact with the cluster nodes and APIs in an easier way.