diff --git a/domain/consensus/consensus.go b/domain/consensus/consensus.go index 3a99dccf0..edb1ae39d 100644 --- a/domain/consensus/consensus.go +++ b/domain/consensus/consensus.go @@ -10,6 +10,18 @@ type Consensus interface { BuildBlock(coinbaseData *externalapi.DomainCoinbaseData, transactions []*externalapi.DomainTransaction) (*externalapi.DomainBlock, error) ValidateAndInsertBlock(block *externalapi.DomainBlock) error ValidateTransactionAndPopulateWithConsensusData(transaction *externalapi.DomainTransaction) error + + GetBlock(blockHash *externalapi.DomainHash) (*externalapi.DomainBlock, error) + GetBlockHeader(blockHash *externalapi.DomainHash) (*externalapi.DomainBlockHeader, error) + GetBlockInfo(blockHash *externalapi.DomainHash) (*externalapi.BlockInfo, error) + + GetHashesBetween(lowHigh, highHash *externalapi.DomainHash) ([]*externalapi.DomainHash, error) + GetMissingBlockBodyHashes(highHash *externalapi.DomainHash) ([]*externalapi.DomainHash, error) + GetPruningPointUTXOSet() ([]byte, error) + SetPruningPointUTXOSet(pruningPoint *externalapi.DomainHash, serializedUTXOSet []byte) error + GetVirtualSelectedParent() (*externalapi.DomainBlock, error) + CreateBlockLocator(lowHigh, highHash *externalapi.DomainHash) (*externalapi.BlockLocator, error) + FindNextBlockLocatorBoundaries(blockLocator *externalapi.BlockLocator) (lowHigh, highHash *externalapi.DomainHash, err error) } type consensus struct { @@ -57,3 +69,43 @@ func validateTransactionInContextAndPopulateMassAndFeeSelectedParentMedianTime() func validateTransactionInContextAndPopulateMassAndFeeVirtualBlockHash() *externalapi.DomainHash { panic("unimplemented") } + +func (s *consensus) GetBlock(blockHash *externalapi.DomainHash) (*externalapi.DomainBlock, error) { + panic("implement me") +} + +func (s *consensus) GetBlockHeader(blockHash *externalapi.DomainHash) (*externalapi.DomainBlockHeader, error) { + panic("implement me") +} + +func (s *consensus) GetBlockInfo(blockHash *externalapi.DomainHash) (*externalapi.BlockInfo, error) { + panic("implement me") +} + +func (s *consensus) GetHashesBetween(lowHigh, highHash *externalapi.DomainHash) ([]*externalapi.DomainHash, error) { + panic("implement me") +} + +func (s *consensus) GetMissingBlockBodyHashes(highHash *externalapi.DomainHash) ([]*externalapi.DomainHash, error) { + panic("implement me") +} + +func (s *consensus) GetPruningPointUTXOSet() ([]byte, error) { + panic("implement me") +} + +func (s *consensus) SetPruningPointUTXOSet(pruningPoint *externalapi.DomainHash, serializedUTXOSet []byte) error { + panic("implement me") +} + +func (s *consensus) GetVirtualSelectedParent() (*externalapi.DomainBlock, error) { + panic("implement me") +} + +func (s *consensus) CreateBlockLocator(lowHigh, highHash *externalapi.DomainHash) (*externalapi.BlockLocator, error) { + panic("implement me") +} + +func (s *consensus) FindNextBlockLocatorBoundaries(blockLocator *externalapi.BlockLocator) (lowHigh, highHash *externalapi.DomainHash, err error) { + panic("implement me") +} diff --git a/domain/consensus/database/serialization/blockstatus.go b/domain/consensus/database/serialization/blockstatus.go index 16522380e..5dfdbb634 100644 --- a/domain/consensus/database/serialization/blockstatus.go +++ b/domain/consensus/database/serialization/blockstatus.go @@ -1,15 +1,17 @@ package serialization -import "github.com/kaspanet/kaspad/domain/consensus/model" +import ( + "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" +) // DomainBlockStatusToDbBlockStatus converts model.BlockStatus to DbBlockStatus -func DomainBlockStatusToDbBlockStatus(domainBlockStatus model.BlockStatus) *DbBlockStatus { +func DomainBlockStatusToDbBlockStatus(domainBlockStatus externalapi.BlockStatus) *DbBlockStatus { return &DbBlockStatus{ Status: uint32(domainBlockStatus), } } // DbBlockStatusToDomainBlockStatus converts DbBlockStatus to model.BlockStatus -func DbBlockStatusToDomainBlockStatus(dbBlockStatus *DbBlockStatus) model.BlockStatus { - return model.BlockStatus(dbBlockStatus.Status) +func DbBlockStatusToDomainBlockStatus(dbBlockStatus *DbBlockStatus) externalapi.BlockStatus { + return externalapi.BlockStatus(dbBlockStatus.Status) } diff --git a/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go b/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go index 7dc718640..5a3f3fb18 100644 --- a/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go +++ b/domain/consensus/datastructures/blockstatusstore/blockstatusstore.go @@ -12,18 +12,18 @@ var bucket = dbkeys.MakeBucket([]byte("block-statuses")) // blockStatusStore represents a store of BlockStatuses type blockStatusStore struct { - staging map[externalapi.DomainHash]model.BlockStatus + staging map[externalapi.DomainHash]externalapi.BlockStatus } // New instantiates a new BlockStatusStore func New() model.BlockStatusStore { return &blockStatusStore{ - staging: make(map[externalapi.DomainHash]model.BlockStatus), + staging: make(map[externalapi.DomainHash]externalapi.BlockStatus), } } // Stage stages the given blockStatus for the given blockHash -func (bss *blockStatusStore) Stage(blockHash *externalapi.DomainHash, blockStatus model.BlockStatus) { +func (bss *blockStatusStore) Stage(blockHash *externalapi.DomainHash, blockStatus externalapi.BlockStatus) { bss.staging[*blockHash] = blockStatus } @@ -32,7 +32,7 @@ func (bss *blockStatusStore) IsStaged() bool { } func (bss *blockStatusStore) Discard() { - bss.staging = make(map[externalapi.DomainHash]model.BlockStatus) + bss.staging = make(map[externalapi.DomainHash]externalapi.BlockStatus) } func (bss *blockStatusStore) Commit(dbTx model.DBTransaction) error { @@ -52,7 +52,7 @@ func (bss *blockStatusStore) Commit(dbTx model.DBTransaction) error { } // Get gets the blockStatus associated with the given blockHash -func (bss *blockStatusStore) Get(dbContext model.DBReader, blockHash *externalapi.DomainHash) (model.BlockStatus, error) { +func (bss *blockStatusStore) Get(dbContext model.DBReader, blockHash *externalapi.DomainHash) (externalapi.BlockStatus, error) { if status, ok := bss.staging[*blockHash]; ok { return status, nil } @@ -79,12 +79,12 @@ func (bss *blockStatusStore) Exists(dbContext model.DBReader, blockHash *externa return exists, nil } -func (bss *blockStatusStore) serializeBlockStatus(status model.BlockStatus) ([]byte, error) { +func (bss *blockStatusStore) serializeBlockStatus(status externalapi.BlockStatus) ([]byte, error) { dbBlockStatus := serialization.DomainBlockStatusToDbBlockStatus(status) return proto.Marshal(dbBlockStatus) } -func (bss *blockStatusStore) deserializeHeader(statusBytes []byte) (model.BlockStatus, error) { +func (bss *blockStatusStore) deserializeHeader(statusBytes []byte) (externalapi.BlockStatus, error) { dbBlockStatus := &serialization.DbBlockStatus{} err := proto.Unmarshal(statusBytes, dbBlockStatus) if err != nil { diff --git a/domain/consensus/model/externalapi/blockinfo.go b/domain/consensus/model/externalapi/blockinfo.go new file mode 100644 index 000000000..1b7ea75a5 --- /dev/null +++ b/domain/consensus/model/externalapi/blockinfo.go @@ -0,0 +1,9 @@ +package externalapi + +// BlockInfo contains various information about a specific block +type BlockInfo struct { + Exists bool + BlockStatus *BlockStatus + + IsHeaderInPruningPointFutureAndVirtualPast bool +} diff --git a/domain/consensus/model/externalapi/blocklocator.go b/domain/consensus/model/externalapi/blocklocator.go new file mode 100644 index 000000000..a1e2c6972 --- /dev/null +++ b/domain/consensus/model/externalapi/blocklocator.go @@ -0,0 +1,6 @@ +package externalapi + +// BlockLocator is a type used in the process of locating +// a specific block in a remote DAG +type BlockLocator struct { +} diff --git a/domain/consensus/model/blockstatus.go b/domain/consensus/model/externalapi/blockstatus.go similarity index 97% rename from domain/consensus/model/blockstatus.go rename to domain/consensus/model/externalapi/blockstatus.go index 284e48b74..8fb0db67f 100644 --- a/domain/consensus/model/blockstatus.go +++ b/domain/consensus/model/externalapi/blockstatus.go @@ -1,4 +1,4 @@ -package model +package externalapi // BlockStatus represents the validation state of the block. type BlockStatus byte diff --git a/domain/consensus/model/interface_datastructures_blockstatusstore.go b/domain/consensus/model/interface_datastructures_blockstatusstore.go index e7fe0c63b..6450faa2a 100644 --- a/domain/consensus/model/interface_datastructures_blockstatusstore.go +++ b/domain/consensus/model/interface_datastructures_blockstatusstore.go @@ -5,8 +5,8 @@ import "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" // BlockStatusStore represents a store of BlockStatuses type BlockStatusStore interface { Store - Stage(blockHash *externalapi.DomainHash, blockStatus BlockStatus) + Stage(blockHash *externalapi.DomainHash, blockStatus externalapi.BlockStatus) IsStaged() bool - Get(dbContext DBReader, blockHash *externalapi.DomainHash) (BlockStatus, error) + Get(dbContext DBReader, blockHash *externalapi.DomainHash) (externalapi.BlockStatus, error) Exists(dbContext DBReader, blockHash *externalapi.DomainHash) (bool, error) } diff --git a/domain/consensus/processes/blockprocessor/validateandinsertblock.go b/domain/consensus/processes/blockprocessor/validateandinsertblock.go index 9446a04a8..e1f0fb661 100644 --- a/domain/consensus/processes/blockprocessor/validateandinsertblock.go +++ b/domain/consensus/processes/blockprocessor/validateandinsertblock.go @@ -1,7 +1,6 @@ package blockprocessor import ( - "github.com/kaspanet/kaspad/domain/consensus/model" "github.com/kaspanet/kaspad/domain/consensus/model/externalapi" "github.com/kaspanet/kaspad/domain/consensus/ruleerrors" "github.com/pkg/errors" @@ -45,7 +44,7 @@ func (bp *blockProcessor) validateBlock(block *externalapi.DomainBlock) error { if err != nil { if errors.As(err, &ruleerrors.RuleError{}) { bp.discardAllChanges() - bp.blockStatusStore.Stage(block.Hash, model.StatusInvalid) + bp.blockStatusStore.Stage(block.Hash, externalapi.StatusInvalid) commitErr := bp.commitAllChanges() if commitErr != nil { return commitErr