mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00
[NOD-1497] Add additional methods to consensus external API (#989)
* [NOD-1497] Add missing APIs. * [NOD-1497] Rename some new APIs. * [NOD-1497] Add fields to BlockInfo. * [NOD-1497] Add comments over BlockInfo and BlockLocator. * [NOD-1497] Rename GetSelectedParent to GetVirtualSelectedParent. * [NOD-1497] Add SetPruningPointUTXOSet. * [NOD-1497] Rename GetHashesAbovePruningPoint to GetMissingBlockBodyHashes. * [NOD-1497] Fix rename error.
This commit is contained in:
parent
87ad9dfc59
commit
23cccb6396
@ -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")
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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 {
|
||||
|
9
domain/consensus/model/externalapi/blockinfo.go
Normal file
9
domain/consensus/model/externalapi/blockinfo.go
Normal file
@ -0,0 +1,9 @@
|
||||
package externalapi
|
||||
|
||||
// BlockInfo contains various information about a specific block
|
||||
type BlockInfo struct {
|
||||
Exists bool
|
||||
BlockStatus *BlockStatus
|
||||
|
||||
IsHeaderInPruningPointFutureAndVirtualPast bool
|
||||
}
|
6
domain/consensus/model/externalapi/blocklocator.go
Normal file
6
domain/consensus/model/externalapi/blocklocator.go
Normal file
@ -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 {
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package model
|
||||
package externalapi
|
||||
|
||||
// BlockStatus represents the validation state of the block.
|
||||
type BlockStatus byte
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user