mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00
[NOD-1538] Implement GetBlockCount.
This commit is contained in:
parent
310cf0bb9b
commit
48d8137604
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -209,7 +209,8 @@ func (f *factory) NewConsensus(dagParams *dagconfig.Params, db infrastructuredat
|
||||
ghostdagDataStore,
|
||||
blockStatusStore,
|
||||
blockHeaderStore,
|
||||
headerTipsStore)
|
||||
headerTipsStore,
|
||||
blockStore)
|
||||
|
||||
blockBuilder := blockbuilder.New(
|
||||
dbManager,
|
||||
|
@ -36,4 +36,6 @@ func (s SyncState) String() string {
|
||||
type SyncInfo struct {
|
||||
State SyncState
|
||||
IBDRootUTXOBlockHash *DomainHash
|
||||
HeaderCount uint64
|
||||
BlockCount uint64
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user