From 45882343e675311f944304e8d1d9276b4787181a Mon Sep 17 00:00:00 2001 From: stasatdaglabs <39559713+stasatdaglabs@users.noreply.github.com> Date: Wed, 21 Oct 2020 12:37:22 +0300 Subject: [PATCH] [NOD-1475] Implement stage/discard/commit functionality for data structures (#962) * [NOD-1475] Add Stage, Discard, and Commit methods to all stores. * [NOD-1475] Simplify interfaces for processes. * [NOD-1475] Fix GHOSTDAGManager. * [NOD-1475] Simplify ChooseSelectedParent. * [NOD-1475] Remove errors from Stage functions. * [NOD-1475] Add IsStaged to all data structures. * [NOD-1475] Remove isDisqualified from CalculateConsensusStateChanges. * [NOD-1475] Add dependency from ConsensusStateManager to BlockStatusStore. * [NOD-1475] Fix a comment. * [NOD-1475] Add ReachabilityReindexRoot to reachabilityDataStore. * [NOD-1475] Fix a comment. * [NOD-1475] Rename IsStaged to IsAnythingStaged. --- .../acceptancedatastore.go | 18 ++++++++-- .../blockrelationstore/blockrelationstore.go | 18 ++++++++-- .../blockstatusstore/blockstatusstore.go | 18 ++++++++-- .../datastructures/blockstore/blockstore.go | 18 ++++++++-- .../consensusstatestore.go | 18 ++++++++-- .../ghostdagdatastore/ghostdagdatastore.go | 18 ++++++++-- .../multisetstore/multisetstore.go | 18 ++++++++-- .../pruningstore/pruningstore.go | 18 ++++++++-- .../reachabilitydatastore.go | 36 +++++++++++++++---- .../utxodiffstore/utxodiffstore.go | 18 ++++++++-- domain/consensus/factory.go | 3 +- ...face_datastructures_acceptancedatastore.go | 5 ++- .../model/interface_datastructures_block.go | 5 ++- ...rface_datastructures_blockrelationstore.go | 5 ++- ...terface_datastructures_blockstatusstore.go | 5 ++- ...face_datastructures_consensusstatestore.go | 5 ++- ...erface_datastructures_ghostdagdatastore.go | 5 ++- .../interface_datastructures_multisetstore.go | 5 ++- .../interface_datastructures_pruningstore.go | 5 ++- ...ce_datastructures_reachabilitydatastore.go | 9 +++-- .../interface_datastructures_utxodiffstore.go | 5 ++- .../interface_processes_acceptancemanager.go | 4 ++- .../interface_processes_blockvalidator.go | 12 +++---- ...terface_processes_consensusstatemanager.go | 4 +-- .../interface_processes_difficultymanager.go | 2 +- .../interface_processes_ghostdagmanager.go | 7 ++-- ...terface_processes_pastmediantimemanager.go | 4 ++- .../interface_processes_pruningmanager.go | 3 +- .../interface_processes_reachabilitytree.go | 2 +- .../interface_processes_utxodiffmanager.go | 1 - .../consensus/model/reachabilitychangeset.go | 10 ------ .../acceptancemanager/acceptancemanager.go | 5 ++- .../blockvalidator/blockvalidator.go | 12 +++---- .../consensusstatemanager.go | 17 ++++----- .../difficultymanager/difficultymanager.go | 2 +- .../processes/ghostdagmanager/compare.go | 34 +++++++++--------- .../processes/ghostdagmanager/ghostdag.go | 17 +++++---- .../ghostdagmanager/ghostdagmanager.go | 7 ---- .../pastmediantimemanager.go | 3 +- .../pruningmanager/pruningmanager.go | 8 ++--- .../reachabilitytree/reachabilitytree.go | 13 +++---- .../utxodiffmanager/utxodiffmanager.go | 5 --- 42 files changed, 282 insertions(+), 145 deletions(-) delete mode 100644 domain/consensus/model/reachabilitychangeset.go diff --git a/domain/consensus/datastructures/acceptancedatastore/acceptancedatastore.go b/domain/consensus/datastructures/acceptancedatastore/acceptancedatastore.go index e252ee4a5..31f11279f 100644 --- a/domain/consensus/datastructures/acceptancedatastore/acceptancedatastore.go +++ b/domain/consensus/datastructures/acceptancedatastore/acceptancedatastore.go @@ -14,9 +14,21 @@ func New() model.AcceptanceDataStore { return &acceptanceDataStore{} } -// Insert inserts the given acceptanceData for the given blockHash -func (ads *acceptanceDataStore) Insert(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, acceptanceData *model.BlockAcceptanceData) error { - return nil +// Stage stages the given acceptanceData for the given blockHash +func (ads *acceptanceDataStore) Stage(blockHash *externalapi.DomainHash, acceptanceData *model.BlockAcceptanceData) { + panic("implement me") +} + +func (ads *acceptanceDataStore) IsStaged() bool { + panic("implement me") +} + +func (ads *acceptanceDataStore) Discard() { + panic("implement me") +} + +func (ads *acceptanceDataStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // Get gets the acceptanceData associated with the given blockHash diff --git a/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go b/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go index ef6545b50..ced1a1b24 100644 --- a/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go +++ b/domain/consensus/datastructures/blockrelationstore/blockrelationstore.go @@ -14,9 +14,21 @@ func New() model.BlockRelationStore { return &blockRelationStore{} } -// Insert inserts the given blockRelationData for the given blockHash -func (brs *blockRelationStore) Update(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) error { - return nil +// Stage stages the given blockRelationData for the given blockHash +func (brs *blockRelationStore) Stage(blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) { + panic("implement me") +} + +func (brs *blockRelationStore) IsStaged() bool { + panic("implement me") +} + +func (brs *blockRelationStore) Discard() { + panic("implement me") +} + +func (brs *blockRelationStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // Get gets the blockRelationData associated with the given blockHash diff --git a/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go b/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go index 0b1445ce0..e8e09ff5c 100644 --- a/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go +++ b/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go @@ -14,9 +14,21 @@ func New() model.BlockStatusStore { return &blockStatusStore{} } -// Insert inserts the given blockStatus for the given blockHash -func (bss *blockStatusStore) Insert(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, blockStatus model.BlockStatus) error { - return nil +// Stage stages the given blockStatus for the given blockHash +func (bss *blockStatusStore) Stage(blockHash *externalapi.DomainHash, blockStatus model.BlockStatus) { + panic("implement me") +} + +func (bss *blockStatusStore) IsStaged() bool { + panic("implement me") +} + +func (bss *blockStatusStore) Discard() { + panic("implement me") +} + +func (bss *blockStatusStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // Get gets the blockStatus associated with the given blockHash diff --git a/domain/consensus/datastructures/blockstore/blockstore.go b/domain/consensus/datastructures/blockstore/blockstore.go index 46a03cc01..efa041fb6 100644 --- a/domain/consensus/datastructures/blockstore/blockstore.go +++ b/domain/consensus/datastructures/blockstore/blockstore.go @@ -14,9 +14,21 @@ func New() model.BlockStore { return &blockStore{} } -// Insert inserts the given block for the given blockHash -func (bms *blockStore) Insert(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, msgBlock *externalapi.DomainBlock) error { - return nil +// Stage stages the given block for the given blockHash +func (bms *blockStore) Stage(blockHash *externalapi.DomainHash, block *externalapi.DomainBlock) { + panic("implement me") +} + +func (bms *blockStore) IsStaged() bool { + panic("implement me") +} + +func (bms *blockStore) Discard() { + panic("implement me") +} + +func (bms *blockStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // Block gets the block associated with the given blockHash diff --git a/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go b/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go index 0ec33aac7..d8d0ceb7c 100644 --- a/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go +++ b/domain/consensus/datastructures/consensusstatestore/consensusstatestore.go @@ -14,9 +14,21 @@ func New() model.ConsensusStateStore { return &consensusStateStore{} } -// Update updates the store with the given consensusStateChanges -func (css *consensusStateStore) Update(dbTx model.DBTxProxy, consensusStateChanges *model.ConsensusStateChanges) error { - return nil +// Stage stages the store with the given consensusStateChanges +func (css *consensusStateStore) Stage(consensusStateChanges *model.ConsensusStateChanges) { + panic("implement me") +} + +func (css *consensusStateStore) IsStaged() bool { + panic("implement me") +} + +func (css *consensusStateStore) Discard() { + panic("implement me") +} + +func (css *consensusStateStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // UTXOByOutpoint gets the utxoEntry associated with the given outpoint diff --git a/domain/consensus/datastructures/ghostdagdatastore/ghostdagdatastore.go b/domain/consensus/datastructures/ghostdagdatastore/ghostdagdatastore.go index 2d53c5cc7..91c99b9e3 100644 --- a/domain/consensus/datastructures/ghostdagdatastore/ghostdagdatastore.go +++ b/domain/consensus/datastructures/ghostdagdatastore/ghostdagdatastore.go @@ -14,9 +14,21 @@ func New() model.GHOSTDAGDataStore { return &ghostdagDataStore{} } -// Insert inserts the given blockGHOSTDAGData for the given blockHash -func (gds *ghostdagDataStore) Insert(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, blockGHOSTDAGData *model.BlockGHOSTDAGData) error { - return nil +// Stage stages the given blockGHOSTDAGData for the given blockHash +func (gds *ghostdagDataStore) Stage(blockHash *externalapi.DomainHash, blockGHOSTDAGData *model.BlockGHOSTDAGData) { + panic("implement me") +} + +func (gds *ghostdagDataStore) IsStaged() bool { + panic("implement me") +} + +func (gds *ghostdagDataStore) Discard() { + panic("implement me") +} + +func (gds *ghostdagDataStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // Get gets the blockGHOSTDAGData associated with the given blockHash diff --git a/domain/consensus/datastructures/multisetstore/multisetstore.go b/domain/consensus/datastructures/multisetstore/multisetstore.go index 743b95c55..c4c13d2a8 100644 --- a/domain/consensus/datastructures/multisetstore/multisetstore.go +++ b/domain/consensus/datastructures/multisetstore/multisetstore.go @@ -14,9 +14,21 @@ func New() model.MultisetStore { return &multisetStore{} } -// Insert inserts the given multiset for the given blockHash -func (ms *multisetStore) Insert(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, multiset model.Multiset) error { - return nil +// Stage stages the given multiset for the given blockHash +func (ms *multisetStore) Stage(blockHash *externalapi.DomainHash, multiset model.Multiset) { + panic("implement me") +} + +func (ms *multisetStore) IsStaged() bool { + panic("implement me") +} + +func (ms *multisetStore) Discard() { + panic("implement me") +} + +func (ms *multisetStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // Get gets the multiset associated with the given blockHash diff --git a/domain/consensus/datastructures/pruningstore/pruningstore.go b/domain/consensus/datastructures/pruningstore/pruningstore.go index bc3076878..a0d079501 100644 --- a/domain/consensus/datastructures/pruningstore/pruningstore.go +++ b/domain/consensus/datastructures/pruningstore/pruningstore.go @@ -14,9 +14,21 @@ func New() model.PruningStore { return &pruningStore{} } -// Update updates the pruning state -func (pps *pruningStore) Update(dbTx model.DBTxProxy, pruningPointBlockHash *externalapi.DomainHash, pruningPointUTXOSet model.ReadOnlyUTXOSet) error { - return nil +// Stage stages the pruning state +func (pps *pruningStore) Stage(pruningPointBlockHash *externalapi.DomainHash, pruningPointUTXOSet model.ReadOnlyUTXOSet) { + panic("implement me") +} + +func (pps *pruningStore) IsStaged() bool { + panic("implement me") +} + +func (pps *pruningStore) Discard() { + panic("implement me") +} + +func (pps *pruningStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // PruningPoint gets the current pruning point diff --git a/domain/consensus/datastructures/reachabilitydatastore/reachabilitydatastore.go b/domain/consensus/datastructures/reachabilitydatastore/reachabilitydatastore.go index 0a47c49a3..7b3f93a7e 100644 --- a/domain/consensus/datastructures/reachabilitydatastore/reachabilitydatastore.go +++ b/domain/consensus/datastructures/reachabilitydatastore/reachabilitydatastore.go @@ -14,12 +14,36 @@ func New() model.ReachabilityDataStore { return &reachabilityDataStore{} } -// Insert inserts the given reachabilityData for the given blockHash -func (rds *reachabilityDataStore) Insert(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, reachabilityData *model.ReachabilityData) error { - return nil +// StageReachabilityData stages the given reachabilityData for the given blockHash +func (rds *reachabilityDataStore) StageReachabilityData(blockHash *externalapi.DomainHash, reachabilityData *model.ReachabilityData) { + panic("implement me") } -// Get gets the reachabilityData associated with the given blockHash -func (rds *reachabilityDataStore) Get(dbContext model.DBContextProxy, blockHash *externalapi.DomainHash) (*model.ReachabilityData, error) { - return nil, nil +// StageReachabilityReindexRoot stages the given reachabilityReindexRoot +func (rds *reachabilityDataStore) StageReachabilityReindexRoot(reachabilityReindexRoot *externalapi.DomainHash) { + panic("implement me") +} + +func (rds *reachabilityDataStore) IsAnythingStaged() bool { + panic("implement me") +} + +func (rds *reachabilityDataStore) Discard() { + panic("implement me") +} + +func (rds *reachabilityDataStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") +} + +// ReachabilityData returns the reachabilityData associated with the given blockHash +func (rds *reachabilityDataStore) ReachabilityData(dbContext model.DBContextProxy, + blockHash *externalapi.DomainHash) (*model.ReachabilityData, error) { + + panic("implement me") +} + +// ReachabilityReindexRoot returns the current reachability reindex root +func (rds *reachabilityDataStore) ReachabilityReindexRoot(dbContext model.DBContextProxy) (*externalapi.DomainHash, error) { + panic("implement me") } diff --git a/domain/consensus/datastructures/utxodiffstore/utxodiffstore.go b/domain/consensus/datastructures/utxodiffstore/utxodiffstore.go index b6d711a4c..56239d469 100644 --- a/domain/consensus/datastructures/utxodiffstore/utxodiffstore.go +++ b/domain/consensus/datastructures/utxodiffstore/utxodiffstore.go @@ -14,9 +14,21 @@ func New() model.UTXODiffStore { return &utxoDiffStore{} } -// Insert inserts the given utxoDiff for the given blockHash -func (uds *utxoDiffStore) Insert(dbTx model.DBTxProxy, blockHash *externalapi.DomainHash, utxoDiff *model.UTXODiff, utxoDiffChild *externalapi.DomainHash) error { - return nil +// Stage stages the given utxoDiff for the given blockHash +func (uds *utxoDiffStore) Stage(blockHash *externalapi.DomainHash, utxoDiff *model.UTXODiff, utxoDiffChild *externalapi.DomainHash) { + panic("implement me") +} + +func (uds *utxoDiffStore) IsStaged() bool { + panic("implement me") +} + +func (uds *utxoDiffStore) Discard() { + panic("implement me") +} + +func (uds *utxoDiffStore) Commit(dbTx model.DBTxProxy) error { + panic("implement me") } // UTXODiff gets the utxoDiff associated with the given blockHash diff --git a/domain/consensus/factory.go b/domain/consensus/factory.go index 3e636b006..c31cd8012 100644 --- a/domain/consensus/factory.go +++ b/domain/consensus/factory.go @@ -78,7 +78,8 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, databaseContext *dba multisetStore, blockStore, ghostdagManager, - acceptanceManager) + acceptanceManager, + blockStatusStore) pruningManager := pruningmanager.New( dagTraversalManager, pruningStore, diff --git a/domain/consensus/model/interface_datastructures_acceptancedatastore.go b/domain/consensus/model/interface_datastructures_acceptancedatastore.go index c70fe8996..7b796374c 100644 --- a/domain/consensus/model/interface_datastructures_acceptancedatastore.go +++ b/domain/consensus/model/interface_datastructures_acceptancedatastore.go @@ -4,7 +4,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // AcceptanceDataStore represents a store of AcceptanceData type AcceptanceDataStore interface { - Insert(dbTx DBTxProxy, blockHash *externalapi.DomainHash, acceptanceData *BlockAcceptanceData) error + Stage(blockHash *externalapi.DomainHash, acceptanceData *BlockAcceptanceData) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error Get(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*BlockAcceptanceData, error) Delete(dbTx DBTxProxy, blockHash *externalapi.DomainHash) error } diff --git a/domain/consensus/model/interface_datastructures_block.go b/domain/consensus/model/interface_datastructures_block.go index 64f02fb5a..4a33c1c22 100644 --- a/domain/consensus/model/interface_datastructures_block.go +++ b/domain/consensus/model/interface_datastructures_block.go @@ -4,7 +4,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // BlockStore represents a store of blocks type BlockStore interface { - Insert(dbTx DBTxProxy, blockHash *externalapi.DomainHash, block *externalapi.DomainBlock) error + Stage(blockHash *externalapi.DomainHash, block *externalapi.DomainBlock) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error Block(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*externalapi.DomainBlock, error) Blocks(dbContext DBContextProxy, blockHashes []*externalapi.DomainHash) ([]*externalapi.DomainBlock, error) Delete(dbTx DBTxProxy, blockHash *externalapi.DomainHash) error diff --git a/domain/consensus/model/interface_datastructures_blockrelationstore.go b/domain/consensus/model/interface_datastructures_blockrelationstore.go index c9a708cbc..ae7540a7b 100644 --- a/domain/consensus/model/interface_datastructures_blockrelationstore.go +++ b/domain/consensus/model/interface_datastructures_blockrelationstore.go @@ -4,6 +4,9 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // BlockRelationStore represents a store of BlockRelations type BlockRelationStore interface { - Update(dbTx DBTxProxy, blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) error + Stage(blockHash *externalapi.DomainHash, parentHashes []*externalapi.DomainHash) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error Get(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*BlockRelations, error) } diff --git a/domain/consensus/model/interface_datastructures_blockstatusstore.go b/domain/consensus/model/interface_datastructures_blockstatusstore.go index c79faaad1..14198fe5b 100644 --- a/domain/consensus/model/interface_datastructures_blockstatusstore.go +++ b/domain/consensus/model/interface_datastructures_blockstatusstore.go @@ -4,7 +4,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // BlockStatusStore represents a store of BlockStatuses type BlockStatusStore interface { - Insert(dbTx DBTxProxy, blockHash *externalapi.DomainHash, blockStatus BlockStatus) error + Stage(blockHash *externalapi.DomainHash, blockStatus BlockStatus) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error Get(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (BlockStatus, error) Exists(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (bool, error) } diff --git a/domain/consensus/model/interface_datastructures_consensusstatestore.go b/domain/consensus/model/interface_datastructures_consensusstatestore.go index ca94fa63d..8f1d08c32 100644 --- a/domain/consensus/model/interface_datastructures_consensusstatestore.go +++ b/domain/consensus/model/interface_datastructures_consensusstatestore.go @@ -4,7 +4,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // ConsensusStateStore represents a store for the current consensus state type ConsensusStateStore interface { - Update(dbTx DBTxProxy, consensusStateChanges *ConsensusStateChanges) error + Stage(consensusStateChanges *ConsensusStateChanges) + IsStaged() bool + 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_datastructures_ghostdagdatastore.go b/domain/consensus/model/interface_datastructures_ghostdagdatastore.go index 424d38856..83dbd060f 100644 --- a/domain/consensus/model/interface_datastructures_ghostdagdatastore.go +++ b/domain/consensus/model/interface_datastructures_ghostdagdatastore.go @@ -4,6 +4,9 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // GHOSTDAGDataStore represents a store of BlockGHOSTDAGData type GHOSTDAGDataStore interface { - Insert(dbTx DBTxProxy, blockHash *externalapi.DomainHash, blockGHOSTDAGData *BlockGHOSTDAGData) error + Stage(blockHash *externalapi.DomainHash, blockGHOSTDAGData *BlockGHOSTDAGData) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error Get(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*BlockGHOSTDAGData, error) } diff --git a/domain/consensus/model/interface_datastructures_multisetstore.go b/domain/consensus/model/interface_datastructures_multisetstore.go index c203db864..e64560112 100644 --- a/domain/consensus/model/interface_datastructures_multisetstore.go +++ b/domain/consensus/model/interface_datastructures_multisetstore.go @@ -4,7 +4,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // MultisetStore represents a store of Multisets type MultisetStore interface { - Insert(dbTx DBTxProxy, blockHash *externalapi.DomainHash, multiset Multiset) error + Stage(blockHash *externalapi.DomainHash, multiset Multiset) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error Get(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (Multiset, error) Delete(dbTx DBTxProxy, blockHash *externalapi.DomainHash) error } diff --git a/domain/consensus/model/interface_datastructures_pruningstore.go b/domain/consensus/model/interface_datastructures_pruningstore.go index 58ed9000c..133be8f5f 100644 --- a/domain/consensus/model/interface_datastructures_pruningstore.go +++ b/domain/consensus/model/interface_datastructures_pruningstore.go @@ -4,7 +4,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // PruningStore represents a store for the current pruning state type PruningStore interface { - Update(dbTx DBTxProxy, pruningPointBlockHash *externalapi.DomainHash, pruningPointUTXOSet ReadOnlyUTXOSet) error + Stage(pruningPointBlockHash *externalapi.DomainHash, pruningPointUTXOSet ReadOnlyUTXOSet) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error PruningPoint(dbContext DBContextProxy) (*externalapi.DomainHash, error) PruningPointSerializedUTXOSet(dbContext DBContextProxy) ([]byte, error) } diff --git a/domain/consensus/model/interface_datastructures_reachabilitydatastore.go b/domain/consensus/model/interface_datastructures_reachabilitydatastore.go index e1eb54a5f..30d127af7 100644 --- a/domain/consensus/model/interface_datastructures_reachabilitydatastore.go +++ b/domain/consensus/model/interface_datastructures_reachabilitydatastore.go @@ -4,6 +4,11 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // ReachabilityDataStore represents a store of ReachabilityData type ReachabilityDataStore interface { - Insert(dbTx DBTxProxy, blockHash *externalapi.DomainHash, reachabilityData *ReachabilityData) error - Get(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*ReachabilityData, error) + StageReachabilityData(blockHash *externalapi.DomainHash, reachabilityData *ReachabilityData) + StageReachabilityReindexRoot(reachabilityReindexRoot *externalapi.DomainHash) + IsAnythingStaged() bool + Discard() + Commit(dbTx DBTxProxy) error + ReachabilityData(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*ReachabilityData, error) + ReachabilityReindexRoot(dbContext DBContextProxy) (*externalapi.DomainHash, error) } diff --git a/domain/consensus/model/interface_datastructures_utxodiffstore.go b/domain/consensus/model/interface_datastructures_utxodiffstore.go index 7933cf7c4..2c782b432 100644 --- a/domain/consensus/model/interface_datastructures_utxodiffstore.go +++ b/domain/consensus/model/interface_datastructures_utxodiffstore.go @@ -4,7 +4,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // UTXODiffStore represents a store of UTXODiffs type UTXODiffStore interface { - Insert(dbTx DBTxProxy, blockHash *externalapi.DomainHash, utxoDiff *UTXODiff, utxoDiffChild *externalapi.DomainHash) error + Stage(blockHash *externalapi.DomainHash, utxoDiff *UTXODiff, utxoDiffChild *externalapi.DomainHash) + IsStaged() bool + Discard() + Commit(dbTx DBTxProxy) error UTXODiff(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*UTXODiff, error) UTXODiffChild(dbContext DBContextProxy, blockHash *externalapi.DomainHash) (*externalapi.DomainHash, error) Delete(dbTx DBTxProxy, blockHash *externalapi.DomainHash) error diff --git a/domain/consensus/model/interface_processes_acceptancemanager.go b/domain/consensus/model/interface_processes_acceptancemanager.go index 6f87556b0..fb46576c1 100644 --- a/domain/consensus/model/interface_processes_acceptancemanager.go +++ b/domain/consensus/model/interface_processes_acceptancemanager.go @@ -1,7 +1,9 @@ package model +import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + // AcceptanceManager manages transaction acceptance // and related data type AcceptanceManager interface { - CalculateAcceptanceDataAndUTXOMultiset(blockGHOSTDAGData *BlockGHOSTDAGData) (*BlockAcceptanceData, Multiset, error) + CalculateAcceptanceDataAndUTXOMultiset(blockHash *externalapi.DomainHash) error } diff --git a/domain/consensus/model/interface_processes_blockvalidator.go b/domain/consensus/model/interface_processes_blockvalidator.go index 124031713..76b41fbe9 100644 --- a/domain/consensus/model/interface_processes_blockvalidator.go +++ b/domain/consensus/model/interface_processes_blockvalidator.go @@ -5,10 +5,10 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // BlockValidator exposes a set of validation classes, after which // it's possible to determine whether a block is valid type BlockValidator interface { - ValidateHeaderInIsolation(block *externalapi.DomainBlock) error - ValidateBodyInIsolation(block *externalapi.DomainBlock) error - ValidateHeaderInContext(block *externalapi.DomainBlock) error - ValidateBodyInContext(block *externalapi.DomainBlock) error - ValidateAgainstPastUTXO(block *externalapi.DomainBlock) error - ValidateFinality(block *externalapi.DomainBlock) error + ValidateHeaderInIsolation(blockHash *externalapi.DomainHash) error + ValidateBodyInIsolation(blockHash *externalapi.DomainHash) error + ValidateHeaderInContext(blockHash *externalapi.DomainHash) error + ValidateBodyInContext(blockHash *externalapi.DomainHash) error + ValidateAgainstPastUTXO(blockHash *externalapi.DomainHash) error + ValidateFinality(blockHash *externalapi.DomainHash) error } diff --git a/domain/consensus/model/interface_processes_consensusstatemanager.go b/domain/consensus/model/interface_processes_consensusstatemanager.go index 84937be51..83528310a 100644 --- a/domain/consensus/model/interface_processes_consensusstatemanager.go +++ b/domain/consensus/model/interface_processes_consensusstatemanager.go @@ -4,9 +4,7 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // ConsensusStateManager manages the node's consensus state type ConsensusStateManager interface { - UTXOByOutpoint(outpoint *externalapi.DomainOutpoint) (*externalapi.UTXOEntry, error) - CalculateConsensusStateChanges(block *externalapi.DomainBlock, isDisqualified bool) (stateChanges *ConsensusStateChanges, - utxoDiffChanges *UTXODiffChanges, virtualGHOSTDAGData *BlockGHOSTDAGData, err error) + CalculateConsensusStateChanges(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_difficultymanager.go b/domain/consensus/model/interface_processes_difficultymanager.go index 8006a269d..da760d502 100644 --- a/domain/consensus/model/interface_processes_difficultymanager.go +++ b/domain/consensus/model/interface_processes_difficultymanager.go @@ -5,5 +5,5 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // DifficultyManager provides a method to resolve the // difficulty value of a block type DifficultyManager interface { - RequiredDifficulty(parents []*externalapi.DomainHash) (uint32, error) + RequiredDifficulty(blockHash *externalapi.DomainHash) (uint32, error) } diff --git a/domain/consensus/model/interface_processes_ghostdagmanager.go b/domain/consensus/model/interface_processes_ghostdagmanager.go index 32503a267..5ff3a0972 100644 --- a/domain/consensus/model/interface_processes_ghostdagmanager.go +++ b/domain/consensus/model/interface_processes_ghostdagmanager.go @@ -4,9 +4,6 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // GHOSTDAGManager resolves and manages GHOSTDAG block data type GHOSTDAGManager interface { - GHOSTDAG(blockParents []*externalapi.DomainHash) (*BlockGHOSTDAGData, error) - BlockData(blockHash *externalapi.DomainHash) (*BlockGHOSTDAGData, error) - ChooseSelectedParent( - blockHashA *externalapi.DomainHash, blockAGHOSTDAGData *BlockGHOSTDAGData, - blockHashB *externalapi.DomainHash, blockBGHOSTDAGData *BlockGHOSTDAGData) *externalapi.DomainHash + GHOSTDAG(blockHash *externalapi.DomainHash) error + ChooseSelectedParent(blockHashA *externalapi.DomainHash, blockHashB *externalapi.DomainHash) (*externalapi.DomainHash, error) } diff --git a/domain/consensus/model/interface_processes_pastmediantimemanager.go b/domain/consensus/model/interface_processes_pastmediantimemanager.go index f377d09a1..3899f98c7 100644 --- a/domain/consensus/model/interface_processes_pastmediantimemanager.go +++ b/domain/consensus/model/interface_processes_pastmediantimemanager.go @@ -1,7 +1,9 @@ package model +import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" + // PastMedianTimeManager provides a method to resolve the // past median time of a block type PastMedianTimeManager interface { - PastMedianTime(blockGHOSTDAGData *BlockGHOSTDAGData) (int64, error) + PastMedianTime(blockHash *externalapi.DomainHash) (int64, error) } diff --git a/domain/consensus/model/interface_processes_pruningmanager.go b/domain/consensus/model/interface_processes_pruningmanager.go index 4ad9073bc..18225f9bb 100644 --- a/domain/consensus/model/interface_processes_pruningmanager.go +++ b/domain/consensus/model/interface_processes_pruningmanager.go @@ -4,8 +4,7 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // PruningManager resolves and manages the current pruning point type PruningManager interface { - FindNextPruningPoint(blockGHOSTDAGData *BlockGHOSTDAGData) (found bool, - newPruningPoint *externalapi.DomainHash, newPruningPointUTXOSet ReadOnlyUTXOSet, err error) + FindNextPruningPoint(blockHash *externalapi.DomainHash) error PruningPoint() (*externalapi.DomainHash, error) SerializedUTXOSet() ([]byte, error) } diff --git a/domain/consensus/model/interface_processes_reachabilitytree.go b/domain/consensus/model/interface_processes_reachabilitytree.go index 0b0211767..fd9c38b6c 100644 --- a/domain/consensus/model/interface_processes_reachabilitytree.go +++ b/domain/consensus/model/interface_processes_reachabilitytree.go @@ -5,7 +5,7 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // ReachabilityTree maintains a structure that allows to answer // reachability queries in sub-linear time type ReachabilityTree interface { + AddBlock(blockHash *externalapi.DomainHash) error IsReachabilityTreeAncestorOf(blockHashA *externalapi.DomainHash, blockHashB *externalapi.DomainHash) (bool, error) IsDAGAncestorOf(blockHashA *externalapi.DomainHash, blockHashB *externalapi.DomainHash) (bool, error) - ReachabilityChangeset(blockHash *externalapi.DomainHash, blockGHOSTDAGData *BlockGHOSTDAGData) (*ReachabilityChangeset, error) } diff --git a/domain/consensus/model/interface_processes_utxodiffmanager.go b/domain/consensus/model/interface_processes_utxodiffmanager.go index 42f23d7d7..0adf6e805 100644 --- a/domain/consensus/model/interface_processes_utxodiffmanager.go +++ b/domain/consensus/model/interface_processes_utxodiffmanager.go @@ -5,7 +5,6 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // UTXODiffManager provides methods to access // and store UTXO diffs type UTXODiffManager interface { - StoreUTXODiff(blockHash *externalapi.DomainHash, utxoDiff *UTXODiff) error RestoreBlockDiffFromVirtualDiffParent(blockHash *externalapi.DomainHash) (utxoDiff *UTXODiff, virtualDiffParentHash *externalapi.DomainHash, err error) } diff --git a/domain/consensus/model/reachabilitychangeset.go b/domain/consensus/model/reachabilitychangeset.go deleted file mode 100644 index c4db28140..000000000 --- a/domain/consensus/model/reachabilitychangeset.go +++ /dev/null @@ -1,10 +0,0 @@ -package model - -import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" - -// ReachabilityChangeset holds the set of changes to make to a -// reachability tree to insert a new reachability node -type ReachabilityChangeset struct { - TreeNodeChanges map[*externalapi.DomainHash]*ReachabilityTreeNode - FutureCoveringSetChanges map[*externalapi.DomainHash]FutureCoveringTreeNodeSet -} diff --git a/domain/consensus/processes/acceptancemanager/acceptancemanager.go b/domain/consensus/processes/acceptancemanager/acceptancemanager.go index 9419b8585..2c39deb64 100644 --- a/domain/consensus/processes/acceptancemanager/acceptancemanager.go +++ b/domain/consensus/processes/acceptancemanager/acceptancemanager.go @@ -2,6 +2,7 @@ package acceptancemanager import ( "github.com/kaspanet/kaspad/domain/consensus/model" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) // AcceptanceManager manages transaction acceptance @@ -17,8 +18,6 @@ func New(utxoDiffManager model.UTXODiffManager) model.AcceptanceManager { } } -func (a *acceptanceManager) CalculateAcceptanceDataAndUTXOMultiset(blockGHOSTDAGData *model.BlockGHOSTDAGData) ( - *model.BlockAcceptanceData, model.Multiset, error) { - +func (a *acceptanceManager) CalculateAcceptanceDataAndUTXOMultiset(blockHash *externalapi.DomainHash) error { panic("implement me") } diff --git a/domain/consensus/processes/blockvalidator/blockvalidator.go b/domain/consensus/processes/blockvalidator/blockvalidator.go index d14805c15..5fdd65a9c 100644 --- a/domain/consensus/processes/blockvalidator/blockvalidator.go +++ b/domain/consensus/processes/blockvalidator/blockvalidator.go @@ -37,34 +37,34 @@ func New( // ValidateHeaderInIsolation validates block headers in isolation from the current // consensus state -func (v *blockValidator) ValidateHeaderInIsolation(block *externalapi.DomainBlock) error { +func (v *blockValidator) ValidateHeaderInIsolation(blockHash *externalapi.DomainHash) error { return nil } // ValidateHeaderInContext validates block headers in the context of the current // consensus state -func (v *blockValidator) ValidateHeaderInContext(block *externalapi.DomainBlock) error { +func (v *blockValidator) ValidateHeaderInContext(blockHash *externalapi.DomainHash) error { return nil } // ValidateBodyInIsolation validates block bodies in isolation from the current // consensus state -func (v *blockValidator) ValidateBodyInIsolation(block *externalapi.DomainBlock) error { +func (v *blockValidator) ValidateBodyInIsolation(blockHash *externalapi.DomainHash) error { return nil } // ValidateBodyInContext validates block bodies in the context of the current // consensus state -func (v *blockValidator) ValidateBodyInContext(block *externalapi.DomainBlock) error { +func (v *blockValidator) ValidateBodyInContext(blockHash *externalapi.DomainHash) error { return nil } // ValidateAgainstPastUTXO validates the block against the UTXO of its past -func (v *blockValidator) ValidateAgainstPastUTXO(block *externalapi.DomainBlock) error { +func (v *blockValidator) ValidateAgainstPastUTXO(blockHash *externalapi.DomainHash) error { return nil } // ValidateFinality makes sure the block does not violate finality -func (v *blockValidator) ValidateFinality(block *externalapi.DomainBlock) error { +func (v *blockValidator) ValidateFinality(blockHash *externalapi.DomainHash) error { return nil } diff --git a/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go b/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go index 54476997e..4e5a0f4e6 100644 --- a/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go +++ b/domain/consensus/processes/consensusstatemanager/consensusstatemanager.go @@ -17,6 +17,7 @@ type consensusStateManager struct { blockStore model.BlockStore ghostdagManager model.GHOSTDAGManager acceptanceManager model.AcceptanceManager + blockStatusStore model.BlockStatusStore } // New instantiates a new ConsensusStateManager @@ -27,7 +28,8 @@ func New( multisetStore model.MultisetStore, blockStore model.BlockStore, ghostdagManager model.GHOSTDAGManager, - acceptanceManager model.AcceptanceManager) model.ConsensusStateManager { + acceptanceManager model.AcceptanceManager, + blockStatusStore model.BlockStatusStore) model.ConsensusStateManager { return &consensusStateManager{ dagParams: dagParams, @@ -38,21 +40,14 @@ func New( blockStore: blockStore, ghostdagManager: ghostdagManager, acceptanceManager: acceptanceManager, + blockStatusStore: blockStatusStore, } } -// UTXOByOutpoint returns a UTXOEntry matching the given outpoint -func (csm *consensusStateManager) UTXOByOutpoint(outpoint *externalapi.DomainOutpoint) (*externalapi.UTXOEntry, error) { - return nil, nil -} - // 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(block *externalapi.DomainBlock, isDisqualified bool) ( - stateChanges *model.ConsensusStateChanges, utxoDiffChanges *model.UTXODiffChanges, - virtualGHOSTDAGData *model.BlockGHOSTDAGData, err error) { - - return nil, nil, nil, nil +func (csm *consensusStateManager) CalculateConsensusStateChanges(blockHash *externalapi.DomainHash) error { + return nil } // VirtualData returns the medianTime and blueScore of the current virtual block diff --git a/domain/consensus/processes/difficultymanager/difficultymanager.go b/domain/consensus/processes/difficultymanager/difficultymanager.go index f43d972be..85e2de9f4 100644 --- a/domain/consensus/processes/difficultymanager/difficultymanager.go +++ b/domain/consensus/processes/difficultymanager/difficultymanager.go @@ -19,6 +19,6 @@ func New(ghostdagManager model.GHOSTDAGManager) model.DifficultyManager { } // RequiredDifficulty returns the difficulty required for some block -func (dm *difficultyManager) RequiredDifficulty(parents []*externalapi.DomainHash) (uint32, error) { +func (dm *difficultyManager) RequiredDifficulty(blockHash *externalapi.DomainHash) (uint32, error) { return 0, nil } diff --git a/domain/consensus/processes/ghostdagmanager/compare.go b/domain/consensus/processes/ghostdagmanager/compare.go index 7cc71d6b7..3f64b4911 100644 --- a/domain/consensus/processes/ghostdagmanager/compare.go +++ b/domain/consensus/processes/ghostdagmanager/compare.go @@ -1,7 +1,6 @@ package ghostdagmanager import ( - "github.com/kaspanet/kaspad/domain/consensus/model" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) @@ -23,35 +22,38 @@ func (gm *ghostdagManager) findSelectedParent(parentHashes []*externalapi.Domain return selectedParent, nil } -func (gm *ghostdagManager) less(blockA, blockB *externalapi.DomainHash) (bool, error) { - blockAGHOSTDAGData, err := gm.ghostdagDataStore.Get(gm.databaseContext, blockA) +func (gm *ghostdagManager) less(blockHashA *externalapi.DomainHash, blockHashB *externalapi.DomainHash) (bool, error) { + chosenSelectedParent, err := gm.ChooseSelectedParent(blockHashA, blockHashB) if err != nil { return false, err } - blockBGHOSTDAGData, err := gm.ghostdagDataStore.Get(gm.databaseContext, blockB) - if err != nil { - return false, err - } - chosenSelectedParent := gm.ChooseSelectedParent(blockA, blockAGHOSTDAGData, blockB, blockBGHOSTDAGData) - return chosenSelectedParent == blockB, nil + return chosenSelectedParent == blockHashB, nil } -func (gm *ghostdagManager) ChooseSelectedParent( - blockHashA *externalapi.DomainHash, blockAGHOSTDAGData *model.BlockGHOSTDAGData, - blockHashB *externalapi.DomainHash, blockBGHOSTDAGData *model.BlockGHOSTDAGData) *externalapi.DomainHash { +func (gm *ghostdagManager) ChooseSelectedParent(blockHashA *externalapi.DomainHash, + blockHashB *externalapi.DomainHash) (*externalapi.DomainHash, error) { + + blockAGHOSTDAGData, err := gm.ghostdagDataStore.Get(gm.databaseContext, blockHashA) + if err != nil { + return nil, err + } + blockBGHOSTDAGData, err := gm.ghostdagDataStore.Get(gm.databaseContext, blockHashB) + if err != nil { + return nil, err + } blockABlueScore := blockAGHOSTDAGData.BlueScore blockBBlueScore := blockBGHOSTDAGData.BlueScore if blockABlueScore == blockBBlueScore { if hashesLess(blockHashA, blockHashB) { - return blockHashB + return blockHashB, nil } - return blockHashA + return blockHashA, nil } if blockABlueScore < blockBBlueScore { - return blockHashB + return blockHashB, nil } - return blockHashA + return blockHashA, nil } func hashesLess(a, b *externalapi.DomainHash) bool { diff --git a/domain/consensus/processes/ghostdagmanager/ghostdag.go b/domain/consensus/processes/ghostdagmanager/ghostdag.go index 1d75c08bc..70e175134 100644 --- a/domain/consensus/processes/ghostdagmanager/ghostdag.go +++ b/domain/consensus/processes/ghostdagmanager/ghostdag.go @@ -24,27 +24,31 @@ import ( // BluesAnticoneSizes. // // For further details see the article https://eprint.iacr.org/2018/104.pdf -func (gm *ghostdagManager) GHOSTDAG(blockParents []*externalapi.DomainHash) (*model.BlockGHOSTDAGData, error) { +func (gm *ghostdagManager) GHOSTDAG(blockHash *externalapi.DomainHash) error { newBlockData := &model.BlockGHOSTDAGData{ MergeSetBlues: make([]*externalapi.DomainHash, 0), MergeSetReds: make([]*externalapi.DomainHash, 0), BluesAnticoneSizes: make(map[externalapi.DomainHash]model.KType), } + blockParents, err := gm.dagTopologyManager.Parents(blockHash) + if err != nil { + return err + } selectedParent, err := gm.findSelectedParent(blockParents) if err != nil { - return nil, err + return err } newBlockData.SelectedParent = selectedParent mergeSet, err := gm.mergeSet(newBlockData.SelectedParent, blockParents) if err != nil { - return nil, err + return err } for _, blueCandidate := range mergeSet { isBlue, candidateAnticoneSize, candidateBluesAnticoneSizes, err := gm.checkBlueCandidate(newBlockData, blueCandidate) if err != nil { - return nil, err + return err } if isBlue { @@ -61,11 +65,12 @@ func (gm *ghostdagManager) GHOSTDAG(blockParents []*externalapi.DomainHash) (*mo selectedParentGHOSTDAGData, err := gm.ghostdagDataStore.Get(gm.databaseContext, newBlockData.SelectedParent) if err != nil { - return nil, err + return err } newBlockData.BlueScore = selectedParentGHOSTDAGData.BlueScore + uint64(len(newBlockData.MergeSetBlues)) - return newBlockData, nil + gm.ghostdagDataStore.Stage(blockHash, newBlockData) + return nil } type chainBlockData struct { diff --git a/domain/consensus/processes/ghostdagmanager/ghostdagmanager.go b/domain/consensus/processes/ghostdagmanager/ghostdagmanager.go index dc3c65b50..4430f6362 100644 --- a/domain/consensus/processes/ghostdagmanager/ghostdagmanager.go +++ b/domain/consensus/processes/ghostdagmanager/ghostdagmanager.go @@ -3,7 +3,6 @@ package ghostdagmanager import ( "github.com/kaspanet/kaspad/domain/consensus/database" "github.com/kaspanet/kaspad/domain/consensus/model" - "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/infrastructure/db/dbaccess" ) @@ -29,9 +28,3 @@ func New( k: k, } } - -// BlockData returns previously calculated GHOSTDAG data for -// the given blockHash -func (gm *ghostdagManager) BlockData(blockHash *externalapi.DomainHash) (*model.BlockGHOSTDAGData, error) { - return gm.ghostdagDataStore.Get(gm.databaseContext, blockHash) -} diff --git a/domain/consensus/processes/pastmediantimemanager/pastmediantimemanager.go b/domain/consensus/processes/pastmediantimemanager/pastmediantimemanager.go index b7d6679a7..5188664f3 100644 --- a/domain/consensus/processes/pastmediantimemanager/pastmediantimemanager.go +++ b/domain/consensus/processes/pastmediantimemanager/pastmediantimemanager.go @@ -2,6 +2,7 @@ package pastmediantimemanager import ( "github.com/kaspanet/kaspad/domain/consensus/model" + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" ) // pastMedianTimeManager provides a method to resolve the @@ -18,6 +19,6 @@ func New(ghostdagManager model.GHOSTDAGManager) model.PastMedianTimeManager { } // PastMedianTime returns the past median time for some block -func (pmtm *pastMedianTimeManager) PastMedianTime(blockGHOSTDAGData *model.BlockGHOSTDAGData) (int64, error) { +func (pmtm *pastMedianTimeManager) PastMedianTime(blockHash *externalapi.DomainHash) (int64, error) { return 0, nil } diff --git a/domain/consensus/processes/pruningmanager/pruningmanager.go b/domain/consensus/processes/pruningmanager/pruningmanager.go index 07c4a72ae..1e8458619 100644 --- a/domain/consensus/processes/pruningmanager/pruningmanager.go +++ b/domain/consensus/processes/pruningmanager/pruningmanager.go @@ -31,11 +31,9 @@ func New( } // FindNextPruningPoint finds the next pruning point from the -// given blockHash. If none found, returns false -func (pm *pruningManager) FindNextPruningPoint(blockGHOSTDAGData *model.BlockGHOSTDAGData) (found bool, - newPruningPoint *externalapi.DomainHash, newPruningPointUTXOSet model.ReadOnlyUTXOSet, err error) { - - return false, nil, nil, nil +// given blockHash +func (pm *pruningManager) FindNextPruningPoint(blockHash *externalapi.DomainHash) error { + return nil } // PruningPoint returns the hash of the current pruning point diff --git a/domain/consensus/processes/reachabilitytree/reachabilitytree.go b/domain/consensus/processes/reachabilitytree/reachabilitytree.go index 3dbc1274a..07673caba 100644 --- a/domain/consensus/processes/reachabilitytree/reachabilitytree.go +++ b/domain/consensus/processes/reachabilitytree/reachabilitytree.go @@ -22,6 +22,11 @@ func New( } } +// AddBlock adds the block with the given blockHash into the reachability tree. +func (rt *reachabilityTree) AddBlock(blockHash *externalapi.DomainHash) error { + return nil +} + // IsReachabilityTreeAncestorOf returns true if blockHashA is an // ancestor of blockHashB in the reachability tree. Note that this // does not necessarily mean that it isn't its ancestor in the DAG. @@ -34,11 +39,3 @@ func (rt *reachabilityTree) IsReachabilityTreeAncestorOf(blockHashA *externalapi func (rt *reachabilityTree) IsDAGAncestorOf(blockHashA *externalapi.DomainHash, blockHashB *externalapi.DomainHash) (bool, error) { return false, nil } - -// ReachabilityChangeset returns a set of changes that need to occur -// in order to add the given blockHash into the reachability tree. -func (rt *reachabilityTree) ReachabilityChangeset(blockHash *externalapi.DomainHash, - blockGHOSTDAGData *model.BlockGHOSTDAGData) (*model.ReachabilityChangeset, error) { - - return nil, nil -} diff --git a/domain/consensus/processes/utxodiffmanager/utxodiffmanager.go b/domain/consensus/processes/utxodiffmanager/utxodiffmanager.go index 909fb30c4..7dd753e18 100644 --- a/domain/consensus/processes/utxodiffmanager/utxodiffmanager.go +++ b/domain/consensus/processes/utxodiffmanager/utxodiffmanager.go @@ -18,11 +18,6 @@ func New(utxoDiffStore model.UTXODiffStore) model.UTXODiffManager { } } -// StoreUTXODiff stores the given utxoDiff for the given blockHash -func (u *utxoDiffManager) StoreUTXODiff(blockHash *externalapi.DomainHash, utxoDiff *model.UTXODiff) error { - panic("implement me") -} - // 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) {