[NOD-1476] Make further design changes (#965)

* [NOD-1476] Add dependency to BlockRelationStore in BlockProcessor.

* [NOD-1476] Add dependency to BlockStatusStore in BlockValidator.

* [NOD-1476] Add dependency to GHOSTDAGManager in BlockValidator.

* [NOD-1476] Rename CalculateConsensusStateChanges to AddBlockToVirtual.

* [NOD-1476] Remove RestoreDiffFromVirtual.

* [NOD-1476] Remove RestorePastUTXOSet.

* [NOD-1476] Add dependency to GHOSTDAGDataStore in ConsensusStateManager.

* [NOD-1476] Rename CalculateAcceptanceDataAndUTXOMultiset to just CalculateAcceptanceData.

* [NOD-1476] Remove UTXODiffManager and add dependencies to AcceptanceManager.

* [NOD-1476] Rename CalculateAcceptanceData to CalculateAcceptanceDataAndMultiset.

* [NOD-1476] Add dependency to DAGTopologyManager from ConsensusStateManager.

* [NOD-1476] Add dependency to BlockStore from ConsensusStateManager.

* [NOD-1476] Add dependency to PruningManager from ConsensusStateManager.

* [NOD-1476] Remove unnecessary stuff from ConsensusStateChanges.

* [NOD-1476] Add dependency to UTXODiffStore from ConsensusStateManager.

* [NOD-1476] Add tips to BlockRelationsStore.

* [NOD-1476] Add dependency to BlockRelationsStore from ConsensusStateManager.

* [NOD-1476] Remove Tips() from ConsensusStateStore.

* [NOD-1476] Remove acceptanceManager.

* [NOD-1476] Remove irrelevant functions out of ConsensusStateManager.
This commit is contained in:
stasatdaglabs 2020-10-25 15:19:20 +02:00 committed by GitHub
parent 45882343e6
commit b413760136
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 106 additions and 161 deletions

View File

@ -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")
}

View File

@ -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
}

View File

@ -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,

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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")
}

View File

@ -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,
}
}

View File

@ -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,
}
}

View File

@ -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")
}

View File

@ -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
}

View File

@ -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,
}
}

View File

@ -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")
}