mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-28 09:46:50 +00:00

* [NOD-1414] Add interfaces for Factory and State. * [NOD-1414] Create interfaces for algorithms and data stores. * [NOD-1414] Create empty implementations for algorithms and data stores. * [NOD-1414] Add new functions for all the implementations. * [NOD-1414] Begin filling in the interfaces. * [NOD-1414] Fill in the interfaces for the data structures. * [NOD-1414] Fill in the interfaces for the algorithms. * [NOD-1414] Fix a bug in package names. * [NOD-1414] Connect up the various interfaces. * [NOD-1414] Add stubs to all the implementations. * [NOD-1414] Create MiningManager and its Factory. * [NOD-1414] Add interfaces for mempool and blockTemplateBuilder. * [NOD-1414] Add implementation structs for miningManager. * [NOD-1414] Add stub implementations for mempool and blockTemplateBuilder. * [NOD-1414] Rename state to kaspadState. * [NOD-1414] Restructure where interfaces sit. * [NOD-1414] Restructure where interfaces sit in the algorithms package as well. * [NOD-1414] Move remaining models out of models.go. * [NOD-1414] Modified some interfaces. * [NOD-1414] Make go vet happy. * [NOD-1414] Move SerializedUTXOSet into PruningManager. * [NOD-1414] Modify FindNextPruningPoint to return found and nextPruningPointUTXOSet. * [NOD-1414] Add IsDAGAncestorOf. * [NOD-1414] Add PruningPoint(). * [NOD-1414] Add Entry() to ReadOnlyUTXOSet. * [NOD-1414] Add MergeSet() to BlockGHOSTDAGData. * [NOD-1414] Write comments for all the exported types and functions in miningmanager. * [NOD-1414] Add comments to the upper levels of KaspadState. * [NOD-1414] Replace AddNode with ReachabilityChangeset. * [NOD-1414] Add payAddress and extraData to GetBlockTemplate. * [NOD-1414] Add scriptPublicKey and extraData to BuildBlock. * [NOD-1414] Rename algorithms to processes. * [NOD-1414] Rename kaspadState to consensus. * [NOD-1414] Add ValidateAgainstPastUTXO and ValidateFinality. * [NOD-1414] Add BlockGHOSTDAGData to ReachabilityChangeset. * [NOD-1414] Fix the comment over Mempool. * [NOD-1414] Fix the comment over ValidateTransaction. * [NOD-1414] Fill up the data structures. * [NOD-1414] Add comments to remaining uncommented items in miningmanager. * [NOD-1414] Add comments to structs and constructors. * [NOD-1414] Rename Set to Insert. * [NOD-1414] Add comments to everything inside datastructures. * [NOD-1414] Add comments to everything inside models. * [NOD-1414] Add comments to the interfaces in processes. * [NOD-1414] Add comments to everything in processes. * [NOD-1414] Make go vet happy. * [NOD-1414] Rename scriptPublicKey to coinbaseScriptPublicKey. * [NOD-1414] Add handlers to the consensus. * [NOD-1414] Add highHash to blockAtDepth. * [NOD-1414] Add resolveFinalityConflict. * [NOD-1414] Reorg BlockValidator. * [NOD-1414] In ResolveFinalityConflicts, rename blockHash to newFinalityBlockHash. * [NOD-1414] Fix a comment. * [NOD-1414] Make reachability structs public. * [NOD-1414] Make UTXO structs public.
94 lines
3.5 KiB
Go
94 lines
3.5 KiB
Go
package consensus
|
|
|
|
import (
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/acceptancedatastore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/blockindex"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/blockmessagestore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/blockrelationstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/blockstatusstore"
|
|
"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/pruningpointstore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/reachabilitydatastore"
|
|
"github.com/kaspanet/kaspad/domain/consensus/datastructures/utxodiffstore"
|
|
"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/ghostdagmanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/pruningmanager"
|
|
"github.com/kaspanet/kaspad/domain/consensus/processes/reachabilitytree"
|
|
"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()
|
|
blockIndex := blockindex.New()
|
|
blockMessageStore := blockmessagestore.New()
|
|
blockRelationStore := blockrelationstore.New()
|
|
blockStatusStore := blockstatusstore.New()
|
|
multisetStore := multisetstore.New()
|
|
pruningPointStore := pruningpointstore.New()
|
|
reachabilityDataStore := reachabilitydatastore.New()
|
|
utxoDiffStore := utxodiffstore.New()
|
|
consensusStateStore := consensusstatestore.New()
|
|
ghostdagDataStore := ghostdagdatastore.New()
|
|
|
|
// Processes
|
|
blockValidator := blockvalidator.New()
|
|
reachabilityTree := reachabilitytree.New(
|
|
blockRelationStore,
|
|
reachabilityDataStore)
|
|
dagTopologyManager := dagtopologymanager.New(
|
|
reachabilityTree,
|
|
blockRelationStore)
|
|
ghostdagManager := ghostdagmanager.New(
|
|
dagTopologyManager,
|
|
ghostdagDataStore)
|
|
dagTraversalManager := dagtraversalmanager.New(
|
|
dagTopologyManager,
|
|
ghostdagManager)
|
|
pruningManager := pruningmanager.New(
|
|
dagTraversalManager,
|
|
pruningPointStore)
|
|
consensusStateManager := consensusstatemanager.New(
|
|
dagParams,
|
|
consensusStateStore,
|
|
multisetStore,
|
|
utxoDiffStore)
|
|
blockProcessor := blockprocessor.New(
|
|
dagParams,
|
|
databaseContext,
|
|
consensusStateManager,
|
|
pruningManager,
|
|
blockValidator,
|
|
dagTopologyManager,
|
|
reachabilityTree,
|
|
acceptanceDataStore,
|
|
blockIndex,
|
|
blockMessageStore,
|
|
blockStatusStore)
|
|
|
|
return &consensus{
|
|
consensusStateManager: consensusStateManager,
|
|
blockProcessor: blockProcessor,
|
|
}
|
|
}
|
|
|
|
// NewFactory creates a new Consensus factory
|
|
func NewFactory() Factory {
|
|
return &factory{}
|
|
}
|