Ori Newman 765dd170e4
Optimizations and header size reduce hardfork (#1853)
* Modify DefaultTimeout to 120 seconds

A temporary workaround for nodes having trouble to sync (currently the download of pruning point related data during IBD takes more than 30 seconds)

* Cache existence in reachability store

* Cache block level in the header

* Fix IBD indication on submit block

* Add hardForkOmitGenesisFromParentsDAAScore logic

* Fix NumThreads bug in the wallet

* Get rid of ParentsAtLevel header method

* Fix a bug in BuildPruningPointProof

* Increase race detector timeout

* Add cache to BuildPruningPointProof

* Add comments and temp comment out go vet

* Fix ParentsAtLevel

* Dont fill empty parents

* Change HardForkOmitGenesisFromParentsDAAScore in fast netsync test

* Add --allow-submit-block-when-not-synced in stability tests

* Fix TestPruning

* Return fast tests

* Fix off by one error on kaspawallet

* Fetch only one block with trusted data at a time

* Update fork DAA score

* Don't ban for unexpected message type

* Fix tests

Co-authored-by: Michael Sutton <mikisiton2@gmail.com>
Co-authored-by: Ori Newman <>
2021-11-22 09:00:39 +02:00

125 lines
4.5 KiB
Go

package blockvalidator
import (
"math/big"
"time"
"github.com/kaspanet/kaspad/domain/consensus/model"
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
"github.com/kaspanet/kaspad/util/difficulty"
)
// blockValidator exposes a set of validation classes, after which
// it's possible to determine whether either a block is valid
type blockValidator struct {
powMax *big.Int
skipPoW bool
genesisHash *externalapi.DomainHash
enableNonNativeSubnetworks bool
powMaxBits uint32
maxBlockMass uint64
mergeSetSizeLimit uint64
maxBlockParents externalapi.KType
timestampDeviationTolerance int
targetTimePerBlock time.Duration
databaseContext model.DBReader
difficultyManager model.DifficultyManager
pastMedianTimeManager model.PastMedianTimeManager
transactionValidator model.TransactionValidator
ghostdagManagers []model.GHOSTDAGManager
dagTopologyManagers []model.DAGTopologyManager
dagTraversalManager model.DAGTraversalManager
coinbaseManager model.CoinbaseManager
mergeDepthManager model.MergeDepthManager
pruningStore model.PruningStore
reachabilityManagers []model.ReachabilityManager
finalityManager model.FinalityManager
blockParentBuilder model.BlockParentBuilder
pruningManager model.PruningManager
parentsManager model.ParentsManager
blockStore model.BlockStore
ghostdagDataStores []model.GHOSTDAGDataStore
blockHeaderStore model.BlockHeaderStore
blockStatusStore model.BlockStatusStore
reachabilityStore model.ReachabilityDataStore
consensusStateStore model.ConsensusStateStore
daaBlocksStore model.DAABlocksStore
}
// New instantiates a new BlockValidator
func New(powMax *big.Int,
skipPoW bool,
genesisHash *externalapi.DomainHash,
enableNonNativeSubnetworks bool,
maxBlockMass uint64,
mergeSetSizeLimit uint64,
maxBlockParents externalapi.KType,
timestampDeviationTolerance int,
targetTimePerBlock time.Duration,
databaseContext model.DBReader,
difficultyManager model.DifficultyManager,
pastMedianTimeManager model.PastMedianTimeManager,
transactionValidator model.TransactionValidator,
ghostdagManagers []model.GHOSTDAGManager,
dagTopologyManagers []model.DAGTopologyManager,
dagTraversalManager model.DAGTraversalManager,
coinbaseManager model.CoinbaseManager,
mergeDepthManager model.MergeDepthManager,
reachabilityManagers []model.ReachabilityManager,
finalityManager model.FinalityManager,
blockParentBuilder model.BlockParentBuilder,
pruningManager model.PruningManager,
parentsManager model.ParentsManager,
pruningStore model.PruningStore,
blockStore model.BlockStore,
ghostdagDataStores []model.GHOSTDAGDataStore,
blockHeaderStore model.BlockHeaderStore,
blockStatusStore model.BlockStatusStore,
reachabilityStore model.ReachabilityDataStore,
consensusStateStore model.ConsensusStateStore,
daaBlocksStore model.DAABlocksStore,
) model.BlockValidator {
return &blockValidator{
powMax: powMax,
skipPoW: skipPoW,
genesisHash: genesisHash,
enableNonNativeSubnetworks: enableNonNativeSubnetworks,
powMaxBits: difficulty.BigToCompact(powMax),
maxBlockMass: maxBlockMass,
mergeSetSizeLimit: mergeSetSizeLimit,
maxBlockParents: maxBlockParents,
timestampDeviationTolerance: timestampDeviationTolerance,
targetTimePerBlock: targetTimePerBlock,
databaseContext: databaseContext,
difficultyManager: difficultyManager,
pastMedianTimeManager: pastMedianTimeManager,
transactionValidator: transactionValidator,
ghostdagManagers: ghostdagManagers,
dagTopologyManagers: dagTopologyManagers,
dagTraversalManager: dagTraversalManager,
coinbaseManager: coinbaseManager,
mergeDepthManager: mergeDepthManager,
reachabilityManagers: reachabilityManagers,
finalityManager: finalityManager,
blockParentBuilder: blockParentBuilder,
pruningManager: pruningManager,
parentsManager: parentsManager,
pruningStore: pruningStore,
blockStore: blockStore,
ghostdagDataStores: ghostdagDataStores,
blockHeaderStore: blockHeaderStore,
blockStatusStore: blockStatusStore,
reachabilityStore: reachabilityStore,
consensusStateStore: consensusStateStore,
daaBlocksStore: daaBlocksStore,
}
}