Updated for MacOS 11.2
This guide describes how to build dashd, command-line utilities, and GUI on macOS
Note: The following is for Intel Macs only!
The following dependencies are required:
Library | Purpose | Description |
---|---|---|
automake | Build | Generate makefile |
libtool | Build | Shared library support |
pkg-config | Build | Configure compiler and linker flags |
boost | Utility | Library for threading, data structures, etc |
libevent | Networking | OS independent asynchronous networking |
The following dependencies are optional:
Library | Purpose | Description |
---|---|---|
berkeley-db@4 | Berkeley DB | Wallet storage (only needed when wallet enabled) |
qt@5 | GUI | GUI toolkit (only needed when GUI enabled) |
qrencode | QR codes in GUI | Generating QR codes (only needed when GUI enabled) |
zeromq | ZMQ notification | Allows generating ZMQ notifications (requires ZMQ version >= 4.0.0) |
sqlite | SQLite DB | Wallet storage (only needed when wallet enabled) |
miniupnpc | UPnP Support | Firewall-jumping support (needed for port mapping support) |
libnatpmp | NAT-PMP Support | Firewall-jumping support (needed for port mapping support) |
python3 | Testing | Python Interpreter (only needed when running the test suite) |
The following dependencies are optional packages required for deploying:
Library | Purpose | Description |
---|---|---|
librsvg | Deploy Dependency | Library to render SVG files |
ds_store | Deploy Dependency | Examine and modify .DS_Store files |
mac_alias | Deploy Dependency | Generate/Read binary alias and bookmark records |
See dependencies.md for a complete overview.
The commands in this guide should be executed in a Terminal application. macOS comes with a built-in Terminal located in:
/Applications/Utilities/Terminal.app
The Xcode Command Line Tools are a collection of build tools for macOS. These tools must be installed in order to build Dash Core from source.
To install, run the following command from your terminal:
xcode-select --install
Upon running the command, you should see a popup appear.
Click on Install
to continue the installation process.
Homebrew is a package manager for macOS that allows one to install packages from the command line easily. While several package managers are available for macOS, this guide will focus on Homebrew as it is the most popular. Since the examples in this guide which walk through the installation of a package will use Homebrew, it is recommended that you install it to follow along. Otherwise, you can adapt the commands to your package manager of choice.
To install the Homebrew package manager, see: https://brew.sh
Note: If you run into issues while installing Homebrew or pulling packages, refer to Homebrew's troubleshooting page.
The first step is to download the required dependencies. These dependencies represent the packages required to get a barebones installation up and running. To install, run the following from your terminal:
brew install automake libtool boost gmp pkg-config libevent
git
should already be installed by default on your system.
Now that all the required dependencies are installed, let's clone the Dash Core repository to a directory.
All build scripts and commands will run from this directory.
git clone https://github.com/dashpay/dash.git
It is not necessary to build wallet functionality to run dashd
or dash-qt
.
To enable legacy wallets, you must install berkeley-db@4
.
To enable descriptor wallets, sqlite
is required.
Skip berkeley-db@4
if you intend to exclusively use descriptor wallets.
berkeley-db@4
is required to enable support for legacy wallets.
Skip if you don't intend to use legacy wallets.
brew install berkeley-db@4
Note: Apple has included a useable sqlite
package since macOS 10.14.
You may not need to install this package.
sqlite
is required to enable support for descriptor wallets.
Skip if you don't intend to use descriptor wallets.
brew install sqlite
Dash Core includes a GUI built with the cross-platform Qt Framework.
To compile the GUI, we need to install qt@5
.
Skip if you don't intend to use the GUI.
brew install qt@5
Ensure that the qt@5
package is installed, not the qt
package.
If 'qt' is installed, the build process will fail.
if installed, remove the qt
package with the following command:
brew uninstall qt
Note: Building with Qt binaries downloaded from the Qt website is not officially supported. See the notes in #7714.
The GUI can encode addresses in a QR Code. To build in QR support for the GUI, install qrencode
.
Skip if not using the GUI or don't want QR code functionality.
brew install qrencode
miniupnpc may be used for UPnP port mapping. Skip if you do not need this functionality.
brew install miniupnpc
libnatpmp may be used for NAT-PMP port mapping. Skip if you do not need this functionality.
brew install libnatpmp
Note: UPnP and NAT-PMP support will be compiled in and disabled by default. Check out the further configuration section for more information.
Support for ZMQ notifications requires the following dependency. Skip if you do not need ZMQ functionality.
brew install zeromq
ZMQ is automatically compiled in and enabled if the dependency is detected. Check out the further configuration section for more information.
For more information on ZMQ, see: zmq.md
There is an included test suite that is useful for testing code changes when developing. To run the test suite (recommended), you will need to have Python 3 installed:
brew install python
You can deploy a .dmg
containing the Dash Core application using make deploy
.
This command depends on a couple of python packages, so it is required that you have python
installed.
Ensuring that python
is installed, you can install the deploy dependencies by running the following commands in your terminal:
pip3 install ds_store mac_alias
There are many ways to configure Dash Core, here are a few common examples:
If berkeley-db@4
is installed, then legacy wallet support will be built.
If sqlite
is installed, then descriptor wallet support will also be built.
Additionally, this explicitly disables the GUI.
./autogen.sh
./configure --with-gui=no
It is recommended to use Berkeley DB 4.8. If you have to build it yourself, you can use the installation script included in contrib/ like so:
./contrib/install_db4.sh .
This explicitly enables the GUI and disables legacy wallet support.
If qt
is not installed, this will throw an error.
If sqlite
is installed then descriptor wallet functionality will be built.
If sqlite
is not installed, then wallet functionality will be disabled.
./autogen.sh
./configure --without-bdb --with-gui=yes
./autogen.sh
./configure --without-wallet --with-gui=no
You may want to dig deeper into the configuration options to achieve your desired behavior. Examine the output of the following command for a full list of configuration options:
./configure -help
After configuration, you are ready to compile. Run the following in your terminal to compile Dash Core:
make # use "-j N" here for N parallel jobs
make check # Run tests if Python 3 is available
You can also create a .dmg
containing the .app
bundle by running the following command:
make deploy
Dash Core should now be available at ./src/dashd
.
If you compiled support for the GUI, it should be available at ./src/qt/dash-qt
.
The first time you run dashd
or dash-qt
, it will start downloading the blockchain.
This process could take many hours, or even days on slower than average systems.
By default, blockchain and wallet data files will be stored in:
/Users/${USER}/Library/Application Support/Dash/
Before running, you may create an empty configuration file:
mkdir -p "/Users/${USER}/Library/Application Support/DashCore"
touch "/Users/${USER}/Library/Application Support/DashCore/dash.conf"
chmod 600 "/Users/${USER}/Library/Application Support/DashCore/dash.conf"
You can monitor the download process by looking at the debug.log file:
tail -f $HOME/Library/Application\ Support/DashCore/debug.log
./src/dashd -daemon # Starts the dashd daemon.
./src/dash-cli --help # Outputs a list of command-line options.
./src/dash-cli help # Outputs a list of RPC commands when the daemon is running.
./src/qt/dash-qt -server # Starts the dash-qt server mode, allows dash-cli control