Dash can look back on a long history of innovation and was the first company to introduce the concept of incentivized service nodes or masternodes into the cryptocurrency space in mid-2014. Since then, a number of innovations have been built on masternodes, including the world’s first DAO, CoinJoin with no custody, and the deterministic masternode list. This, in turn, enables the revolutionary BLS signature mechanism that powers both modern InstantSend and ChainLocks, features so popular with users that they have been adopted by a number of other projects. With the upcoming release of the Dash platform in the mainnet, masternodes will have to offer a number of additional services for the network and provide them via DAPI, the world’s first decentralized API. This blog post describes the service architecture and introduces a new tool for setting up Dash masternodes in a containerized environment and takes the first steps towards horizontal scalability.
Let’s start with a quick history lesson. Dash masternodes traditionally run on inexpensive Linux instances that are hosted either on a VPS in a data center or on off-the-shelf hardware such as the Raspberry Pi 3 at home. The only requirements are sufficient CPU performance, hard disk and RAM as well as a static IP address. Hence, early masternodes were made by manually downloading, installing, and configuring Dash Core on Linux via the
dash.conf File. Installation guides from community members like Tao from Satoshi soon appeared, followed by tools like dashman from moocowmoo or Dash Masternode Zeus from xkcd. These tools usually also offer functions for installing, monitoring and updating masternodes.
While in the past a Dash masternode only had to run Dash Core and Sentinel, the new Dash masternode stack looks something like this:
This is where automation comes in. When developing the Dash platform, the developers of the DCG platform developed a tool called mn-bootstrap to quickly and easily set up masternodes in internal development networks. Over the past year we have been working on adapting this tool for Testnet and Mainnet by adding a CLI to make the tool’s functionality more user-friendly. This blog post announces the public testing tool and the decision to rename it
dashmate. Dashmate is built around Docker containers and offers automated configuration and startup via an easy-to-use command line interface (CLI) written in Node.js. It aims to completely replace the well-known but aging dashman tool and includes the following notable features:
- 🧙 an initial setup wizard with support for testnet, devnets and local networks (mainnet also works, but is currently deactivated)
- 📃 a configuration management system that allows you to configure any of the hundreds of settings available while still suggesting sensible default settings
- ⏩ simple one-line commands to start, stop, restart, reset and update masternodes and full nodes
- 👾 Multi-node and multi-network support to get developers new to the Dash platform up and running quickly
- 🔣 Numerous status commands with detailed output for host computer, core, platform, masternode and docker status
- 🔍 completely open source
- 🆘 a self-documenting help system
- 🚀 helpful and user-friendly error messages (mostly 😅)
Setting up a masternode with Dashmate is easy. In most cases, the interactive CLI shown above will detect or generate the required settings such as your IP address or BLS private key. All settings that are not covered by the wizard can be changed with the
dashmate config Command.
A detailed readme file describes all of the features available, and easy-to-use documentation is available for users who want to try setting up a VPS from scratch and then using Dashmate to set up a Dash masternode. A full length video demonstrating the process of installing Dashmate and using it to launch and register a Masternode on the testnet is shown below and 1000+ tDASH are available on the tap with the promo code “Masternode”. Try it out and don’t hesitate to open issues or pull requests if you find bugs or want to suggest new features!