[NOD-1538] Implement GetBlockCount.

This commit is contained in:
stasatdaglabs 2020-11-16 17:18:23 +02:00 committed by Svarog
parent 310cf0bb9b
commit 48d8137604
9 changed files with 58 additions and 4 deletions

View File

@ -8,7 +8,10 @@ import (
// HandleGetBlockCount handles the respectively named RPC command
func HandleGetBlockCount(context *rpccontext.Context, _ *router.Router, _ appmessage.Message) (appmessage.Message, error) {
response := &appmessage.GetBlockCountResponseMessage{}
response.Error = appmessage.RPCErrorf("not implemented")
syncInfo, err := context.Domain.Consensus().GetSyncInfo()
if err != nil {
return nil, err
}
response := appmessage.NewGetBlockCountResponseMessage(syncInfo.BlockCount)
return response, nil
}

View File

@ -143,3 +143,15 @@ func (bms *blockHeaderStore) cloneHeader(header *externalapi.DomainBlockHeader)
return bms.deserializeHeader(serialized)
}
func (bms *blockHeaderStore) Count(dbContext model.DBReader) (uint64, error) {
cursor, err := dbContext.Cursor(bucket)
if err != nil {
return 0, err
}
count := uint64(0)
for cursor.Next() {
count++
}
return count, nil
}

View File

@ -143,3 +143,15 @@ func (bms *blockStore) clone(block *externalapi.DomainBlock) (*externalapi.Domai
return bms.deserializeBlock(serialized)
}
func (bms *blockStore) Count(dbContext model.DBReader) (uint64, error) {
cursor, err := dbContext.Cursor(bucket)
if err != nil {
return 0, err
}
count := uint64(0)
for cursor.Next() {
count++
}
return count, nil
}

View File

@ -209,7 +209,8 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, db infrastructuredat
ghostdagDataStore,
blockStatusStore,
blockHeaderStore,
headerTipsStore)
headerTipsStore,
blockStore)
blockBuilder := blockbuilder.New(
dbManager,

View File

@ -36,4 +36,6 @@ func (s SyncState) String() string {
type SyncInfo struct {
State SyncState
IBDRootUTXOBlockHash *DomainHash
HeaderCount uint64
BlockCount uint64
}

View File

@ -11,4 +11,5 @@ type BlockHeaderStore interface {
HasBlockHeader(dbContext DBReader, blockHash *externalapi.DomainHash) (bool, error)
BlockHeaders(dbContext DBReader, blockHashes []*externalapi.DomainHash) ([]*externalapi.DomainBlockHeader, error)
Delete(blockHash *externalapi.DomainHash)
Count(dbContext DBReader) (uint64, error)
}

View File

@ -11,4 +11,5 @@ type BlockStore interface {
HasBlock(dbContext DBReader, blockHash *externalapi.DomainHash) (bool, error)
Blocks(dbContext DBReader, blockHashes []*externalapi.DomainHash) ([]*externalapi.DomainBlock, error)
Delete(blockHash *externalapi.DomainHash)
Count(dbContext DBReader) (uint64, error)
}

View File

@ -25,9 +25,20 @@ func (sm *syncManager) syncInfo() (*externalapi.SyncInfo, error) {
}
}
headerCount, err := sm.getHeaderCount()
if err != nil {
return nil, err
}
blockCount, err := sm.getBlockCount()
if err != nil {
return nil, err
}
return &externalapi.SyncInfo{
State: syncState,
IBDRootUTXOBlockHash: ibdRootUTXOBlockHash,
HeaderCount: headerCount,
BlockCount: blockCount,
}, nil
}
@ -111,3 +122,11 @@ func (sm *syncManager) areHeaderTipsSynced(headerVirtualSelectedParentHash *exte
return timeDifference <= maxTimeDifference, nil
}
func (sm *syncManager) getHeaderCount() (uint64, error) {
return sm.blockHeaderStore.Count(sm.databaseContext)
}
func (sm *syncManager) getBlockCount() (uint64, error) {
return sm.blockStore.Count(sm.databaseContext)
}

View File

@ -20,6 +20,7 @@ type syncManager struct {
blockStatusStore model.BlockStatusStore
blockHeaderStore model.BlockHeaderStore
headerTipsStore model.HeaderTipsStore
blockStore model.BlockStore
}
// New instantiates a new SyncManager
@ -35,7 +36,8 @@ func New(
ghostdagDataStore model.GHOSTDAGDataStore,
blockStatusStore model.BlockStatusStore,
blockHeaderStore model.BlockHeaderStore,
headerTipsStore model.HeaderTipsStore) model.SyncManager {
headerTipsStore model.HeaderTipsStore,
blockStore model.BlockStore) model.SyncManager {
return &syncManager{
databaseContext: databaseContext,
@ -51,6 +53,7 @@ func New(
blockStatusStore: blockStatusStore,
blockHeaderStore: blockHeaderStore,
headerTipsStore: headerTipsStore,
blockStore: blockStore,
}
}