dcrd/blockchain/fullblocktests
Dave Collins 42bc847479
multi: Cleanup and optimize tx input check code.
This optimizes and cleans up significant portions of the
CheckTransactionInputs function to avoid a lot extra allocations, remove
redundant checks, better document its semantics, and make the code
easier to reason about.  In addition, it renames a lot of the error
constants involved in said function to use the ticket/vote/revocation
terminology and improve their readability.  Even though several of the
checks have been rearranged for efficiency and readability purposes, all
consensus semantics have been retained.

One of the primary changes is to reduce the reliance on the stake package
for consensus validation.  Not only is more desirable to have the bulk
of the validation related to the blockchain in the blockchain package,
but it also allows the code to be more specific, which enables better
optimization opportunities as well as eliminates the need for a lot of
redundant checks that are simply unnecessary.

The stake identification functions are also part of consensus and have
not been modified, however, the actual validation related to all of
their inputs, such as ensuring commitments are observed, are now in the
blockchain package itself.

Since the only thing using the related verification functions is now
done in blockchain, this also removes the VerifyStakingPkhsAndAmounts,
VerifySStxAmounts, and related tests from the stake package.

Another significant change is the addition of new functions for
efficiently and specifically identifying the form of the scripts
required by stake transactions in order to reduce the dependence on the
standard code in txscript.  Standard code should _NOT_ be used in
consensus code as the two are not the same thing.

It should be noted that these changes break compatibility with the
current v1 blockchain and stake modules, so they will need a major
version bump prior to the next release.

Finally, all tests in the repository have been updated for the error
name changes as well as change in expected error in some cases due to
the reordering of the validation checks.
2018-09-26 09:23:03 -05:00
..
doc.go multi: fix misspell linter warnings 2018-02-18 12:26:52 -06:00
generate.go multi: Cleanup and optimize tx input check code. 2018-09-26 09:23:03 -05:00
params.go multi: Introduce default coin type for SLIP0044. 2018-07-04 00:49:17 -05:00
README.md blockchain: move block validation rule tests into fullblocktests. 2018-02-25 02:03:59 +00:00

fullblocktests

Build Status ISC License GoDoc

Package fullblocktests provides a set of full block tests to be used for testing the consensus validation rules. The tests are intended to be flexible enough to allow both unit-style tests directly against the blockchain code as well as integration style tests over the peer-to-peer network. To achieve that goal, each test contains additional information about the expected result, however that information can be ignored when doing comparison tests between two independent versions over the peer-to-peer network.

This package has intentionally been designed so it can be used as a standalone package for any projects needing to test their implementation against a full set of blocks that exercise the consensus validation rules.

Installation and Updating

$ go get -u github.com/decred/dcrd/blockchain/fullblocktests

License

Package fullblocktests is licensed under the copyfree ISC License.