Dash Core Source Documentation (0.16.0.1)
Find detailed information regarding the Dash Core source code.
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 you will have to reindex (start with -reindex-chainstate or -reindex) to make sure your wallet has all the new data synced.
Downgrade warning
Downgrade to a version < 0.13.0.0
Downgrading to a version smaller than 0.13 is only supported as long as DIP2/DIP3 has not been activated. Activation will happen when enough miners signal compatibility through a BIP9 (bit 3) deployment.
Notable changes
DIP0002 - Special Transactions
Currently, new features and consensus mechanisms have to be implemented on top of the restrictions imposed by the simple nature of transactions. Since classical transactions can only carry inputs and outputs, they are most useful for financial transactions (i.e. transfers of quantities of Dash between addresses on the distributed ledger). These inputs and outputs carry scripts and signatures which are used to authorize and validate the transaction.
To implement new on-chain features and consensus mechanisms which do not fit into this concept of financial transactions, it is often necessary to misuse the inputs/outputs and their corresponding scripts to add additional data and meaning to a transaction. For example, new opcodes would have to be introduced to mark a transaction as something special and add a payload. In other cases, OP_RETURN has been misused to store data on-chain.
The introduction of special transactions will require the whole Dash ecosystem to perform a one-time mandatory update of all the software and libraries involved. Software and libraries will have to be changed so that they can differentiate between classical transactions and special transactions. Deserialization of a classical transaction remains unchanged. Deserialization of a special transaction requires the software/library to at least implement skipping and ignoring the extra_payload field. Validation and processing of the inputs and outputs of a special transaction must remain identical to classical transactions.
Read more: https://github.com/dashpay/dips/blob/master/dip-0002.md
DIP0003 - Deterministic Masternode Lists
This DIP provides on-chain consensus for masternode lists that in turn allow for deterministic quorum derivation and service scoring of masternode rewards.
In the previous system, each node maintained its own individual masternode list. Masternodes gained entry to that masternode list after the owner created a 1000 Dash UTXO and the masternode broadcast a "masternode broadcast/announcement" P2P message. This in turn set the masternode to a PRE_ENABLED state in the list maintained by each node. Masternodes then regularly broadcasted ping messages to keep the masternode in ENABLED state.
The previous system was maintained with consensus mechanisms that predated Satoshi Nakamoto’s solution to the Byzantine Generals Problem. This meant that each node needed to maintain their own individual masternode list with P2P messages and not a blockchain based solution. Due to the nature of the P2P system, there was no guarantee that nodes would come to the same conclusion on what the masternode list ought to look like. Discrepancies might, for example, occur due to a different order of message reception or if messages had not been received at all. This posed some risks in regard to consensus and limited the possible uses of quorums by the system.
Additionally, the previous system required a complicated and failure prone "masternode sync" after the initial startup of the node. After the blockchain was synced, the node would request the current masternode list, the reward payment votes, and then verify the received list. This process tended to take an unnecessarily long amount of time and sometimes resulted in failure.
In the new system, the masternode list is derived entirely from information found on-chain. New masternodes are added by new special transactions called Provider Registration Transactions (abbreviated as ProRegTx). They are only removed by spending the collateral. A ProRegTx is a special transaction which includes either a 1000-Dash collateral payment or a reference to it, along with other payload information (DIP0002).
The new system is going to be activated via combination of a BIP9-like deployment (bit 3) and new spork (SPORK_15_DETERMINISTIC_MNS_ENABLED).
Read more: https://github.com/dashpay/dips/blob/master/dip-0003.md Upgrade instructions: https://docs.dash.org/DIP3-masternode-upgrade
DIP0004 - Simplified Verification of Deterministic Masternode Lists
A verifiable and correct masternode list is foundational to many Dash features, including verification of an InstantSend transaction, mixing in PrivateSend and many features of Evolution. The deterministic masternode lists introduced by DIP0003 enable full derivation and verification of a masternode list via on-chain data. This, however, requires the full chain to be available to construct or verify this list. A SPV client does not have the full chain and thus would have to rely on a list provided by one or more nodes in the network. This provided list must be verifiable by the SPV client without needing the full chain. This DIP proposes additions to the block’s coinbase transaction and new P2P messages to get and update a masternode list with additional proof data.
Read more: https://github.com/dashpay/dips/blob/master/dip-0004.md
Mining
Please note that masternode payments in getblocktemplate rpc are now returned as an array and not as a single object anymore. Make sure to apply corresponding changes to your pool software.
Also, deterministic masternodes can now set their payout address to a P2SH address. The most common use case for P2SH is multisig but script can be pretty much anything. If your pool software doesn't recognize P2SH addresses, the simplest way to fix it is to use script field which shows scriptPubKey for each entry of masternode payments array in getblocktemplate.
And finally, after DIP0003 activation your pool software must be able to produce Coinbase Special Transaction https://github.com/dashpay/dips/blob/master/dip-0004.md#coinbase-special-transaction. Use coinbase_payload from getblocktemplate to get extra payload needed to construct this transaction.
PrivateSend
With further refactoring of PrivateSend code it became possible to implement mixing in few parallel mixing sessions at once from one single wallet. You can set number of mixing sessions via privatesendsessions cmd-line option or dash.conf. You can pick any number of sessions between 1 and 10, default is 4 which should be good enough for most users. For this feature to work you should also make sure that privatesendmultisession is set to 1 via cmd-line or Enable PrivateSend multi-session is enabled in GUI.
Introducing parallel mixing sessions should speed mixing up which makes it reasonable to add a new mixing denom (0.00100001 DASH) now while keeping all the old ones too. It also makes sense to allow more mixing rounds now, so the new default number of rounds is 4 and the maximum number of rounds is 16 now.
You can also adjust rounds and amount via setprivatesendrounds and setprivatesendamount RPC commands which override corresponding cmd-line params (privatesendrounds and privatesendamount respectively).
NOTE: Introducing the new denom and a couple of other changes made it incompatible with mixing on masternodes running on pre-0.13 software. Please keep using 0.12.3 local wallet to mix your coins until there is some significant number of masternodes running on version 0.13 to make sure you have enough masternodes to choose from when the wallet picks one to mix funds on.
InstantSend
With further improvements of networking code it's now possible to handle more load, so we are changing InstantSend to be always-on for so called "simple txes" - transactions with 4 or less inputs. Such transactions will be automatically locked even if they only pay minimal fee. According to stats, this means that up to 90% of currently observed transactions will became automatically locked via InstantSend with no additional cost to end users or any additional effort from wallet developers or other service providers.
This feature is going to be activated via combination of a BIP9-like deployment (we are reusing bit 3) and new spork (SPORK_16_INSTANTSEND_AUTOLOCKS).
Historically, InstantSend transactions were shown in GUI and RPC with more confirmations than regular ones, which caused quite a bit of confusion. This will no longer be the case, instead we are going to show real blockchain confirmations only and a separate indicator to show if transaction was locked via InstantSend or not. For GUI it's color highlight and a new column, for RPC commands - instantlock field and addlocked param.
One of the issues with InstantSend adoption by SPV wallets (besides lack of Deterministic Masternode List) was inability to filter all InstantSend messages the same way transactions are filtered. This should be fixed now and SPV wallets should only get lock votes for transactions they are interested in.
Another popular request was to preserve information about InstantSend locks between wallet restarts, which is now implemented. This data is stored in a new cache file instantsend.dat. You can safely remove it, if you don't need information about recent transaction locks for some reason (NOTE: make sure it's not one of your wallets!).
We also added new ZMQ notifications for double-spend attempts which try to override transactions locked via InstantSend - zmqpubrawinstantsenddoublespend and zmqpubhashinstantsenddoublespend.
Sporks
There are a couple of new sporks introduced in this version SPORK_15_DETERMINISTIC_MNS_ENABLED (block based) and SPORK_16_INSTANTSEND_AUTOLOCKS (timestamp based). There is aslo SPORK_17_QUORUM_DKG_ENABLED (timestamp based) which is going to be used on testnet only for now.
Spork data is stored in a new cache file (sporks.dat) now.
Governance
Introduction of Deterministic Masternodes requires replacing of the old masternode private key which was used both for operating a MN and for voting on proposals with a set of separate keys, preferably fresh new ones. This means that votes casted for proposals by Masternode Owners via the old system will no longer be valid after DIP0003 activation and must be re-casted using the new voting key.
Also, you can now get notifications about governance objects or votes via new ZMQ notifications: zmqpubhashgovernancevote, zmqpubhashgovernanceobject, zmqpubrawgovernancevote and zmqpubhashgovernanceobject.
GUI changes
Masternodes tab has a new section dedicated to DIP0003 registered masternodes now. After DIP0003 activation this will be the only section shown here, the two old sections for non-deterministic masternodes will no longer be available.
There are changes in the way InstantSend transactions are displayed, see InstantSend section above.
Some other (mostly minor) issues were also fixed, see GUI part of 0.13.0.0 Change log section below for detailed list of fixes.
RPC changes
There are a few changes in existing RPC interfaces in this release:
gobject prepareallows to send proposal transaction as an InstantSend one and also accepts an UTXO reference to spend;masternode statusandmasternode listshow some DIP0003 related info now;previousbitsandcoinbase_payloadfields were added ingetblocktemplate;getblocktemplatenow returns an array for masternode payments instead of a single object (miners and mining pools have to upgrade their software to support multiple masternode payees);- masternode and superblock payments in
getblocktemplateshow payee scriptPubKey inscriptfield in addition to payee address inpayee; getblockchaininfoshows BIP9 deployment progress;help command subCommandshould give detailed help for subcommands e.g.help protx list;compressedoption inmasternode genkey;dumpwalletshows info about dumped wallet and warns user about security issues;instantlockfield added in output ofgetrawmempool,getmempoolancestors,getmempooldescendants,getmempoolentry,getrawtransaction,decoderawtransaction,gettransaction,listtransactions,listsinceblock;addlockedparam added togetreceivedbyaddress,getreceivedbyaccount,getbalance,sendfrom,sendmany,listreceivedbyaddress,listreceivedbyaccount,listaccounts.
There are also new RPC commands:
protx(list,info,diff,register,register_fund,register_prepare,register_submit,update_service,update_registrar,revoke);bls generate;setprivatesendrounds;setprivatesendamount.
See help command in rpc for more info.
Command-line options
New cmd-line options:
masternodeblsprivkey;minsporkkeys;privatesendsessions;zmqpubrawinstantsenddoublespend;zmqpubhashinstantsenddoublespend;zmqpubhashgovernancevote;zmqpubhashgovernanceobject;zmqpubrawgovernancevote;zmqpubhashgovernanceobject.
Some of them are Devnet only:
budgetparams;minimumdifficultyblocks;highsubsidyblocks;highsubsidyfactor.
Few cmd-line options are no longer supported:
instantsenddepth;mempoolreplacement.
See Help -> Command-line options in Qt wallet or dashd --help for more info.
Lots of refactoring and bug fixes
A lot of refactoring, code cleanups and other small fixes were done in this release.
0.13.0.0 Change log
See detailed set of changes.
Network
03a6865d9Enforce correct port on mainnet for DIP3 MNs (#2576)3f26ed78cBackport network checks missing in CActiveDeterministicMasternodeManager::Init() (#2572)7c7500864Also stop asking other peers for a TX when ProcessTxLockRequest fails (#2529)19a6f718dDon't respond with getdata for legacy inv types when spork15 is active (#2528)22dcec71aPunish nodes which keep requesting and then rejecting blocks (#2518)a18ca49a2Disconnect peers with version < 70212 after DIP3 activation via BIP9 (#2497)a57e9dea7Fix filtering of the lock votes for SPV nodes. (#2468)c6cf4d9a4Relay txes through MN network faster than through regular nodes (#2397)e66c4e184Don't revert to INV based block announcements when the previous block is the devnet genesis block (#2388)b5142ee2cImplement RemoveAskFor to indicate that we're not interested in an item anymore (#2384)53e12b7b4Don't bail out from ProcessMasternodeConnections in regtest (#2368)31759a44dFix tx inv throughput (#2300)9d90b4fa4Honor filterInventoryKnown for non-tx/non-block items (#2292)6764dafecSkip initial masternode list sync if spork 15 is activefced9a4b8Ban peers that send us MNLISTDIFF messagesd3ac86206Implement GETMNLISTDIFF and MNLISTDIFF P2P messages40eee1775Fix sync in regtest (again) (#2241)c4ee2c89eFix mnsync in regtest (#2202)
Mining
f96563462Fix check for nTemporaryTestnetForkDIP3Height (#2508)80656038fBump nTemporaryTestnetForkHeight to 274000 (#2498)1c25356ffAllow to use low difficulty and higher block rewards for devnet (#2369)3cc4ac137Fix crash bug with duplicate inputs within a transaction (#2302)e6b699bc2Enforce MN and superblock payments in same blockc7f75afddFix nulldummy tests by creating correct DIP4 coinbase transactionsbcc071957Calculate and enforce DIP4 masternodes merkle root in CbTx0a086898fImplement and enforce CbTx with correct block height and deprecate BIP34
RPC
a22f1bffeRemove support for "0" as an alternative to "" when the default is requested (#2622) (#2624)18e1edabfBackport 2618 to v0.13.0.x (#2619)0dce846d5Add an option to use specific address as a source of funds in protx rpc commands (otherwise use payoutAddress/operatorPayoutAddress) (#2581)e71ea29e6Add ownerAddr and votingAddr to CDeterministicMNState::ToJson (#2571)999a51907Fix optional revocation reason parameter for "protx revoke" and a few help strings (#2568)c08926146Unify "protx list" options (#2559)e9f7142edBump PROTOCOL_VERSION and DMN_PROTO_VERSION to 70213 (#2557)818f0f464Allow consuming specific UTXO in gobject prepare command (#2482)1270b7122Use a verbosity instead of two verbose parameters (#2506)f6f6d075dStill support "protx list" and "protx diff" when wallet is disabled at compile time (#2511)5a3f64310Deserialize CFinalCommitmentTxPayload instead of CFinalCommitment in TxToJSON (#2510)5da4c9728Use "registered" as default for "protx list" (#2513)fc6d651c4Fix crashes in "protx" RPCs when wallet is disabled (#2509)ba49a4a16Trivial: protx fund_register RPC help corrections (#2502)45421b1a3Add IS parameter for gobject prepare (#2452)2ba1ff521Use ParseFixedPoint instead of ParseDoubleV in "protx register" commands (#2458)e049f9c1efix protx register rpc help (#2461)eb2103760trivail, clarifies help text for protx register (#2462)76e93c7d7Corrections to incorrect syntax in RPC help (#2466)3c1f44c3aMake sure protx_update_registrar adds enough funds for the feesd130f25acFix check for number of params to protx_update_service (#2443)adf9c87e2Fix protx/bls rpc help (#2438)579c83e88Add coinbase_payload to getblocktemplate help (#2437)3685c85e7Show BIP9 progress in getblockchaininfo (#2435)da3e3db4dFix sub-command help for masternode, gobject and protx rpcs (#2425)adad3fcfeRPC: protx help corrections (#2422)1d56dffdaUnify help display logic for various "complex" rpc commands (#2415)02442673dTrivial: Correct protx diff RPC help (#2410)1f56600c4Trivial: Protx operator reward clarification (#2407)7011fec1bRPC: Add help details for the bls RPC (#2403)50f133ad0Add merkle tree and coinbase transaction to theprotx diffrpc command (#2392)25b6dae9eCode style and RPC help string cleanups for DIP2/DIP3 (#2379)0ad2906c5Clarify addlocked description in getbalance RPC (#2364)547b81dd0loggobject prepareparams (#2317)d932d2c4eAdd instantlock field to getrawtransaction rpc output (#2314)c3d6b0651Remove redundant check for unknown commands in masternode RPC (#2279)44706dc88Implement projection of MN reward winners in "masternode winners"2d8f1244cImplement 'masternode info <proTxHash>' RPCe2a9dbbceBetter "masternode status" for deterministic masternodes50ac6fb3aThrow exception when trying to invoke start-xxx RPC in deterministic mode58aa81364Implement "protx revoke" RPC185416b97Implement "protx update_registrar" RPC32951f795Implement "protx update_service" RPC5e3abeca2Implement "protx list" RPCc77242346Implement "protx register" RPC1c2565804RefactormasternodeandgobjectRPCs to supporthelp command subCommandsyntax (#2240)fb4d301a2Add extraPayloadSize/extraPayload fields to RPC help2997d6d26add compressed option tomasternode genkey(#2232)98ed90cbbadds rpc calls forsetprivatesendroundsandsetprivatesendamount(#2230)50eb98d90Prepare for DIP3 operator reward payments and switch to array in getblocktemplate (#2216)a959f60aaDe-duplicate "gobject vote-alias" and "gobject "vote-many" code (#2217) - [`566fa5ec3`](https://github.com/dashpay/dash/commit/566fa5ec3) Add support for "help command subCommand" (#2210) - <a href="https://github.com/dashpay/dash/commit/4cd969e3d"><tt>4cd969e3d</tt></a> Add <tt>previousbits</tt> field to <tt>getblocktemplate</tt> output (#2201) - <a href="https://github.com/dashpay/dash/commit/ac30196bc">ac30196bcShow some info about the wallet dumped via dumpwallet (#2191)
LLMQ and Deterministic Masternodes
a3b01dfbeGracefully shutdown on evodb inconsistency instead of crashing (#2611) (#2620)3861c6a82Add BIP9 deployment for DIP3 on mainnet (#2585)587911b36Fix IsBlockPayeeValid (#2577)3c30a6affAdd missing masternodeblsprivkey help text (#2569)378dadd0fEnsure EvoDB consistency for quorum commitments by storing the best block hash (#2537)2127a426bFurther refactoring of CQuorumBlockProcessor (#2545)1522656d6Correctly handle spent collaterals for MNs that were registered in the same block (#2553)583035337Track operator key changes in mempool and handle conflicts (#2540)88f7bf0d8Don't delete/add values to the unique property map when it's null (#2538)15414dac2Refactor CQuorumBlockProcessor and CDeterministicMNManager (#2536)d9b28fe1aIntroduce dummy (ping-like) contributions for the dummy DKG (#2542)df0d0cce7Watch for changes in operator key and disable local MN (#2541)511dc3714Remove ProTxs from mempool that refer to a ProRegTx for which the collateral was spent (#2539)225c2135eAllow skipping of MN payments with zero duffs (#2534)60867978dAvoid printing DIP3/DIP4 related logs twice (#2525)7037f7c99Bail out from GetBlockTxOuts in case nBlockHeight is above tip+1 (#2523)022491420Print the state object when ProcessSpecialTxsInBlock fails in ConnectBlock (#2516)812834dc5Put height into mined commitments and use it instead of the special handling of quorumVvecHash (#2501)a4f5ba38bImplement CDummyDKG and CDummyCommitment until we have the real DKG merged (#2492)66612cc4bAdd 0 entry to vTxSigOps when adding quorum commitments (#2489)f5beeafa1Also restart MNs which didn't have the collateral moved, but do it later (#2483)0123517b4Implement PoSe based on information from LLMQ commitments (#2478)22b5952c5Implement and enforce DIP6 commitments (#2477)d40a5ce31Properly initialize confirmedHash in CSimplifiedMNListEntry (#2479)5ffc31bceForbid version=0 in special TXs (#2473)85157f9a9Few trivial fixes for DIP2/DIP3 (#2474)b5947f299Implement BuildSimplifiedDiff in CDeterministicMNList6edad3745Use ForEachMN and GetMN in BuildDiff instead of directly accessing mnMap83aac461bAllow P2SH/multisig addresses for operator rewardsf5864254cDo not use keyIDCollateralAddress anymore when spork15 is active5ccf556f3GetMasternodeInfo with payee argument should do nothing when DIP3 is active927e8bd79Also forbid reusing collateral key for owner/voting keys826e7d063Move internal collateral check to the else branch of the external collateral checkdc404e755Allow P2SH for payout scripts9adf8ad73Remove restriction that forced use of same addresses for payout and collateral7c1f11089Revert #2441 and retry fixing (#2444)6761fa49fMore checks for tx typeb84369663Be more specific about tx version in conditionsc975a986bno cs_main in specialtxes8bd5b231bLog mempool payload errors instead of crashing via assert658b7afd1Make error messages re payload a bit more specific153afb906Restart MNs in DIP3 tests even if collateral has not moved (#2441)4ad2f647cUse proTxHash instead of outpoint when calculating masternode scores (#2440)c27e62935Allow reusing of external collaterals in DIP3 (#2427)9da9d575aAllow collaterals for non-DIP3 MNs which were created after DIP3/BIP9 activation (#2412)30a2b283aSign ProRegTx collaterals with a string message instead of payload hash, splitprotx registerintoprepare/submit(#2395)e34701295Fix crash when deterministic MN list is empty and keep paying superblocks in this case (#2387)28a6007a4Prepare DIP3 for testnet and reuse DIP3 deployment for autoix deployment (#2389)e3df91082Allow referencing other TX outputs for ProRegTx collateral (#2366)fdfb07742Update ProRegTx serialization order (#2378)eaa856eb7Remove nProtocolVersion and add mode/type fields to DIP3 (#2358)c9d274518Use BLS keys for the DIP3 operator key (#2352)eaef90202Don't use boost range adaptors in CDeterministicMNList (#2327)6adc236d0Only use dataDir in CEvoDB when not in-memory (#2291)8a878bfcfCall InitializeCurrentBlockTip and activeMasternodeManager->Init after importing has finished (#2286)6b3d65028After DIP3 activation, allow voting with voting keys stored in your wallet (#2281)d8247dfffUse refactored payment logic when spork15 is active60002b7ddPayout and enforce operator reward payments2c481f0f8Implement deterministic version of CMasternodePayments::IsScheduled19fbf8ab7Move cs_main lock from CMasternode::UpdateLastPaid to CMasternodeMandc7292afaImplement new MN payments logic and add compatibility coded4530eb7dPut all masternodes in MASTERNODE_ENABLED state when spork15 is active31b4f8354Forbid starting of legacy masternodes with non matching ProTx collateral values5050a9205Add compatibility code for FindRandomNotInVec and GetMasternodeScorescc73422f8Add methods to add/remove (non-)deterministic MNs7d14566bcAdd compatibility code to CMasternodeMan so that old code is still compatible27e8b48a6Stop executing legacy MN list code when spork 15 is activatedd90b13996Implement CActiveDeterministicMasternodeManagera5e65aa37Erase mnListCache entry on UndoBlock (#2254)88e7888deTry using cache in GetListForBlock before reading from disk (#2253)9653af2f3Classes, validation and update logic for CProUpRevTX1c68d1107Classes, validation and update logic for CProUpRegTX8aca3b040Also check duplicate addresses for CProUpServTX in CTxMemPool923fd6739Implement CProUpServTx logic in CDeterministicMNManager6ec0d7aeaClasses and basic validation of ProUpServTx255403e92Include proTx data in json formatted transactions25545fc1eSplit keyIDMasternode into keyIDOwner/keyIDOperator/keyIDVoting (#2248)2c172873aDon't allow non-ProTx masternode collaterals after DIP3 activation9e8a86714Implementation of deterministic MNs list76fd30894Automatically lock ProTx collaterals when TX is added/loaded to walletcdd723edeConflict handling for ProRegTx in mempool958b84aceImplementation of ProRegTx with basic validation (no processing)c9a72e888Introduce CEvoDB for all evo related things, e.g. DIP34531f6b89Implement CDBTransaction and CScopedDBTransactione225cebcdUse previous block for CheckSpecialTx (#2243)b92bd8997Fix mninfo search by payee (#2233)8af7f6223Account for extraPayload when calculating fees in FundTransactionb606bde9aSupport version 3 transaction serialization in mininode.py61bbe54abAdd Get-/SetTxPayload helperscebf71bbcStubs for special TX validation and processingd6c5a72e2Basic validation of version 3 TXs in CheckTransactiona3c4ee3fdDIP2 changes to CTransaction and CMutableTransactiond20100ecdDIP0003 deployment4d3518fe0Refactor MN payee logic in preparation for DIP3 (#2215)d946f21bdMasternode related refactorings in preparation of DIP3 (#2212)
PrivateSend
07309f0ecAllow up to MASTERNODE_MAX_MIXING_TXES (5) DSTXes per MN in a row (#2552)ed53fce47Revert "Apply similar logic to vecMasternodesUsed" (#2503)69bffed72Do not sort resulting vector in SelectCoinsGroupedByAddresses (#2493)bb11f1a63Fix recent changes in DSA conditions (#2494)6480ad1d5Should check dsq queue regardless of the mixing state (#2491)67483cd34Fix dsq/dsa conditions (#2487)9d4df466bFix CreateDenominated failure for addresses with huge amount of inputs (#2486)2b400f74bBase dsq/dstx thresholold on total number of up to date masternodes (#2465)262454791Add 5th denom, drop deprecated logic and bump min PS version (#2318)23f169c44Drop custom PS logic for guessing fees etc. from SelectCoins (#2371)f7b0b5759Pick rounds with the most inputs available to mix first (#2278)727e940c0Fix recently introduced PS bugs (#2330)85a958a36Drop dummy copy constructors in CPrivateSend*Session (#2305)c6a0c5541A couple of small fixes for mixing collaterals (#2294)d192d642fMove heavy coin selection out of the loop in SubmitDenominate (#2274)28e0476f4Squash two logic branches in SubmitDenominate into one (#2270)9b6eb4765Include inputs with max rounds in SelectCoinsDark/SelectCoinsByDenominations (#2277)55d7bb900Add an option to disable popups for PS mixing txes (#2272)38ccfef3bIdentify PS collateral payments in transaction list a bit more accurate (#2271)ad31dbbd7Add more variance to coin selection in PS mixing (#2261)8c9cb2909Revert 2075 (#2259)b164bcc7aSplit PS into Manager and Session and allow running multiple mixing sessions in parallel (client side) (#2203)d4d11476aFix typo and grammar in PS error message (#2199)a83ab5501Fix wallet lock check in DoAutomaticDenominating (#2196)30fa8bc33Make sure pwalletMain is not null whenever it's used in PS client (#2190)3c89983dbRemove DarksendConfig (#2132)43091a3efPrivateSend Enhancement: Up default round count to 4 and allow user to mix up to 16 rounds (#2128)
InstantSend
35550a3f9Add quorumModifierHash to instant send lock vote (#2505)fa8f4a10cInclude masternodeProTxHash in CTxLockVote (#2484)624e50949Remove few leftovers of-instantsenddepth733cd9512Remove global fDIP0003ActiveAtTip and fix wrong use of VersionBitsState in auto IX (#2380)5454bea37Automatic InstantSend locks for "simple" transactions (#2140)1e74bcace[ZMQ] Notify when an IS double spend is attempted (#2262)6bcd868deFix lockedByInstantSend initialization (#2197)0a6f47323Remove dummy confirmations in RPC API and GUI for InstantSend transactions (#2040)ace980834Extend Bloom Filter support to InstantSend related messages (#2184)2c0d4c9d7Save/load InstantSend cache (#2051)
Sporks
33f78d70eDo not accept sporks with nTimeSigned way too far into the future (#2578)6c4b3ed8dLoad sporks before checking blockchain (#2573)d94092b60Fix spork propagation while in IBD and fix spork integration tests (#2533)43e757beeAmend SERIALIZATION_VERSION_STRING string for spork cache (#2339)f7ab6c469M-of-N-like sporks (#2288)c2958733eCSporkManager::Clear() should not alter sporkPubKeyID and sporkPrivKey (#2313)8c0dca282Add versioning to spork cache (#2312)5461e92bfAdd spork to control deterministic MN lists activation73c2ddde7extract sporkmanager from sporkmessage (#2234)1767e3457Save/load spork cache (#2206)075ca0903Protect CSporkManager with critical section (#2213)
Governance
222e5b4f7Remove proposal/funding votes from MNs that changed the voting key (#2570)5185dd5b7Use correct time field when removing pre-DIP3 votes (#2535)d2ca9eddeFix multiple issues with governance voting after spork15 activation (#2526)08dc17871Drop pre-DIP3 votes from current votes per MN per object (#2524)0c1b683a0Clear votes which were created before spork15 activation and use operator key for non-funding votes (#2512)da4b5fb16Remove an unused function from governance object collateral code (#2480)8deb8e90fModernize Gov Methods (#2326)0471fa884Drop MAX_GOVERNANCE_OBJECT_DATA_SIZE (and maxgovobjdatasize in rpc) (#2298)737353c84Fix IsBlockValueValid/IsOldBudgetBlockValueValid (#2276)a5643f899Switch RequestGovernanceObjectVotes from pointers to hashes (#2189)0e689341dImplement Governance ZMQ notification messages (#2160)
GUI
858bb52adShow correct operator payee address in DIP3 MN list GUI (#2563)190863722Remove legacy MN list tabs on spork15 activation (#2567)3e97b0cbdMake sure that we can get inputType and fUseInstantSend regardless of the way recipients are sorted (#2550)1a7c29b97Revert "Sort recipients in SendCoins dialog via BIP69 rule (#2546)" (#2549)ca0aec2a3Match recipients with txouts by scriptPubKey in reassignAmounts() (#2548)09730e1c5Bail out from update methods in MasternodeList when shutdown is requested (#2551)18cd5965cSort recipients in SendCoins dialog via BIP69 rule (#2546)9100c69ebAllow filtering by proTxHash on DIP3 MN tab (#2532)216119921Fix wrong total MN count in UI and "masternode count" RPC (#2527)8f8878a94Add dummy/hidden column to carry the proTxHash per MN list entry... (#2530)a4ea816b2use aqua gui theme (#2472)aa495405b[GUI] Realign tx filter widgets (#2485)f4ef388deUpdate PS help text for the new denom (#2471)7cabbadefImplement context menu and extra info on double-click for DIP3 masternode list (#2459)9232a455cDo not hold cs_main while emitting messages in WalletModel::prepareTransaction (#2463)cf2b547b7Implement tab for DIP3 MN list (#2454)46462d682Add a column for IS lock status on Transactions tab (#2433)5ecd91b05Fix ps collateral/denom creation tx category confusion (#2430)4a78b161fPrivateSend spending txes should have "outgoing" icon on overview screen (#2396)d7e210341Fixes inaccurate round count in CoinControlDialog (#2137)
Cleanups/Tests/Docs/Other
b5670c475Set CLIENT_VERSION_IS_RELEASE to true (#2591)a05eeb21eUpdate immer to c89819df92191d6969a6a22c88c72943b8e25016 (#2626)10b3736bd[0.13.0.x] Translations201901 (#2592)34d2a6038Release notes 0.13.0.0 draft (#2583)c950a8f51Merge v0.12.3.4 commits into develop (#2582)6dfceaba5Force FlushStateToDisk on ConnectTip/DisconnectTip while not in IBD (#2560)552d9089eUpdate testnet seeds to point to MNs that are on the new chain (#2558)63b58b1e9Reintroduce BLSInit to correctly set secure alloctor callbacks (#2543)cbd030352Serialize the block header in CBlockHeader::GetHash() (#2531)3a6bd8d23Call ProcessTick every second, handle tick cooldown inside (#2522)973a7f6ddFix GUI warnings in debug.log (#2521)c248c48e4Try to fix a few sporadic instant send failures in DIP3 tests (#2500)7a709b81dPerform less instant send tests in DIP3 tests (#2499)245c3220eSync blocks before creating TXs (#2496)65528e9e7Bump masternodeman cache version (#2467)6c190d1bbFix make deploy error on macos (#2475)df7d12b41Add univalue test for real numbers (#2460)614ff70b4Let ccache compress the cache by itself instead of compressing ccache.tar (#2456)40fa1bb49Add platform dependent include_directories in CMakeLists.txt (#2455)12aba2592Updating translations for de, es, fi, nl, pt, sk, zh_CN, zh_TW (#2451)52bf5a6b0Install libxkbcommon0 in gitian-linux.ymlfefe34250Update manpagesc60687fe6Sleep longer between attempts in sync_blocks88498ba13Apply suggestions from code review91af72b18Allow to specify how log to sleep between attempts in wait_untilf65e74682Pass "-parallel=3" to reduce load on Travis nodes while testing3c99d9e35Fix test_fail_create_protx in DIP3 tests4de70f0acTest P2SH/multisig payee addresses in DIP3 tests5fc4072caParallel ASN resolve and allow passing of input file names to makeseeds.py (#2432)76a38f6ceUpdate defaultAssumeValid, nMinimumChainWork and checkpoints (#2428)0e9ad207aUpdate hardcoded seeds (#2429)42ee369b1[Formatting] masternodelist.* clang+manual format (#2426)e961c7134Translations 201811 (#2249)f0df5bffaClang evo folder and activemasternode.* (#2418)98bdf35f9bump PS copyright (#2417)e9bb822c1Clang format PrivateSend files (#2373)bea590958Fix auto-IS tests (#2414)f03629d6dExplicitly specify which branch of Wine to install (#2411)5e829a3b1Update Chia bls-signature to latest version (#2409)51addf9a0Fix p2p-instantsend.py test (#2408)7e8f07bb9A couple of fixes for shutdown sequence (#2406)9c455caeaA couple of fixes for init steps (#2405)6560ac64bProperly escape $ in Jenkinsfile.gitian (#2404)70eb710b1Undefine DOUBLE after include Chia BLS headers (#2400)052af81b4Ensure correct order of destruction for BLS secure allocator (#2401)c8804ea5aDo not ignore patches in depends (#2399)13f2eb449Force fvisibility=hidden when compiling on macos (#2398)9eb9c99d5Bump version to 0.13.0 (#2386)8f9b004caSupport "fast" mode when calling sync_masternodes (#2383)fcea333baRewrite handling of too long depends builds in .travis.yml (#2385)d1debfc26Implement mt_pooled_secure_allocator and use it for BLS secure allocation (#2375)0692de1c5Fix prepare_masternodes/create_masternodes in DashTestFramework (#2382)6433a944a[Trivial] typo Groupped -> Grouped (#2374)59932401bChange internal references of Darksend to PrivateSend (#2372)e3046adb3Clear devNetParams and mimic behavior of other param types (#2367)de426e962Give tail calls enough time to print errors (#2376)0402240a2Bump CMAKE_CXX_STANDARD to 14 in CMakeLists.txt (#2377)3c9237aa4Use VersionBitsState instead of VersionBitsTipState to avoid cs_main lock (#2370)c4351fd32revert 737, DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN (#2362)1c9ed7806GDB automation with Python script to measure memory usage in dashd (#1609)d998dc13eAdd cmake to non-mac gitian descriptors (#2360)266dd3232mkdir -p to allow re-start of failed chia build (#2359)11a0cbf84InstantSend-related tests refactoring (#2333)3313bbd51Backport bitcoin #13623 Migrate gitian-build.sh to python (#2319)7b76bbb57Update Chia BLS libs to latest master (#2357)e2de632f8Move handling ofsize != SerSizeinto SetBuf/GetBuf (#2356)81d60bc28Fix the issue with transaction amount precision in IS tests (#2353)a45055384Fix qt configure to detect clang version correctly (#2344)b99d94a0fMinor build documentation updates (#2343)464191698Review fixes9c8e4ac76Move bls stuff from crypto/ to bls/bed1ded8bRemove duplicated check (#2336)89f744d06pack of small cleanup fixes / optimizations (#2334)9603c5290Trivial: Codestyle fixes in InstantSend code (#2332)90ad75911Fix auto-IS and tests (#2331)b3fc236afFix mnodeman.cs vs cs_vPendingMasternodes vs cs_main deadlock (#2200)80fd096b0Add ECDSA benchmarks78675d9bbAdd BLS and DKG benchmarks3ee27c168Add highly parallelized worker/helper for BLS/DKG calculationsaa3b0aa8aAdd simple helpers/wrappers for BLS+AES based integrated encryption schemes (IES)9ccf6f584Implement wrappers around Chia BLS lib3039d44d3Add Chia bls-signatures library to dependsf3dcb6916Add cmake to ci/Dockerfile.builder057d7445eAdd libgmp to dependsb0d0093d7Add helper to rename all threads of a ctpl::thread_pool47a162255Add ctpl header only library407baccecRemove obsolete build-openbsd.md (#2328)8a1b51356Backport: Fix Qt build with XCode (for depends) (#2325)a5aca049drename vars in mnsync to make more sense (#2308)ee6a5a33bGov cleanup + copyright bump (#2324)d7e5f02eaUpdate build documentation (#2323)bd8c54d12A bit more verbosity for some critical errors (#2316)a4ff2a19aFix some warnings and do a couple of other trivial cleanups (#2315)07208a4aedocument spork system with doxygen comments (#2301)2c1a17909cleanup: remove unused vars, includes, functions (#2306)3d48824b4Update .clang-format to more accurately show the actual style (#2299)8ea40102cRemove leftover RBF code from BTC (#2297)76599aad3Drop (pre-)70208 compatibility code (#2295)016681cd3Add support for serialization of bitsets and tuples (#2293)2a95dd30cFix locking issues in DIP3 unit tests (#2285)47ca06ab3DIP3 integration tests (#2280)ad6c2893cDocs - Update Core version number in readme files (#2267)bc7924d41Add unit tests for DIP3 and DIP4d653ace99Update CbTx in TestChainSetup9674be8f9Refactor TestChain100Setup to allow different test chain setupscb37c3972Bump PROTOCOL_VERSION to 70211, bump MIN_* protocols to 70210 (#2256)b99886532add link for developer-notes in contributing (#2260)fded838c9RPC folder: Cleaned up brackets on if, while, for, BOOST_FOREACH. Some whitespace fixes (#2257)5295c78ccFix typo in "penalty" (#2247)c566ce75dUpdate copyright in specialtx.h/cppe002c50b0Add "immer" functional/immutable containers library (#2244)799e3c312Perform Jenkins builds in /dash-src all the time to fix caching issues (#2242)b6896387aMove DIP1 transaction size checks out of ContextualCheckBlock and use ContextualCheckTransaction instead (#2238)e415fd049Revert CMasternodePayments::IsTransactionValid to the logic before the recent refactorings (#2237)8da88ecf6Don't crash when formatting in logging throws exceptions (#2231)2e06f8133fix missed format parameter (#2229)3d654b981Build bionic base image in Jenkinsfile.gitian & update docs (#2226)c09f57bd7Backport move to Ubuntu Bionic and GCC7 in Gitian builds (#2225)7cf9572c2Backport Bitcoin #11881: Remove Python2 support (#2224)633879cd2Only use version 1 and 2 transactions for sighash_tests (#2219)2d4e18537Some useful commits from the DIP3 PR in regard to integration tests (#2218)106bab1aeAdd new ParseXXX methods to easily parse UniValue values (#2211)c4c610783Use C++14 standard when building (#2209)589a77013Correction to release date for 0.12.0 (#2205)96435288fMove block template specific stuff from CBlock to CBlockTemplate (#2195)3d002c946Fix active masternode task schedule (#2193)65b904526Add helpers GetSentinelString() and GetDaemonString() to CMasternodePing (#2192)eb202e812Use ccache in gitian builds (#2185)b47617325Install python3 in gitian builds (#2182)7a85e24c3Remove deprecated gitian-rpi2.yml descriptor (#2183)1681d6366Replace Dash-specific threads with Dash-specific scheduled tasks (#2043)dac090964remove dashpay.io dns seed entry (#2181)753c2436bFix MissingPropertyException on Jenkins when no cache was found (#2180)f3e380659Move to in-docker CI builds and add Jenkins support (#2178)23dde9f12Remove a few annoying debug prints from CMasternodeMan (#2179)5036d7dfcdepends: Update Qt download url (#2177)e23339d6fuse nullptr in Dash-specific code (#2166)42c193df0replace map count/insert w/emplace in instantx.cpp (#2165)fd70a1eb9iterator cleanup in several places (#2164)df1be90ceUpdate links to obsolete documentation (#2162)448e92f4aGetOutPointPrivateSendRounds readability (#2149)6da2837bdInstantSend Integration tests (#2141)8ee9333bcremove boost dependency from Dash-specific code (#2072)a527845e4Bump to 0.12.4.0 pre-release (#2167)
Credits
Thanks to everyone who directly contributed to this release:
- Alexander Block
- UdjinM6
- PastaPastaPasta
- gladcow
- Nathan Marley
- thephez
- strophy
- PaulieD
- InhumanPerfection
- Spencer Lievens
- -k
- Salisbury
- Solar Designer
- Oleg Girko
- Anton Suprunchuk
As well as everyone that submitted issues, reviewed pull requests or helped translating on Transifex.
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.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

