mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-23 15:26:42 +00:00

* [NOD-1451] Implement block validator * [NOD-1451] Implement block validator * [NOD-1451] Fix merge errors * [NOD-1451] Implement block validator * [NOD-1451] Implement checkTransactionInIsolation * [NOD-1451] Copy txscript to validator * [NOD-1451] Change txscript to new design * [NOD-1451] Add checkTransactionInContext * [NOD-1451] Add checkBlockSize * [NOD-1451] Add error handling * [NOD-1451] Implement checkTransactionInContext * [NOD-1451] Add checkTransactionMass placeholder * [NOD-1451] Finish validators * [NOD-1451] Add comments and stringers * [NOD-1451] Return model.TransactionValidator interface * [NOD-1451] Premake rule errors for each "code" * [NOD-1451] Populate transaction mass * [NOD-1451] Renmae functions * [NOD-1451] Always use skipPow=false * [NOD-1451] Renames * [NOD-1451] Remove redundant types from WriteElement * [NOD-1451] Fix error message * [NOD-1451] Add checkTransactionPayload * [NOD-1451] Add ValidateProofOfWorkAndDifficulty to block validator interface * [NOD-1451] Move stringers to model * [NOD-1451] Fix error message
149 lines
5.0 KiB
Go
149 lines
5.0 KiB
Go
package consensus
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/database"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/acceptancedatastore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/blockrelationstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/blockstatusstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/blockstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/consensusstatestore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/ghostdagdatastore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/multisetstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/pruningstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/reachabilitydatastore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/utxodiffstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/model"
|
|
"github.com/kaspanet/kaspad/domain/consensus/model/externalapi"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/blockprocessor"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/blockvalidator"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/consensusstatemanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/dagtopologymanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/dagtraversalmanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/difficultymanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/ghostdagmanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/pastmediantimemanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/pruningmanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/reachabilitytree"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/transactionvalidator"
|
|
"github.com/kaspanet/kaspad/domain/dagconfig"
|
|
"github.com/kaspanet/kaspad/infrastructure/db/dbaccess"
|
|
)
|
|
|
|
// Factory instantiates new Consensuses
|
|
type Factory interface {
|
|
NewConsensus(dagParams *dagconfig.Params, databaseContext *dbaccess.DatabaseContext) Consensus
|
|
}
|
|
|
|
type factory struct{}
|
|
|
|
// NewConsensus instantiates a new Consensus
|
|
func (f *factory) NewConsensus(dagParams *dagconfig.Params, databaseContext *dbaccess.DatabaseContext) Consensus {
|
|
// Data Structures
|
|
acceptanceDataStore := acceptancedatastore.New()
|
|
blockStore := blockstore.New()
|
|
blockRelationStore := blockrelationstore.New()
|
|
blockStatusStore := blockstatusstore.New()
|
|
multisetStore := multisetstore.New()
|
|
pruningStore := pruningstore.New()
|
|
reachabilityDataStore := reachabilitydatastore.New()
|
|
utxoDiffStore := utxodiffstore.New()
|
|
consensusStateStore := consensusstatestore.New()
|
|
ghostdagDataStore := ghostdagdatastore.New()
|
|
|
|
domainDBContext := database.NewDomainDBContext(databaseContext)
|
|
|
|
// Processes
|
|
reachabilityTree := reachabilitytree.New(
|
|
blockRelationStore,
|
|
reachabilityDataStore)
|
|
dagTopologyManager := dagtopologymanager.New(
|
|
domainDBContext,
|
|
reachabilityTree,
|
|
blockRelationStore)
|
|
ghostdagManager := ghostdagmanager.New(
|
|
databaseContext,
|
|
dagTopologyManager,
|
|
ghostdagDataStore,
|
|
model.KType(dagParams.K))
|
|
dagTraversalManager := dagtraversalmanager.New(
|
|
dagTopologyManager,
|
|
ghostdagManager)
|
|
pruningManager := pruningmanager.New(
|
|
dagTraversalManager,
|
|
dagTopologyManager,
|
|
pruningStore,
|
|
blockStatusStore,
|
|
consensusStateStore)
|
|
consensusStateManager := consensusstatemanager.New(
|
|
domainDBContext,
|
|
dagParams,
|
|
ghostdagManager,
|
|
dagTopologyManager,
|
|
pruningManager,
|
|
blockStatusStore,
|
|
ghostdagDataStore,
|
|
consensusStateStore,
|
|
multisetStore,
|
|
blockStore,
|
|
utxoDiffStore,
|
|
blockRelationStore,
|
|
acceptanceDataStore)
|
|
difficultyManager := difficultymanager.New(
|
|
ghostdagManager)
|
|
pastMedianTimeManager := pastmediantimemanager.New(
|
|
ghostdagManager)
|
|
transactionValidator := transactionvalidator.New(dagParams.BlockCoinbaseMaturity,
|
|
domainDBContext,
|
|
pastMedianTimeManager,
|
|
ghostdagDataStore)
|
|
|
|
genesisHash := externalapi.DomainHash([32]byte(*dagParams.GenesisHash))
|
|
blockValidator := blockvalidator.New(
|
|
dagParams.PowMax,
|
|
false,
|
|
&genesisHash,
|
|
dagParams.EnableNonNativeSubnetworks,
|
|
dagParams.DisableDifficultyAdjustment,
|
|
dagParams.DifficultyAdjustmentWindowSize,
|
|
uint64(dagParams.FinalityDuration/dagParams.TargetTimePerBlock),
|
|
|
|
domainDBContext,
|
|
consensusStateManager,
|
|
difficultyManager,
|
|
pastMedianTimeManager,
|
|
transactionValidator,
|
|
ghostdagManager,
|
|
dagTopologyManager,
|
|
dagTraversalManager,
|
|
|
|
blockStore,
|
|
ghostdagDataStore,
|
|
)
|
|
blockProcessor := blockprocessor.New(
|
|
dagParams,
|
|
domainDBContext,
|
|
consensusStateManager,
|
|
pruningManager,
|
|
blockValidator,
|
|
dagTopologyManager,
|
|
reachabilityTree,
|
|
difficultyManager,
|
|
pastMedianTimeManager,
|
|
ghostdagManager,
|
|
acceptanceDataStore,
|
|
blockStore,
|
|
blockStatusStore,
|
|
blockRelationStore)
|
|
|
|
return &consensus{
|
|
consensusStateManager: consensusStateManager,
|
|
blockProcessor: blockProcessor,
|
|
transactionValidator: transactionValidator,
|
|
}
|
|
}
|
|
|
|
// NewFactory creates a new Consensus factory
|
|
func NewFactory() Factory {
|
|
return &factory{}
|
|
}
|