dash/doc/release-notes.md
UdjinM6 ca2eae6e6e
12.3 release notes draft (#2045)
* 12.3 release notes draft

* update

* mn info dialog

* typo

* Minor additions and fixes

* A few additions

* Addressed reviews, rephrased, updated

* add recent commits

* more typos

* add recent commits

* Add recent commits

* add Chris Adam to credits for image work
2018-05-30 16:47:06 +03:00

35 KiB

Dash Core version 0.12.3

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).

Downgrade warning

Downgrade to a version < 0.12.2.2

Because release 0.12.2.2 included the per-UTXO fix which changed the structure of the internal database, you will have to reindex the database if you decide to use any pre-0.12.2.2 version.

Wallet forward or backward compatibility was not affected.

Downgrade to 0.12.2.2/3

Downgrading to these versions does not require any additional actions, should be fully compatible.

Notable changes

Introducing Named Devnets

We introduce a new feature called Named Devnets. This feature allows the creation of multiple independent devnets. Each one is identified by a name which is hardened into a "devnet genesis" block, which is automatically positioned at height 1. Validation rules will ensure that a node from devnet=test1 will never be able to accept blocks from devnet=test2. This is done by checking the expected devnet genesis block.

The genesis block of the devnet is the same as the one from regtest. This starts the devnet with a very low difficulty, allowing us to fill up needed balances for masternodes very fast.

Also, the devnet name is put into the sub-version of the VERSION message. If a node connects to the wrong network, it will immediately be disconnected.

New format of network message signatures

We introduced a new signature format for Dash-specific network messages, read more here and here. We also introduced a new spork SPORK_6_NEW_SIGS which is going to be used to activate the new format after the network has finished the upgrade. Note that old pre-12.3 nodes won't be able to recognize and verify new signatures after SPORK_6_NEW_SIGS activates.

The old format is partly kept in the code to keep backwards compatibility. This code will be removed in an upcoming release.

Governance system improvements

We do not use watchdogs since 12.2.x, instead we include all required information about sentinel into masternode pings. With this update we add some additional information and cover everything with a signature to ensure that masternode ping wasn't maleated by some intermediary node. All messages and logic related to watchdogs are completely removed now. We also improved proposal message format, as well as proposal validation and processing, which should lower network traffic and CPU usage. Handling of triggers was also improved slightly.

SPORK_13_OLD_SUPERBLOCK_FLAG was removed now as it was unused since some time.

PrivateSend improvements

PrivateSend collaterals are no longer required to be N times of the PrivateSend fee (PSF), instead any input which is greater or equal 1 PSF but less or equal 4 PSF can be used as a collateral. Inputs that are greater or equal 1 PSF but strictly less than 2 PSF will be used in collaterals with OP_RETURN outputs. Note that such inputs will be consumed completely, with no change outputs at all. This should lower number of inputs wallet would need to take care of, improve privacy by eliminating the case where user accidentally merge small non-private inputs together and also decrease global UTXO set size.

It might feel that thanks to this change mixing fees are going to be slightly higher on average if have lots of such small inputs. However, you need to keep in mind that creating new PrivateSend collaterals cost some fee too and since such small inputs were not used at all you'd need more txes to create such collaterals. So in general, we believe average mixing fees should stay mostly the same.

There are also some other minor fixes which should also slightly improve mixing process.

Additional indexes cover P2PK now

Additional indexes like addressindex etc. process P2PK outputs correctly now. Note, that these indexes will not be re-built automatically on wallet update, you must reindex manually to update indexes with P2PK outputs.

Support for pruned nodes in Lite Mode

It is now possible to run a pruned node which stores only some recent blocks and not the whole blockchain. However this option is only available in so called Lite Mode. In this mode, Dash specific features are disabled, meaning that such nodes won't fully validate the blockchain (masternode payments and superblocks). PrivateSend and InstantSend functions are also disabled on such nodes. Such nodes are comparable to SPV-like nodes in terms of security and validation - it relies a lot on surrounding nodes, so please keep this in mind if you decide to use it for something.

Default maximum block size

We've changed the default maximum block size to 2MB. Such blocks were already allowed before, but the default setting for the maximum block size (which only affects miners) was kept in place until this version.

RPC changes

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

  • gobject count, masternode count and masternode list will now by default return JSON formatted output. If you rely on the old output format, you can still specify an additional parameter for backwards compatibility (all for count and status for list).
  • masternodelist has a few new modes: daemon, json, sentinel
  • debug rpc now requires categories to be separated via +, not , like before (e.g. dash+net)
  • getchaintips now shows the block fork occurred in forkpoint field
  • getrawmempool's has InstantSend-related info (instantsend and instantlock)
  • getgovernanceinfo has new field sentinelpingmaxseconds
  • getwalletinfo now shows PrivateSend balance in privatesend_balance field

There is also a new RPC command listaddressbalances.

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

Command-line options

New cmd-line options:

  • introduced in Dash Core 0.12.3: allowprivatenet, bip9params, sporkaddr, devnet;
  • backported from Bitcoin Core 0.13/0.14: blockreconstructionextratxn, maxtimeadjustment, maxtipage, incrementalrelayfee, dustrelayfee, blockmintxfee.

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

New Masternode Information Dialog

You can now double-click on your masternode in My Masternodes list on Masternodes tab to reveal the new Masternode Information dialog. It will show you some basic information as well as software versions reported by the masternode. There is also a QR code now which encodes corresponding masternode private key (the one you set with mnprivkey during MN setup and NOT the one that controls the 1000 DASH collateral) which should make the process of pairing with mobile software allowing you to vote with your masternode a bit easier (this software is still in development).

Testnet fixes

While we've been in release preparation, a miner used his ASICs on testnet. This resulted in too many blocks being mined in a too short time. It revealed a few corner-case bugs in validation and synchronisation rules which we have fixed now. We've also backported a special testnet rule for our difficulty adjustment algorithm that allows to mine a low difficulty block on testnet when the last block is older than 5 minutes. This and the other fixes should stabilize our testnet in case of future ASIC uses on testnet.

Using masternode lists for initial peers discovery

We now use a recent masternode list to feed the hardcoded seed nodes list in Dash Core. This list was previously unmaintained as we fully relied on DNS based discovery on startup. DNS discovery is still used as the main discovery method, but the hardcoded seed list should now be able to serve as a proper backup in case DNS fails for some reason.

Lots of backports, refactoring and bug fixes

We backported many performance improvements and refactoring from Bitcoin Core and aligned most of our codebase with version 0.14. Most notable ones besides various performance and stability improvements probably are Compact Block support (BIP 152), Mining transaction selection ("Child Pays For Parent"), Null dummy soft fork (BIP 147, without SegWit), Nested RPC Commands in Debug Console and Support for JSON-RPC Named Arguments.

You can read more about all changes in Bitcoin Core 0.13 and 0.14 in following documents:

Note that some features were already backported earlier (per-UTXO fix, -assumevalid, GUI overlay etc.) and some were not backported at all (SegWit and feefilter, you can read more about why we did so here and here). The alert system was also kept in place for now. We are going to continue backporting the most notable fixes and improvements from Bitcoin Core versions 0.15 and 0.16 in future releases.

A lot of refactoring, code cleanups and other small fixes were done in this release again. We are going to continue making code more reliable and easier to review in future releases as well.

0.12.3 Change log

See detailed change log below.

Governance:

  • 2583e1963 Test: Add few valid/invalid proposals (internationalization) (#2044)
  • 25eb6d7b3 clean up governance vote code (#2042)
  • a0874b72a Validate data size for proposals only (#2004)
  • 15fac7c7e Validate proposals for expiration (#2003)
  • a3bcc4307 Refactor governance (#1993)
  • 04a23bf0c Fix the bug in CGovernanceObject::ProcessVote() (#1989)
  • b0868093b simplify gobject JSON format, remove unused fields (#1902)
  • 1dda9fe6f CProposalValidator refactoring and follow up fixes (#1956)
  • 89380b4c9 Drop watchdogs, replace them with sentinel pings (#1949)
  • e71cb3861 Store CGovernanceVote hash in memory instead of recalculating it via GetHash() every time (#1946)
  • 580c4884c Fix trigger execution and expiration (#1920)
  • 0670695fe Move prev/next sb height logic from rpc to CSuperblock::GetNearestSuperblocksHeights (#1919)
  • 741fcbc90 Remove excessive custom validation in CProposalValidator::ValidatePaymentAddress (#1917)
  • 354aac8d1 rename nEpochStart variable and adjust comments (#1915)
  • 8ea1bd0f5 remove unused method GetObjectSubtype (#1914)
  • 8a387ee09 Drop SPORK_13_OLD_SUPERBLOCK_FLAG and check superblock start hash (#1872)

InstantSend:

  • ef85d5144 Comment updates - InstantSend (#2062)
  • c0a109998 Fix instantsend in testnet and regtest (#2016)
  • 2f1661678 Locked txes should not expire until mined and have sufficient confirmations (#2011)
  • 846f1d217 Avoid processing tx lock request twice in the wallet it was sent from (#2007)
  • c0c998da3 Fix CInstantSend::GetTxLockRequest() (#2006)
  • 7d5223b5e Network-specific thresholds for required confirmations (IS) (#1962)
  • 2c04504f1 Refactor IS votes processing (#1951)

PrivateSend:

  • 7ac4b972a Require all participants to submit equal number of inputs (#2075)
  • d1bf615f3 No POOL_STATE_ERROR or POOL_STATE_SUCCESS on masternodes (#2009)
  • d03adb7c3 Check if in masternode mode first and only then do the job (or not) (#2008)
  • ddff32b96 Fix TransactionRecord::PrivateSendMakeCollaterals tx type (#1996)
  • 4f978a263 Drop Nx requirements for PS collaterals (#1995)
  • a44f48743 Allow data outputs in PS collaterals (#1984)
  • ef9a9f2d6 Fix unlocking error on "Start Mixing" (#1941)
  • 0bd8c8e43 Refactor: vecTxIn -> vecOutPoints for CompactTallyItem (#1932)
  • d7f55d508 Switch nTimeLastSuccessfulStep from GetTimeMillis() to GetTime() (#1923)
  • 204b1fe99 Drop unnecessary AcceptToMemoryPool in PS (and corresponding cs-main locks), just relay what we have (#1922)
  • 271c249e1 Skip next mn payments winners when selecting a MN to mix on (#1921)
  • ca89c7b87 [Trivial] Update PrivateSend denominations in comments / typo fixes (#1910)
  • b1817dd93 Introduce CDarksendAccept class (for DSACCEPT messages) (#1875)
  • d69ad9d61 Skip existing masternode conections on mixing (#1833)
  • 1d620d1f9 Fix calls to AcceptToMemoryPool in PS submodules (#1823)

Network:

  • c60079b59 ThreadOpenMasternodeConnections should process only one mn at a time (#2080)
  • a648d6eff Drop delayed headers logic and fix duplicate initial headers sync by handling block inv correctly (#2032)
  • 99085c5b6 swap devnet magic bytes around (#2028)
  • a37dbd6d2 Fix netfulfilledman usage (#2033)
  • 08033ffe4 Reject Dash-specific messages from obsolete peers (#1983)
  • 43671a39d Deprecate nMnCount in mnget (#1942)
  • 451f7f071 Fix issues with mnp, mnw and dsq signatures via new spork (SPORK_6_NEW_SIGS) (#1936)
  • 048062641 Force masternodes to have listen=1 and maxconnections to be at least DEFAULT_MAX_PEER_CONNECTIONS (#1935)
  • aadec3735 Change format of gobject, store/transmit vchData instead of hex-encoded string of a string (#1934)
  • ed712eb81 Fix nDelayGetHeadersTime (int64_t max == never delay) (#1916)
  • f35b5979a Refactor CGovernanceManager::Sync (split in two) (#1930)
  • b5046d59c Dseg fixes (#1929)
  • 312088b56 Fix connectivity check in CActiveMasternode::ManageStateInitial (#1918)
  • 8f2c1998d Rename vBlockHashesFromINV to vDelayedGetHeaders (#1909)
  • 4719ec477 Remove some locking in net.h/net.cpp (#1905)
  • a6ba82ac9 Use masternode list to generate hardcoded seeds (#1892)
  • 1b1a440f4 Do not send dash-specific requests to masternodes before we are fully connected (#1882)
  • 1ca270ed8 No need for msgMakerInitProto for sporks because we loop by fully connected nodes only now (#1877)
  • b84afb251 Allow to filter for fully connected nodes when calling CopyNodeVector (#1864)
  • 532b9fa3d Use OpenNetworkConnection instead of calling ConnectNode directly in Dash code (#1857)
  • 3aad9d908 Fix logging in PushInventory (#1847)
  • 81fb931fb Don't delay GETHEADERS when no blocks have arrived yet in devnet (#1807)

Mining:

  • ff93dd613 Check devnet genesis block (#2057)
  • 1dbf5a0f6 Fix transaction/block versions for devnet genesis blocks (#2056)
  • 880cbf43b Backport fPowAllowMinDifficultyBlocks rule to DarkGravityWave (#2027)
  • 27dfed424 Bump default max block size from 750k to 2MB (#2023)
  • 79183f630 Add tests for GetBlockSubsidy algorithm (#2022)

Wallet:

  • 0260821f8 fix SelectCoinsByDenominations (#2074)
  • b7bd96e2b Clarify the warning displayed when encrypting HD wallet (#2002)
  • 4930bb9f5 Don't hold cs_storage in CKeyHolderStorage while calling functions which might lock cs_wallet (#2000)
  • 4d442376e Limit the scope of cs_wallet lock in CPrivateSendClient::PrepareDenominate() (#1997)
  • 1d32d1c32 Add missing includes required for compilation with --disable-wallet flag (#1991)
  • 3f0c8723e Slightly refactor AutoBackupWallet (#1927)
  • 9965d51bb Avoid reference leakage in CKeyHolderStorage::AddKey (#1840)
  • c532be1c0 Protect CKeyHolderStorage via mutex (#1834)
  • 144850657 Switch KeePassHttp integration to new AES lib, add tests and a note about KeePassHttp security (#1818)
  • fa2549986 Swap iterations and fUseInstantSend parameters in ApproximateBestSubset (#1819)

RPC:

  • 6ab1fd763 RPC: Add description for InstantSend-related fields of mempool entry (#2050)
  • 138441eb8 Add forkpoint to getchaintips (#2039)
  • 9b17f2b9c Convert gobject count output to json (by default) (#1994)
  • 4b128b1b9 Fix listaddressbalances (#1987)
  • d115efacb [RPC] Few additions to masternodelist (#1971)
  • 9451782a0 RPC: Add listaddressbalances (#1972)
  • bab543f3e Various RPC fixes (#1958)
  • 151152b98 rpc - Update getaddednodeinfo help to remove dummy argument (#1947)
  • 3c44dde2e Return JSON object for masternode count (by default but still support old modes for now) (#1900)
  • 4bc4a7dac Fix debug rpc (#1897)
  • 063bc5542 Fix masternode list (#1893)
  • 5a5f61872 Shorten MN outpoint output from getvotes (#1871)
  • 86d33b276 Remove double registration of "privatesend" RPC (#1853)
  • c2de362b9 Actually honor fMiningRequiresPeers in getblocktemplate (#1844)
  • 1cffb8a7e Include p2pk into addressindex (#1839)

GUI:

  • 82805a6c6 swap out old logo for T&C logo in Qt GUI (#2081)
  • e9f63073d Warn when more than 50% of masternodes are using newer version (#1963)
  • 653600352 Draw text on top of everything else in TrafficGraphWidget (#1944)
  • 118eeded6 [GUI] Create QR-code for Masternode private key (#1970)
  • 9f2467af8 Hide autocompleter on Enter/Return key (#1898)
  • e30009c31 Fix qt and fontconfig depends #1884

Docs:

  • faeb4480a Update manpages with ./contrib/devtools/gen-manpages.sh (#2088)
  • 4148b8200 Release notes cleanup (#2034)
  • d2c46a6a3 Update protocol-documentation.md (#1964)
  • 4db8483d4 [Docs] Doxyfile Project version update (#1938)
  • 6e022c57b Remove src/drafted folder (#1907)
  • 0318c76ba Update links and references to current communication channels (#1906)
  • e23861c0e [Trivial] RPC Typos / markdown formatting (#1830)
  • 3dc62106b [Docs] Doxygen config update (#1796)

Other fixes and improvements:

  • cc593615e Bump copyright year to 2018 (#2087)
  • 2129ee4d8 Add docker support when doing Gitian builds (#2084)
  • 6a1456ef4 Update gitian key for codablock (#2085)
  • ab96a6af6 Update gitian keys, script and doc (#2082)
  • 5d057cf66 Add string_cast benchmark (#2073)
  • cf71f5767 Fix potential DoS vector for masternode payments (#2071)
  • febdc2116 Fix nl locale alias (#2061)
  • 1264a5577 Fix spork signature check for new nodes after SPORK_6_NEW_SIGS is switched to ON (#2060)
  • 41680f4d9 small cleanup in a few places (#2058)
  • 741b94875 Translations201804 (#2012)
  • 8e24b087b replace boost iterators in dash-specific code (#2048)
  • 7719b7ec2 Update BIP147 deployment times, nMinimumChainWork and defaultAssumeValid (#2030)
  • b07503f01 Some cleanup (mostly trivial) (#2038)
  • f8e5c5d56 Simplify spork defaults by using a map (#2037)
  • 6dd8304a5 Remove duplication of "class CBlockIndex;" (#2036)
  • 4ea790377 Dashify lib names (#2035)
  • 53093c65b Run tests in mocked time (#2031)
  • f7b9aae27 Correctly update pindexBestHeader and pindexBestInvalid in InvalidateBlock (#2029)
  • 8b09e779b Bump testnet checkpoint and nMinimumChainWork/defaultAssumeValid params (#2026)
  • eecc69223 Fix a very ancient bug from mid 2015 (#2021)
  • 72a225b9b Few fixes for lite mode (#2014)
  • c7e9ea9fb Avoid repeating the full scan in CMasternodeMan::UpdateLastPaid() on non-MNs (#1985)
  • f28a58e0a Refactor and fix restart (#1999)
  • 7248700b3 Add missing cs_main locks (#1998)
  • 9e98c856f A pack of small fixes (#1992)
  • 19ea1a791 Use operator[] instead of emplace in CMasternodePayments::AddPaymentVote (#1980)
  • ca3655f49 Fix some (potential dead)locks (#1977)
  • 2a7e6861d Include "clientversion.h" in rpc/masternode.cpp (#1979)
  • ef1a86c3e Add dummy CMakeLists.txt file to make development with CLion easier (#1978)
  • a9d8e2c5d [Init] Avoid segfault when called with -enableinstantsend=0 (#1976)
  • 3200eae9b Don't use short version of 'tinyformat/fmt' namespace in util.h (#1975)
  • 97a07cbc4 Refactor CMasternodePayment* (#1974)
  • 4ffa7bac0 Introduce DIP0001Height (#1973)
  • 611879aa6 Use spork addresses instead of raw keys and allow changing them on startup (#1969)
  • 9ef38c6d7 Switch CNetFulfilledRequestManager and CMasternodeMan maps/funcs to CService (#1967)
  • 929c1584a Rename CheckPreviousBlockVotes to CheckBlockVotes and adjust its log output a bit (#1965)
  • bf0854e58 Swap expired and sentinel_expired states in order (#1961)
  • 9876207ce Multiple devnet fixes (#1960)
  • e37b6c7da Fix BIP147 deployment threshold parameter (#1955)
  • 106276a3e Adjust/fix log output (#1954)
  • 0abd1894e Call CheckMnbAndUpdateMasternodeList when starting MN (#1945)
  • e23f61822 Make TrafficGraphDataTests more general (#1943)
  • 5b1c4d8a1 Few (mostly trivial) cleanups and fixes (#1940)
  • 99273f63a Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (#1937)
  • c65613350 Switch masternode id in Dash data structures from CTxIn to COutPoint (#1933)
  • 2ea6f7d82 Use override keyword for overriden class member functions (#1644)
  • d5ef77ba9 Refactor: use constant refs and Ret suffix (#1928)
  • 2e04864b2 Replace boost::lexical_cast with atoi (#1926)
  • 0f4d963ba Add DSHA256 and X11 benchmarks, refactor names of other algo benchmarks to group them together (#1925)
  • 4528c735f Replace some instantsend/privatesend magic numbers with constants (#1924)
  • 120893c63 Update timeLastMempoolReq when responding to MEMPOOL request (#1904)
  • bb20b4e7b Few cleanups after backporting (#1903)
  • a7fa07a30 Drop BOOST_FOREACH and use references in loops (const ref where applicable, Dash code only) (#1899)
  • e0b6988a4 Various fixes and refactoring for Cache*Map classes (#1896)
  • 99b2789a7 Fix DeserializeAndCheckBlockTest benchmark and store hashDevnetGenesisBlock in consensus (#1888)
  • 88646bd0d Rename fMasterNode to fMasternodeMode to clarify its meaning and to avoid confusion with CNode::fMasternode (#1874)
  • f6d98422c Silence ratecheck_test (#1873)
  • 9cee4193b Separate .h generation from .json/.raw for different modules (#1870)
  • 83957f2d3 Fix alertTests.raw.h (again) (#1869)
  • c13afaad8 Fix alertTests.raw.h generation (#1868)
  • a46bf120b Don't directly call "wine test_dash.exe" and let "make check" handle it (#1841)
  • e805f790e Automatically build and push docker image to docker.io/dashpay/dashd-develop (#1809)
  • d9058aa04 Increase travis timeout for "wine src/test/test_dash.exe" call (#1820)
  • 10786fe8e Use travis_wait for "wine test_dash.exe" call to fix timeouts (#1812)
  • 4bce3bf8b Fix crash on exit when -createwalletbackups=0 (#1810)
  • cd9c6994c Implement named devnets (#1791)
  • ebbd26a05 Drop IsInputAssociatedWithPubkey and optimize CheckOutpoint (#1783)
  • See commit list here

Credits

Thanks to everyone who directly contributed to this release:

  • Alexander Block
  • Chris Adam
  • crowning-
  • gladcow
  • Kamil Woźniak
  • Nathan Marley
  • Oleg Girko
  • Spencer Lievens
  • thephez
  • UdjinM6

As well as Bitcoin Core Developers and everyone who 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: