This updates the mempool` module dependencies and serves as a base for
mempool/v2.1.0.
The updated direct dependencies in this commit are as follows:
- github.com/decred/dcrd/blockchain@v1.2.0
- 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/dcrec/secp256k1@v1.0.2
- github.com/decred/dcrd/dcrutil@v1.4.0
- github.com/decred/dcrd/mining@v1.1.1
- github.com/decred/dcrd/txscript@v1.1.0
The full list of updated direct dependencies since the previous
mempool/v2.0.0 release are as follows:
- github.com/decred/dcrd/blockchain@v1.2.0
- 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/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/mining@v1.1.1
- github.com/decred/dcrd/txscript@v1.1.0
This udpates the mining module to use the lastest module major versions.
The updated direct dependencies are as follows:
- github.com/decred/dcrd/blockchain/stake/v2@v2.0.1
- github.com/decred/dcrd/blockchain/v2@v2.0.0
- github.com/decred/dcrd/dcrutil/v2@v2.0.0
This freezes the root module usage of the mining module by removing the
replacement and bumping the required version. This means building the
software will still produce binaries based on the v1 module until the v2
module is fully released.
All future releases will be moving to version 2 of the module.
Consequently, it bumps the required module versions as follows:
- github.com/decred/dcrd/blockchain@v1.2.0
- github.com/decred/dcrd/mining@v1.1.1
This updates the peer module dependencies and serves as a base for
peer/v1.2.0.
The updated direct dependencies in this commit are as follows:
- github.com/decred/dcrd/blockchain@v1.2.0
- github.com/decred/dcrd/chaincfg@v1.5.2
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.2
- github.com/decred/dcrd/txscript@v1.1.0
The full list of updated direct dependencies since the previous
peer/v1.1.0 release are as follows:
- github.com/davecgh/go-spew@v1.1.1
- github.com/decred/dcrd/blockchain@v1.2.0
- github.com/decred/dcrd/chaincfg@v1.5.2
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.2
- github.com/decred/dcrd/lru@v1.0.0
- github.com/decred/dcrd/txscript@v1.1.0
- github.com/decred/go-socks@v1.0.0
This updates the mining module dependencies and serves as a base for
connmgr/v1.1.0.
The updated direct dependencies in this commit are as follows:
- github.com/decred/dcrd/chaincfg@v1.5.2
The full list of updated direct dependencies since the previous
connmgr/v1.0.2 release are as follows:
- github.com/decred/dcrd/chaincfg@v1.5.2
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.
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
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
This freezes the root module usage of the blockchain module by removing
the replacement and bumping the required version. This means building
the software will still produce binaries based on the v1 module until
the v2 module is fully released.
All future releases will be moving to version 2 of the module.
Consequently, it bumps the required module versions as follows:
- github.com/decred/dcrd/blockchain@v1.2.0
This updates the mining module dependencies and serves as a base for
mining/v1.1.1.
The updated direct dependencies in this commit are as follows:
- github.com/decred/dcrd/blockchain@v1.2.0
- github.com/decred/dcrd/blockchain/stake@v1.2.1
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.2
- github.com/decred/dcrd/dcrutil@v1.4.0
The full list of updated direct dependencies since the previous
mining/v1.1.0 release are as follows:
- github.com/decred/dcrd/blockchain@v1.2.0
- github.com/decred/dcrd/blockchain/stake@v1.2.1
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.2
- github.com/decred/dcrd/dcrutil@v1.4.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
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.
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.
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.
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
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
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
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.
This updates the documentation for the new blockchain/standalone module
along with main module dependencies to ensure it is tested as well as
uses the latest version of the code as the new module is integrated.
It also serves as a base for blockchain/stake/v1.0.0.
The new modules has the following direct dependencies:
- github.com/decred/dcrd/chaincfg/chainhash@v1.0.1
- github.com/decred/dcrd/wire@v1.2.0
The copies the standalone IsCoinBaseTx function from the blockchain
module to the blockchain/standalone module.
It also updates the documentation and includes comprehensive tests.
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%
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%
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.
This defines several new functions on the Params struct which return
some subsidy-related parameters.
The new functions are:
- BaseSubsidyValue
- SubsidyReductionMultiplier
- SubsidyReductionDivisor
- SubsidyReductionIntervalBlocks
- WorkSubsidyProportion
- StakeSubsidyProportion
- TreasurySubsidyProportion
This will allow the parameters to be used directly as input to an
interface in the future.
This udpates the rpcclient module to use v2 of the dcrutil module and v2
of the chaincfg module since dcrutil/v2 requires it.
While here it also updates the latest releases of the gcs and
hdkeychain/v2 modules.
The updated direct dependencies are as follows:
- 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
This serves as the final release of version 3 of the rpcclient module.
All future releases will be moving to version 4 of the module.
Since no changes have been made since the last release, it merely
removes the rpcclient override in the root module and updates it so
building the software will still produce binaries based on the v3 module
until the v4 module is fully released.
This updates the gcs dependencies and serves as a base for gcs/v1.1.0.
The updated direct dependencies in this commit are as follows:
- github.com/decred/dcrd/blockchain/stake/v2@v2.0.0
The full list of updated direct dependencies since the previous
gcs/v1.0.2 release are as follows:
- github.com/decred/dcrd/blockchain/stake/v2@v2.0.0
- github.com/dchest/siphash@v1.2.1
- github.com/decred/dcrd/txscript/v2@v2.0.0
- github.com/decred/dcrd/wire@v1.2.0
This optimizes the AddSigScript method on the blockcf.Entries types by
making use of the zero-alloc tokenizer now available in the txscript/v2
module.
The following is a before and after comparison of analyzing typical
standard signature script to redeem a pay-to-pubkey-hash:
benchmark old ns/op new ns/op delta
---------------------------------------------------------
BenchmarkAddSigScript 494 374 -24.29%
benchmark old allocs new allocs delta
---------------------------------------------------------
BenchmarkAddSigScript 3 2 -33.33%
benchmark old bytes new bytes delta
---------------------------------------------------------
BenchmarkAddSigScript 128 80 -37.50%
This updates the gcs module to use v2 of the txscript module.
The updated direct dependencies are as follows:
- github.com/decred/dcrd/txscript/v2@v2.0.0
This adds an override to the main module for v2 of the database module
to ensure tests are executed against the latest code in the repository
for the v2 module.
This modifies the tests to include v2 in the test database names to
ensure they do not conflict with the v1 module in the case both are
being concurrently tested.
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
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
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
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
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.