dash/doc/release-notes/dash/release-notes-0.16.0.1.md

47 KiB
Raw Blame History

Dash Core version 0.16

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.

This release is mandatory for all nodes.

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 older than 0.14.0.3 is no longer supported due to changes in the "evodb" database format. If you need to use an older version, you must either reindex or re-sync the whole chain.

Downgrade of masternodes to < 0.16

Starting with this release, masternodes will verify the protocol version of other masternodes. This will result in PoSe punishment/banning for outdated masternodes, so downgrading is not recommended.

Notable changes

Block Reward Reallocation

This version implements Block Reward Reallocation which was proposed in order to slow the growth rate of Dashs circulating supply by encouraging the formation of masternodes and was voted in by the network. The resulting allocation will split all non-proposal block rewards 40% toward miners and 60% toward masternodes in the end-state once the transition period is complete.

The reallocation will take place over 4.5 years with a total of 18 reallocation periods between the start and end state. The transition is being made gradually to avoid market volatility and minimize network disruption.

Note that this is a hardfork which must be activated by miners. To do this they should start creating blocks signalling bit 5 in the version field of the block header.

Reallocation periods

Each reallocation period will last three superblock cycles (approximately one quarter). The following table shows the split of the non-proposal block rewards during each period.

Event Miner Masternode
Now 50.0% 50.0%
1 48.7% 51.3%
2 47.4% 52.6%
3 46.7% 53.3%
4 46.0% 54.0%
5 45.4% 54.6%
6 44.8% 55.2%
7 44.3% 55.7%
8 43.8% 56.2%
9 43.3% 56.7%
10 42.8% 57.2%
11 42.3% 57.7%
12 41.8% 58.2%
13 41.5% 58.5%
14 41.2% 58.8%
15 40.9% 59.1%
16 40.6% 59.4%
17 40.3% 59.7%
18 40.1% 59.9%
End 40.0% 60.0%

Dynamic Activation Thresholds

In Dash we have used lower thresholds (80% vs 95% in BTC) to activate upgrades via a BIP9-like mechanism for quite some time. While it's preferable to have as much of the network hashrate signal update readiness as possible, this can result in quite lengthy upgrades if one large non-upgraded entity stalls all progress. Simply lowering thresholds even further can result in network upgrades occurring too quickly and potentially introducing network instability. This version implements BIP9-like dynamic activation thresholds which drop from some initial level to a minimally acceptable one over time at an increasing rate. This provides a safe non-blocking way of activating proposals.

This mechanism applies to the Block Reward Reallocation proposal mentioned above. Its initial threshold is 80% and it will decrease to a minimum of 60% over the course of 10 periods. Each period is 4032 blocks (approximately one week).

Concentrated Recovery

In the current system, signature shares are propagated to all LLMQ members until one of them has collected enough shares to recover the signature. All members keep propagating and verifying each share until this recovered signature is propagated in the LLMQ. This causes significant load on the LLMQ and results in decreased throughput.

This new system initially sends all shares to a single deterministically selected node, so that this node can recover the signature and propagate the recovered signature. This way only the recovered signature needs to be propagated and verified by all members. After sending their share to this node, each member waits for a timeout and then sends their share to another deterministically selected member. This process is repeated until a recovered signature is finally created and propagated.

This timeout begins at two seconds and increases exponentially up to ten seconds (i.e. 2,4,8,10,10) for each node that times out. This is to minimize the time taken to generate a signature if the recovery node is down, while also minimizing the traffic generated when the network is under stress.

The new system is activated with the newly added SPORK_21_QUORUM_ALL_CONNECTED which has two hardcoded values with a special meaning: 0 activates Concentrated Recovery for every LLMQ and 1 excludes 400_60 and 400_85 quorums.

Increased number of masternode connections

To implement "Concentrated Recovery", it is now necessary for all members of a LLMQ to connect to all other members of the same LLMQ. This significantly increases the general connection count for masternodes. Although these intra-quorum connections are less resource intensive than normal p2p connections (as they only exchange LLMQ/masternode related messages), masternode hardware and network requirements will still be higher than before.

Initially this change will only be activated for the smaller LLMQs (50 members). Eventually it may be activated for larger quorums (400 members).

This is also controlled via SPORK_21_QUORUM_ALL_CONNECTED.

Masternode Connection Probing

While each LLMQ member must have a connection to each other member, it's not necessary for all members to actually connect to all other members. This is because only one of a pair of two masternodes need to initiate the connection while the other one can wait for an incoming connection. Probing is done in the case where a masternode doesn't really need an outbound connection, but still wants to verify that the other side has its port open. This is done by initiating a short lived connection, waiting for MNAUTH to succeed and then disconnecting again.

After this process, each member of a LLMQ knows which members are unable to accept connections, after which they will vote on these members to be "bad".

Masternode Minimum Protocol Version Checks

Members of LLMQs will now also check all other members for minimum protocol versions while in DKG. If a masternode determines that another LLMQ member has a protocol version that is too low, it will vote for the other member to be "bad".

PoSe punishment/banning

If 80% of all LLMQ members voted for the same member to be bad, it is excluded in the final stages of the DKG. This causes the bad masternode to get PoSe punished and then eventually PoSe banned.

Network performance improvements

This version of Dash Core includes multiple optimizations to the network and p2p message handling code. The most important one is the introduction of epoll on linux-based systems. This removes most of the CPU overhead caused by the sub-optimal use of select, which could easily use up 50-80% of the CPU time spent in the network thread when many connections were involved.

Since these optimizations are exclusive to linux, it is possible that masternodes hosted on windows servers will be unable to handle the network load and should consider migrating to a linux based operating system.

Other improvements were made to the p2p message handling code, so that LLMQ related connections do less work than full/normal p2p connections.

Wallet files

The --wallet=<path> option now accepts full paths instead of requiring wallets to be located in the -walletdir directory.

If --wallet=<path> is specified with a path that does not exist, it will now create a wallet directory at the specified location (containing a wallet.dat data file, a db.log file, and database/log.?????????? files) instead of just creating a data file at the path and storing log files in the parent directory. This should make backing up wallets more straightforward than before because the specified wallet path can just be directly archived without having to look in the parent directory for transaction log files.

For backwards compatibility, wallet paths that are names of existing data files in the --walletdir directory will continue to be accepted and interpreted the same as before.

When Dash Core is not started with any --wallet=<path> options, the name of the default wallet returned by getwalletinfo and listwallets RPCs is now the empty string "" instead of "wallet.dat". If Dash Core is started with any --wallet=<path> options, there is no change in behavior, and the name of any wallet is just its <path> string.

PrivateSend coin management improvements

A new algorithm for the creation of mixing denominations was implemented which should reduce the number of the smallest inputs created and give users more control on soft and hard caps. A much more accurate fee management algorithm was also implemented which should fix issues for users who have custom fees specified in wallet config or in times when network is under load.

There is a new "PrivateSend" tab in the GUI which allows spending fully mixed coins only. The CoinControl feature was also improved to display coins based on the tab it was opened in, to protect users from accidentally spending mixed and non-mixed coins in the same transaction and to give better overview of spendable mixed coins.

PrivateSend Random Round Mixing

Some potential attacks on PrivateSend assume that all inputs had been mixed for the same number of rounds (up to 16). While this assumption alone is not enough to break PrivateSend privacy, it could still provide some additional information for other methods like cluster analysis and help to narrow results.

With Random Round Mixing, an input will be mixed to N rounds like prior. However, at this point, a salted hash of each input is used to pick ~50% of inputs to be mixed for another round. This rule is then executed again on the new inputs. This results in an exponential decay where if you mix a set of inputs, half of those inputs will be mixed for N rounds, 1/4 will be mixed N+1, 1/8 will be mixed N+2, etc. Current implementation caps it at N+3 which results in mixing an average of N+0.875 rounds and sounds like a reasonable compromise given the privacy gains.

GUI changes

All dialogs, tabs, icons, colors and interface elements were reworked to improve user experience, let the wallet look more consistent and to make the GUI more flexible. There is a new "Appearance setup" dialog that will show up on the first start of this version and a corresponding tab has been added to the options which allows the user to pick a theme and to tweak the font family, the font weight and the font size. This feature specifically should help users who had font size/scaling issues previously.

For advanced users and developers there is a new way to control the wallet's look by specifying a path to custom css files via --custom-css-dir. Additionally, the new --debug-ui will force Dash Core to reload the custom css files as soon as they get updated which makes it possible to see and debug all css adjustments live in the running GUI.

From now on the "Pay To" field in "Send" and "PrivateSend" tabs also accepts Dash URIs. The Dash address and the amount from the URI are assigned to corresponding fields automatically if a Dash URI gets pasted into the field.

Sporks

Two new sporks were introduced in this version:

  • SPORK_21_QUORUM_ALL_CONNECTED allows to control Concentrated Recovery and Masternode Probing activation;
  • SPORK_22_PS_MORE_PARTICIPANTS raises the number of users that can participate in a single PrivateSend mixing transaction to 20.

Sporks SPORK_15_DETERMINISTIC_MNS_ENABLED, SPORK_16_INSTANTSEND_AUTOLOCKS and SPORK_20_INSTANTSEND_LLMQ_BASED which were previously deprecated in v0.15 are completely removed now. SPORK_6_NEW_SIGS was never activated on mainnet and was also removed in this version.

Build system

The minimum version of the GCC compiler required to compile Dash Core is now 4.8. The minimum version of Qt is now 5.5.1. Some packages in depends/ as well as secp256k1 and leveldb subtrees were updated to newer versions.

RPC changes

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

  • getpeerinfo has new field masternode to indicate whether connection was due to masternode connection attempt
  • getprivatesendinfo denoms field was replaced by denoms_goal and denoms_hardcap
  • listunspent has new filter option coinType to be able to filter different types of coins (all, mixed etc.)
  • protx diff returns more detailed information about new quorums
  • quorum dkgstatus shows quorumConnections for each LLMQ with detailed information about each participating masternode
  • quorum sign has an optional quorumHash argument to pick the exact quorum
  • socketevents in getnetworkinfo rpc shows the socket events mode, either epoll, poll or select

There are also new RPC commands:

  • quorum selectquorum returns the quorum that would/should sign a request

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

  • help-console for more info about using console in Qt
  • loadwallet loads a wallet from a wallet file or directory
  • rescanblockchain rescans the local blockchain for wallet related transactions
  • savemempool dumps the mempool to disk

Please check Bitcoin Core 0.16 release notes in a section below and help <command> in rpc for more information.

Command-line options

Changes in existing cmd-line options:

New cmd-line options:

  • --custom-css-dir
  • --debug-ui
  • --disablegovernance
  • --font-family
  • --font-scale
  • --font-weight-bold
  • --font-weight-normal
  • --llmqdevnetparams
  • --llmqtestparams
  • --privatesenddenomsgoal
  • --privatesenddenomshardcap
  • --socketevents

Few cmd-line options are no longer supported:

  • --litemode
  • --privatesenddenoms

There are also new command-line options backported from Bitcoin Core 0.16:

  • --addrmantest
  • --debuglogfile
  • --deprecatedrpc
  • --enablebip61
  • --getinfo
  • --stdinrpcpass

Please check Bitcoin Core 0.16 release notes in a section below and Help -> Command-line options in Qt wallet or dashd --help for more information.

Backports from Bitcoin Core 0.16

Most of the changes between Bitcoin Core 0.15 and Bitcoin Core 0.16 have been backported into Dash Core 0.16. 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.16 in following docs:

Some other individual PRs were backported from versions 0.17+, you can find the full list of backported PRs and additional fixes in release-notes-0.16-backports.md

Miscellaneous

A lot of refactoring, code cleanups and other small fixes were done in this release.

0.16 Change log

See detailed set of changes.

  • 37fe9a6e2f Fix mempool sync (#3725)
  • 69b77765ba qt: Fix font family updates (#3746)
  • cf2da32ffe qt: Fix font size and scaling issues (#3734)
  • 586f166499 qt: Fix Recent transactions list height (#3744)
  • 12d0782071 Translations 2020-09 (#3736)
  • fc8ca6ad50 Bump few things and update man pages for v0.16 (#3737)
  • 8e6706dede qt: Add PrivateSend tab in OptionsDialog, allow to show/hide PS UI (#3717)
  • dbfdf8cb15 qt: Finetune OverviewPage (#3715)
  • 9028712b60 qt: Finetune TransactionsView (#3710)
  • f4e3bf95d0 qt: Finetune CoinControlDialog + bitcoin#14828 (#3701)
  • e405f553b9 RPC: Update getprivatesendinfo help (#3727)
  • b4a78fb285 Fix testnet icon (#3726)
  • 3650ee6556 qt: Remove unused assets (#3721)
  • cb078422cd qt: Finetune RPCConsole (#3720)
  • a198a74a4f privatesend: Avoid interacting with keypool in CTransactionBuilder ctor (#3723)
  • f601122cbd qt: Hide remaining PrivateSend UI if PrivateSend is not enabled (#3716)
  • c7896eb657 qt: Disable missing macOS focus rects in AddressBookPage (#3711)
  • c136522e84 qt: Finetune Options Dialog (#3709)
  • bb0d5d4808 qt: Make sure send confirmation dialog uses correct font settings (#3714)
  • ab5ffe3c11 qt: Use scaled font size for all QToolTip instances (#3708)
  • 42b606ea76 qt: Make sure font size in TransactionDescDialog is adjusted properly (#3707)
  • 8fa280140a qt: Tweak few strings (#3706)
  • a70056c5a8 privatesend: Implement Random Round Mixing (#3661)
  • eb163c53a5 Implement dynamic activation thresholds (#3692)
  • 7d6aba47cf Implement Block Reward Reallocation (#3691)
  • 19aab3a1d8 qt|wallet: Fix "Use available balance" for PrivateSend (#3700)
  • 37af70a188 Merge #13622: Remove mapRequest tracking that just effects Qt display. (#3694)
  • e13c746a7d chainparams: Remove llmq_50_60 from regtest (#3696)
  • f2c1a9213c Fix two potential issues in the way pending islocks are processed (#3678)
  • 01a3a6c81a qt: Finetune ModalOverlay (#3699)
  • 16f9d94404 qt: Make sure the statusbar reflects internal states correct (#3698)
  • 9e425d66c6 Partially merge #3604:
  • 2bb94c73eb masternode|net|rpc: Improve masternode sync process (#3690)
  • aa81a06264 masternode|rpc: Remove unused code (#3689)
  • 2e92237865 qt: Improved status bar (#3688)
  • 54ed089f97 test: Implement unit tests for CTransactionBuilder (#3677)
  • ab0f789be6 wallet: Fix and improve CWallet::CreateTransaction (#3668)
  • dd55609d6b test: Implement unit tests for CWallet::CreateTransaction (#3667)
  • 9c988d5b5a privatesend|wallet|qt: Improve calculations in CreateDenominated/MakeCollateralAmounts (#3657)
  • ba2dcb0399 qt: Update assets and colorize them theme related (#3574)
  • 50d7a2fecf qt: Ignore GUIUtil::updateFont calls until GUIUtil::loadFonts was called (#3687)
  • 608f481a9c qt: Fix block update signals/slots in BitcoinGUI and SendCoinsDialog (#3685)
  • 25e4fed75b QT: add last block hash to debug ui (#3672)
  • 195dcad1ee trivial/docs: minor adjustments to PrivateSend help text (#3669)
  • b1a35b2d32 Merge #13007: test: Fix dangling wallet pointer in vpwallets (#3666)
  • f9bf42cb90 Harden spork6 logic then remove spork6 (#3662)
  • 604d6a4225 Fix some translation issues (#3656)
  • 60d298376b Fix crash on splash screen when wallet fails to load (#3629)
  • ca76dd0868 qt: Give PrivateSend separate instances of SendCoinsDialog + CCoinControl (#3625)
  • 0969c2d268 qt: Splashscreen redesign (#3613)
  • 966be38c79 qt: Make sure stylesheet updates of -debug-ui are activated (#3623)
  • 0ed7f1672c qt: Add missing placeholders (#3575)
  • 103fda2cb7 qt: Fix appearancewidget.h to make lint-include-guards.sh happy (#3627)
  • 2cc36dffde qt: Drop PlatformStyle (#3573)
  • b073ae9853 qt: Redesign scrollbar styles (#3571)
  • 1a2867f886 qt: Introduce appearance tab and setup dialog (#3568)
  • d44611bc2b qt: General qt/c++ related fixes and updates (#3562)
  • d22ab43910 qt: Introduce platform specific css sections (#3570)
  • a16cfa77de qt: Redesign BitcoinAmountField (#3569)
  • 7db9909a17 qt: Introduce runtime theme changes (#3559)
  • b3738648d6 qt: General CSS related redesigns (#3563)
  • 1dea248d0d qt: Make use of GUIUtil themed colors/styles (#3561)
  • 06d69d74c2 qt: Replace usage of QTabBar with custom replacement (#3560)
  • edfc3a4646 qt: Call GUIUtil::loadFonts earlier (#3593)
  • f371e4771c qt: Add -debug-ui command line parameter (#3558)
  • dde4ab5f84 qt: Add -custom-css-dir commmand line parameter (#3557)
  • 067622764c qt: Disable macOS system focus rectangles for dash themes (#3556)
  • d296cbdca1 qt: Implement application wide font management (#3555)
  • b409254587 qt: Redesign of the main toolbar (#3554)
  • c5fcc811d6 qt: Generalized css files, simple design changes, added scripts to keep track of color usage (#3508)
  • 8aeeb97995 Print exception origin in crash messages (#3653)
  • bd5c047e28 Implement a safer version of GetCrashInfoFromException (#3652)
  • 4414b5c3c7 llmq: Fix spork check in CSigSharesManager::ForceReAnnouncement (#3650)
  • c232f2a12d [RPC] Show address of fundDest when no funds (#3649)
  • abe3d578b2 Include protocol version into MNAUTH (#3631)
  • 4db8968d4a rpc: update help text for BLS operator key arguments (#3628)
  • bbb0064b60 init: Fix crash due to -litemode and improve its deprecation warning (#3626)
  • 8d99e7836c Fix -resetguisettings (#3624)
  • 508fc2db4b privatesend: Increase max participants to 20 (#3610)
  • f425316eed util: Change TraceThread's "name" type: "const char*" -> "const std::string" (#3609)
  • a170c649b8 Fail GetTransaction when the block from txindex is not in mapBlockIndex (#3606)
  • 62c3fb5748 llmq: Fix thread handling in CDKGSessionManager and CDKGSessionHandler (#3601)
  • aa3bec6106 evo: Avoid some unnecessary copying in BuildNewListFromBlock (#3594)
  • 6a249f59b6 Merge #13564: [wallet] loadwallet shouldn't create new wallets. (#3592)
  • b45b1373a0 Prefer creating larger denoms at the second step of CreateDenominated (#3589)
  • bac02d0c9a More accurate fee calculation in CreateDenominated (#3588)
  • baf18a35d5 More pruning improvements (#3579)
  • 0297eb428a Change litemode to disablegovernance (#3577)
  • da38e2bf83 Change litemode from disabling all Dash specific features to disabling governance validation (#3488)
  • 772b6bfe7c Disable new connection handling and concentrated recovery for large LLMQs (#3548)
  • c72bc354f8 contrib: Move dustinface.pgp into contrib/gitian-keys (#3547)
  • 0b70380fff Fix argument handling for devnets (#3549)
  • 5f9fc5edb6 Fix CSigningManager::VerifyRecoveredSig (#3546)
  • 00486eca06 Use exponential backoff timeouts for recovery (#3535)
  • 34c354eaad Dont skip sendmessages (#3534)
  • 40814d945e Avoid overriding validation states, return more specific states in some cases (#3541)
  • 139f589b6f Don'd send SENDXXX messages to fMasternode connections (#3537)
  • f064964678 Only relay DKG messages to intra quorum connection members (#3536)
  • d08b971ddb Use correct CURRENT_VERSION constants when creating ProTx-es via rpc (#3524)
  • 4ae57a2276 qt: Fix label updates in SendCoinsEntry (#3523)
  • 1a54f0392d Revert "implemented labeler which automatically adds RPC label to anything modifying RPC files (#3499)" (#3517)
  • acff9998e1 UpgradeDBIfNeeded failure should require reindexing (#3516)
  • 1163fc70a2 Use correct CURRENT_VERSION constants when checking ProTx version (#3515)
  • 0186fdfe60 Fix chainlock scheduler handling (#3514)
  • b4008ee4fc Some Dashification (#3513)
  • ab5aeed920 Optimize MN lists cache (#3506)
  • 91d9329093 Make CDeterministicMN::internalId private to make sure it's set/accessed properly (#3505)
  • 232430fac9 Fix ProcessNewBlock vs EnforceBestChainLock deadlocks in ActivateBestChain (#3492)
  • fe98b81b80 implemented labeler which automatically adds RPC label to anything modifying RPC files (#3499)
  • ae5faf23da Better error handling while processing special txes (#3504)
  • 13a45ec323 rpc: Validate provided keys for query_options parameter in listunspent (#3507)
  • 9b47883884 contrib: Added dustinface.pgp (#3502)
  • 048503bcb5 qt: Some UI fixes and improvements (#3500)
  • 8fcda67a54 Remove spork 15, 16, 20 (#3493)
  • 9d3546baee Reintroduce mixing hard cap for all but the largest denom (#3489)
  • 397630a82c CI: Fix Gitlab nowallet and release builds (#3491)
  • a9fc40fb0a add "Verifying a Rebase" section to CONTRIBUTING.md (#3487)
  • 0c5c99243a rpc/wallet: Add coinType to queryOptions of listunspent (#3483)
  • 3a56ed9ca6 Fix NO_WALLET=1 build (#3490)
  • 926087aac6 Implement significantly improved createdenominations algorithm (#3479)
  • fe208c98e3 Feat. request for Dash Platform: quorum sign rpc command with additional quorumHash #3424 (#3446)
  • 4c1f65baae Fix #3241 UX/UI - Introduce PrivateSend tab which allows to spend fully mixed coins only (#3442)
  • f46617dbab add litemode information to help texts regarding CL/IS and change getbestchainlock to throw an error if running in litemode (#3478)
  • 5cabc8f5ca Introduce ONLY_PRIVATESEND coin type to select fully mixed coins only (#3459)
  • e0ff9af2b0 qt: Allow and process URIs pasted to the payTo field of SendCoinsEntry (#3475)
  • 1c20160933 Fix gobject submit: replace request params with txidFee (#3471)
  • 970c23d6e6 Remove logic for forcing chainlocks without DIP8 activation on testnet (#3470)
  • ae15299117 Feature request #3425 - Add information to "protx diff" (#3468)
  • 017c4779ca Fix recovery from coin db crashes (and dbcrash.py test) (#3467)
  • d5f403d3fd Refactor and fix GetRealOutpointPrivateSendRounds (#3460)
  • c06838e205 Streamline processing of pool state updates (#3458)
  • 538fcf2f1b Disable qt menu heuristics for openConfEditorAction (#3466)
  • 6e1c5480cd qt: Maximize the window if the dock icon gets clicked on macOS (#3465)
  • 3960d622c5 Fix incorrect nTimeFirstKey reset due to missing count of hd pubkeys (#3461)
  • d0bb30838b Various (mostly trivial) PS fixes (#3457)
  • b0963b079e Fix deadlocks (#3456)
  • bdce58756a Remove duplicated condition check (#3464)
  • 10baa4a857 Update Windows build instructions (#3453)
  • 7fdc4c7b0d change miniupnp lib server (#3452)
  • 911b5580e4 Fix typo in error log when EPOLL_CTL_ADD fails for wakeup pipe (#3451)
  • b775fa263f Lower DEFAULT_PRIVATESEND_DENOMS (#3434)
  • d59deea77b Implement epoll support (#3445)
  • 96faa8155e Don't disconnect masternode probes for a few seconds (#3449)
  • 608aed3d85 Don't try to connect to itself through CLLMQUtils::GetQuorumConnections (#3448)
  • d663f48085 Lower SELECT_TIMEOUT_MILLISECONDS for USE_WAKEUP_PIPE case (#3444)
  • f5f4ccbf24 Refactor/Prepare CConnman for upcoming epoll support (#3432)
  • 93aa640af8 Fix #3248: use blue logo for Traditional theme (#3441)
  • 3d24290bcb Take all nodes into account in check_sigs instead of just just masternodes (#3437)
  • d06597a421 [Trivial] Adjust some text in mnauth.cpp (#3413)
  • de931a25a3 Wakeup wakeup-pipe when new peers are added (#3433)
  • 75a1968c96 Fix abandonconflict.py (#3436)
  • 2610e718cd Don't delete MN list snapshots and diffs from DB when reorgs take place (#3435)
  • 6d83b0a053 Make socketevents mode (poll vs select) configurable via parameter (#3431)
  • 9a8caf0986 Remove fix for fNetworkActive vs OpenNetworkConnection race (#3430)
  • 96ed9fae39 Fix flushing of rejects before disconnecting (#3429)
  • 0cb385c567 Improve network connections related logging (#3428)
  • d5092c44cb Make sure that cleanup is not triggered too early in llmq-signing.py (#3427)
  • 402b13907d Only call DisconnectNodes once per second (#3421)
  • ee995ef02a Implement more reliable wait_for_masternode_probes in test framework (#3422)
  • 755a23ca00 Always pass current mocktime to started nodes (#3423)
  • 1e30054b9e Avoid calling SendMessages (and others) for all nodes all the time (#3420)
  • 8aa85c084b Deterministically choose which peers to drop on duplicate MNAUTH (#3419)
  • 79f0bb1033 Fix crash in validateaddress (#3418)
  • d032d02f10 Multiple fixes for failing tests (#3410)
  • e20c63f535 A few simple/trivial optimizations (#3398)
  • 9bcdeaea57 Avoid unnecessary processing/verification of reconstructed recovered signatures (#3399)
  • 38556a3d49 Don't try to connect to masternodes that we already have a connection to (#3401)
  • 0e56e32c22 Add cache for CBlockTreeDB::HasTxIndex (#3402)
  • 2dff0501e9 Remove semaphore for masternode connections (#3403)
  • c1d9dd553a FindDevNetGenesisBlock remove unused arg (#3405)
  • c7b6eb851d Implement "concentrated recovery" of LLMQ signatures (#3389)
  • e518ce4e13 Increase DIP0008 bip9 window by 10 years (#3391)
  • 1aba86567b Implement checking of open ports and min proto versions in DKGs (#3390)
  • f43cdbc586 Gradually bump mocktime in wait_for_quorum_connections (#3388)
  • 3b904a0fa1 Add a note about dash_hash under dependencies in test/README.md (#3386)
  • b0668028b6 Implement more randomized behavior in GetQuorumConnections (#3385)
  • 27dfb5a34d Move wait_proc into wait_for_quorum_connections (#3384)
  • ff6f391aea Refactor Gitlab builds to use multiple stages (#3377)
  • a5a3e51554 Let all LLMQ members connect to each other instead of only a few ones (#3380)
  • 8ab1a3734a Bump mocktime each time waiting for phase1 fails (#3383)
  • c68b5f68aa Hold CEvoDB lock while iterating mined commitments (#3379)
  • deba865b17 Also verify quorumHash when waiting for DKG phases (#3382)
  • 17ece14f40 Better/more logging for DKGs (#3381)
  • 80be2520a2 Call FlushBackgroundCallbacks before resetting CConnman (#3378)
  • b6bdb8be9e Faster opening of masternode connections (#3375)
  • 94bcf85347 Refactor and unify quorum connection handling #(3367)
  • c0bb06e766 Multiple fixes for masternode connection handling (#3366)
  • f2ece1031f Remove logging for waking of select() (#3370)
  • cf1f8c3825 Support devnets in mininode (#3364)
  • f7ddee13a1 Fix possible segfault (#3365)
  • 40cdfe8662 Add peer id to "socket send error" logs (#3363)
  • 0fa2e14065 Fix issues introduced with asynchronous signal handling (#3369)
  • b188c5c25e Refactor some PrivateSend related code to use WalletModel instead of accessing the wallet directly from qt (#3345)
  • 05c134c783 Fix litemode vs txindex check (#3355)
  • c9881d0fc7 Masternodes must have required services enabled (#3350)
  • c6911354a1 Few tweaks for MakeCollateralAmounts (#3347)
  • 56b8e97ab0 Refactor and simplify PrivateSend based on the fact that we only mix one single denom at a time now (#3346)
  • af7cfd6a3f Define constants for keys in CInstantSendDb and use them instead of plain strings (#3352)
  • d52020926c Fix undefined behaviour in stacktrace printing. (#3357)
  • 4c01ca4573 Fix undefined behaviour in unordered_limitedmap and optimise it. (#3349)
  • 2521970a50 Add configurable devnet quorums (#3348)
  • 7075083f07 Detect mixing session readiness based on the current pool state (#3328)
  • dff9430c5e A couple of fixes for CActiveMasternodeManager::Init() (#3326)
  • 4af4432cb9 Add unit tests for CPrivateSend::IsCollateralAmount (#3310)
  • e1fc378ffd Refactor PS a bit and make it so that the expected flow for mixing is to time out and fallback (#3309)
  • 39b17fd5a3 Fix empty TRAVIS_COMMIT_RANGE for one-commit-branch builds in Travis (#3299)
  • f4f9f918dc [Pretty Trivial] Adjust some comments (#3252)
  • 26fb682e91 Speed up prevector initialization and vector assignment from prevectors (#3274)
  • 9c9cac6d67 Show quorum connections in "quorum dkgstatus" and use it in mine_quorum (#3271)
  • aca6af0a0e Use smaller LLMQs in regtest (#3269)
  • 88da298082 Add -whitelist to all nodes in smartfees.py (#3273)
  • 7e3ed76e54 Make a deep copy of extra_args before modifying it in set_dash_test_params (#3270)
  • 75bb7ec022 A few optimizations/speedups for Dash related tests (#3268)
  • 2afdc8c6f6 Add basic PrivateSend RPC Tests (#3254)
  • dc656e3236 Bump version to 0.16 on develop (#3239)
  • c182c6ca14 Upgrade Travis to use Bionic instead of Trusty (#3143)

Credits

Thanks to everyone who directly contributed to this release:

  • 10xcryptodev
  • Akshay CM (akshaynexus)
  • Alexander Block (codablock)
  • Cofresi
  • CryptoTeller
  • dustinface (xdustinface)
  • konez2k
  • Oleg Girko (OlegGirko)
  • PastaPastaPasta
  • Piter Bushnell (Bushstar)
  • sc-9310
  • 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: