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
|
||
|---|---|---|
| .. | ||
| debug.go | ||
| doc.go | ||
| memwallet.go | ||
| node.go | ||
| README.md | ||
| rpc_harness_test.go | ||
| rpc_harness.go | ||
| simnet_miner.go | ||
| utils.go | ||
| votingwallet_test.go | ||
| votingwallet.go | ||
rpctest
Package rpctest provides a dcrd-specific RPC testing harness crafting and
executing integration tests by driving a dcrd instance via the RPC
interface. Each instance of an active harness comes equipped with a simple
in-memory HD wallet capable of properly syncing to the generated chain,
creating new addresses, and crafting fully signed transactions paying to an
arbitrary set of outputs.
This package was designed specifically to act as an RPC testing harness for
dcrd. However, the constructs presented are general enough to be adapted to
any project wishing to programmatically drive a dcrd instance of its
systems/integration tests.
Installation and Updating
This package is part of the github.com/decred/dcrd module. Use the standard
go tooling for working with modules to incorporate it.
License
Package rpctest is licensed under the copyfree ISC License.