Unite multiple GetBlockAcceptanceData consensus calls to one (#2074)

* Unite multiple `GetBlockAcceptanceData` consensus calls to one

* Variable rename
This commit is contained in:
Michael Sutton 2022-06-01 12:19:21 +03:00 committed by GitHub
parent 5cea285960
commit d50ad0667c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 5 deletions

View File

@ -40,16 +40,18 @@ func (ctx *Context) getAndConvertAcceptedTransactionIDs(selectedParentChainChang
acceptedTransactionIDs := make([]*appmessage.AcceptedTransactionIDs, len(selectedParentChainChanges.Added)) acceptedTransactionIDs := make([]*appmessage.AcceptedTransactionIDs, len(selectedParentChainChanges.Added))
chainBlocksAcceptanceData, err := ctx.Domain.Consensus().GetBlocksAcceptanceData(selectedParentChainChanges.Added)
if err != nil {
return nil, err
}
for i, addedChainBlock := range selectedParentChainChanges.Added { for i, addedChainBlock := range selectedParentChainChanges.Added {
blockAcceptanceData, err := ctx.Domain.Consensus().GetBlockAcceptanceData(addedChainBlock) chainBlockAcceptanceData := chainBlocksAcceptanceData[i]
if err != nil {
return nil, err
}
acceptedTransactionIDs[i] = &appmessage.AcceptedTransactionIDs{ acceptedTransactionIDs[i] = &appmessage.AcceptedTransactionIDs{
AcceptingBlockHash: addedChainBlock.String(), AcceptingBlockHash: addedChainBlock.String(),
AcceptedTransactionIDs: nil, AcceptedTransactionIDs: nil,
} }
for _, blockAcceptanceData := range blockAcceptanceData { for _, blockAcceptanceData := range chainBlockAcceptanceData {
for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData { for _, transactionAcceptanceData := range blockAcceptanceData.TransactionAcceptanceData {
if transactionAcceptanceData.IsAccepted { if transactionAcceptanceData.IsAccepted {
acceptedTransactionIDs[i].AcceptedTransactionIDs = acceptedTransactionIDs[i].AcceptedTransactionIDs =

View File

@ -426,6 +426,30 @@ func (s *consensus) GetBlockAcceptanceData(blockHash *externalapi.DomainHash) (e
return s.acceptanceDataStore.Get(s.databaseContext, stagingArea, blockHash) return s.acceptanceDataStore.Get(s.databaseContext, stagingArea, blockHash)
} }
func (s *consensus) GetBlocksAcceptanceData(blockHashes []*externalapi.DomainHash) ([]externalapi.AcceptanceData, error) {
s.lock.Lock()
defer s.lock.Unlock()
stagingArea := model.NewStagingArea()
blocksAcceptanceData := make([]externalapi.AcceptanceData, len(blockHashes))
for i, blockHash := range blockHashes {
err := s.validateBlockHashExists(stagingArea, blockHash)
if err != nil {
return nil, err
}
acceptanceData, err := s.acceptanceDataStore.Get(s.databaseContext, stagingArea, blockHash)
if err != nil {
return nil, err
}
blocksAcceptanceData[i] = acceptanceData
}
return blocksAcceptanceData, nil
}
func (s *consensus) GetHashesBetween(lowHash, highHash *externalapi.DomainHash, maxBlocks uint64) ( func (s *consensus) GetHashesBetween(lowHash, highHash *externalapi.DomainHash, maxBlocks uint64) (
hashes []*externalapi.DomainHash, actualHighHash *externalapi.DomainHash, err error) { hashes []*externalapi.DomainHash, actualHighHash *externalapi.DomainHash, err error) {

View File

@ -19,6 +19,7 @@ type Consensus interface {
GetBlockInfo(blockHash *DomainHash) (*BlockInfo, error) GetBlockInfo(blockHash *DomainHash) (*BlockInfo, error)
GetBlockRelations(blockHash *DomainHash) (parents []*DomainHash, children []*DomainHash, err error) GetBlockRelations(blockHash *DomainHash) (parents []*DomainHash, children []*DomainHash, err error)
GetBlockAcceptanceData(blockHash *DomainHash) (AcceptanceData, error) GetBlockAcceptanceData(blockHash *DomainHash) (AcceptanceData, error)
GetBlocksAcceptanceData(blockHashes []*DomainHash) ([]AcceptanceData, error)
GetHashesBetween(lowHash, highHash *DomainHash, maxBlocks uint64) (hashes []*DomainHash, actualHighHash *DomainHash, err error) GetHashesBetween(lowHash, highHash *DomainHash, maxBlocks uint64) (hashes []*DomainHash, actualHighHash *DomainHash, err error)
GetAnticone(blockHash, contextHash *DomainHash, maxBlocks uint64) (hashes []*DomainHash, err error) GetAnticone(blockHash, contextHash *DomainHash, maxBlocks uint64) (hashes []*DomainHash, err error)