* 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
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
andmasternode 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
forcount
andstatus
forlist
).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 inforkpoint
fieldgetrawmempool
's has InstantSend-related info (instantsend
andinstantlock
)getgovernanceinfo
has new fieldsentinelpingmaxseconds
getwalletinfo
now shows PrivateSend balance inprivatesend_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:
- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md#low-level-rpc-changes
- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.1.md#low-level-rpc-changes
- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#low-level-rpc-changes
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:
- release-notes-0.13.0.md;
- release-notes-0.13.1.md;
- release-notes-0.13.2.md;
- release-notes-0.14.0.md;
- release-notes-0.14.1.md;
- release-notes-0.14.2.md.
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
Addforkpoint
togetchaintips
(#2039)9b17f2b9c
Convertgobject count
output to json (by default) (#1994)4b128b1b9
Fix listaddressbalances (#1987)d115efacb
[RPC] Few additions to masternodelist (#1971)9451782a0
RPC: Addlistaddressbalances
(#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
Fixdebug
rpc (#1897)063bc5542
Fixmasternode 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
Fixnl
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
RefactorCMasternodePayment*
(#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
Swapexpired
andsentinel_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
Useoverride
keyword for overriden class member functions (#1644)d5ef77ba9
Refactor: use constant refs andRet
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 inconsensus
(#1888)88646bd0d
RenamefMasterNode
tofMasternodeMode
to clarify its meaning and to avoid confusion withCNode::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)
Backports and related fixes:
- 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: