v3.2.0
PIVX Core version 3.2.0 is now available from: https://github.com/pivx-project/pivx/releases
This is a new major version release, including various bug fixes and performance improvements, as well as updated translations.
Please report bugs using the issue tracker at github: https://github.com/pivx-project/pivx/issues
Mandatory Update
PIVX Core v3.2.0 is a mandatory update for all block creators, masternodes, and integrated services (exchanges). Old version 4 blocks will be rejected once 95% of a rolling 7 days worth of blocks have signaled the new version 5.
Masternodes will need to be restarted once both the masternode daemon and the controller wallet have been upgraded.
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/PIVX-Qt (on Mac) or pivxd/pivx-qt (on Linux).
Wallets for existing users upgrading from an earlier version will undergo a supply recalculation the first time v3.2.0 is started. An initial light weight (partial) recalculation will be attempted first, but if that fails then the wallet will do a full recalculation the next time it is started. This recalculation is a one-time event.
Compatibility
PIVX Core is extensively tested on multiple operating systems using the Linux kernel, macOS 10.10+, and Windows 7 and later.
Microsoft ended support for Windows XP on April 8th, 2014, No attempt is made to prevent installing or running the software on Windows XP, you can still do so at your own risk but be aware that there are known instabilities and issues. Please do not report issues about Windows XP to the issue tracker.
Apple released it's last Mountain Lion update August 13, 2015, and officially ended support on December 14, 2015. PIVX Core software starting with v3.2.0 will no longer run on MacOS versions prior to Yosemite (10.10). Please do not report issues about MacOS versions prior to Yosemite to the issue tracker.
PIVX Core should also work on most other Unix-like systems but is not frequently tested on them.
Notable Changes
Minimum Supported MacOS Version
The minimum supported version of MacOS (OSX) has been moved from 10.8 Mountain Lion to 10.10 Yosemite. Users still running a MacOS version prior to Yosemite will need to upgrade their OS if they wish to continue using the latest version(s) of the PIVX Core wallet.
Attacks, Exploits, and Mitigations
Fake Stake
On Janurary 22 2019, Decentralized Systems Lab out of the University of Illinois published a study entitled “‘Fake Stake’ attacks on chain-based Proof-of-Stake cryptocurrencies”, which outlined a type of Denial of Service attack that could take place on a number of Proof of Stake based networks by exhausting a client's RAM or Disk resources.
A full report provided by PIVX developers is available on the PIVX Website, which includes additional findings, mitigation details, and resources for testing. This type of attack has no risk to users' privacy and does not affect their holdings.
Wrapped Serials
On March 6th 2019, an attack was detected on the PIVX network zerocoin protocol, or zPIV. The vulnerability allows an attacker to fake serials accepted by the network and thus to spend zerocoins that have never been minted. As severe as it is, it does not harm users’ privacy and does not affect their holdings directly.
As a result of this, all zPIV functionality was disabled via one of our sporks shortly after verification of this exploit. A full report, detailing how this attack was performed, as well as investigation results and mitigation methods is available On Medium.
zPIV functions will be restored after v3.2.0 is pushed out and the majority of the network has upgraded.
Major New Features
BIP65 (CHECKLOCKTIMEVERIFY) Soft-Fork
PIVX Core v3.2.0 introduces new consensus rules for scripting pathways to support the BIP65 standard. This is being carried out as a soft-fork in order to provide ample time for stakers to update their wallet version.
Automint Addresses
A new "Automint Addresses" feature has been added to the wallet that allows for the creation of new addresses who's purpose is to automatically convert any PIV funds received by such addresses to zPIV. The feature as a whole can be enabled/disabled either at runtime using the -enableautoconvertaddress
option, via RPC/Console with the enableautomintaddress
command, or via the GUI's options dialog, with the default being enabled.
Creation of these automint addresses is currently only available via the RPC/Console createautomintaddress
command, which takes no additional arguments. The command returns a new PIVX address each time, but addresses created by this command can be re-used if desired.
In-wallet Proposal Voting
A new UI wallet tab has been introduced that allows users to view the current budget proposals, their vote counts, and vote on proposals if the wallet is acting as a masternode controller. The visual design is to be considered temporary, and will be undergoing further design and display improvements in the future.
Zerocoin Lite Node Protocol
Support for the ZLN Protocol has been added, which allows for a node to opt-in to providing extended network services for the protocol. By default, this functionality is disabled, but can be enabled by using the -peerbloomfilterszc
runtime option.
A full technical writeup of the protocol can be found Here.
Precomputed Zerocoin Proofs
This introduces the ability to do most of the heavy computation required for zPIV spends before actually initiating the spend. A new thread, ThreadPrecomputeSpends
, is added which constantly runs in the background.
ThreadPrecomputeSpends
' purpose is to monitor the wallet's zPIV mints and perform partial witness accumulations up to nHeight - 20
blocks from the chain's tip (to ensure that it only ever computes data that is at least 2 accumulator checkpoints deep), retaining the results in memory.
Additionally, a file based cache is introduced, precomputes.dat
, which serves as a place to store any precomputed data between sessions, or when the in-memory cache size is exhausted. Swapping data between memory and disk file is done as needed, and periodic cache flushes to the disk are routine.
This also introduces 2 new runtime configuration options:
-precompute
is a binary boolean option (1
or0
) that determines wither or not pre-computation should be activated at runtime (default value is to activate,1
).-precomputecachelength
is a numeric value between500
and2000
that tells the precompute thread how many blocks to include during each pass (default is1000
).
A new RPC command, clearspendcache
, has been added that allows for the clearing/resetting of the precompute cache (both memory and disk). This command takes no additional arguments.
Finally, the "security level" option for spending zPIV has been completely removed, and all zPIV spends now spend at what was formerly "security level" 100
. This change has been reflected in any RPC command that previously took a security level argument, as well as in the GUI's Privacy section for spending zPIV.
Regression Test Suite
The RegTest network mode has been re-worked to once again allow for the generation of on-demand PoW and PoS blocks. Additionally, many of the existing functional test scripts have been adapted for use with PIVX, and we now have a solid testing base for highly customizable tests to be written.
With this, the old setgenerate
RPC command no longer functions in regtest mode, instead a new generate
command has been introduced that is more suited for use in regtest mode.
GUI Changes
Console Security Warning
Due to an increase in social engineering attacks/scams that rely on users relaying information from console commands, a new warning message has been added to the Console window's initial welcome message.
Optional Hiding of Orphan Stakes
The options dialog now contains a checkbox option to hide the display of orphan stakes from both the overview and transaction history sections. Further, a right-click context menu option has been introduced in the transaction history tab to achieve the same effect.
Note: This option only affects the visual display of orphan stakes, and will not prevent them nor remove them from the underlying wallet database.
Transaction Type Recoloring
The color of various transaction types has been reworked to provide better visual feedback. Staking and masternode rewards are now purple, orphan stakes are now light gray, other rejected transactions are in red, and normal receive/send transactions are black.
Receive Tab Changes
The address to be used when creating a new payment request is now automatically displayed in the form. This field is not user-editable, and will be updated as needed by the wallet.
A new button has been added below the payment request form, "Receiving Addresses", which allows for quicker access to all the known receiving addresses. This one-click button is the same as using the File->Receiving Addresses...
menu command, and will open up the Receiving Addresses UI dialog.
Historical payment requests now also display the address used for the request in the history table. While this information was already available when clicking the "Show" button, it was an extra step that shouldn't have been necessary.
Privacy Tab Changes
The entire right half of the privacy tab can now be toggled (shown/hidden) via a new UI button. This was done to reduce "clutter" for users that may not wish to see the detailed information regarding individual denomination counts.
RPC Changes
Backupwallet Sanity
The backupwallet
RPC command no longer allows for overwriting the currently in use wallet.dat file. This was done to avoid potential file corruption caused by multiple conflicting file access operations.
Spendzerocoin Security Level Removed
The securitylevel
argument has been removed from the spendzerocoin
RPC command.
Spendzerocoinmints Added
Introduce the spendzerocoinmints
RPC call to enable spending specific zerocoins, provided as an array of hex strings (serial hashes).
Getreceivedbyaddress Update
When calling getreceivedbyaddress
with a non-wallet address, return a proper error code/message instead of just 0
Validateaddress More Verbosity
validateaddress
now has the ability to return more (non-critical or identifying) details about P2SH (multisig) addresses by removing the needless check against ISMINE_NO.
Listmintedzerocoins Additional Options
Add a fVerbose
boolean optional argument (default=false) to listmintedzerocoins
call to have a more detailed output.
If fVerbose
is specified as first argument, then a second optional boolean argument fMatureOnly
(default=false) can be used to filter-out immature mints.
Getblock & Getblockheader
A minor change to these two RPC commands to now display the mediantime
, used primarialy during functional tests.
Getwalletinfo
The getwalletinfo
RPC command now outputs the configured transaction fee (paytxfee
field).
Build System Changes
Completely Disallow Qt4
Compiling the PIVX Core wallet against Qt4 hasn't been supported for quite some time now, but the build system still recognized Qt4 as a valid option if Qt5 couldn't be found. This has now been remedied and Qt4 will no longer be considered valid during the configure
pre-compilation phase.
Further OpenSSL Deprecation
Up until now, the zerocoin library relied exclusively on OpenSSL for it's bignum implementation. This has now been changed with the introduction of GMP as an arithmetic operator and the bignum implementation has now been redesigned around GMP. Users can still opt to use OpenSSL for bignum by passing --with-zerocoin-bignum=openssl
to the configure
script, however such configuration is now deprecated.
Note: This change introduces a new dependency on GMP (libgmp) by default.
RISC-V Support
Support for the new RISC-V 64bit processors has been added, though still experimental. Pre-compiled binaries for this CPU architecture are available for linux, and users can self-compile using gitian, depends, or an appropriate host system natively.
New Gitian Build Script
The previous gitian-build.sh
shell script has been replaced with a more feature rich python version; gitian-build.py
. This script now supports the use of a docker container in addition to LXC or KVM virtualization, as well as the ability to build against a pull request by number.
3.2.0 Change log
Detailed release notes follow. This overview includes changes that affect behavior, not code moves, refactors and string updates. For convenience in locating the code changes and accompanying discussion, both the pull request and git merge commit are mentioned.
Build System
- #758
81c7c4764c
[Depends] Update libsecp256k1 to latest master (warrows) - #804
4a8e46a158
[Depends] Update zmq to 4.3.1 (Dimitris Apostolou) - #795
1920f3e8ad
[Build] Add support for RISC-V and build it with gitian (cevap) - #786
44226f225e
[Build] add gitian build python script (cevap) - #783
ccba68e425
[Depends] Update QT to 5.9.7 (cevap) - #754
b9cbeb0951
[Build] Update Build/Depends systems from upstream (Fuzzbawls) - #752
63fb77b0a9
[Build] Fix Thread Safety Analysis Warnings (Fuzzbawls) - #749
36ff23553c
[Build] Update genbuild.sh script (Fuzzbawls) - #681
95ec0763cf
[Depends] Add gmp bignum support for zerocoin lib (warrows) - #704
f0a427bfd7
[Build] GCC-7 and glibc-2.27 back compat (Fuzzbawls) - #706
d3c5b808dd
[Build] Remove throw keywords in leveldb function signatures (Fuzzbawls) - #708
72cd07186b
[Build] Remove stale m4 file (Fuzzbawls) - #671
b003052103
[Build] Update to latest leveldb (Fuzzbawls)
P2P Protocol and Network Code
- #843
817cec4ff4
[Net] Increment Protocol Version (Fuzzbawls) - #837
d241b5ed77
[Zerocoin][UNIT TEST][RPC] Wrapped serials. (random-zebra) - #803
065f94118d
[NET] Invalid blocks from forks stored on disk fix + blocks DoS spam filter. (furszy) - #802
ed0dd2a20a
[Refactor] Remove begin/end_ptr functions (warrows) - #768
204c038a4d
[Net] Zerocoin Light Node Protocol (furszy) - #798
a663bccea7
[Net] Improve addrman Select() performance when buckets are nearly empty (Pieter Wuille) - #800
7fa20d69f6
[Net] nLastTry is only used for addrman entries (Pieter Wuille) - #740
5f7cb412a3
[Net] Pull uacomment in from upstream (Fuzzbawls) - #774
167c7fa6d0
[Budget] Make checks for MN-autovoting deterministic (Mrs-X) - #770
ab9cf3629c
[Main] Do not record zerocoin tx's in ConnectBlock() if it is fJustCheck (presstab) - #705
6a5b64bc21
[Main] Check Lock Time Verify (presstab)
GUI
- #850
e488db7334
[Qt] Update localizations from Transifex (Fuzzbawls) - #847
fc924c1f63
[Qt] Fix to display missing clock5.png tx image (joeuhren) - #840
757d81c4a9
[QT] cleanup, remove old trading dialog form (furszy) - #826
0d738b3dc0
[Qt] Fix a windows only crash when r-clicking a proposal (warrows) - #792
c12697469b
[UI] Add a budget monitoring and voting tab (warrows) - #794
8dcb52fcd4
[UI] Open related options tab when clicking automint icon (warrows) - #791
c0aa454e19
[Qt] Fix Missing Explorer Icon (sicXnull) - #779
d617c85a89
[Qt] Periodic translation update (Fuzzbawls) - #781
10e1a8a306
[Qt] Don't show staking/automint status icons without a wallet (Fuzzbawls) - #776
3fcdc932d9
[Qt] Add a security warning to the debug console's default output. (Fuzzbawls) - #747
feb87c10fa
[GUI] Hide orphans - contextMenu action (random-zebra) - #741
ea2637838c
[GUI] Sort by 'data' in zPIV and coin control dialogs (random-zebra) - #733
9a792d73e9
[GUI] Hide orphans (random-zebra) - #735
44840c5069
[Qt] Stop using dummy strings in clientversion.cpp (Fuzzbawls) - #725
793db15baf
[UI] Sort numbers correctly in zPIV and coin control dialogs (random-zebra) - #714
bf2ad88066
[UI] Add address field in receive tab (warrows) - #683
ec1180b52c
[Qt] receivecoinsdialog - address control + clean UI (random-zebra) - #677
29fab5982f
[Qt] change colors for tx labels in history/overview (random-zebra) - #693
022b58257c
[UI] Add address to the payment request history (warrows) - #698
3f35bc81d8
[Qt] Remove Qt4 build support & code fallbacks (Wladimir J. van der Laan) - #655
de0c4e0888
[Qt] Fix PIV balances on overview page (Fuzzbawls) - #680
71ac5285e5
[Qt] Privacy dialog: hide/show denominations (random-zebra) - #675
8a26ba0b07
[Qt] SwiftX - intuitiveness (random-zebra) - #668
4a68c9ed43
[Qt] Clean up Multisend Dialog UI (Fuzzbawls)
RPC/REST
- #838
5673c8373e
[RPC][Test] spendrawzerocoin + wrapped serials functional test (random-zebra) - #821
86d6133735
[RPC] Fixup signrawtransaction on regtest (Fuzzbawls) - #751
e820cf3816
[RPC] Show the configured/set txfee in getwalletinfo (Fuzzbawls) - #750
25fe72d97d
[RPC] Add mediantime to getblock/getblockheader output (Fuzzbawls) - #760
8b79a3944a
[RPC] Show BIP65 soft-fork progress in getblockchaininfo (Fuzzbawls) - #742
297d67b43a
[RPC] Add masternode's pubkey to listmasternodes RPC (presstab) - #729
f84ec3df8b
[RPC] Fix RPCTimerInterface (random-zebra) - #727
08f6e1774b
[RPC] Add 'spendzerocoinmints' RPC call (random-zebra) - #726
8f28b7ad23
[RPC] include mints metadata in 'listmintedzerocoins' output (random-zebra) - #724
ee0717c2af
[RPC] Ensure that a numeric is being passed to AmmountFromValue (Fuzzbawls) - #723
0774f5fc0d
[RPC] Error when calling getreceivedbyaddress with non-wallet address (Fuzzbawls) - #722
3ce4fd7226
[RPC] Add more verbosity to validateaddress (Fuzzbawls) - #721
cecda14082
[RPC] Fix movecmd's help description to include amount (Fuzzbawls) - #720
056b4d5cb1
[RPC] Sanitize walletpassphrase timeout argument (Fuzzbawls) - #719
463fd38325
[RPC] Fix verifychain (Fuzzbawls) - #711
17d1f30131
[RPC] Don't allow backupwallet to overwrite the wallet-in-use (Fuzzbawls) - #688
64071d142d
[Zerocoin] RPC import/export zerocoins private key standardized + Cleanup in AccPoK and SoK to avoid redundant calculations. (furszy)
Wallet
- #842
c6c84fe85f
[Wallet] [zPIV] Precomputed Zerocoin Proofs (Fuzzbawls) - #817
37a06eaa93
[Wallet] Fix segfault with runtime -disablewallet (Fuzzbawls) - #763
d4762f7e7a
[Wallet] Add automint address (Fuzzbawls) - #759
19fd0877cd
[Wallet] Avoid failed zPIV spend because of changed seed (warrows) - #755
65be6b611b
[Wallet] Fix zPIV spend when too much mints are selected (warrows) - #734
5df105fed2
[Staking] Ensure nCredit is correctly initialized in CreateCoinStake (warrows) - #730
394d48b2c9
[Wallet] fix bug with fWalletUnlockAnonymizeOnly flag setting (random-zebra) - #715
30048cce62
[Refactor] Remove GetCoinAge (Fuzzbawls) - #700
a2d717090f
[Wallet] Avoid autocombine getting stuck (warrows) - #656
5272a4f684
[Wallet] Fix double locked coin when wallet and MN are on same machine (Tim Uy) - #653
fdf4503b66
[Wallet] change COINBASE_MATURITY to Params().COINBASE_MATURITY() (Alko89)
Test Suites
- #822
2b8daac4c0
[Tests] Integrate fake stake tests into parent test suite (Fuzzbawls) - #812
f8eb7feefc
[Regtest][Tests][RPC] Regtest mode + Test suite. (random-zebra)
Miscellaneous
- #788
55ce1619f5
[Misc] Update license year 2019 (Everton Melo) - #736
d2ad4d6e93
[Utils] Update linters for python3 (Fuzzbawls) - #699
8b1f68d896
[Refactor] Use references instead of copies in for loops (Fuzzbawls) - #697
5a5797f5c3
[Trivial] Remove Redundant Declarations (Fuzzbawls) - #667
49f9a0fa9e
[Zerocoin] Clean zerocoin bignum file (warrows) - #669
dd6909fd30
[Utils] Fix syntax error in gitian-build.sh (Aitor González) - #632
0d91550ff6
[MoveOnly] Move non-wallet RPC files to subdir (Fuzzbawls) - #731
f7f49cfa7c
[zPIV] Fix bignum overloads when using OpenSSL (Fuzzbawls) - #692
1fde9b2b7a
[Zerocoin] Remove explicit copy assignement operator from Accumulator (warrows) - #761
88a93bd35a
[Refactoring] Abstract out and switch openssl cleanse (Adam Langley) - #743
af0c340fe0
[Refactor] remove CPubKey::GetHex (random-zebra) - #737
434abd1ae9
[Refactor] Remove 'boost::lexical_cast<>' (random-zebra) - #769
6482454cf6
[Main] Unify shutdown proceedure in init rather than per-app (Fuzzbawls) - #815
decee4bc8c
[Doc] Update release notes with forthcoming 3.2.0 changes (Fuzzbawls) - #816
51e7b2c4b0
[Doc] Update build-unix.md (Fuzzbawls) - #757
a611a7fa77
[Doc] Update doc/build-windows.md (idas4you) - #778
65caa886ac
[Doc] Update README.md (veilgets) - #703
51663473fc
[Docs] Add missing automake dependency (Mrs-X) - #762
abfceb39a1
[Random] WIN32 Seed Cleanup: Move nLastPerfmon behind win32 ifdef. (21E14) - #771
4b1be14505
[Main] Clean up sync.cpp/h with upstream declarations (Fuzzbawls)
Credits
Thanks to everyone who directly contributed to this release:
- 21E14
- Adam Langley
- Aitor González
- Alko89
- Benjamin Allred
- Chun Kuan Lee
- Cory Fields
- Dimitris Apostolou
- Everton Melo
- Fuzzbawls
- Matias Furszyfer
- Mrs-X
- Pieter Wuille
- SHTDJ
- Tim Uy
- Wladimir J. van der Laan
- blondfrogs
- cevap
- fanquake
- gpdionisio
- idas4you
- joeuhren
- presstab
- random-zebra
- s3v3nh4cks
- sicXnull
- veilgets
- warrows
As well as everyone that helped translating on Transifex, the QA team during Testing and the Node hosts supporting our Testnet.