---
title: Dash Core Full Node Daemon
homepage: https://github.com/dashpay/dash
tagline: |
  dashd is the Full Node service for Digital Cash (DASH)
---

To update or switch versions, run `webi dashd@stable` (or `@v0.19`, `@beta`,
etc).

### Recommended Hardware

- 100GB+ Block Storage
- 8GB RAM
- 4 vCPUs
- **30 hours** for initial indexing

### Files

These are the files / directories that are created and/or modified with this
install:

```txt
~/.config/envman/PATH.env
~/.dashcore/dash.conf
~/.dashcore/wallets/
~/.local/bin/dashd-hd-service-install
~/.local/opt/dashcore/
/mnt/<BLK_VOL>/dashcore/
```

[`dashcore-utils`](../dashcore-utils/) will also be installed if not present.

## Cheat Sheet

> A DASH _Full Node_ syncs and indexes the DASH blockchain and can be used to
> broadcast transactions (sending money) and retrieve information about
> transactions, balances, etc. This "Dash Core" implementation is maintained by
> DCG.

To install as **a system service** with reasonable defaults, \
you can use these convenience scripts provided by Webi:

```sh
# USAGE
# dashd-hd-service-install [storage-volume] [testnet]
#
# EXAMPLE
dashd-hd-service-install
```

### QuickStart

0. Check that you have enough Storage and RAM
   - mainnet: 100GB+ Storage, 8GB RAM
   - testnet: 20GB+ Storage, 2GB RAM
1. Create a mount for your storage volume
   ```sh
   sudo mkdir -p /mnt/100gb-vol/
   sudo mount /dev/vda1 /mnt/100gb-vol/
   ```
2. Create a correctly permissioned `dashcore` directory
   ```sh
   sudo mkdir -p /mnt/100g-vol/dashcore/
   sudo chown -R "$(id -u -n):$(id -g -n)" /mnt/100gb-vol/dashcore/
   ```
3. Register `dashd` with the system launcher
   ```sh
   dashd-hd-service-install
   ```
4. Wait **about 30 hours** for initial sync and indexing to complete
5. Test with the DashCore CLI
   ```sh
   dash-cli getaddresstxids '{
     "addresses": ["XchrTJFPGFiror4zjXQRR7XTSN25YtLYhC"],
     "start": 0,
     "end":1000000000
   }'
   ```

### How to use DashCore CLI

After it completes the initial sync (about 4 hours), \
you can query address information:

```sh
# Balances
dash-cli getaddressbalance '{"addresses": ["XchrTJFPGFiror4zjXQRR7XTSN25YtLYhC"]}'

# UTXOs
dash-cli getaddressutxos '{"addresses": ["XpLVjhDd6vNJamtcJXcrpQYA1sE6fmxVDa"]}'

# TXes
dash-cli getaddresstxids '{
    "addresses": ["XchrTJFPGFiror4zjXQRR7XTSN25YtLYhC"],
    "start": 0,
    "end":1000000000
}'

# Broadcast TX
dash-cli -testnet sendrawtransaction 01000000...0c0226b428a488ac00000000
```

### How to Run dashd Manually

To run **in the foreground**: \
(add `-testnet` to run on testnet)

```sh
dashd \
    -usehd \
    -conf="$HOME/.dashcore/dash.conf" \
    -settings="$HOME/.dashcore/settings.json" \
    -walletdir="$HOME/.dashcore/wallets/" \
    -datadir="/mnt/100gb/dashcore/_data/" \
    -blocksdir="/mnt/100gb/dashcore/_caches/" \
    -addressindex=1 \
    -timestampindex=1 \
    -txindex=1 \
    -spentindex=1
```

**Warning**: killing the process with ctrl+c before the first full sync may
corrupt the data and require starting over (see below)

### Server Requirements

150MB for Applications on OS Storage

For **mainnet**:

- 100GB Block Storage Volume \
  - minimum of 40GB (blockchain) + 50GB (indexes) as of 2023
  - plus 4-8GB per year
- 8GB RAM \
  (min 4GB RAM + 4GB swap, otherwise it crashes during indexing)
- 4 vCPUs \
  (min 2x 2.0GHz vCPUs, higher clock speed is better than more cors)
- 100 megabit network
- 28-30 hours to sync and index in ideal conditions
  - minimum of 4 hours to sync
  - approximately 28 hours to index regardless of sync time

For **testnet**:

- 20GB Block Storage Volume \
  - min 4GB (blockchain) + 5 GB (indexes) as of 2022
  - plus 0.5-1GB/year
- 2GB RAM
- 1 vCPU
- 4 hours to sync and index in ideal conditions
  - 1 hour to sync
  - about 4 hours to index regardless of sync time

### How to configure `dash.conf`

You can set options for `main`, `test`, and `regtest`.

If you intend to use the various RPCs you must enable indexes.

```ini
txindex=1
addressindex=1
timestampindex=1
spentindex=1

[main]
rpcuser=alice
rpcpassword=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
bind=127.0.0.1:9999
rpcbind=127.0.0.1:9998
rpcconnect=127.0.0.1:9998
rpcallowip=127.0.0.1/16
zmqpubrawtx=tcp://127.0.0.1:28332
zmqpubrawtxlock=tcp://127.0.0.1:28332
zmqpubrawchainlock=tcp://127.0.0.1:28332
zmqpubhashchainlock=tcp://127.0.0.1:28332

[test]
rpcuser=alice-test
rpcpassword=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
bind=127.0.0.1:19999
rpcbind=127.0.0.1:19998
rpcconnect=127.0.0.1:19998
rpcallowip=127.0.0.1/16
zmqpubrawtx=tcp://127.0.0.1:18009
zmqpubrawtxlock=tcp://127.0.0.1:18009
zmqpubrawchainlock=tcp://127.0.0.1:18009
zmqpubhashchainlock=tcp://127.0.0.1:18009
```

See also:

- [dash: examples/dash.conf](https://github.com/dashpay/dash/blob/549e347b742cb4dc63807a292729e658218d7d0f/contrib/debian/examples/dash.conf#L2)
- [dashd: Indexing Options](https://docs.dash.org/projects/core/en/19.0.0/docs/dashcore/wallet-arguments-and-commands-dashd.html#indexing-options)

### How to Separate Caches from Data

You can make your data much safer by separating it from the caches you may need
to delete by setting:

- `-walletdir=` your money!!
- `-settings=` desktop app settings!
- `-conf=` server settings
- `-datadir=` generic caches

```sh
dashd \
    -usehd \
    -conf="$HOME/.config/dashcore/dash.conf" \
    -walletdir="$HOME/.config/dashcore/wallets/" \
    -datadir="/mnt/dashcore/dashcore/"
```

### How to Run as a System Service

You can use [`serviceman`](../serviceman/):

**Linux**

```sh
serviceman add --name 'dashd' -- \
    dashd \
        -usehd \
        -conf="$HOME/.dashcore/dash.conf" \
        -settings="$HOME/.dashcore/settings.json" \
        -walletdir="$HOME/.dashcore/wallets/" \
        -datadir="/mnt/100gb/dashcore/_data/" \
        -blocksdir="/mnt/100gb/dashcore/_caches/"
```

**Mac**

```sh
serviceman add --name 'dashd' -- \
    dashd \
        -usehd \
        -conf="$HOME/.dashcore/dash.conf" \
        -settings="$HOME/.dashcore/settings.json" \
        -walletdir="$HOME/.dashcore/wallets/" \
        -datadir="/Volumes/100gb/dashcore/_data/" \
        -blocksdir="/Volumes/100gb/dashcore/_caches/"
```

**Windows**

(be sure modify variables appropriately for `cmd.exe` or `powershell`)

```sh
& serviceman add \
    --name dashd \
    --force \
    -- \
    dashd \
        -usehd \
        -conf="$Env:UserProfile/.dashcore/dash.conf" \
        -settings="$Env:UserProfile/.dashcore/settings.json" \
        -walletdir="$Env:UserProfile/.dashcore/wallets/" \
        -datadir="D:/100gb/dashcore/_data/" \
        -blocksdir="D:/100gb/dashcore/_caches/"
```

### How to Trim Excessive Storage

If the service **crashes** during the initial syncing and indexing (such as when
using less than 4GB RAM + 4GB Swap) it **will not resume** (typically).

Instead it will create duplicate new data, and not clean up the old data.

You may need to **delete /mnt/<BLK_VOL>/dashcore/** and start from scratch
(being careful not to delete any wallet information, if you have any).

Generally I wouldn't recommend storing money on a Full Node -since it's
primarily used for creating APIs for transactions and validations - but if you
do, please always make sure to use `-usehd` and print out your Wallet Phrase as
a failsafe.

### More Tools

In particular, you may find these useful:

- [`dashphrase`](https://github.com/dashhive/dashphrase-cli) for generating
  secure Wallet Phrases
- [`dashsight`](https://github.com/dashhive/dashphrase-cli) for inspecting
  balances, transactions, etc via API (without downloading the indexes)

### More Documentation

All of the **command line flags and options** for the Dash Core Desktop Wallet
are documented between these two pages:

- https://docs.dash.org/projects/core/en/stable/docs/dashcore/wallet-arguments-and-commands-dash-qt.html
- https://docs.dash.org/projects/core/en/stable/docs/dashcore/wallet-arguments-and-commands-dashd.html

The **config files** `dash.conf` (mainly for _Full Nodes_) and `settings.json`
(mainly for Desktop Wallets) are documented at:

- <https://github.com/dashpay/dash/blob/master/contrib/debian/examples/dash.conf>
- <https://docs.dash.org/projects/core/en/stable/docs/dashcore/wallet-configuration-file.html>
