Welcome to the new, friendlier crypto experience!

In the new core wallet version 4.0, the entire experience has been redesigned so that each action a user takes can be done so in a logical and intuitive way. The visual elements have also been upgraded and reworked to reflect the needs of our constantly growing user base. 

For new users, the software provides built-in support and help features that provide guidance on how to complete a multitude of tasks such as how to get started staking or setting up a Masternode.

We are proud to release a completely redesigned and re-engineered core wallet. We are no longer satisfied with making tweaks and adjustments to software that is getting close to being a decade old. This is unique code, no fork or copy and something truly innovative and transformative.

NOTE – Now at v4.0.2

 

UI/UX Features and Slideshow

v4.0.0 introduces a completely new GUI for the wallet, designed and coded from the ground up by the Krubit team.

This new UI, aside from the extensive design overhaul, includes user-focused improvements and features such as a brief introduction on first load, a FAQ section, one-click QR code compatible receiving addresses, masternode creation wizard, dark and light themes, filterable staking charts, and much more.

You can read more details about this extensive work in [PR #954]
(Actual screen captures)

DESKTOP WALLETS v4.0.2

WINDOWS

INSTALLER

exe 32 bit  |  64 bit

zip 32 bit  |  64 bit

 

 

MAC

INSTALLER

.dmg  |  .tgz

LINUX

tgz 32 bit  |  64 bit

arm 32 bit  |  64 bit

Testimonies

This is the first major PIVX wallet since the change in the management of the PIVX core development team in early 2019, and the number of human hours and quality coding put into this one release is way beyond what most projects have done in their lifetime. This release signifies the new beginning of things to come for PIVX in 2020 and beyond.

Jakiman

Communications Officer, PIVX

Redesigned PIVX 4.0 wallet is without a doubt the most user-friendly crypto wallet ever created. PIVX said its final goodbye to 1998 software design and user experience and welcomed 2020 in style. I’m so excited to finally be able to Cold Stake PIV while they are safely stored on my Ledger. Usage of any cryptocurrency wallet until this PIVX wallet release never felt that much safe, easy and intuitive altogether!

Ambassador

Mentor, PIVX

For me, the most exciting feature is the ability to move my coins to my offline wallet and being able to still stake with the cold staking implementation.  PIVX is the only holding I have of value that currently resides in addresses that are tied to a networked system. Being able to move them to a hardware wallet and delegate the staking without having the private keys at risk is a huge benefit.

CaveSpectre

Community Contributor, PIVX

One of the remarkable aspects of PIVX is how high a bar they’ve set for themselves. So much so, that when a massive release lands or industry-changing updates are pushed live on the main network branch – they often are experienced as “just another update from PIVX.” Soon, time will reveal the slow, steady, continual development PIVX has pioneered. This latest release is no exception and is another monumental leap forward not just for PIVX, but the blockchain realm as a whole. Aggressive, design pushing leaps, professionally hardened code updates, and industry-changing features (like cold-staking) – all rolled into one, single, “update.” For those who know…you know how much is wrapped into this release. For everyone else, enjoy one of cryptos most advanced wallets to date.

Snappy

Business Developer, PIVX

Technical Highlights/Advancements

COLD STAKING

A brand new feature is being introduced with the release of v4.0.0: Cold Staking [PR #955]! This feature allows a coin owner to keep coins in a “cold” (or locked) wallet whilst a “hot” wallet carries out the burden of staking those coins. This brings added security to coin owners as they are no longer required to use an unlocked or partially unlocked wallet (with the ability to spend coins anywhere) in order to gain staking rewards. Users who have chosen to store their coins on hardware devices such as a Ledger or Trezor can also gain staking rewards with those coins. A full technical writup is available on the [PIVX Wiki], and an initial video showcase is available on [YouTube].

A brief guide to setup cold staking with GUI and RPC is available [here](https://github.com/random-zebra/PIVX-Wiki/blob/master/User-Documentation/Cold-Staking-HowTo.md). Spending cold stakes from HW wallets currently available only for Ledger devices via [PET4L] tool.

Multi-Split Stake Splitting

Stake splitting has received a makeover and now supports splitting to more than two (2) outputs. [PR #968] introduced the change, which is controlled by the wallet’s `stakesplitthreshold` setting.

The default split threshold remains at 2000 PIV, and can be adjusted in the GUI’s Settings page, or via the RPC `setstakesplitthreshold` command.

For a real example, with a stake split threshold of 1500, and a UTXO of 4708.1557; the current stake split algorithm would break that into two outputs of approximately 2355.07785. With this new logic; it will be broken into 3 outputs instead of two; each sized 1570.0519 (4708.1557 input + 2 stake = 4710.1557 / 3 outputs = 1570.0519.

The maximum number of outputs is currently capped at 48. Also, in relation to the new Cold Staking feature described above; the stake split threshold is set by the staker wallet and NOT the owner wallet.

New Consensus Rules

The following consensus rule changes will be enforced on or shortly after block `2153200`. Note that **Upgrade Enforcement** (mentioned above) will occur prior to this block height.

V1 zPIV Spending (Public Spends Version 4)

Since the discovery of a critical exploit within the libzerocoin library in early 2019, remaining legacy v1 zPIV have been un-spendable. We’re happy to say that, once the new consensus rules are in effect, users will once again be able to spend their v1 zPIV with public spends version 4 [PR #936]

As with the previous version 3 public spends introduced in core wallet version 3.3.0 (enabling the spending of v2 zPIV), version 4 spends will also be public. A full technical writeup is available on the [PIVX Wiki]

Time Protocol v2

[#PR1002] introduces a new time protocol for the Proof-Of-Stake consensus mechanism, to ensure better efficiency, fairness and security. The time is now divided in 15-seconds slots and valid blocktimes are at the beginning of each slot (i.e. the block timestamp’s seconds can only be 00, or 15, or 30 or 45).

The maximum future time limit is lowered from 3 minutes to 14 seconds and the past limit is set to the previous blocktime (i.e. a block can no longer have a timestamp earlier than its previous block).

This means that, when looking for a valid kernel, each stakeable input can be hashed only once every 15 seconds (once per timeslot), and it is not possible to submit blocks with timestamp higher than the current time slot. This ultimately enables the removal of the “hashdrift” concept.

NOTE: Given the much stricter time constraints, a node’s clock synchronization is required for P2P connections: the maximum time offset is 15 seconds and peers with a time drift higher than 30 seconds (in absolute value) will be outright disconnected.

For advanced users, we recommend the setup of NTP clients and own servers. This will provide to your node a higher level of time accuracy and the best, time wise, synchronization with the peers in the network.

 

OP_CHECKCOLDSTAKEVERIFY and P2CS

Cold staking introduces a new opcode, OP_CHECKCOLDSTAKEVERIFY, in the scripting language, and a new standard transaction type using it, named P2CS (Pay-To-Cold-Staking). A P2CS script is defined as follows:

OP_DUP OP_HASH160 OP_ROT OP_IF OP_CHECKCOLDSTAKEVERIFY [HASH160(stakerPubKey] OP_ELSE [HASH160(ownerPubKey)] OP_ENDIF OP_EQUALVERIFY OP_CHECKSIG

OP_CHECKCOLDSTAKEVERIFY is used to ensure that the staker can only spend the output in a valid coinstake transaction (using the same P2CS script in the new output).

Block Version 7

[#PR1022] defines Version 7 blocks, which remove the (now-unused) accumulator checkpoint from the block header. This results in an overall data reduction of ~256 bits from each block as well as the in-memory indexes.

New Network Message Signatures

Layer 2 network messages (MN, Budget, Spork, etc) are now signed based on the hash of their binary content instead of their string representation [#PR1024]

New SPORKS

Two new SPORKS are introduced, SPORK_17 [#PR975] and SPORK_18 [#PR995]

SPORK_17 (off by default) is used to activate the Cold Staking (#cold-staking) protocol. When this spork is off, no cold-staked block is accepted by the network and new delegations are rejected, but coin-owners are still able to spend previously created pay-to-cold-stake delegations.

SPORK_18 (off by default) is used to switch between Version 3 and Version 4 Public Spends (#v1-zpiv-spending-public-spends-version-4). When this spork is active, only version 4 spends are accepted by the network. When it’s not, only version 3 spends are accepted.

RPC Changes

New options for existing wallet commands

A new (optional) argument, `includeDelegated`, has been added to the following commands that allows these commands to include delegated coins/information in their operation:
– `getbalance` – Boolean (Default: True)
– `sendfrom` – Boolean (Default: False)
– `sendmany` – Boolean (Default: False)
– `listtransactions` – Boolean (Default: True)

Additionally, a new (optional) argument, `includeCold`, has been added to the `listtransactions` command (Boolean – Default: True), which allows for filtering of cold-staker delegated transactions.

Internal Miner/Staker Change

The wallet’s internal miner/staker is no longer prevented from running prior to having synced all the additional layer 2 (MN/Budget) data. Instead, mining/staking uses better logic to allow block creation without fully synced layer 2 data when the full data set wouldn’t be required.

In other words, try to stake a new block only if:

– full layer 2 sync is complete
OR
– The spork list is synced and all three sporks (8,9 and 13) are not active.

Newly introduced commands

The following new commands have been added to the RPC interface:
– `getnewstakingaddress`
– `delegatestake`
– `rawdelegatestake`
– `getcoldstakingbalance`
– `delegatoradd`
– `delegatorremove`
– `listcoldutxos`
– `liststakingaddresses`
– `listdelegators`

Details about each new command can be found below. Click on button to reveal.

New return fields for existing commands

The `validateaddress` command now includes an additional response field, `isstaking`, to indicate wither or not the specified address is a cold staking address.

The `getwalletinfo` command now includes two additional response fields:
delegated_balance = PIV balance held in P2CS contracts (delegated amount total).
cold_staking_balance = PIV balance held in cold staking addresses.

Snapcraft Packages

For our linux users, in addition to the [Ubuntu PPA] repository, we are now offering a [Snap package] as quick way to install and update a PIVX wallet.

Release versions are available via the `Stable` branch, and (for testing-only purposes) nightly builds are available in the `Beta` branch.

Faster Shutdown During Initial Loading

Previously, if a user wanted to close/quit the wallet before it had finished its initial loading process, they would need to wait until that loading process actually completed before the wallet would fully close.

Now, the new behavior is to gracefully close the wallet once the current step is complete.

*version* 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 the discussion, both the pull request and git merge commit are mentioned.

Core Features
Build System
P2P Protocol and Network Code
GUI
RPC/REST
Wallet
Miscellaneous

Click to see details about each new command.

getnewstakingaddress generates a new cold staking address:

getnewstakingaddress ( "account" )

Returns a new PIVX cold staking address for receiving delegated cold stakes.

Arguments:
1. "account" (string, optional) The account name for the address to be linked to. if not provided, the default account "" is used. It can also be set to the empty string "" to represent the default account. The account does not need to exist, it will be created if there is no account by the given name.

Result:
"pivxaddress"    (string) The new pivx address

delegatestake sends a cold staking delegation transaction:

delegatestake "stakingaddress" amount ( "owneraddress" fExternalOwner fUseDelegated fForceNotEnabled )

Delegate an amount to a given address for cold staking. The amount is a real and is rounded to the nearest 0.00000001

Requires wallet passphrase to be set with walletpassphrase call.

Arguments:
1. "stakingaddress" (string, required) The pivx staking address to delegate.
2. "amount"         (numeric, required) The amount in PIV to delegate for staking. eg 100
3. "owneraddress"   (string, optional) The pivx address corresponding to the key that will be able to spend the stake.
If not provided, or empty string, a new wallet address is generated.
4. "fExternalOwner" (boolean, optional, default = false) use the provided 'owneraddress' anyway, even if not present in this wallet.
WARNING: The owner of the keys to 'owneraddress' will be the only one allowed to spend these coins.
5. "fUseDelegated"       (boolean, optional, default = false) include already delegated inputs if needed.6. "fForceNotEnabled"    (boolean, optional, default = false) force the creation even if SPORK 17 is disabled (for tests).

Result:
{
   "owner_address": "xxx"   (string) The owner (delegator) owneraddress.
   "staker_address": "xxx"  (string) The cold staker (delegate) stakingaddress.
   "txid": "xxx"            (string) The stake delegation transaction id.
}

rawdelegatestake creates a raw cold staking delegation transaction without broadcasting it to the network:

rawdelegatestake "stakingaddress" amount ( "owneraddress" fExternalOwner fUseDelegated )

Delegate an amount to a given address for cold staking. The amount is a real and is rounded to the nearest 0.00000001

Delegate transaction is returned as json object.
Requires wallet passphrase to be set with walletpassphrase call.

Arguments:
1. "stakingaddress"      (string, required) The pivx staking address to delegate.
2. "amount"              (numeric, required) The amount in PIV to delegate for staking. eg 100
3. "owneraddress"        (string, optional) The pivx address corresponding to the key that will be able to spend the stake.
If not provided, or empty string, a new wallet address is generated.
4. "fExternalOwner"      (boolean, optional, default = false) use the provided 'owneraddress' anyway, 
even if not present in this wallet. WARNING: The owner of the keys to 'owneraddress' will be the only one allowed to spend these coins. 5. "fUseDelegated (boolean, optional, default = false) include already delegated inputs if needed. Result: { "txid" : "id", (string) The transaction id (same as provided) "version" : n, (numeric) The version "size" : n, (numeric) The serialized transaction size "locktime" : ttt, (numeric) The lock time "vin" : [ (array of json objects) { "txid": "id", (string) The transaction id "vout": n, (numeric) "scriptSig": { (json object) The script "asm": "asm", (string) asm "hex": "hex" (string) hex }, "sequence": n (numeric) The script sequence number } ,... ], "vout" : [ (array of json objects) { "value" : x.xxx, (numeric) The value in btc "n" : n, (numeric) index "scriptPubKey" : { (json object) "asm" : "asm", (string) the asm "hex" : "hex", (string) the hex "reqSigs" : n, (numeric) The required sigs "type" : "pubkeyhash", (string) The type, eg 'pubkeyhash' "addresses" : [ (json array of string) "pivxaddress" (string) pivx address ,... ] } } ,... ], "hex" : "data", (string) The serialized, hex-encoded data for 'txid' }

getcoldstakingbalance returns the cold balance of the wallet:

getcoldstakingbalance ( "account" )

If account is not specified, returns the server's total available cold balance.
If account is specified, returns the cold balance in the account.
Note that the account "" is not the same as leaving the parameter out.
The server total may be different to the balance in the default "" account.

Arguments:
1. "account" (string, optional) The selected account, or "*" for entire wallet. It may be the default account using "".

Result:
amount (numeric) The total amount in PIV received for this account in P2CS contracts.

delegatoradd whitelists a delegated owner address for cold staking:

delegatoradd "addr"

Add the provided address <addr> into the allowed delegators AddressBook.
This enables the staking of coins delegated to this wallet, owned by <addr>

Arguments:
1. "addr" (string, required) The address to whitelist

Result:
true|false (boolean) true if successful.

delegatorremove to remove previously whitelisted owner address:

delegatoradd "addr"

Add the provided address <addr> into the allowed delegators AddressBook.
This enables the staking of coins delegated to this wallet, owned by <addr>

Arguments:
1. "addr" (string, required) The address to whitelist

Result:
true|false (boolean) true if successful.

listcoldutxos lists all P2CS UTXOs belonging to the wallet (both delegator and cold staker):

listcoldutxos ( nonWhitelistedOnly )

List P2CS unspent outputs received by this wallet as cold-staker-

Arguments:
1. nonWhitelistedOnly   (boolean, optional, default=false) Whether to exclude P2CS from whitelisted delegators.

Result:
[
  {
    "txid" : "true",            (string) The transaction id of the P2CS utxo
    "txidn" : "accountname",    (string) The output number of the P2CS utxo
    "amount" : x.xxx,           (numeric) The amount of the P2CS utxo
    "confirmations" : n         (numeric) The number of confirmations of the P2CS utxo
    "cold-staker" : n           (string) The cold-staker address of the P2CS utxo
    "coin-owner" : n            (string) The coin-owner address of the P2CS utxo
    "whitelisted" : n           (string) "true"/"false" coin-owner in delegator whitelist
  }
  ,...
]

liststakingaddresses lists all cold staking addresses generated by the wallet:

liststakingaddresses "addr"

Shows the list of staking addresses for this wallet.

Result:
[
   {
   "label": "yyy",  (string) account label
   "address": "xxx",  (string) PIVX address string
   }
  ...
]

listdelegators lists the whitelisted owner addresses

listdelegators "addr"

Shows the list of allowed delegator addresses for cold staking.

Result:
[
   {
   "label": "yyy",  (string) account label
   "address": "xxx",  (string) PIVX address string
   }
  ...
]

Credits

Thanks to everyone who directly contributed to this release:  As well as everyone that helped translating on [Transifex], the QA team during Testing and the Node hosts supporting our Testnet.

Download the NEW PIVX Wallet - v4.0.2