Introducing Dashmate: the masternode setup tool for Dash Platform
Dash has a long history of innovation, and was the first to introduce the concept of incentivized service nodes, or masternodes, to the cryptocurrency space in mid-2014. A number of innovations have since been built on masternodes, including the world’s first DAO, non-custodial CoinJoin, and the deterministic masternode list. This in turn enables the revolutionary BLS signing mechanism that powers both modern InstantSend and ChainLocks, features which are so popular with users that they have been adopted by a number of other projects. With the upcoming release of Dash Platform on mainnet, masternodes will be required to offer a number of additional services to the network, and expose these over DAPI, the world’s first decentralized API. This blog post describes the service architecture, and introduces a new tool to set up Dash masternodes in a containerized environment, taking initial steps towards horizontal scalability.
Let’s start with a brief history lesson. Dash masternodes have traditionally run on low-cost Linux instances, hosted either on a VPS in a data center or on commodity hardware such as the Raspberry Pi 3 at home. The only requirements are sufficient CPU power, disk space and RAM and a static IP address. As such, early masternodes were installed by manually downloading, installing and configuring Dash Core on Linux through the dash.conf
file. Soon, installation guides by community members such as Tao of Satoshi popped up, followed by tools such as dashman by moocowmoo or Dash Masternode Zeus by xkcd. These tools typically also offer features to install, monitor and update masternodes.
While in the past a Dash masternode only needed to run Dash Core and Sentinel, the new Dash masternode stack looks something like this:
This is where automation comes in to play. During the development of Dash Platform, DCG platform developers created a tool known as mn-bootstrap as a quick and easy way to set up masternodes on internal development networks. For the past year, we have been working to adapt this tool for testnet and mainnet by adding a CLI to expose the functionality of the tool in a user-friendly way. This blog post announces the tool for public testing, as well as the decision to rename mn-bootstrap
to dashmate
. Dashmate is designed around Docker containers, and features automated configuration and startup through a user-friendly command line interface (CLI) written in Node.js. It aims to completely replace the familiar but aging dashman tool, and includes the following noteworthy features:
- 🧙 an initial setup wizard, with support for testnet, devnets and local networks (mainnet works too, but is currently disabled)
- 📃 a configuration management system, which allows you to configure any of the hundreds of available settings, while still suggesting sensible defaults
- ⏩ simple one-line commands to start, stop, restart, reset and upgrade masternodes and full nodes
- 👾 support for multiple nodes and multiple networks, to help developers new to Dash Platform get started quickly
- 🔣 numerous status commands with detailed output for the host machine, core, platform, masternode and Docker status
- 🔍 fully open source
- 🆘 a self-documenting help system
- 🚀 helpful and user-friendly error messages (most of the time 😅)
Setting up a masternode with Dashmate is easy. In most cases, the interactive CLI demonstrated above will detect or generate necessary settings such as your IP address or BLS private key. Any settings not covered by the wizard can be handled using the dashmate config
command.
A detailed readme file describes all available features, and user-friendly documentation is available for users wanting to try setting up a VPS from scratch, and then use Dashmate to set up a Dash masternode. A full-length video demonstrating the process of installing Dashmate and using it to start and register a masternode on testnet is shown below, and 1000+ tDASH is available at the faucet using promo code “masternode”. Give it a try, and please feel free to open issues or pull requests if you find any bugs or want to suggest new features!