You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(Developers: add your notes here as part of your pull requests whenever possible)
36
36
37
-
New Wallet UI
38
-
-------------------
39
37
40
-
v4.0.0 introduces a completely new GUI for the wallet, designed and coded from the ground up by the [Krubit](https://krubit.com/) team.
41
-
42
-
This new UI, aside from the overall design large implementation, includes user-focused improvements and features such as a brief introduction on first load, a FAQ section, one-click QRCode compatible receiving addresses, masternode creation wizard, dark and light themes, filterable staking charts, and much more.
43
-
44
-
You can read more details about this extensive work in ([PR #954](https://github.com/PIVX-Project/PIVX/pull/954))
45
-
46
-
There are some legacy features that have not been included, however, notably the in-wallet block explorer and the governance page. The in-wallet block explorer was sorely outdated, and the governance page was a newer addition that will be seeing a return in a future version.
47
-
48
-
Cold Staking
49
-
-------------------
50
-
51
-
A brand new feature is being introduced with the release of v4.0.0: Cold Staking ([PR #955](https://github.com/PIVX-Project/PIVX/pull/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.
52
-
53
-
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<sup>1</sup> can also gain staking rewards with those coins.
54
-
55
-
A full technical writup is available on the [PIVX Wiki](https://github.com/PIVX-Project/PIVX/wiki/ColdStaking), and an initial video showcase is available on [YouTube](https://www.youtube.com/watch?v=utxB5TzAeXc).
56
-
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).
57
-
58
-
<sup>1</sup> Spending cold stakes from HW wallets currently available only for Ledger devices via [PET4L](https://github.com/PIVX-Project/PET4L) tool.
59
-
60
-
Multi-Split Stake Splitting
61
-
-------------------
62
-
63
-
Stake splitting has received a makeover and now supports splitting to more than two (2) outputs. [PR #968](https://github.com/PIVX-Project/PIVX/pull/968) introduced the change, which is controlled by the wallet's `stakesplitthreshold` setting.
64
-
65
-
The default split threshold remains at 2000 PIV, and can be adjusted in the GUI's Settings page, or via the RPC `setstakesplitthreshold` command.
66
-
67
-
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.
68
-
69
-
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.
70
-
71
-
New Consensus Rules
72
-
-------------------
73
-
74
-
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.
75
-
76
-
### V1 zPIV Spending (Public Spends Version 4)
77
-
78
-
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](https://github.com/PIVX-Project/PIVX/pull/936)).
79
-
80
-
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](https://github.com/PIVX-Project/PIVX/wiki/CoinRandomnessSchnorrSignature).
81
-
82
-
### OP_CHECKCOLDSTAKEVERIFY and P2CS
83
-
84
-
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_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).
90
-
91
-
### Time Protocol v2
92
-
93
-
[#PR1002](https://github.com/PIVX-Project/PIVX/pull/1002) 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`).<br>
94
-
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).<br>
95
-
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.<br>
96
-
97
-
**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.
98
-
99
-
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.
100
-
101
-
### Block Version 7
102
-
103
-
[#PR1022](https://github.com/PIVX-Project/PIVX/pull/1022) 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.
104
-
105
-
### New Network Message Signatures
106
-
107
-
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](https://github.com/PIVX-Project/PIVX/pull/1024)).
108
-
109
-
### New SPORKS
110
-
111
-
Two new SPORKS are introduced, `SPORK_17` ([#PR975](https://github.com/PIVX-Project/PIVX/pull/975)) and `SPORK_18` ([#PR995](https://github.com/PIVX-Project/PIVX/pull/995)).<br>
112
-
`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.
113
-
114
-
`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.
115
38
116
39
RPC Changes
117
40
--------------
118
41
119
-
### New options for existing wallet commands
42
+
### Modified input/output for existing commands
120
43
121
-
A new (optional) argument, `includeDelegated`, has been added to the following commands that allows these commands to include delegated coins/information in their operation:
122
-
-`getbalance` - Boolean (Default: True)
123
-
-`sendfrom` - Boolean (Default: False)
124
-
-`sendmany` - Boolean (Default: False)
125
-
-`listtransactions` - Boolean (Default: True)
44
+
- "CoinStake" JSON object in `getblock` output is removed, and replaced with the string "hashProofOfStake"
126
45
127
-
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.
46
+
- "isPublicSpend" boolean (optional) input parameter is removed from the following commands:
47
+
-`createrawzerocoinspend`
48
+
-`spendzerocoin`
49
+
-`spendzerocoinmints`
50
+
-`spendrawzerocoin`
128
51
129
-
### New return fields for existing commands
52
+
These commands are now able to create only *public* spends (private spends were already enabled only on regtest).
130
53
131
-
The `validateaddress` command now includes an additional response field, `isstaking`, to indicate wither or not the specified address is a cold staking address.
54
+
### Removed commands
55
+
56
+
The following commands have been removed from the RPC interface:
57
+
-`createrawzerocoinstake`
132
58
133
-
The `getwalletinfo` command now includes two additional response fields:
134
-
-`delegated_balance` - PIV balance held in P2CS contracts (delegated amount total).
135
-
-`cold_staking_balance` - PIV balance held in cold staking addresses.
136
59
137
60
### Newly introduced commands
138
61
139
62
The following new commands have been added to the RPC interface:
140
-
-`getnewstakingaddress`
141
-
-`delegatestake`
142
-
-`rawdelegatestake`
143
-
-`getcoldstakingbalance`
144
-
-`delegatoradd`
145
-
-`delegatorremove`
146
-
-`listcoldutxos`
147
-
-`liststakingaddresses`
148
-
-`listdelegators`
63
+
-`...`
149
64
150
65
Details about each new command can be found below.
151
66
152
-
`getnewstakingaddress` generates a new cold staking address:
153
-
```
154
-
getnewstakingaddress ( "account" )
155
-
156
-
Returns a new PIVX cold staking address for receiving delegated cold stakes.
157
-
158
-
Arguments:
159
-
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.
160
-
161
-
Result:
162
-
"pivxaddress" (string) The new pivx address
163
-
```
164
-
165
-
`delegatestake` sends a cold staking delegation transaction:
Delegate an amount to a given address for cold staking. The amount is a real and is rounded to the nearest 0.00000001
170
-
171
-
Requires wallet passphrase to be set with walletpassphrase call.
172
-
173
-
Arguments:
174
-
1. "stakingaddress" (string, required) The pivx staking address to delegate.
175
-
2. "amount" (numeric, required) The amount in PIV to delegate for staking. eg 100
176
-
3. "owneraddress" (string, optional) The pivx address corresponding to the key that will be able to spend the stake.
177
-
If not provided, or empty string, a new wallet address is generated.
178
-
4. "fExternalOwner" (boolean, optional, default = false) use the provided 'owneraddress' anyway, even if not present in this wallet.
179
-
WARNING: The owner of the keys to 'owneraddress' will be the only one allowed to spend these coins.
180
-
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).
181
-
182
-
Result:
183
-
{
184
-
"owner_address": "xxx" (string) The owner (delegator) owneraddress.
185
-
"staker_address": "xxx" (string) The cold staker (delegate) stakingaddress.
186
-
"txid": "xxx" (string) The stake delegation transaction id.
187
-
}
188
-
```
189
-
190
-
`rawdelegatestake` creates a raw cold staking delegation transaction without broadcasting it to the network:
Delegate an amount to a given address for cold staking. The amount is a real and is rounded to the nearest 0.00000001
195
-
196
-
Delegate transaction is returned as json object.
197
-
Requires wallet passphrase to be set with walletpassphrase call.
198
-
199
-
Arguments:
200
-
1. "stakingaddress" (string, required) The pivx staking address to delegate.
201
-
2. "amount" (numeric, required) The amount in PIV to delegate for staking. eg 100
202
-
3. "owneraddress" (string, optional) The pivx address corresponding to the key that will be able to spend the stake.
203
-
If not provided, or empty string, a new wallet address is generated.
204
-
4. "fExternalOwner" (boolean, optional, default = false) use the provided 'owneraddress' anyway, even if not present in this wallet.
205
-
WARNING: The owner of the keys to 'owneraddress' will be the only one allowed to spend these coins.
206
-
5. "fUseDelegated (boolean, optional, default = false) include already delegated inputs if needed.
207
-
208
-
Result:
209
-
{
210
-
"txid" : "id", (string) The transaction id (same as provided)
211
-
"version" : n, (numeric) The version
212
-
"size" : n, (numeric) The serialized transaction size
213
-
"locktime" : ttt, (numeric) The lock time
214
-
"vin" : [ (array of json objects)
215
-
{
216
-
"txid": "id", (string) The transaction id
217
-
"vout": n, (numeric)
218
-
"scriptSig": { (json object) The script
219
-
"asm": "asm", (string) asm
220
-
"hex": "hex" (string) hex
221
-
},
222
-
"sequence": n (numeric) The script sequence number
223
-
}
224
-
,...
225
-
],
226
-
"vout" : [ (array of json objects)
227
-
{
228
-
"value" : x.xxx, (numeric) The value in btc
229
-
"n" : n, (numeric) index
230
-
"scriptPubKey" : { (json object)
231
-
"asm" : "asm", (string) the asm
232
-
"hex" : "hex", (string) the hex
233
-
"reqSigs" : n, (numeric) The required sigs
234
-
"type" : "pubkeyhash", (string) The type, eg 'pubkeyhash'
235
-
"addresses" : [ (json array of string)
236
-
"pivxaddress" (string) pivx address
237
-
,...
238
-
]
239
-
}
240
-
}
241
-
,...
242
-
],
243
-
"hex" : "data", (string) The serialized, hex-encoded data for 'txid'
244
-
}
245
-
```
246
-
247
-
`getcoldstakingbalance` returns the cold balance of the wallet:
248
-
```
249
-
getcoldstakingbalance ( "account" )
250
-
251
-
If account is not specified, returns the server's total available cold balance.
252
-
If account is specified, returns the cold balance in the account.
253
-
Note that the account "" is not the same as leaving the parameter out.
254
-
The server total may be different to the balance in the default "" account.
255
-
256
-
Arguments:
257
-
1. "account" (string, optional) The selected account, or "*" for entire wallet. It may be the default account using "".
258
-
259
-
Result:
260
-
amount (numeric) The total amount in PIV received for this account in P2CS contracts.
261
-
```
262
-
263
-
`delegatoradd` whitelists a delegated owner address for cold staking:
264
-
```
265
-
delegatoradd "addr"
266
-
267
-
Add the provided address <addr> into the allowed delegators AddressBook.
268
-
This enables the staking of coins delegated to this wallet, owned by <addr>
269
-
270
-
Arguments:
271
-
1. "addr" (string, required) The address to whitelist
272
-
273
-
Result:
274
-
true|false (boolean) true if successful.
275
-
```
276
-
277
-
`delegatorremove` to remove previously whitelisted owner address:
278
-
```
279
-
delegatoradd "addr"
280
-
281
-
Add the provided address <addr> into the allowed delegators AddressBook.
282
-
This enables the staking of coins delegated to this wallet, owned by <addr>
283
-
284
-
Arguments:
285
-
1. "addr" (string, required) The address to whitelist
286
-
287
-
Result:
288
-
true|false (boolean) true if successful.
289
-
```
290
-
291
-
`listcoldutxos` lists all P2CS UTXOs belonging to the wallet (both delegator and cold staker):
292
-
```
293
-
listcoldutxos ( nonWhitelistedOnly )
294
-
295
-
List P2CS unspent outputs received by this wallet as cold-staker-
296
-
297
-
Arguments:
298
-
1. nonWhitelistedOnly (boolean, optional, default=false) Whether to exclude P2CS from whitelisted delegators.
299
-
300
-
Result:
301
-
[
302
-
{
303
-
"txid" : "true", (string) The transaction id of the P2CS utxo
304
-
"txidn" : "accountname", (string) The output number of the P2CS utxo
305
-
"amount" : x.xxx, (numeric) The amount of the P2CS utxo
306
-
"confirmations" : n (numeric) The number of confirmations of the P2CS utxo
307
-
"cold-staker" : n (string) The cold-staker address of the P2CS utxo
308
-
"coin-owner" : n (string) The coin-owner address of the P2CS utxo
309
-
"whitelisted" : n (string) "true"/"false" coin-owner in delegator whitelist
310
-
}
311
-
,...
312
-
]
313
-
```
314
-
315
-
`liststakingaddresses` lists all cold staking addresses generated by the wallet:
316
-
```
317
-
liststakingaddresses "addr"
318
-
319
-
Shows the list of staking addresses for this wallet.
320
-
321
-
Result:
322
-
[
323
-
{
324
-
"label": "yyy", (string) account label
325
-
"address": "xxx", (string) PIVX address string
326
-
}
327
-
...
328
-
]
329
-
```
330
-
331
-
`listdelegators` lists the whitelisted owner addresses
332
-
```
333
-
listdelegators "addr"
334
-
335
-
Shows the list of allowed delegator addresses for cold staking.
336
-
337
-
Result:
338
-
[
339
-
{
340
-
"label": "yyy", (string) account label
341
-
"address": "xxx", (string) PIVX address string
342
-
}
343
-
...
344
-
]
345
-
```
346
-
347
-
Snapcraft Packages
348
-
------------------
349
-
350
-
For our linux users, in addition to the [Ubuntu PPA](https://launchpad.net/~pivx) repository, we are now offering a [Snap package](https://snapcraft.io/pivx-core) as quick way to install and update a PIVX wallet.
351
-
352
-
Release versions are available via the `Stable` branch, and (for testing-only purposes) nightly builds are available in the `Beta` branch.
353
-
354
-
Internal Miner/Staker Change
355
-
--------------
356
-
357
-
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.
358
-
359
-
In other words, try to stake a new block only if:
360
-
361
-
- full layer 2 sync is complete
362
-
OR
363
-
- The spork list is synced and all three sporks (8,9 and 13) are **not** active.
364
-
365
-
Faster Shutdown During Initial Loading
366
-
--------------
367
-
368
-
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.
369
-
370
-
Now, the new behavior is to gracefully close the wallet once the current step is complete.
371
67
372
68
*version* Change log
373
69
==============
@@ -388,7 +84,6 @@ Detailed release notes follow. This overview includes changes that affect behavi
388
84
389
85
### Miscellaneous
390
86
391
-
392
87
## Credits
393
88
394
89
Thanks to everyone who directly contributed to this release:
0 commit comments