diff --git a/configure.ac b/configure.ac index e22def0762ecc..2535c5d88460d 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 3) define(_CLIENT_VERSION_MINOR, 2) -define(_CLIENT_VERSION_REVISION, 0) +define(_CLIENT_VERSION_REVISION, 1) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2019) diff --git a/doc/release-notes.md b/doc/release-notes.md index 947e449c75093..88bab3e20b54d 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,16 +1,16 @@ -PIVX Core version *3.2.0* is now available from: +PIVX Core version *3.2.1* is now available from: -This is a new major version release, including various bug fixes and performance improvements, as well as updated translations. +This is a new minor version release, including various bug fixes and performance improvements. Please report bugs using the issue tracker at github: -Mandatory Update +Supplemental 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. +PIVX Core v3.2.1 is a **supplemental update** to v3.2.0 containing minor bug fixes. Users are still advised to read the [v3.2.0 Release Notes](https://github.com/PIVX-Project/PIVX/blob/master/doc/release-notes/release-notes-3.2.0.md) to familiarize themselves with the major feature changes. -Masternodes will need to be restarted once both the masternode daemon and the controller wallet have been upgraded. +While updating from v3.2.0 is not required, it is recommended, especially for anyone encountering the issues detailed in the Notable Changes section below. How to Upgrade ============== @@ -38,155 +38,35 @@ 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 +Bug Fixes ------ -### Fake Stake +### GUI crash when recalculating zPIV data -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](https://medium.com/@dsl_uiuc/fake-stake-attacks-on-chain-based-proof-of-stake-cryptocurrencies-b8b05723f806)”, 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 GUI only crash when recalculating zPIV data (mints/spends/supply) has been fixed. Clients syncing via the network from a point prior to any recalculations can now do so without error again. -A full report provided by PIVX developers is available on the [PIVX Website](https://pivx.org/fake-stake-official-pivx-report/), 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. +### macOS installer mounting -### Wrapped Serials +The macOS installer image (`.dmg` file) had an issue with it's stylesheet that caused an error after mounting the image. Affected macOS users will now see the expected behavior of a finder window appearing after mounting, allowing drag-n-drop installation of the PIVX-Qt.app -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. +### macOS "Pink Pinstripes" -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](https://medium.com/@dev.pivx/report-wrapped-serials-attack-5f4bf7b51701). +A GUI wallet stylesheet issue was causing "pink pinstripes" to display in many of the wallet's views, this has now been resolved. -zPIV functions will be restored after v3.2.0 is pushed out and the majority of the network has upgraded. +### Incorrect seed warning in zPIV control dialog -Major New Features ------- - -### BIP65 (CHECKLOCKTIMEVERIFY) Soft-Fork - -PIVX Core v3.2.0 introduces new consensus rules for scripting pathways to support the [BIP65](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki) 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](https://pivx.org/wp-content/uploads/2018/11/Zerocoin_Light_Node_Protocol.pdf). - -### 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: +Because of the way the zPIV master seed is handled, locked wallets were showing a status message in the zPIV control dialog window which mentioned that the master seed was not the same used to mint the denom. This message was not entirely correct, and a more appropriate message is now displayed for locked wallets. -* `-precompute` is a binary boolean option (`1` or `0`) that determines wither or not pre-computation should be activated at runtime (default value is to activate, `1`). -* `-precomputecachelength` is a numeric value between `500` and `2000` that tells the precompute thread how many blocks to include during each pass (default is `1000`). +### Invalid chain state on shutdown -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. +An issue in how the wallet shutdown procedure is carried out was sometimes leading to marking an incoming block as invalid when it in fact was valid. This would cause the client to seem "stuck" when starting it again. This issue is now resolved. -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 +Performance Improvements ------ -### 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 +### New checkpoints -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. +More recent checkpoints have been added for both mainnet and testnet. These help alleviate some of the load when (re-)syncing from the network. *3.2.0* Change log ============== @@ -194,148 +74,26 @@ The previous `gitian-build.sh` shell script has been replaced with a more featur 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) + - #858 `a2c801205e` [Build] [macOS] Fix macOS dmg issue (10.12+) (Jonas Schnelli) + - #866 `9cd6016f3a` [Build] Update debian contrib files (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) + - #861 `909ed11702` [Net] Add new checkpoints for mainnet/testnet (Fuzzbawls) ### 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) + - #860 `2cefebd1f7` [Qt] Prevent double deletion of progress dialog (Fuzzbawls) + - #852 `37e88b892f` [QT] Fix a display bug about zPIV mints (warrows) + - #863 `89b84a4f5a` [Qt] Stop using a solid white image as a border image (Fuzzbawls) ### 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) + - #865 `ede1af4e10` [Main] Don't return an invalid state when shutting down the wallet (Fuzzbawls) + - #868 `a1080d8658` [Performances] Decrease the number of wasted CPU cycles (warrows) ## 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 +Fuzzbawls +Warrows As well as everyone that helped translating on [Transifex](https://www.transifex.com/projects/p/pivx-project-translations/), the QA team during Testing and the Node hosts supporting our Testnet.