Dash Core Source Documentation (0.16.0.1)

Find detailed information regarding the Dash Core source code.

Dash Core version 0.15

Release is now available from:

https://www.dash.org/downloads/#wallets

This is a new major version release, bringing new features, various bugfixes and other improvements.

Please report bugs using the issue tracker at github:

https://github.com/dashpay/dash/issues

Upgrading and downgrading

How to Upgrade

If you are running an older version, shut it down. Wait until it has completely shut down (which might take a few minutes for older versions), then run the installer (on Windows) or just copy over /Applications/Dash-Qt (on Mac) or dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were using version < 0.13 you will have to reindex (start with -reindex-chainstate or -reindex) to make sure your wallet has all the new data synced. Upgrading from version 0.13 should not require any additional actions.

When upgrading from a version prior to 0.14.0.3, the first startup of Dash Core will run a migration process which can take a few minutes to finish. After the migration, a downgrade to an older version is only possible with a reindex (or reindex-chainstate).

Downgrade warning

Downgrade to a version < 0.14.0.3

Downgrading to a version smaller than 0.14.0.3 is not supported anymore due to changes in the "evodb" database format. If you need to use an older version, you have to perform a reindex or re-sync the whole chain.

Notable changes

Removal of the p2p alert system

The p2p alert system was designed to send messages to all nodes supporting it by someone who holds so called alert keys to notify such nodes in case of severe network issues. This version removes the alert p2p message and --alert option. Internal alerts, partition detection warnings and the --alertnotify option features remain.

Removal of the legacy InstantSend system

Version 0.14 introduced the new LLMQ-based InstantSend system which is designed to be much more scalable than the legacy one without sacrificing security. The new system also allows all transactions to be treated as InstantSend transactions. The legacy system was disabled together with the successful deployment of ChainLocks, but we had to keep supporting the legacy system for a while to ensure a smooth transition period. This version finally drops the legacy system completely.

Read more about ChainLocks: https://github.com/dashpay/dips/blob/master/dip-0008.md Read more about LLMQ-based InstantSend: https://github.com/dashpay/dips/blob/master/dip-0010.md

Sporks

The security level of ChainLocks and LLMQ-based InstantSend made sporks SPORK_5_INSTANTSEND_MAX_VALUE and SPORK_12_RECONSIDER_BLOCKS obsolete, so they are removed now. Sporks SPORK_15_DETERMINISTIC_MNS_ENABLED, SPORK_16_INSTANTSEND_AUTOLOCKS and SPORK_20_INSTANTSEND_LLMQ_BASED have no code logic behind them anymore because they were used as part of the DIP0003, DIP0008 and DIP0010 activation process which is finished now. They are still kept and relayed only to ensure smooth operation of v0.14 clients and will be removed in some future version.

Mempool sync improvements

Nodes joining the network will now try to sync their mempool from other v0.15+ peers via the mempool p2p message. This behaviour can be disabled via the new --syncmempool option. Nodes serving such requests will now also push inv p2p messages for InstandSend locks which are held for transactions in their mempool. These two changes should help new nodes to quickly catchup on start and detect any potential double-spend as soon as possible. This should also help wallets to slightly improve UX by showing the correct status of unconfirmed transactions locked via InstandSend, if they were sent while the receiving wallet was offline. Note that bloom-filters still apply to such inv messages, just like they do for transactions and locks that are relayed on a regular basis.

PrivateSend improvements

This version decouples the so called "Lite Mode" and client-side PrivateSend mixing, which allows client-side mixing on pruned nodes running with --litemode option. Such nodes will have to also specify the newly redefined --enableprivatesend option. Non-prunned nodes do not have to do this but they can use --enableprivatesend option to disable mixing completely instead. Please note that specifying this option does not start mixing automatically anymore (which was the case in previous versions). To automatically start mixing, use the new --privatesendautostart option in addition to --enableprivatesend. Additionally, PrivateSend can always be controlled with the privatesend RPC.

Thanks to LLMQ-based InstantSend and its ability to lock chains of unconfirmed transactions (and not only a single one like in the legacy system), PrivateSend mixing speed has improved significantly. In such an environment Liquidity Provider Mode, which was introduced a long time ago to support mixing volume, is no longer needed and is removed now. As such the --liquidityprovider option is not available anymore.

Some other improvements were also introduced to speed up mixing, e.g. by joining more queues or dropping potential malicious mixing participants faster by checking some rules earlier etc. Lots of related code was refactored to further improve its readability, which should make it easier for someone to re-implement PrivateSend correctly in other wallets if there is a desire to do so.

Wallet changes

Wallet internals were optimized to significantly improve performance which should be especially notable for huge wallets with tens of thousands of transactions or more. The GUI for such wallets should be much more responsive too now.

Running Masternodes from local wallets was deprecated a long time ago and starting from this version we disable wallet functionality on Masternodes completely.

GUI changes

The Qt GUI went through a refresh to follow branding color guides and to make it feel lighter. All old themes besides the Traditional one (the one with a minimal styling) were removed and instead a new Dark theme was added.

In this version we made a lot of optimizations to remove various lags and lockups, the GUI in general should feel much more smoother now, especially for huge wallets or when navigating through the masternode list. The latter has a few new columns (collateral, owner and voting addresses) which give more options to filter and/or sort the list. All issues with hi-dpi monitors should also be fixed now.

The "Send" popup dialog was slightly tweaked to improve the language and provide a bit more information about inputs included in the transaction, its size and the actual resulting fee rate. It will also show the number of inputs a PrivateSend transaction is going to consume and display a warning regarding sender privacy if this number is 10 or higher.

Changes in regtest and devnet p2p/rpc ports

Default p2p and rpc ports for devnets and regtest were changed to ensure their consistency and to avoid any potential interference with bitcoin's regtests. New default p2p/rpc ports for devnet are 19799/19798, for regtest - 19899/19898 respectively.

ZMQ changes

Added two new messages rawchainlocksig and rawtxlocksig which return the raw data of the block/transaction concatenated with the corresponding clsig/islock message respectively.

Crash reports and stack traces

Binaries built with Gitian (including all official releases) will from now on always have crash reports and crash hooks enabled. This means, that all binaries will print some information about the stack trace at the time of a crash. If no debug information is present at crash time (which is usually the case), the binaries will print a line that looks like this:

2020-01-06 14:41:08 Windows Exception: EXCEPTION_ACCESS_VIOLATION
No debug information available for stacktrace. You should add debug information and then run:
dashd.exe -printcrashinfo=bvcgc43iinzgc43ijfxgm3yba....

If you encounter such a crash, include these lines when you report the crash and we will be able to debug it further. Anyone interested in running the specified -printcrashinfo command can do so after copying the debug info file from the Gitian build to the same place where the binary is located. This will then print a detailed stack trace.

RPC changes

There are a few changes in existing RPC interfaces in this release:

  • no more instantsend field in various RPC commands
  • use-IS, use_is and instantsend options are deprecated in various RPC commands and have no effect anymore
  • added new merkleRootQuorums field in getblock RPC results
  • individual Dash-specific fields which were used to display soft-fork progress in getblockchaininfo are replaced with the backported statistics object
  • privatesend_balance field is shown in all related RPC results regardless of the Lite Mode or PrivateSend state
  • added pubKeyOperator field for each masternode in quorum info RPC response

There are also new RPC commands:

  • getbestchainlock
  • getmerkleblocks
  • getprivatesendinfo

getpoolinfo was deprecated in favor of getprivatesendinfo and no longer returns any data.

There are also new RPC commands backported from Bitcoin Core 0.15:

  • abortrescan
  • combinerawtransaction
  • getblockstats
  • getchaintxstats
  • listwallets
  • logging
  • uptime

Make sure to check Bitcoin Core 0.15 release notes in a section below for more RPC changes.

See help command in rpc for more info.

Command-line options

Changes in existing cmd-line options:

  • --enableprivatesend option has a new meaning now, see PrivateSend section for more info

New cmd-line options:

  • --printcrashinfo
  • --syncmempool
  • --privatesendautostart

Few cmd-line options are no longer supported:

  • --alerts
  • --masternode, deprecated, specifying --masternodeblsprivkey option alone is enough to enable masternode mode now
  • --liquidityprovider
  • --enableinstantsend, dropped due to removal of the Legacy InstantSend

Make sure to check Bitcoin Core 0.15 release notes in a section below for more changes in command-line options.

See Help -> Command-line options in Qt wallet or dashd --help for more info.

Build system

This version always includes stacktraces in binaries now, --enable-stacktraces option is no longer available. Instead you can choose if you want to hook crash reporting into various types of crashes by using --enable-crash-hooks option (default is no). When using this option on macOS make sure to build binaries with make -C src osx_debug.

Backports from Bitcoin Core 0.15

Most of the changes between Bitcoin Core 0.14 and Bitcoin Core 0.15 have been backported into Dash Core 0.15. We only excluded backports which do not align with Dash, like SegWit or RBF related changes.

You can read about changes brought by backporting from Bitcoin Core 0.15 in following docs:

Some other individual PRs were backported from versions 0.16+, you can find the full list of backported PRs and additional fixes in https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15-backports.md

Miscellaneous

A lot of refactoring, backports, code cleanups and other small fixes were done in this release. Dash-specific modules were reorganized in separate folders to make navigation through code a bit easier.

0.15 Change log

See detailed set of changes.

Credits

Thanks to everyone who directly contributed to this release:

  • Alexander Block (codablock)
  • Amir Abrams (AmirAbrams)
  • -k (charlesrocket)
  • Cofresi
  • Nathan Marley (nmarley)
  • PastaPastaPasta
  • Riku (rikublock)
  • strophy
  • taw00
  • thephez
  • UdjinM6

As well as everyone that submitted issues and reviewed pull requests.

Older releases

Dash was previously known as Darkcoin.

Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin which was first released on Jan/18/2014.

Darkcoin tree 0.9.x was the open source implementation of masternodes based on the 0.8.x tree and was first released on Mar/13/2014.

Darkcoin tree 0.10.x used to be the closed source implementation of Darksend which was released open source on Sep/25/2014.

Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, Darkcoin was rebranded to Dash.

Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10.

Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12.

These release are considered obsolete. Old release notes can be found here:

  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md "v0.14.0.5" released December/08/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md "v0.14.0.4" released November/22/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md "v0.14.0.3" released August/15/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md "v0.14.0.2" released July/4/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md "v0.14.0.1" released May/31/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md "v0.14.0" released May/22/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md "v0.13.3" released Apr/04/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md "v0.13.2" released Mar/15/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md "v0.13.1" released Feb/9/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md "v0.13.0" released Jan/14/2019
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md "v0.12.3.4" released Dec/14/2018
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md "v0.12.3.3" released Sep/19/2018
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md "v0.12.3.2" released Jul/09/2018
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md "v0.12.3.1" released Jul/03/2018
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md "v0.12.2.3" released Jan/12/2018
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md "v0.12.2.2" released Dec/17/2017
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md "v0.12.2" released Nov/08/2017
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md "v0.12.1" released Feb/06/2017
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md "v0.12.0" released Aug/15/2015
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md "v0.11.2" released Mar/04/2015
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md "v0.11.1" released Feb/10/2015
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md "v0.11.0" released Jan/15/2015
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md "v0.10.x" released Sep/25/2014
  • https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md "v0.9.x" released Mar/13/2014
Released under the MIT license