Commit Graph

502 Commits

Author SHA1 Message Date
Dave Collins
cebab1ef64
multi: Use secp256k1/v2 module.
This updates the following modules to use the secp256k1/v2 module:

- blockchain
- chaincfg/v2
- dcrutil/v2
- hdkeychain/v2
- mempool/v3
- txscript/v2
- main

The hdkeychain/v3 and txscript/v2 modules both use types from secp256k1
in their public API.

Consequently, in order avoid forcing them to bump their major versions,
secp256k1/v1.0.3 was released with the types redefined in terms of the
secp256k1/v2 module so callers still using v1 of the module that are not
ready to upgrade to the v2 module yet can interoperate by updating to
the latest patch version.
2019-10-08 10:14:13 -05:00
Dave Collins
3e2208f8c1
build: Replace TravisCI with CI via Github actions. 2019-09-20 19:59:04 -05:00
David Hill
0781162661 multi: remove unused funcs and vars 2019-09-05 10:13:18 -05:00
Dave Collins
2d09391768
blockchain: Cleanup subsidy cache init order.
This modifies the order in which the subsidy cache is created when not
provided by a caller to happen before the blockchain instance is created
to be more consistent.
2019-09-03 11:38:45 -05:00
Dave Collins
eab0e4c2a7
blockchain: Refactor best chain state init.
This refactors the best chain state and block index loading code into
separate functions so they are available to upcoming database update
code to build version 2 gcs filters.
2019-09-02 01:24:23 -05:00
Aaron Campbell
8be96a8729 multi: Correct typos.
Correct typos found by reading code, ispell, and creative grepping.
2019-08-22 10:20:03 -05:00
Dave Collins
665ab37c68
gcs: Standardize serialization on a single format.
Currently, the filters provide two different serialization formats per
version.  The first is the raw filter bytes without the number of items
in its data set and is implemented by the Bytes and FromBytesV1
functions.  The second includes that information and is implemented by
the NBytes and FromNBytesV1 functions.

In practice, the ability to serialize the filter independently from the
number of items in its data set is not very useful since that
information is required to be able to query the filter and, unlike the
other parameters which are fixed (e.g. false positive rate and key), the
number of items varies per filter.  For this reason, all usage in
practice calls NBytes and FromNBytesV1.

Consequently, this simplifies the API for working with filters by
standardizing on a single serialization format per filter version which
includes the number of items in its data set.

In order to accomplish this, the current Bytes and FromBytesV1 functions
are removed and the NBytes and FromNBytesV1 functions are renamed to
take their place.

This also updates all tests and callers in the repo accordingly.
2019-08-22 09:50:29 -05:00
Dave Collins
90d2deb420
gcs: Add filter version support.
This refactors the primary gcs filter logic into an internal struct with
a version parameter in in order to pave the way for supporting v2
filters which will have a different serialization that makes them
incompatible with v1 filters while still retaining the ability to work
with v1 filters in the interim.

The exported type is renamed to FilterV1 and the new internal struct is
embedded so its methods are externally available.

The tests and all callers in the repo have been updated accordingly.
2019-08-20 23:43:23 -05:00
Dave Collins
468f3287c2
gcs: Support empty filters.
This adds support for empty filters versus being an error along with a
full set of tests to ensure the empty filter works as intended.

It is part of the onging process to cleanup and improve the gcs module
to the quality level required by consensus code for ultimate inclusion
in header commitments.
2019-08-20 09:13:32 -05:00
Dave Collins
feb4ff55e0
gcs: Start v2 module dev cycle.
This removes the unused and undesired FromPBytes and FromNPBytes
functions and associated tests from the gcs module in preparation for
upcoming changes aimed to support new version filters for use
in header commitments.

Since these changes, and several planned upcoming ones, constitute
breaking pubic API changes, this bumps the major version of the gcs
module, adds a replacement for gcs/v2 to the main module and updates all
other modules to make use of it.

It also bumps the rpcclient module to v5 since it makes use of the
gcs.Filter type in its API, adds a replacement for rpcclient/v5 to the
main module and updates all other modules to make use of it.

Note that this also marks the start of a new approach towards handling
module versioning between release cycles to reduce the maintenance
burden.

The new approach is as follows.

Whenever a new breaking change to a module's API is introduced, the
following will happen:

- Bump the major version in the go.mod of the affected module if not
  already done since the last release tag
- Add a replacement to the go.mod in the main module if not already
  done since the last release tag
- Update all imports in the repo to use the new major version as
  necessary
  - Make necessary modifications to allow all other modules to use the
    new version in the same commit
- Repeat the process for any other modules the require a new major as a
  result of consuming the new major(s)

Finally, once the repo is frozen for software release, all modules will
be tagged in dependency order to stabilize them and all module
replacements will be removed in order to ensure releases are only using
fully tagged and released code.
2019-08-20 09:07:07 -05:00
Aaron Campbell
03678bb754 multi: Correct typos.
Correct typos found by reading code and creative grepping.
2019-08-16 17:37:58 -05:00
Aaron Campbell
b9b863f5a7 blockchain: Implement stricter bounds checking.
This implements stricter bounds checking during transaction spend
journal decoding.
2019-08-14 06:57:26 -05:00
Dave Collins
83c5751cee
blockchain: Prepare v2.0.1.
This removes the examples that rely on removed code in the blockchain/v2
module and serves as a base for blockchain/v2.0.1.
2019-08-12 17:54:42 -05:00
Dave Collins
e99b8f3810
release: Introduce blockchain v2 module. 2019-08-08 13:10:22 -05:00
Dave Collins
b9afc5c997
blockchain: Accept subsidy cache in config.
This modifies the blockchain Config to allow the caller to optionally
specify the subsidy cache to use rather than creating it internally and
forcing callers to query for it later.
2019-08-08 13:10:21 -05:00
Dave Collins
469f985f86
blockchain: Remove deprecated code.
This removes the deprecated functions along with the additional code and
tests which are no longer necessary as a result of removing the
functions.

The following is a list of exported types and functions removed along
with what they were replaced by when applicable:

- DisableLog -> UseLogger(slog.Disabled)
- BlockOneCoinbasePaysTokens -> no alternative, internal only
- IsCoinBase -> standalone.IsCoinBaseTx
- IsCoinBaseTx -> standalone.IsCoinBaseTx
- BuildMerkleTreeStore -> standalone.CalcTxTreeMerkleRoot
- BuildMsgTxMerkleTreeStore -> standalone.CalcTxTreeMerkleRoot
- SubsidyCache -> standalone.SubsidyCache
- NewSubsidyCache -> standalone.NewSubsidyCache
- CalcBlockWorkSubsidy -> standalone.SubsidyCache.CalcWorkSubsidy
- CalcStakeVoteSubsidy -> standalone.SubsidyCache.CalcStakeVoteSubsidy
- CalcBlockTaxSubsidy -> standalone.SubsidyCache.CalcTreasurySubsidy
- CoinbasePaysTax -> no alternative, internal only
- CalculateAddedSubsidy -> no alternative, internal only
- BestPrevHash -> BestSnapshot.PrevHash
- TotalSubsidy -> BestSnapshot.TotalSubsidy
- FetchSubsidyCache -> standalone.NewSubsidyCache passed to chain
- HashToBig -> standalone.HashToBig
- CompactToBig -> standalone.CompactToBig
- BigToCompact -> standalone.BigToCompact
- CalcWork -> standalone.CalcWork
- CheckProofOfWork -> standalone.CheckProofOfWork
2019-08-08 13:10:21 -05:00
Dave Collins
2dac209198
blockchain: Use lastest major version deps.
This udpates the blockchain module to use the lastest module major
versions.

While here, it also corrects a few typos and updates some test function
names to more accurately reflect their purpose.

The updated direct dependencies are as follows:

- github.com/decred/dcrd/blockchain/stake/v2@v2.0.1
- github.com/decred/dcrd/chaincfg/v2@v2.2.0
- github.com/decred/dcrd/database/v2@v2.0.0
- github.com/decred/dcrd/dcrutil/v2@v2.0.0
- github.com/decred/dcrd/txscript/v2@v2.0.0
2019-08-08 13:10:20 -05:00
Dave Collins
b943f1fd88
blockchain: Update doc.go to reflect reality. 2019-08-08 13:10:19 -05:00
Dave Collins
1159f67852
blockchain: Prepare v1.2.0.
This updates the blockchain dependencies and serves as a base for
blockchain/v1.2.0.

The updated direct dependencies in this commit are as follows:

- github.com/decred/dcrd/blockchain/stake@v1.2.1
- github.com/decred/dcrd/chaincfg@v1.5.2
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.2
- github.com/decred/dcrd/database@v1.1.0
- github.com/decred/dcrd/dcrutil@v1.4.0
- github.com/decred/dcrd/gcs@v1.1.0

The full list of updated direct dependencies since the previous
blockchain/v1.1.1 release are as follows:

- github.com/decred/dcrd/blockchain/stake@v1.2.1
- github.com/decred/dcrd/blockchain/standalone@v1.0.0
- github.com/decred/dcrd/chaincfg@v1.5.2
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.2
- github.com/decred/dcrd/database@v1.1.0
- github.com/decred/dcrd/dcrec@v1.0.0
- github.com/decred/dcrd/dcrec/secp256k1@v1.0.2
- github.com/decred/dcrd/dcrutil@v1.4.0
- github.com/decred/dcrd/gcs@v1.1.0
- github.com/decred/dcrd/txscript v1.1.0
2019-08-08 10:42:57 -05:00
Dave Collins
4133596ddb
blockchain: Use standalone module for work funcs.
This updates blockchain to make use of the new work functions in the
standalone module.

Finally, it also deprecates the related exported functions in the
blockchain module so they can be removed in the next major version and
rewrites them in terms of the standalone module in the mean time.
2019-08-08 10:27:26 -05:00
Dave Collins
e172790d98
blockchain: Use standalone module subsidy calcs.
This updates blockchain to make use of the new better optimized subsidy
cache and calculation functions in the the standalone module.  While
making the updates, it also does basic cleanup on some error messages.

Since the v1 chaincfg.Params does not implement the necessary interface
and moving chaincfg/v2.Params requires a major version bump, a new type
named subsidyParams is introduced which embeds v1 chaincfg.Params and
implements the interface to act as a bridge.

Also, since the SubsidyCache type is returned from blockchain, the type
is aliased and rewritten in terms of the standalone module so callers
still on the v1 module are able to interop.

Finally, this also deprecates the related exported functions in the
blockchain module so they can be removed in the next major version.
2019-08-08 10:27:25 -05:00
Dave Collins
9197eb3fdb
blockchain: Use standalone for coinbase checks.
This updates blockchain to make use of the coinbase check function in
the standalone module.

It also deprecates the related exported functions in the blockchain
module so they can be removed in the next major version and rewrites
them in terms of the standalone module in the mean time.
2019-08-08 10:27:25 -05:00
Dave Collins
e7f6edaa6d
blockchain: Use standalone module for merkle calcs.
This updates blockchain to make use of the optimized merkle root
calculation functions in the standalone module.

It also deprecates the related exported functions in the blockchain
module so they can be removed in the next major version.

Finally, the following direct dependencies are updated as required:

- github.com/decred/dcrd/blockchain/standalone@v1.0.0
2019-08-08 10:27:20 -05:00
Dave Collins
8354a310bc
main: Consume latest module minors and patches.
This updates the main module to use the latest available minor and patch
versions of all modules and reverts the recent change that incorrectly
removed all of the blake256 references from the various go.sum files.

The following required direct dependencies are bumped as follows:

- github.com/decred/dcrd/blockchain/stake@v1.2.1
- github.com/decred/dcrd/blockchain/stake/v2@v2.0.1
- github.com/decred/dcrd/certgen@v1.1.0
- github.com/decred/dcrd/chaincfg@v1.5.2
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.2
- github.com/decred/dcrd/chaincfg/v2@v2.2.0
- github.com/decred/dcrd/dcrutil/v2@v2.0.0
- github.com/decred/dcrd/gcs@v1.1.0
- github.com/decred/dcrd/hdkeychain/v2@v2.0.1
- github.com/decred/dcrd/txscript/v2@v2.0.0
- github.com/decred/dcrwallet/rpc/jsonrpc/types@v1.2.0
2019-08-08 10:05:35 -05:00
Nicola Larosa
1149d54cb9 multi: Use crypto/blake256.
This updates the code to make use of the new crypto/blake256 module instead of
github.com/dchest/blake256.

* change the references in the chaincfg/chainhash and gcs modules
* update chaincfg/chainhash to use the new Sum256 API
* remove references to dchest/blake256 from all go.sum files
2019-08-07 18:54:55 -05:00
Dave Collins
82b863e88c
stake: Check minimum req outputs for votes earlier.
There is no reason to perform a bunch of additional checks when there is
no possible way a transaction can be vote due to not having at least the
minimum required number of outputs for it to possibly be one.
2019-08-07 13:26:07 -05:00
Dave Collins
d09672d959
blockchain/standalone: Add IsCoinBaseTx.
The copies the standalone IsCoinBaseTx function from the blockchain
module to the blockchain/standalone module.

It also updates the documentation and includes comprehensive tests.
2019-08-06 21:47:50 -05:00
Dave Collins
bf2015b510
blockchain/standalone: Add subsidy calc funcs.
This adds a subsidy cache with funcs to calculate subsidies for
proof-of-work, votes, and the treasury to the blockchain/standalone
module.  Since the existing functions in blockchain are easy to use
improperly and have poor performance under certain access patterns,
rather than copying them over, this provide new implementations of
better optimized functions with less potential cases for misuse.

Note that because subsidy generation is consensus critical, great care
has been taken to ensure the same semantics are retained under the
scenarios which the consensus code invokes the functions, although the
semantics of the functions themselves have changed when compared to
their existing counterparts when called in circumstances that the
consensus code avoids as discussed below.

The existing subsidy code in blockchain assumes that it will never be
called in circumstances which would violate consensus such as with
negative block heights and when there are less than the minimum required
number of votes and consequently produces invalid subsidy values in
those types of cases.

This does not pose a problem for the existing consensus code itself
because it does, in fact, correctly avoid calling the functions in
scenarios that would produce incorrect results.  However, since these
functions are exported for external use, forcing consumers to only call
the functions under the (previously undocumented) correct scenarios is
highly error prone.

Consequently, these new functions produce results that match the
consensus behavior even if called under those circumstances which are
currently avoided.

The following is an overview of the changes to the results of the
functions as compared to their existing counterparts:

- Negative block heights now returns 0 subsidy in all cases
- Height 0 now returns 0 subsidy in all cases
- Height 1 now returns the full amount for the PoW subsidy and 0
  for the vote and treasury subsidies as compared to reduced values that
  the actual consensus rules do not use
- Heights prior to one block before the point at which voting begins now
  return 0 vote subsidy as compared to reduced values that the actual
  consensus rules ignore at those heights
- Specifying less than the minimum number of votes required for a block
  to be considered valid by consensus along with heights at or after the
  point voting begins now returns 0 PoW and Treasury subsidies as
  compared to further reduced values that the actual consensus rules
  ignore due to the block being invalid

A few other improvements include:

- All subsidy calculation funcs are now methods on the cache instance
  which means it is no longer possible to corrupt the cache by calling
  the functions with different network parameters
- The cache can no longer be made to grow indefinitely
  - Note that this is not an exploit in the existing code since the
    internal code is very restrictive in how it uses the functions as
    previously mentioned
- Improves future scalability by avoiding recalculations on all
  intervals after the max potential block subsidy has been fully reduced
  to 0
- Improve sparse access efficiency to O(log N) vs O(N)

Finally, it also adds a benchmark, updates the documentation, and includes
comprehensive tests.

The following is a before and after comparison of calculating subsidies
for various sparse intervals:

benchmark                         old ns/op    new ns/op    delta
-------------------------------------------------------------------
BenchmarkCalcSubsidyCacheSparse   56766        17243        -69.62%

benchmark                         old allocs   new allocs   delta
-------------------------------------------------------------------
BenchmarkCalcSubsidyCacheSparse   6            5            -16.67%

benchmark                         old bytes    new bytes    delta
-------------------------------------------------------------------
BenchmarkCalcSubsidyCacheSparse   1163         416          -64.23%
2019-08-06 21:19:56 -05:00
Dave Collins
bd4e5c21dc
blockchain/standalone: Add merkle root calc funcs.
This adds functions to calculate a merkle root to the
blockchain/standalone module.  Rather than copying the existing
functions from blockchain, it introduces new optimized functions that
have simpler code and are also generally easier to use.  The new
functions simply return the calculated root instead of all of the
intermediate hashes which no known callers were actually using anyway.

It also adds a basic usage example, benchmarks, updates the
documentation and includes comprehensive tests.

As can be seen by the benchmarks below, the new code isn't significantly
faster in terms of execution speed since it is still dominated by the
actual hashing, however, it does significantly reduce the number of
allocations which reduces pressure on the GC, particularly during bursty
situations such as IBD.  It also scales much better to larger numbers of
transactions.

The following is a before and after comparison of calculating merkle
roots for various numbers of leaves:

benchmark                       old ns/op    new ns/op   delta
---------------------------------------------------------------
BenchmarkCalcMerkleRoot/20      25637        24287       -5.27%
BenchmarkCalcMerkleRoot/1000    1252749      1209130     -3.48%
BenchmarkCalcMerkleRoot/2000    2601754      2343198     -9.94%
BenchmarkCalcMerkleRoot/4000    4873969      4629169     -5.02%
BenchmarkCalcMerkleRoot/8000    9831116      9270095     -5.71%
BenchmarkCalcMerkleRoot/16000   19172545     19067585    -0.55%
BenchmarkCalcMerkleRoot/32000   37980323     35746500    -5.88%

benchmark                       old allocs   new allocs  delta
----------------------------------------------------------------
BenchmarkCalcMerkleRoot/20      106          64          -39.62%
BenchmarkCalcMerkleRoot/1000    5006         3004        -39.99%
BenchmarkCalcMerkleRoot/2000    10006        6004        -40.00%
BenchmarkCalcMerkleRoot/4000    20006        12004       -40.00%
BenchmarkCalcMerkleRoot/8000    40006        24004       -40.00%
BenchmarkCalcMerkleRoot/16000   80006        48004       -40.00%
BenchmarkCalcMerkleRoot/32000   160006       96004       -40.00%

benchmark                       old bytes    new bytes   delta
----------------------------------------------------------------
BenchmarkCalcMerkleRoot/20      6896         4432        -35.73%
BenchmarkCalcMerkleRoot/1000    320688       208272      -35.05%
BenchmarkCalcMerkleRoot/2000    641072       416272      -35.07%
BenchmarkCalcMerkleRoot/4000    1281840      832272      -35.07%
BenchmarkCalcMerkleRoot/8000    2563376      1664272     -35.07%
BenchmarkCalcMerkleRoot/16000   5126448      3328272     -35.08%
BenchmarkCalcMerkleRoot/32000   10252592     6656273     -35.08%
2019-08-06 10:40:57 -05:00
Dave Collins
2c7d20442e
blockchain/standalone: Implement a new module.
This implements a new module named blockchain/standalone which aims to
provide several of the standalone functions currently available in
blockchain and ultimately replace them in the next major version.

The primary goal of offering these functions via a separate module is to
reduce the required dependencies to a minimum as compared to the
blockchain module.  It will be ideal for applications such as
lightweight clients that need to ensure basic security properties hold
and calculate appropriate vote subsidies and block explorers.

For example, some things an SPV wallet needs to prove are that the block
headers all connect together, that they satisfy the proof of work
requirements, and that a given transaction tree is valid for a given
header.

The new module currently only provides functions related to proof of
work, however, future commits will provide functions for merkle root
calculation, subsidy calculation, and coinbase transaction
identification.  It is being done in stages to help ease review since it
is consensus critical code.

Finally, it also includes comprehensive tests, full package
documentation, and basic usage examples.
2019-08-06 10:29:30 -05:00
Dave Collins
c24f5cffc2
release: Introduce blockchain/stake v2 module. 2019-07-28 14:47:24 -05:00
Dave Collins
13c6b684c6
stake: Accept AddressParams for ticket commit addr.
This modifies the AddrFromSStxPkScrCommitment function to accept a
dcrutil.AddressParams interface instead of a concrete chaincfg.Params to
remove the tight coupling between the two packages at the API boundary
and allow callers to easily provide custom values if desired.  # Please
enter the commit message for your changes. Lines starting
2019-07-28 14:47:23 -05:00
Dave Collins
4c3a61cdb5
stake: Use database/v2.
This udpates the blockchain/stake module to use v2 of the database module.

The updated direct dependencies are as follows:

- github.com/decred/dcrd/database/v2@v2.0.0
2019-07-28 14:47:06 -05:00
Dave Collins
a1a90260bd
Use txscript/v2.
This udpates the blockchain/stake module to use v2 of the txscript module.

The updated direct dependencies are as follows:

- github.com/decred/dcrd/txscript/v2@v2.0.0
2019-07-28 14:45:14 -05:00
Dave Collins
7e414ac738
stake: Use dcrutil/v2 and chaincfg/v2.
This udpates the blockchain/stake module to use v2 of the dcrutil module
and v2 of the chaincfg module since dcrutil/v2 requires it.

It also updates the tests accordingly.

The updated direct dependencies are as follows:

- github.com/decred/dcrd/chaincfg/v2@v2.1.0
- github.com/decred/dcrd/dcrutil/v2@v2.0.0
2019-07-28 14:44:59 -05:00
Dave Collins
b2adbbceee
stake: Introduce StakeParams interface.
This introduces a new interface named StakeParams and updates the
functions that currently take a pointer to a chaincfg.Params struct to
accept the interface instead.

This removes the tight coupling between the two packages at the API
boundary and allows callers to easily provide custom values if desired.

It also updates the tests to make use of the interface by adding and
using a mock stake params struct the implements the new interface.  The
new struct is defined in terms of a chaincfg.Params for now for
convenience, but the interface design means it is possible to define
them independently in the future as needed.
2019-07-28 14:39:14 -05:00
Dave Collins
a6e7a5f26c
stake: Remove unused SetTxTree.
This removes SetTxTree since it is no longer used.
2019-07-28 14:39:13 -05:00
Dave Collins
e7ffc5f3da
stake: Remove unused TxSSRtxStakeOutputInfo.
This removes the TxSSRtxStakeOutputInfo since it is no longer used.
2019-07-28 14:39:12 -05:00
Dave Collins
8fa43f71cc
stake: Remove unused TxSSGenStakeOutputInfo.
This removes the TxSSGenStakeOutputInfo since it is no longer used.
2019-07-28 14:39:11 -05:00
Dave Collins
19139cc92c
stake: Remove DisableLog. 2019-07-28 14:39:11 -05:00
Dave Collins
9ceaccd6c1
stake: Correct comment typo on Hash256PRNG. 2019-07-28 14:39:10 -05:00
Dave Collins
813ed1902d
stake: Make doc.go formatting consistent. 2019-07-28 14:39:09 -05:00
Donald Adu-Poku
222e20680f blockchain: update CalcBlockSubsidy.
This betters CalcBlockSubsidy by allowing it to
calculate the requested block subsidy from a cached
subsidy entry regardless of its proximity to the
requested one.
2019-06-23 23:37:28 +00:00
Dave Collins
773db5b8db
stake: Prepare v1.2.0.
This updates the blockchain/stake dependencies and serves as a base for
blockchain/stake/v1.2.0.

The updated direct dependencies in this commit are as follows:

- github.com/decred/dcrd/database@v1.1.0
- github.com/decred/dcrd/dcrutil@v1.3.0
- github.com/decred/dcrd/txscript v1.1.0

The full list of updated direct dependencies since the previous
blockchain/stake/v1.1.0 release are as follows:

- github.com/decred/dcrd/chaincfg@v1.5.1
- github.com/decred/dcrd/database@v1.1.0
- github.com/decred/dcrd/dcrec@v1.0.0
- github.com/decred/dcrd/dcrec/edwards@v1.0.0
- github.com/decred/dcrd/dcrutil@v1.3.0
- github.com/decred/dcrd/txscript v1.1.0
2019-06-23 00:24:14 -05:00
Dave Collins
ce852eb852
blockchain: Do coinbase nulldata check locally.
This refactors the consensus code which extracts the null data from the
coinbase from txscript.ExtractCoinbaseNullData so that it is performed
directly in the validation code where it more properly belongs.

The only reason the extraction was previously done in txscript is
because it was not possible to parse scripts outside of it, but that is
no longer the case now that txscript offers an exported tokenizer for
that purpose.

The extraction code is ever so slightly more efficient now that it no
longer needs to be as generic since it now has direct knowledge of the
conditions that need to be handled.

Great care was taken to ensure the semantics are not changed while
refactoring the code and no additional tests are added in this commit
because all of the conditions and code paths are covered by the tests
recently added to the full block tests.

While here, also perform some related code cleanup in the function and
improve the error messages .

Since the txscript.ExtractCoinbaseNullData is no longer necessary, this
deprecates the function and releated error code and constant so they can
be removed in the next major version of txscript.

Finally, since this relies on the script tokenizer which is not yet in a
released version of the txscript module, bump the requirement to include
an as yet unreleased version of txscript to ensure the next time the
blockchain module is released, it will require a newer version of
txscript to be released first.
2019-06-19 13:26:33 -05:00
Dave Collins
e62a21858b
fullblocktests: Add coinbase nulldata tests.
This adds two new consensus tests to the full block tests for the
coinbase nulldata height commitment.  The first new test ensures
coinbase transactions with the wrong script version are rejected and the
second test ensures data pushes that exceed the maximum allowed number
of bytes for the coinbase nulldata push are rejected.
2019-06-18 14:47:32 -05:00
David Hill
893aa30dce multi: Use https links where available. 2019-06-18 14:20:06 -05:00
Dave Collins
c33be8c68c
multi: Update all modules for chaincfg v1.5.1.
This updates all of the modules that still rely on v1 of the chaincfg
module to use v1.5.1 which builds correctly with the major API bump
introduced in the edwards v1.0.0 module.

While here, it also updates all references to the v0 edwards and dcrec
modules to their tagged v1 counterparts, tidies all of the modules via
go mod tidy, and removes all unnecessary indirect entries from the mod
files to keep the modules using the versions the dependencies are tested
with.

The primary motivation for this change is that the chaincfg/v2 module
requires edwards/v1 which is not API compatible with edwards/v0.
Consequently, in order for each module to be incrementally updated to
use chaincfg/v2, all of its dependencies must also be able to build with
edwards/v1 which is the case as of chaincfg v1.5.1.
2019-06-17 15:54:31 -05:00
Josh Rickmar
a68540fc9a stake: Remove unnecessary language in comment.
This sentence read like a directive rather than a definition and all Go types
are statically declared anyways.
2019-05-22 18:36:23 -04:00
David Hill
70c14042d8 multi: fix recent govet findings
add govet to linter tests.
2019-04-29 17:58:06 -05:00