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
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.
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.
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
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.
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.
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:
-precomputeis a binary boolean option (
0) that determines wither or not pre-computation should be activated at runtime (default value is to activate,
-precomputecachelengthis a numeric value between
2000that tells the precompute thread how many blocks to include during each pass (default is
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.
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.
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
securitylevel argument has been removed from the
spendzerocoin RPC command.
spendzerocoinmints RPC call to enable spending specific zerocoins, provided as an array of hex strings (serial hashes).
getreceivedbyaddress with a non-wallet address, return a proper error code/message instead of just
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
fVerbose boolean optional argument (default=false) to
listmintedzerocoins call to have a more detailed output.
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 RPC command now outputs the configured transaction fee (
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.
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
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.
81c7c4764c[Depends] Update libsecp256k1 to latest master (warrows)
4a8e46a158[Depends] Update zmq to 4.3.1 (Dimitris Apostolou)
1920f3e8ad[Build] Add support for RISC-V and build it with gitian (cevap)
44226f225e[Build] add gitian build python script (cevap)
ccba68e425[Depends] Update QT to 5.9.7 (cevap)
b9cbeb0951[Build] Update Build/Depends systems from upstream (Fuzzbawls)
63fb77b0a9[Build] Fix Thread Safety Analysis Warnings (Fuzzbawls)
36ff23553c[Build] Update genbuild.sh script (Fuzzbawls)
95ec0763cf[Depends] Add gmp bignum support for zerocoin lib (warrows)
f0a427bfd7[Build] GCC-7 and glibc-2.27 back compat (Fuzzbawls)
d3c5b808dd[Build] Remove throw keywords in leveldb function signatures (Fuzzbawls)
72cd07186b[Build] Remove stale m4 file (Fuzzbawls)
b003052103[Build] Update to latest leveldb (Fuzzbawls)
P2P Protocol and Network Code
817cec4ff4[Net] Increment Protocol Version (Fuzzbawls)
d241b5ed77[Zerocoin][UNIT TEST][RPC] Wrapped serials. (random-zebra)
065f94118d[NET] Invalid blocks from forks stored on disk fix + blocks DoS spam filter. (furszy)
ed0dd2a20a[Refactor] Remove begin/end_ptr functions (warrows)
204c038a4d[Net] Zerocoin Light Node Protocol (furszy)
a663bccea7[Net] Improve addrman Select() performance when buckets are nearly empty (Pieter Wuille)
7fa20d69f6[Net] nLastTry is only used for addrman entries (Pieter Wuille)
5f7cb412a3[Net] Pull uacomment in from upstream (Fuzzbawls)
167c7fa6d0[Budget] Make checks for MN-autovoting deterministic (Mrs-X)
ab9cf3629c[Main] Do not record zerocoin tx's in ConnectBlock() if it is fJustCheck (presstab)
6a5b64bc21[Main] Check Lock Time Verify (presstab)
e488db7334[Qt] Update localizations from Transifex (Fuzzbawls)
fc924c1f63[Qt] Fix to display missing clock5.png tx image (joeuhren)
757d81c4a9[QT] cleanup, remove old trading dialog form (furszy)
0d738b3dc0[Qt] Fix a windows only crash when r-clicking a proposal (warrows)
c12697469b[UI] Add a budget monitoring and voting tab (warrows)
8dcb52fcd4[UI] Open related options tab when clicking automint icon (warrows)
c0aa454e19[Qt] Fix Missing Explorer Icon (sicXnull)
d617c85a89[Qt] Periodic translation update (Fuzzbawls)
10e1a8a306[Qt] Don't show staking/automint status icons without a wallet (Fuzzbawls)
3fcdc932d9[Qt] Add a security warning to the debug console's default output. (Fuzzbawls)
feb87c10fa[GUI] Hide orphans - contextMenu action (random-zebra)
ea2637838c[GUI] Sort by 'data' in zPIV and coin control dialogs (random-zebra)
9a792d73e9[GUI] Hide orphans (random-zebra)
44840c5069[Qt] Stop using dummy strings in clientversion.cpp (Fuzzbawls)
793db15baf[UI] Sort numbers correctly in zPIV and coin control dialogs (random-zebra)
bf2ad88066[UI] Add address field in receive tab (warrows)
ec1180b52c[Qt] receivecoinsdialog - address control + clean UI (random-zebra)
29fab5982f[Qt] change colors for tx labels in history/overview (random-zebra)
022b58257c[UI] Add address to the payment request history (warrows)
3f35bc81d8[Qt] Remove Qt4 build support & code fallbacks (Wladimir J. van der Laan)
de0c4e0888[Qt] Fix PIV balances on overview page (Fuzzbawls)
71ac5285e5[Qt] Privacy dialog: hide/show denominations (random-zebra)
8a26ba0b07[Qt] SwiftX - intuitiveness (random-zebra)
4a68c9ed43[Qt] Clean up Multisend Dialog UI (Fuzzbawls)
5673c8373e[RPC][Test] spendrawzerocoin + wrapped serials functional test (random-zebra)
86d6133735[RPC] Fixup signrawtransaction on regtest (Fuzzbawls)
e820cf3816[RPC] Show the configured/set txfee in getwalletinfo (Fuzzbawls)
25fe72d97d[RPC] Add mediantime to getblock/getblockheader output (Fuzzbawls)
8b79a3944a[RPC] Show BIP65 soft-fork progress in getblockchaininfo (Fuzzbawls)
297d67b43a[RPC] Add masternode's pubkey to listmasternodes RPC (presstab)
f84ec3df8b[RPC] Fix RPCTimerInterface (random-zebra)
08f6e1774b[RPC] Add 'spendzerocoinmints' RPC call (random-zebra)
8f28b7ad23[RPC] include mints metadata in 'listmintedzerocoins' output (random-zebra)
ee0717c2af[RPC] Ensure that a numeric is being passed to AmmountFromValue (Fuzzbawls)
0774f5fc0d[RPC] Error when calling getreceivedbyaddress with non-wallet address (Fuzzbawls)
3ce4fd7226[RPC] Add more verbosity to validateaddress (Fuzzbawls)
cecda14082[RPC] Fix movecmd's help description to include amount (Fuzzbawls)
056b4d5cb1[RPC] Sanitize walletpassphrase timeout argument (Fuzzbawls)
463fd38325[RPC] Fix verifychain (Fuzzbawls)
17d1f30131[RPC] Don't allow backupwallet to overwrite the wallet-in-use (Fuzzbawls)
64071d142d[Zerocoin] RPC import/export zerocoins private key standardized + Cleanup in AccPoK and SoK to avoid redundant calculations. (furszy)
c6c84fe85f[Wallet] [zPIV] Precomputed Zerocoin Proofs (Fuzzbawls)
37a06eaa93[Wallet] Fix segfault with runtime -disablewallet (Fuzzbawls)
d4762f7e7a[Wallet] Add automint address (Fuzzbawls)
19fd0877cd[Wallet] Avoid failed zPIV spend because of changed seed (warrows)
65be6b611b[Wallet] Fix zPIV spend when too much mints are selected (warrows)
5df105fed2[Staking] Ensure nCredit is correctly initialized in CreateCoinStake (warrows)
394d48b2c9[Wallet] fix bug with fWalletUnlockAnonymizeOnly flag setting (random-zebra)
30048cce62[Refactor] Remove GetCoinAge (Fuzzbawls)
a2d717090f[Wallet] Avoid autocombine getting stuck (warrows)
5272a4f684[Wallet] Fix double locked coin when wallet and MN are on same machine (Tim Uy)
fdf4503b66[Wallet] change COINBASE_MATURITY to Params().COINBASE_MATURITY() (Alko89)
2b8daac4c0[Tests] Integrate fake stake tests into parent test suite (Fuzzbawls)
f8eb7feefc[Regtest][Tests][RPC] Regtest mode + Test suite. (random-zebra)
55ce1619f5[Misc] Update license year 2019 (Everton Melo)
d2ad4d6e93[Utils] Update linters for python3 (Fuzzbawls)
8b1f68d896[Refactor] Use references instead of copies in for loops (Fuzzbawls)
5a5797f5c3[Trivial] Remove Redundant Declarations (Fuzzbawls)
49f9a0fa9e[Zerocoin] Clean zerocoin bignum file (warrows)
dd6909fd30[Utils] Fix syntax error in gitian-build.sh (Aitor González)
0d91550ff6[MoveOnly] Move non-wallet RPC files to subdir (Fuzzbawls)
f7f49cfa7c[zPIV] Fix bignum overloads when using OpenSSL (Fuzzbawls)
1fde9b2b7a[Zerocoin] Remove explicit copy assignement operator from Accumulator (warrows)
88a93bd35a[Refactoring] Abstract out and switch openssl cleanse (Adam Langley)
af0c340fe0[Refactor] remove CPubKey::GetHex (random-zebra)
434abd1ae9[Refactor] Remove 'boost::lexical_cast<>' (random-zebra)
6482454cf6[Main] Unify shutdown proceedure in init rather than per-app (Fuzzbawls)
decee4bc8c[Doc] Update release notes with forthcoming 3.2.0 changes (Fuzzbawls)
51e7b2c4b0[Doc] Update build-unix.md (Fuzzbawls)
a611a7fa77[Doc] Update doc/build-windows.md (idas4you)
65caa886ac[Doc] Update README.md (veilgets)
51663473fc[Docs] Add missing automake dependency (Mrs-X)
abfceb39a1[Random] WIN32 Seed Cleanup: Move nLastPerfmon behind win32 ifdef. (21E14)
4b1be14505[Main] Clean up sync.cpp/h with upstream declarations (Fuzzbawls)
Thanks to everyone who directly contributed to this release:
- Adam Langley
- Aitor González
- Benjamin Allred
- Chun Kuan Lee
- Cory Fields
- Dimitris Apostolou
- Everton Melo
- Matias Furszyfer
- Pieter Wuille
- Tim Uy
- Wladimir J. van der Laan
As well as everyone that helped translating on Transifex, the QA team during Testing and the Node hosts supporting our Testnet.