diff --git a/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go b/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go index ced1a1b24..0ceb97ab0 100644 --- a/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go +++ b/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go @@ -14,12 +14,15 @@ func New() model.BlockRelationStore { return &blockRelationStore{} } -// Stage stages the given blockRelationData for the given blockHash -func (brs *blockRelationStore) Stage(blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) { +func (brs *blockRelationStore) StageBlockRelation(blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) { panic("implement me") } -func (brs *blockRelationStore) IsStaged() bool { +func (brs *blockRelationStore) StageTips(tipHashess []*externalapi.DomainHash) { + panic("implement me") +} + +func (brs *blockRelationStore) IsAnythingStaged() bool { panic("implement me") } @@ -31,7 +34,10 @@ func (brs *blockRelationStore) Commit(dbTx model.DBTxProxy) error { panic("implement me") } -// Get gets the blockRelationData associated with the given blockHash -func (brs *blockRelationStore) Get(dbContext model.DBContextProxy, blockHash *externalapi.DomainHash) (*model.BlockRelations, error) { - return nil, nil +func (brs *blockRelationStore) BlockRelation(dbContext model.DBContextProxy, blockHash *externalapi.DomainHash) (*model.BlockRelations, error) { + panic("implement me") +} + +func (brs *blockRelationStore) Tips(dbContext model.DBContextProxy) ([]*externalapi.DomainHash, error) { + panic("implement me") } diff --git a/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go b/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go index d8d0ceb7c..19c6bdfd6 100644 --- a/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go +++ b/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go @@ -35,8 +35,3 @@ func (css *consensusStateStore) Commit(dbTx model.DBTxProxy) error { func (css *consensusStateStore) UTXOByOutpoint(dbContext model.DBContextProxy, outpoint *externalapi.DomainOutpoint) (*externalapi.UTXOEntry, error) { return nil, nil } - -// Tips returns the current tips -func (css *consensusStateStore) Tips(dbContext model.DBContextProxy) ([]*externalapi.DomainHash, error) { - return nil, nil -} diff --git a/domain/consensus/factory.go b/domain/consensus/factory.go index c31cd8012..f021001af 100644 --- a/domain/consensus/factory.go +++ b/domain/consensus/factory.go @@ -13,7 +13,6 @@ import ( "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/processes/acceptancemanager" "github.com/kaspanet/kaspad/domain/consensus/processes/blockprocessor" "github.com/kaspanet/kaspad/domain/consensus/processes/blockvalidator" "github.com/kaspanet/kaspad/domain/consensus/processes/consensusstatemanager" @@ -25,7 +24,6 @@ import ( "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/consensus/processes/utxodiffmanager" "github.com/kaspanet/kaspad/domain/dagconfig" "github.com/kaspanet/kaspad/infrastructure/db/dbaccess" ) @@ -69,23 +67,26 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, databaseContext *dba dagTraversalManager := dagtraversalmanager.New( dagTopologyManager, ghostdagManager) - utxoDiffManager := utxodiffmanager.New(utxoDiffStore) - acceptanceManager := acceptancemanager.New(utxoDiffManager) + pruningManager := pruningmanager.New( + dagTraversalManager, + dagTopologyManager, + pruningStore, + blockStatusStore, + consensusStateStore) consensusStateManager := consensusstatemanager.New( domainDBContext, dagParams, + ghostdagManager, + dagTopologyManager, + pruningManager, + blockStatusStore, + ghostdagDataStore, consensusStateStore, multisetStore, blockStore, - ghostdagManager, - acceptanceManager, - blockStatusStore) - pruningManager := pruningmanager.New( - dagTraversalManager, - pruningStore, - dagTopologyManager, - blockStatusStore, - consensusStateManager) + utxoDiffStore, + blockRelationStore, + acceptanceDataStore) difficultyManager := difficultymanager.New( ghostdagManager) pastMedianTimeManager := pastmediantimemanager.New( @@ -96,8 +97,8 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, databaseContext *dba difficultyManager, pastMedianTimeManager, transactionValidator, - utxoDiffManager, - acceptanceManager) + ghostdagManager, + blockStatusStore) blockProcessor := blockprocessor.New( dagParams, domainDBContext, @@ -111,7 +112,8 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, databaseContext *dba ghostdagManager, acceptanceDataStore, blockStore, - blockStatusStore) + blockStatusStore, + blockRelationStore) return &consensus{ consensusStateManager: consensusStateManager, diff --git a/domain/consensus/model/consensusstatechanges.go b/domain/consensus/model/consensusstatechanges.go index d046c5605..f0bbbfcbc 100644 --- a/domain/consensus/model/consensusstatechanges.go +++ b/domain/consensus/model/consensusstatechanges.go @@ -5,11 +5,6 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // ConsensusStateChanges represents a set of changes that need to be made // to transition the current consensus state to a new one type ConsensusStateChanges struct { - AcceptanceData *BlockAcceptanceData - VirtualUTXODiff *UTXODiff - NewTips []*externalapi.DomainHash - - NewBlockUTXODiff *UTXODiff - NewBlockMultiset Multiset - ParentDiffChanges *map[*externalapi.DomainHash]UTXODiff + VirtualUTXODiff *UTXODiff + VirtualDiffParents []*externalapi.DomainHash } diff --git a/domain/consensus/model/interface_datastructures_blockrelationstore.go b/domain/consensus/model/interface_datastructures_blockrelationstore.go index ae7540a7b..b4c5693a9 100644 --- a/domain/consensus/model/interface_datastructures_blockrelationstore.go +++ b/domain/consensus/model/interface_datastructures_blockrelationstore.go @@ -4,9 +4,11 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // BlockRelationStore represents a store of BlockRelations type BlockRelationStore interface { - Stage(blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) - IsStaged() bool + StageBlockRelation(blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) + StageTips(tipHashess []*externalapi.DomainHash) + IsAnythingStaged() bool Discard() Commit(dbTx DBTxProxy) error - Get(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*BlockRelations, error) + BlockRelation(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*BlockRelations, error) + Tips(dbContext DBContextProxy) ([]*externalapi.DomainHash, error) } diff --git a/domain/consensus/model/interface_datastructures_consensusstatestore.go b/domain/consensus/model/interface_datastructures_consensusstatestore.go index 8f1d08c32..8152565e8 100644 --- a/domain/consensus/model/interface_datastructures_consensusstatestore.go +++ b/domain/consensus/model/interface_datastructures_consensusstatestore.go @@ -9,5 +9,4 @@ type ConsensusStateStore interface { Discard() Commit(dbTx DBTxProxy) error UTXOByOutpoint(dbContext DBContextProxy, outpoint *externalapi.DomainOutpoint) (*externalapi.UTXOEntry, error) - Tips(dbContext DBContextProxy) ([]*externalapi.DomainHash, error) } diff --git a/domain/consensus/model/interface_processes_acceptancemanager.go b/domain/consensus/model/interface_processes_acceptancemanager.go deleted file mode 100644 index fb46576c1..000000000 --- a/domain/consensus/model/interface_processes_acceptancemanager.go +++ /dev/null @@ -1,9 +0,0 @@ -package model - -import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - -// AcceptanceManager manages transaction acceptance -// and related data -type AcceptanceManager interface { - CalculateAcceptanceDataAndUTXOMultiset(blockHash *externalapi.DomainHash) error -} diff --git a/domain/consensus/model/interface_processes_consensusstatemanager.go b/domain/consensus/model/interface_processes_consensusstatemanager.go index 83528310a..dd7291107 100644 --- a/domain/consensus/model/interface_processes_consensusstatemanager.go +++ b/domain/consensus/model/interface_processes_consensusstatemanager.go @@ -4,8 +4,6 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // ConsensusStateManager manages the node's consensus state type ConsensusStateManager interface { - CalculateConsensusStateChanges(blockHash *externalapi.DomainHash) error + AddBlockToVirtual(blockHash *externalapi.DomainHash) error VirtualData() (medianTime int64, blueScore uint64, err error) - RestorePastUTXOSet(blockHash *externalapi.DomainHash) (ReadOnlyUTXOSet, error) - RestoreDiffFromVirtual(utxoDiff *UTXODiff, virtualDiffParentHash *externalapi.DomainHash) (*UTXODiff, error) } diff --git a/domain/consensus/model/interface_processes_utxodiffmanager.go b/domain/consensus/model/interface_processes_utxodiffmanager.go deleted file mode 100644 index 0adf6e805..000000000 --- a/domain/consensus/model/interface_processes_utxodiffmanager.go +++ /dev/null @@ -1,10 +0,0 @@ -package model - -import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - -// UTXODiffManager provides methods to access -// and store UTXO diffs -type UTXODiffManager interface { - RestoreBlockDiffFromVirtualDiffParent(blockHash *externalapi.DomainHash) (utxoDiff *UTXODiff, - virtualDiffParentHash *externalapi.DomainHash, err error) -} diff --git a/domain/consensus/processes/acceptancemanager/acceptancemanager.go b/domain/consensus/processes/acceptancemanager/acceptancemanager.go deleted file mode 100644 index 2c39deb64..000000000 --- a/domain/consensus/processes/acceptancemanager/acceptancemanager.go +++ /dev/null @@ -1,23 +0,0 @@ -package acceptancemanager - -import ( - "github.com/kaspanet/kaspad/domain/consensus/model" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" -) - -// AcceptanceManager manages transaction acceptance -// and related data -type acceptanceManager struct { - utxoDiffManager model.UTXODiffManager -} - -// New instantiates a new AcceptanceManager -func New(utxoDiffManager model.UTXODiffManager) model.AcceptanceManager { - return &acceptanceManager{ - utxoDiffManager: utxoDiffManager, - } -} - -func (a *acceptanceManager) CalculateAcceptanceDataAndUTXOMultiset(blockHash *externalapi.DomainHash) error { - panic("implement me") -} diff --git a/domain/consensus/processes/blockprocessor/blockprocessor.go b/domain/consensus/processes/blockprocessor/blockprocessor.go index a343a542f..3b39fce30 100644 --- a/domain/consensus/processes/blockprocessor/blockprocessor.go +++ b/domain/consensus/processes/blockprocessor/blockprocessor.go @@ -22,8 +22,9 @@ type blockProcessor struct { ghostdagManager model.GHOSTDAGManager pastMedianTimeManager model.PastMedianTimeManager acceptanceDataStore model.AcceptanceDataStore - blockMessageStore model.BlockStore + blockStore model.BlockStore blockStatusStore model.BlockStatusStore + blockRelationStore model.BlockRelationStore } // New instantiates a new BlockProcessor @@ -39,8 +40,9 @@ func New( pastMedianTimeManager model.PastMedianTimeManager, ghostdagManager model.GHOSTDAGManager, acceptanceDataStore model.AcceptanceDataStore, - blockMessageStore model.BlockStore, - blockStatusStore model.BlockStatusStore) model.BlockProcessor { + blockStore model.BlockStore, + blockStatusStore model.BlockStatusStore, + blockRelationStore model.BlockRelationStore) model.BlockProcessor { return &blockProcessor{ dagParams: dagParams, @@ -55,8 +57,9 @@ func New( consensusStateManager: consensusStateManager, acceptanceDataStore: acceptanceDataStore, - blockMessageStore: blockMessageStore, + blockStore: blockStore, blockStatusStore: blockStatusStore, + blockRelationStore: blockRelationStore, } } diff --git a/domain/consensus/processes/blockvalidator/blockvalidator.go b/domain/consensus/processes/blockvalidator/blockvalidator.go index 5fdd65a9c..aea667af9 100644 --- a/domain/consensus/processes/blockvalidator/blockvalidator.go +++ b/domain/consensus/processes/blockvalidator/blockvalidator.go @@ -12,8 +12,9 @@ type blockValidator struct { difficultyManager model.DifficultyManager pastMedianTimeManager model.PastMedianTimeManager transactionValidator model.TransactionValidator - utxoDiffManager model.UTXODiffManager - acceptanceManager model.AcceptanceManager + ghostdagManager model.GHOSTDAGManager + + blockStatusStore model.BlockStatusStore } // New instantiates a new BlockValidator @@ -22,16 +23,17 @@ func New( difficultyManager model.DifficultyManager, pastMedianTimeManager model.PastMedianTimeManager, transactionValidator model.TransactionValidator, - utxoDiffManager model.UTXODiffManager, - acceptanceManager model.AcceptanceManager) model.BlockValidator { + ghostdagManager model.GHOSTDAGManager, + blockStatusStore model.BlockStatusStore) model.BlockValidator { return &blockValidator{ consensusStateManager: consensusStateManager, difficultyManager: difficultyManager, pastMedianTimeManager: pastMedianTimeManager, transactionValidator: transactionValidator, - utxoDiffManager: utxoDiffManager, - acceptanceManager: acceptanceManager, + ghostdagManager: ghostdagManager, + + blockStatusStore: blockStatusStore, } } diff --git a/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go b/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go index 4e5a0f4e6..5a45dd470 100644 --- a/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go +++ b/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go @@ -9,44 +9,62 @@ import ( // consensusStateManager manages the node's consensus state type consensusStateManager struct { - dagParams *dagconfig.Params + dagParams *dagconfig.Params + databaseContext *database.DomainDBContext - databaseContext *database.DomainDBContext + ghostdagManager model.GHOSTDAGManager + dagTopologyManager model.DAGTopologyManager + pruningManager model.PruningManager + + blockStatusStore model.BlockStatusStore + ghostdagDataStore model.GHOSTDAGDataStore consensusStateStore model.ConsensusStateStore multisetStore model.MultisetStore blockStore model.BlockStore - ghostdagManager model.GHOSTDAGManager - acceptanceManager model.AcceptanceManager - blockStatusStore model.BlockStatusStore + utxoDiffStore model.UTXODiffStore + blockRelationStore model.BlockRelationStore + acceptanceDataStore model.AcceptanceDataStore } // New instantiates a new ConsensusStateManager func New( databaseContext *database.DomainDBContext, dagParams *dagconfig.Params, + ghostdagManager model.GHOSTDAGManager, + dagTopologyManager model.DAGTopologyManager, + pruningManager model.PruningManager, + blockStatusStore model.BlockStatusStore, + ghostdagDataStore model.GHOSTDAGDataStore, consensusStateStore model.ConsensusStateStore, multisetStore model.MultisetStore, blockStore model.BlockStore, - ghostdagManager model.GHOSTDAGManager, - acceptanceManager model.AcceptanceManager, - blockStatusStore model.BlockStatusStore) model.ConsensusStateManager { + utxoDiffStore model.UTXODiffStore, + blockRelationStore model.BlockRelationStore, + acceptanceDataStore model.AcceptanceDataStore) model.ConsensusStateManager { return &consensusStateManager{ - dagParams: dagParams, + dagParams: dagParams, + databaseContext: databaseContext, + + ghostdagManager: ghostdagManager, + dagTopologyManager: dagTopologyManager, + pruningManager: pruningManager, - databaseContext: databaseContext, - consensusStateStore: consensusStateStore, multisetStore: multisetStore, blockStore: blockStore, - ghostdagManager: ghostdagManager, - acceptanceManager: acceptanceManager, blockStatusStore: blockStatusStore, + ghostdagDataStore: ghostdagDataStore, + consensusStateStore: consensusStateStore, + utxoDiffStore: utxoDiffStore, + blockRelationStore: blockRelationStore, + acceptanceDataStore: acceptanceDataStore, } } -// CalculateConsensusStateChanges returns a set of changes that must occur in order -// to transition the current consensus state into the one including the given block -func (csm *consensusStateManager) CalculateConsensusStateChanges(blockHash *externalapi.DomainHash) error { +// AddBlockToVirtual submits the given block to be added to the +// current virtual. This process may result in a new virtual block +// getting created +func (csm *consensusStateManager) AddBlockToVirtual(blockHash *externalapi.DomainHash) error { return nil } @@ -54,14 +72,3 @@ func (csm *consensusStateManager) CalculateConsensusStateChanges(blockHash *exte func (csm *consensusStateManager) VirtualData() (medianTime int64, blueScore uint64, err error) { return 0, 0, nil } - -// RestoreUTXOSet calculates and returns the UTXOSet of the given blockHash -func (csm *consensusStateManager) RestorePastUTXOSet(blockHash *externalapi.DomainHash) (model.ReadOnlyUTXOSet, error) { - return nil, nil -} - -// RestoreDiffFromVirtual restores the diff between the given virtualDiffParentHash -// and the virtual -func (csm *consensusStateManager) RestoreDiffFromVirtual(utxoDiff *model.UTXODiff, virtualDiffParentHash *externalapi.DomainHash) (*model.UTXODiff, error) { - panic("implement me") -} diff --git a/domain/consensus/processes/dagtopologymanager/dagtopologymanager.go b/domain/consensus/processes/dagtopologymanager/dagtopologymanager.go index d3fbb33ef..1bcb3152a 100644 --- a/domain/consensus/processes/dagtopologymanager/dagtopologymanager.go +++ b/domain/consensus/processes/dagtopologymanager/dagtopologymanager.go @@ -29,7 +29,7 @@ func New( // Parents returns the DAG parents of the given blockHash func (dtm *dagTopologyManager) Parents(blockHash *externalapi.DomainHash) ([]*externalapi.DomainHash, error) { - blockRelations, err := dtm.blockRelationStore.Get(dtm.databaseContext, blockHash) + blockRelations, err := dtm.blockRelationStore.BlockRelation(dtm.databaseContext, blockHash) if err != nil { return nil, err } @@ -38,7 +38,7 @@ func (dtm *dagTopologyManager) Parents(blockHash *externalapi.DomainHash) ([]*ex // Children returns the DAG children of the given blockHash func (dtm *dagTopologyManager) Children(blockHash *externalapi.DomainHash) ([]*externalapi.DomainHash, error) { - blockRelations, err := dtm.blockRelationStore.Get(dtm.databaseContext, blockHash) + blockRelations, err := dtm.blockRelationStore.BlockRelation(dtm.databaseContext, blockHash) if err != nil { return nil, err } @@ -47,7 +47,7 @@ func (dtm *dagTopologyManager) Children(blockHash *externalapi.DomainHash) ([]*e // IsParentOf returns true if blockHashA is a direct DAG parent of blockHashB func (dtm *dagTopologyManager) IsParentOf(blockHashA *externalapi.DomainHash, blockHashB *externalapi.DomainHash) (bool, error) { - blockRelations, err := dtm.blockRelationStore.Get(dtm.databaseContext, blockHashB) + blockRelations, err := dtm.blockRelationStore.BlockRelation(dtm.databaseContext, blockHashB) if err != nil { return false, err } @@ -56,7 +56,7 @@ func (dtm *dagTopologyManager) IsParentOf(blockHashA *externalapi.DomainHash, bl // IsChildOf returns true if blockHashA is a direct DAG child of blockHashB func (dtm *dagTopologyManager) IsChildOf(blockHashA *externalapi.DomainHash, blockHashB *externalapi.DomainHash) (bool, error) { - blockRelations, err := dtm.blockRelationStore.Get(dtm.databaseContext, blockHashB) + blockRelations, err := dtm.blockRelationStore.BlockRelation(dtm.databaseContext, blockHashB) if err != nil { return false, err } diff --git a/domain/consensus/processes/pruningmanager/pruningmanager.go b/domain/consensus/processes/pruningmanager/pruningmanager.go index 1e8458619..eceaf2645 100644 --- a/domain/consensus/processes/pruningmanager/pruningmanager.go +++ b/domain/consensus/processes/pruningmanager/pruningmanager.go @@ -7,26 +7,29 @@ import ( // pruningManager resolves and manages the current pruning point type pruningManager struct { - dagTraversalManager model.DAGTraversalManager - pruningStore model.PruningStore - dagTopologyManager model.DAGTopologyManager - blockStatusStore model.BlockStatusStore - consensusStateManager model.ConsensusStateManager + dagTraversalManager model.DAGTraversalManager + dagTopologyManager model.DAGTopologyManager + + pruningStore model.PruningStore + blockStatusStore model.BlockStatusStore + consensusStateStore model.ConsensusStateStore } // New instantiates a new PruningManager func New( dagTraversalManager model.DAGTraversalManager, - pruningStore model.PruningStore, dagTopologyManager model.DAGTopologyManager, + pruningStore model.PruningStore, blockStatusStore model.BlockStatusStore, - consensusStateManager model.ConsensusStateManager) model.PruningManager { + consensusStateStore model.ConsensusStateStore) model.PruningManager { + return &pruningManager{ - dagTraversalManager: dagTraversalManager, - pruningStore: pruningStore, - dagTopologyManager: dagTopologyManager, - blockStatusStore: blockStatusStore, - consensusStateManager: consensusStateManager, + dagTraversalManager: dagTraversalManager, + dagTopologyManager: dagTopologyManager, + + pruningStore: pruningStore, + blockStatusStore: blockStatusStore, + consensusStateStore: consensusStateStore, } } diff --git a/domain/consensus/processes/utxodiffmanager/utxodiffmanager.go b/domain/consensus/processes/utxodiffmanager/utxodiffmanager.go deleted file mode 100644 index 7dd753e18..000000000 --- a/domain/consensus/processes/utxodiffmanager/utxodiffmanager.go +++ /dev/null @@ -1,25 +0,0 @@ -package utxodiffmanager - -import ( - "github.com/kaspanet/kaspad/domain/consensus/model" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" -) - -// UTXODiffManager provides methods to access -// and store UTXO diffs -type utxoDiffManager struct { - utxoDiffStore model.UTXODiffStore -} - -// New instantiates a new UTXODiffManager -func New(utxoDiffStore model.UTXODiffStore) model.UTXODiffManager { - return &utxoDiffManager{ - utxoDiffStore: utxoDiffStore, - } -} - -// RestoreBlockDiffFromVirtualDiffParent restores the UTXO diff of -// the block for the given blockHash. -func (u *utxoDiffManager) RestoreBlockDiffFromVirtualDiffParent(blockHash *externalapi.DomainHash) (utxoDiff *model.UTXODiff, virtualDiffParentHash *externalapi.DomainHash, err error) { - panic("implement me") -}