dcrd/rpctest
Dave Collins e972ac4e84
multi: Implement DCP0010 subsidy consensus vote.
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
2021-12-16 12:26:21 -06:00
..
debug.go Add debug and trace facility to rpctest. 2020-05-11 12:28:03 -05:00
doc.go rpctest: Upstream create new rpctest package sync. 2017-07-19 14:24:27 -05:00
memwallet.go txscript: Split signing code to sign subpackage. 2021-05-07 13:19:00 -05:00
node.go multi: Address some linter complaints. 2021-11-15 16:18:41 -06:00
README.md multi: Update README.md files for go modules. 2021-01-22 14:39:23 -06:00
rpc_harness_test.go multi: update build tags to pref. go1.17 syntax. 2021-10-19 20:21:44 -05:00
rpc_harness.go rpctest: Remove unused BlockVersion const. 2021-09-25 10:49:31 -05:00
simnet_miner.go multi: Start rpcclient v7 module dev cycle. 2020-11-10 16:51:38 -06:00
utils.go rpc/jsonrpc/types: Start v3 module dev cycle. 2020-12-23 23:23:08 -06:00
votingwallet_test.go multi: update build tags to pref. go1.17 syntax. 2021-10-19 20:21:44 -05:00
votingwallet.go multi: Implement DCP0010 subsidy consensus vote. 2021-12-16 12:26:21 -06:00

rpctest

Build Status ISC License Doc

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.