Author: Julian Fleischer <[email protected]>
Status: Proposed
Created: 2018-11-05
Bitcoin uses a nonce to implement Proof-of-Work. The nonce is iteratively incremented until
the block hash meets a certain difficulty. The nNonce
field is part of a block header (a
uint32_t
).
Since the available search space for nonces is less than the available space for block hashes
(2^32
vs 2^256
), miners adopted an extra nonce which is part of the coinbase transaction.
Neither the nonce nor the extra nonce are required in the Proof-of-Stake setting of unit-e.
Particl, Blackcoin, and PeerCoin – which implement Proof-of-Stake – keep the nonce field in their blocks. This is due to the fact that they also support Proof-of-Work blocks (which are never used though).
In Particl it can be seen (use a block explorer) that the nonce field is actually always 0
.
The nonce field is removed from the block header. Support for extra nonce in the coinbase transaction is dropped.
Dropping the extra nonce does not have visible effects – the extra nonce is purely an invention by miners. Bitcoin core already does not have mining support. The extra nonce in bitcoin core is merely used in the block template.
Dropping the nonce field is a change of the header structure. It saves 4 bytes. It requires
a lot of tests to be touched. It affects the generate
and generatetoaddress
rpc calls.
All of these things need to be touched and changed in order to support Proof-of-Stake properly
anyway. Also we're touching these things for UIP-3
and for UIP-10 and UIP-11 (which includes the UTXO Set Hash into the coinstake transaction
and makes it required for validation).
- 2019-04-16 Added reference implementation and changed status to proposed
- 2018-12-12 Moved to UIP repository as UIP-17
- 2018-11-03 Accepted as ADR-17