This implements the agenda for voting on the modified subsidy split
defined in DCP0010 along with consensus tests.
In particular, once the vote has passed and is active, the PoW subsidy
will be 10% of the block reward and the PoS subsidy will be 80%. The
Treasury subsidy will remain at 10%.
In terms of the overall effects, this includes updates to:
- The validation logic for votes, coinbases, and overall block subsidy
- Enforcement when considering candidate votes for acceptance to the
mempool, relaying, and inclusion into block templates
- Mining template generation
- The output of the getblocksubsidy RPC
Also note that this does not implement the block version bump that will
ultimately be needed by the mining code since there are multiple
consensus votes gated behind it and will therefore be done separately.
The following is an overview of the changes:
- Introduce a convenience function for determining if the vote passed
and is now active
- Add new methods to blockchain/standalone for calculating the work and
stake vote subsidies according to either the original or modified
values per a provided flag
- Modify vote validation to enforce the new stake vote subsidy in
accordance with the state of the vote
- Modify coinbase validation to enforce the new work subsidy in
accordance with the state of the vote
- Modify block validation logic to enforce the total overall subsidy in
accordance with the state of the vote
- Add tests for determining if the agenda is active for both mainnet and
testnet
- Add tests for getblocksubsidy RPC
- Add tests to ensure proper behavior for the modified subsidy splits as
follows:
- Ensure new blockchain validation semantics are enforced once the
agenda is active
- Ensure mempool correctly accepts and rejects votes in accordance
with the state of the vote