Skip to content

v3.1.0

Compare
Choose a tag to compare
@Fuzzbawls Fuzzbawls released this 01 May 21:46
· 8779 commits to master since this release
v3.1.0
4b3b8a9

PIVX Core version 3.1.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.1.0 is a mandatory update for all users. This release contains new consensus rules and improvements that are not backwards compatible with older versions. Users will have a grace period of one week to update their clients before enforcement of this update is enabled.

Users updating from a previous version after Tuesday, May 8, 2018 12:00:00 AM GMT will require a full resync of their local blockchain from either the P2P network or by way of the bootstrap.

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

Compatibility

PIVX Core is extensively tested on multiple operating systems using
the Linux kernel, macOS 10.8+, and Windows Vista 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.

PIVX Core should also work on most other Unix-like systems but is not
frequently tested on them.

❗❗❗ MacOS 10.13 High Sierra ❗❗❗

Currently there are issues with the 3.x gitian release on MacOS version 10.13 (High Sierra), no reports of issues on older versions of MacOS.

Notable Changes

zPIV Updates

zPIV Staking

zPIV Staking is here! zPIV staking will be activated on the morning of the 8th of May 2018. With the release of zPIV staking, there are effectively 2 versions of zPIV, zPIV minted on the 3.0.6 PIVX wallet or lower, and zPIV minted on PIVX wallet version 3.1.0 or higher. New features in this release will require the use of zPIV v2, zPIV minted on this wallet release or later. If you currently hold zPIV v1 and wish to take advantage of zPIV staking and deterministic zPIV, you will need to spend the zPIV v1 to yourself and remint zPIV v2. In order to take advantage of zPIV staking, you must mint new zPIV v2 and wait for at least 200 confirmations before that zPIV is considered valid for staking.

Note: To find your zPIV version, click the privacy tab, then the zPIV Control button then expand the arrows next to the desired denomination.

Deterministic zPIV Seed Keys

zPIV is now associated with a deterministic seed key. With this seed key, users are able to securely backup their zPIV outside of the wallet that the zPIV had been minted on. zPIV can also be transferred from wallet to wallet without the need of transferring the wallet data file.

Updated zPIV minting

zPIV minting now only requires 1 further mint (down from 2) to mature. zPIV mints still require 20 confirmations. Mints also require that the 'second' mint is at least two checkpoints deep in the chain (this was already the case, but the logic was not as precise).

zPIV Search

Users will now have the ability to search the blockchain for a specific serial # to see if a zPIV denomination has been spent or not.

PIV/zPIV Staking and Masternode Rewards

PIV, zPIV and Masternode Payment Schedule

To encourage the use of zPIV and increase the PIVX zerocoin anonymity set, the PIVX payment schedule has been changed to the following:

If a user staking zPIV wins the reward for their block, the following zPIV reward will be:

  • 3 zPIV (3 x 1 denominations) rewarded to the staker, 2 PIV rewarded to the masternode owner and 1 PIV available for the budget. This is a total block reward of 6 PIV, up from 5.

If a user staking PIV wins the reward, the following amounts will be rewarded:

  • 2 PIV to the PIV staker, 3 PIV to the Masternode owner and 1 PIV available for the budget. This is a total block reward of 6 PIV, up from 5.

Return change to sender when minting zPIV

Previously, zPIV minting would send any change to a newly generated "change address". This has caused confusion among some users, and in some cases insufficient backups of the wallet. The wallet will now find the contributing address which contained the most PIV and return the change from a zPIV mint to that address.

User Experience

Graphical User Interface

The visual layout of the PIVX Qt wallet has undergone a near-complete overhaul.
A new 'vertical tab' layout is now being used instead of the prior 'horizontal tab' layout, as well as a completely new icon set.
The overview tab has been simplified greatly to display only balances that are active or relevant, zero-balance line items are hidden by default to avoid clutter.

Wallet Options

There have been a number of changes to the tasks that you are able to perform from the wallet options. Users will now have the ability to do the following:

  • Enable and disable the auto zPIV minting feature. This is enabled by default and the enablezeromint=0 setting in the pivx.conf file will overwrite the GUI option.
  • The percentage of autominted zPIV can now be set from 1 to 100, changed from 10 – 100.
  • The stake split threshold can now be set VIA the wallet options. This setting is an advanced feature for those wishing to remain staking regular PIV.
  • “Unlock for staking and anonymization only” is now selected by default when unlocking the wallet from the User Interface

In-wallet Ban Management

Peer bans are now manageable through the Peers tab of the tools window. Peers can be banned/unbanned at will without the need to restart the wallet client. No changes have been made to the conditions resulting in automatic peer bans.

Backup to external devices / locations

Summary

The PIVX wallet can now have user selected directories for automatic backups of the wallet data file (wallet.dat). This can be set by adding the following lines to the pivx.conf file, found in the PIVX data directory.

  • backuppath = <directory / full path>
  • zpivbackuppath = <directory / full path>
  • custombackupthreshold =
    Note: System write permissions must be appropriate for the location the wallet is being saved to.
  • Configured variables display in the Wallet Repair tab inside the Tools Window / Dropdown Menu
  • Allows for backing up wallet.dat to the user set path, simultaneous to other backups
  • Allows backing up to directories and files, with a limit (threshold) on how many files can be saved in the directory before it begins overwriting the oldest wallet file copy.

Details:

  • If path is set to directory, the backup will be named wallet.dat-<year>-<month>-<day>-<hour>-<minute>-<second>
  • If zPIV backup, auto generated name is wallet-autozpivbackup.dat-<year>-<month>-<day>-<hour>-<minute>-<second>
  • If path set to file, backup will be named <filename>.dat
  • walletbackupthreshold enables the user to select the maximum count of backup files to be written before overwriting existing backups.

Example:

  • -backuppath=/<mynewdir>/
  • -walletbackupthreshold=2

Backing up 4 times will result as shown below

            date/time
backup #1 - 2018-04-20-00-04-00  
backup #2 - 2018-04-21-04-20-00  
backup #3 - 2018-04-22-00-20-04  
backup #4 - 2018-04-23-20-04-00  

1.
    /<mynewdir>/
        wallet.dat-2018-04-20-00-04-00
2.
    /<mynewdir>/
        wallet.dat-2018-04-20-00-04-00
        wallet.dat-2018-04-21-04-20-00
3.
    /<mynewdir>/
        wallet.dat-2018-04-22-00-20-04
        wallet.dat-2018-04-21-04-20-00
4.
    /<mynewdir>/
        wallet.dat-2018-04-22-00-20-04
        wallet.dat-2018-04-23-20-04-00

PIVX Daemon & Client (RPC Changes)

RPC Ban Management

The PIVX client peer bans now have additional RPC commands to manage peers. Peers can be banned and unbanned at will without the need to restart the wallet client. No changes have been made to the conditions resulting in automatic peer bans. New RPC commands: setban, listbanned, clearbanned, and disconnectnode

Random-cookie RPC authentication

When no -rpcpassword is specified, the daemon now uses a special 'cookie' file for authentication. This file is generated with random content when the daemon starts, and deleted when it exits. Its contents are used as authentication token. Read access to this file controls who can access through RPC. By default it is stored in the data directory but its location can be overridden with the option -rpccookiefile.
This is similar to Tor's CookieAuthentication: see https://www.torproject.org/docs/tor-manual.html.en
This allows running pivxd without having to do any manual configuration.

New RPC command

getfeeinfo

This allows for a user (such as a third party integration) to query the blockchain for the current fee rate per kb, and also get a suggested rate per kb for high priority tx's that need to get added to the blockchain asap.

New RPC command

findserial

Search the zerocoin database for a zerocoinspend transaction that contains the given serial. This will be a helpful tool for the PIVX support group, which often times sees users say "I didn't spend that zPIV". This RPC call allows for support to grab the serial, and then find the spend tx on the chain.

New RPC commands

createmasternodebroadcast

decodemasternodebroadcast

relaymasternodebroadcast

A new set of rpc commands masternodebroadcast to create masternode broadcast messages offline and relay them from online node later (messages expire in ~1 hour).

Network Layer 2 Changes (Proposals / Budgets / SwiftX)

Monthly Budget Increase

As voted on by the PIVX masternodes, the monthly budget available to be utilised has been increased to 42,000 PIV / month. This PIV only has the opportunity to be raised once per month (paid to winning proposals) with any unused PIV not created by the blockchain.

Budget Finalization Fee

The PIVX finalization fee for successful proposals has now been reduced, this fee is now 5 PIV down from 50 PIV. The total fee outlay for a successful proposal is now a total of 55 PIV.

SwiftX Raw Transactions

When creating a raw transaction, it is now possible to create the transaction as a SwiftX transaction. See the updated help documentation for the createrawtransaction RPC command.

Technical Changes

Migration to libevent based http server

The RPC and REST interfaces are now initialized and controlled using standard libevent instead of the ad-hoc pseudo httpd interface that was used previously. This change introduces a more resource friendly and effective interface.

New Notification Path

blocksizenotify

A new notification path has been added to allow a script to be executed when receiving blocks larger than the 1MB legacy size. This functions similar to the other notification listeners (blocknotify, walletnotify, etc).

Removed Growl Support

Growl hasn't been free nor needed for many years. MacOS versions since 10.8 have the OS notification center, which is still supported after this.

Autocombine changes

The autocombine feature was carrying a bug leading to a significant CPU overhead when being used. The function is now called only once initial blockchain download is finished. It's also now avoiding to combine several times while under the threshold in order to avoid additional transaction fees. Last but not least, the fee computation has been changed and the dust from fee provisioning is returned in the main output.

SOCKS5 Proxy bug

When inputting wrong data into the GUI for a SOCKS5 proxy, the wallet would crash and be unable to restart without accessing hidden configuration. This crash has been fixed.

Minor Enhancements

  • Enforced v1 zPIV spends to require a security level of 100
  • Updates to zPIV spends to avoid segfaults
  • Updates to configuration will now reflect on the privacy tab
  • Fixed a bug that would not start masternodes from the PIVX-Qt masternodes tab
  • Updated PIVX-Qt tooltips
  • Icon added to the wallet GUI to reflect the status of autominting (active / inactive)
  • Updated errors causing the blockchain to corrupt when experiencing unexpected wallet shutdowns
  • Updated RPC help outputs & removed the deprecated obfuscation.
  • Refactored code
  • Various bug fixes
  • Updated documentation

Further Reading: Version 2 Zerocoins

Several critical security flaws in the zerocoin protocol and PIVX's zerocoin implementation have been patched. Enough has changed that new zerocoins are distinct from old zerocoins, and have been labelled as version 2. When using the zPIV Control dialog in the QT wallet, a user is able to see zPIV marked as version 1 or 2.

zPoS (zPIV staking)

Once a zPIV has over 200 confirmations it becomes available to stake. Staking zPIV will consume the exact zerocoin that is staked and replace it with a freshly minted zerocoin of the same denomination as well as a reward of three 1 denomination zPIV. So for example if a 1,000 zPIV denomination is staked, the protocol replaces that with a fresh 1,000 denomination and three1 denomination zPIVs.

Secure Spending

Version 1 zerocoins, as implemented by Miers et. al, allow for something we describe as serial trolling. Spending zerocoins requires that the spender reveal their serial number associated with the zerocoin, and in turn that serial number is used to check for double spending. There is a fringe situation (which is very unlikely to happen within PIVX's zerocoin implementation due to delayed coin accumulation) where the spender sends the spending transaction, but the transaction does not immediately make it into the blockchain and remains in the mempool for a long enough duration that a troll has enough time to see the spender's serial number, mint a new zerocoin with the same serial number, and spend the new zerocoin before the original spender's transaction becomes confirmed. If the timing of this fringe situation worked, then the original spender's coin would be seen as invalid because the troll was able to have the serial recorded into the blockchain first, thus making the original spender's serial appear as a double spend.

The serial troll situation is mitigated in version 2 by requiring that the serial number be a hash of a public key. The spend requires an additional signature signed by the private key associated with the public key hash matching the serial number. This work around was conceived by Tim Ruffing, a cryptographer that has studied the zerocoin protocol and done consulting work for the ZCoin project.

Deterministic Zerocoin Generation

Zerocoins, or zPIV, are now deterministically generated using a unique 256 bit seed. Each wallet will generate a new seed on its first run. The deterministic seed is used to generate a string of zPIV that can be recalculated at any time using the seed. Deterministic zPIV allows for users to backup all of their future zPIV by simply recording their seed and keeping it in a safe place (similar to backing up a private key for PIV). The zPIV seed needs to remain in the wallet in order to spend the zPIV after it is generated, if the seed is changed then the coins will not be spendable because the wallet will not have the ability to regenerate all of the private zPIV data from the seed. It is important that users record & backup their seed after their first run of the wallet. If the wallet is locked during the first run, then the seed will be generated the first time the wallet is unlocked.

Zerocoin Modulus

PIVX's zerocoin implementation used the same code from the ZCoin project to import the modulus use for the zerocoin protocol. The chosen modulus is the 2048 bit RSA number created for the RSA factoring challenge. The ZCoin project's implementation (which PIVX used) improperly imported the modulus into the code. This flaw was discovered by user GOAT from the Civitas Project, and reported to PIVX using the bug bounty program. The modulus is now correctly imported and PIVX's accumulators have been changed to use the new proper modulus.

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

Core Features

  • #582 cb1632520 [Core] zPIV v2: zPoS dzPIV ezPIV external backup and budget fixes (too many to list)
  • #558 c7e6f0f7f [Core] Remove Gitan-OSX warning for High Sierra builds (Mrs-X)
  • #523 926c073ea [Core] Give high priority to zerocoinspends to make it into the next block. (presstab)
  • #535 5e8875feb [Core] Minor refacturing + unused variable removed (Mrs-X)
  • #526 0e034d62f [Core] Refactor ConnectBlock() to segregate state tracking items (presstab)
  • #513 27cdf61f2 [Core] Fix masternode broadcast for networks != MAINNET (Mrs-X)
  • #261 29611a5fd [Core] Switch from local to main signals for the validation interface (Nitya Sattva)
  • #460 ae4b6a135 [Core] (testnet-) blockchain stuck at block 325000 (Mrs-X)
  • #428 3de6b6f3e [Core] Wipe zerocoin DB on reindex. (presstab)
  • #447 8d3407ae4 [Consensus] Fix compilation with OpenSSL 1.1 (warrows)
  • #551 94b9bc937 [Consensus] Require standard transactions for testnet (Fuzzbawls)

Build System

  • #532 9071bfe2f [Depends] Update depends package versions. (Fuzzbawls)
  • #402 a471f7020 [Build] Revert #402 "Change git info in genbuild.sh" (Fuzzbawls)
  • #541 2f6b58cf1 [Build] Fix typo in Qt test makefile (Fuzzbawls)
  • #536 5c44f40e9 [Build] Update build system from upstream (Fuzzbawls)
  • #480 72d8c7d67 [Build] compile/link winshutdownmonitor.cpp on Windows only (Fuzzbawls)
  • #461 55ec19af0 [Build] libevent-dev dependency added to build-documentation (Mrs-X)

P2P Protocol and Network Code

  • #542 61156def7 [Network] Remove vfReachable and modify IsReachable to only use vfLimited. (Patrick Strateman)

GUI

  • #572 d9b23fe60 [Qt] Refresh zPIV balance after resetting mints or spends (warrows)
  • #571 1c8e7cb7b [Qt] Update privacy tab info about zeromint on config change (warrows)
  • #568 f226de09e [Qt] Connect automint icon to the UI automint setting change (warrows)
  • #566 84f43857c [Qt] Add automint status bar icon (Fuzzbawls)
  • #567 e12914d85 [Qt] Optimize PNGs (Fuzzbawls)
  • #537 653115e9b [Qt] Standardize and clean up new UI elements (Fuzzbawls)
  • #538 24f581842 [Qt] Fix warning dialog popup for the Blockchain Explorer (Fuzzbawls)
  • #529 c649ba7e2 [Qt] Remove Growl support (Fuzzbawls)
  • #521 fbb105a00 [Qt] Make "For anonymization and staking only" checked by default (Mrs-X)
  • #508 2cf3be6bb [Qt] Fix crash when inputting wrong port for network proxy (warrows)
  • #500 4c01ba65d [Qt] Remove duplicate code for updating address book labels. (blondfrogs)
  • #506 ae72bf4e2 [Qt] Autoscroll to end of zPIV status output (Mrs-X)
  • #499 6305264f2 [Qt] Send popup simplified + SwiftTX -> SwiftX (Mrs-X)
  • #490 ba777e4ef [Qt] Update MultiSend GUI to allow address labels (blondfrogs)
  • #483 5b1070365 [Qt] Fixed Dynamic Screen Elements Issue for Multisig (blondfrogs)
  • #479 818c0c79e [Qt] Rework of overview page (warrows)
  • #478 98ca7bc90 [Qt] Implement Ban Management in GUI Wallet (Fuzzbawls)
  • #473 9e2ed8f0f [Qt] Make toolbar icons bigger (Mrs-X)
  • #462 c62eabe7b [Qt] Consistent trx colors for Overview + Transaction tabs (Mrs-X)
  • #472 b7929bdcf [Qt] Minor changes and fixes (Mrs-X)
  • #467 7099831bd [Qt] Clear PrivacyDialog "zPiv Selected" labels after sending. (presstab)
  • #465 d8e21774d [Qt] Added controls to the options dialog for enable or disable auto-minting and set required level (lex-dev3)
  • #464 59fd7d378 [Qt] setstakesplitthreshold value set in Qt GUI (lex-dev3)
  • #452 219b68dc9 [Qt] Complete re-design of Qt-wallet (Mrs-X)
  • #440 011408474 [Qt] Fix empty system tray menu (PeterL73)
  • #442 248316647 [Qt] Improve checkbox visibility (PeterL73)

RPC/REST

  • #562 772160b1b [Wallet/RPC] Add argument to mint zerocoin from specific UTXO (warrows)
  • #539 b6a02e9d6 [RPC] Allow watchonly coins to be shown for listunspent (blondfrogs)
  • #543 e4522ff07 [RPC] Segfault pivx-cli getinfo while loading block index (Mrs-X)
  • #524 2541b5001 [RPC] Add blocksizenotify command (Mrs-X)
  • #495 4946224c1 [RPC] Show script verification errors in signrawtransaction result (Fuzzbawls)
  • #468 00b8b8e72 [RPC/REST] Migrate to libevent based httpd server (Fuzzbawls)
  • #381 6f91fb734 [RPC] Allow in-wallet management of peer bans (Fuzzbawls)
  • #441 6ae17c52d [RPC] Implement random-cookie based authentication (Fuzzbawls)
  • #443 0a991d8ba [RPC] Findserial (presstab)
  • #438 f701337e7 [RPC] Fix importzercoins for use with UniValue (Fuzzbawls)
  • #429 17fdde1d1 [RPC] Add getfeeinfo RPC. (presstab)
  • #423 5dfb48ee6 [RPC] Add SwiftX to rpcrawtransaction. (presstab)
  • #170 027f16c64 [RPC] Convert source tree from json_spirit to UniValue (Fuzzbawls)

Wallet

  • #570 8c8350b59 [Wallet] Add a check on zPIV spend to avoid a segfault (warrows)
  • #565 80b803201 [Wallet] Increase valid range for automint percentage (Fuzzbawls)
  • #518 9f6449a70 [Wallet] Combine fees when possible and fix autocombine insufficient funds (warrows)
  • #497 f21e4456b [Wallet] Call AutocombineDust less often (warrows)
  • #498 bfad2a1df [Wallet] Change the way transaction list is handled (warrows)
  • #477 93c5f9ff5 [Wallet] Remove potential memory leak (blondfrogs)
  • #488 d09cf916a [Wallet] Fixes an autocombinerewards bug with above max size TXs (warrows)
  • #448 222ef6e6b [Wallet] Return change to sender when minting zPIV. (presstab)
  • #445 fc570fc1e [Wallet] Only require 1 mint to be added before spending zPIV. (presstab)

Miscellaneous

  • #559 d2b017217 [Bug] Segfault with -enableswifttx=0 / -enableswifttx=false (Mrs-X)
  • #494 8180b7884 [Bug] remove use of variable length buffer (rejectedpromise)
  • #469 6bd265c5e [Tests] Fix util_tests compiler warnings with clang (Fuzzbawls)
  • #463 22f2bb623 [Tests] Fixed compilation errors (lex-dev3)
  • #569 aedf80b07 [Docs] OSX Build - Instructions on how to make the Homebrew OpenSSL headers visible (gpdionisio)
  • #554 8cecb3435 [Docs] Added release notes for autocombine and proxy GUI. (warrows)
  • #533 ad3edb9fa [Docs] Update OSX build notes: zmq, libevent, and notes to handle possible glibtoolize error (Tim Uy)
  • #530 fd8aa8991 [Docs] Update README.md (Warrows)
  • #528 1c1412246 [Docs] Readme changes (Sieres)
  • #471 18e5accb6 [Docs] Readme SeeSaw reward mechanism reference. (Dexaran)
  • #426 3418a64d2 [Docs] Use mainnet port for example in masternode.conf file (Fuzzbawls)

Credits

Thanks to everyone who directly contributed to this release:

  • gpdionisio
  • warrows
  • Fuzzbawls
  • Mrs-X
  • presstab
  • blondfrogs
  • Patrick Strateman
  • Tim Uy
  • Sieres
  • Nitya Sattva
  • turtleflax
  • rejectedpromise
  • Dexaran
  • lex-dev3
  • PeterL73
  • Anthony Posselli
  • Jon Spock

As well as everyone that helped translating on Transifex.