Skip to content

Commit a9783fd

Browse files
andy-shi88capt4ce
andauthored
782 missing blocks fix (#783)
* #782 validate block in scanBlockPool thread * #782 fix wrong function signature causing interface not implemented * #782 move chain lock to beginning of ScanBlockPool function Co-authored-by: Ahmad Ali Abdilah <[email protected]>
1 parent 7bb216e commit a9783fd

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

core/service/blockMainService.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ type (
4040
timestamp, totalAmount, totalFee, totalCoinBase int64,
4141
transactions []*model.Transaction,
4242
blockReceipts []*model.PublishedReceipt,
43-
payloadHash []byte,
44-
payloadLength uint32,
4543
secretPhrase string,
4644
) (*model.Block, error)
4745
RemoveMempoolTransactions(transactions []*model.Transaction) error
@@ -639,6 +637,8 @@ func (bs *BlockService) PushBlock(previousBlock, block *model.Block, broadcast,
639637

640638
// ScanBlockPool scan the whole block pool to check if there are any block that's legal to be pushed yet
641639
func (bs *BlockService) ScanBlockPool() error {
640+
bs.ChainWriteLock(constant.BlockchainStatusReceivingBlock)
641+
defer bs.ChainWriteUnlock(constant.BlockchainStatusReceivingBlock)
642642
previousBlock, err := bs.GetLastBlock()
643643
if err != nil {
644644
return err
@@ -648,13 +648,16 @@ func (bs *BlockService) ScanBlockPool() error {
648648
for index, block := range blocks {
649649
err = bs.BlocksmithStrategy.CanPersistBlock(index, int64(len(blocksmithsMap)), previousBlock)
650650
if err == nil {
651-
err := func(block *model.Block) error {
652-
bs.ChainWriteLock(constant.BlockchainStatusReceivingBlock)
653-
defer bs.ChainWriteUnlock(constant.BlockchainStatusReceivingBlock)
654-
err := bs.PushBlock(previousBlock, block, true, true)
655-
return err
656-
}(block)
651+
err := bs.ValidateBlock(block, previousBlock)
652+
if err != nil {
653+
bs.Logger.Warnf("ScanBlockPool:blockValidationFail: %v\n", err)
654+
return blocker.NewBlocker(
655+
blocker.BlockErr, "ScanBlockPool:ValidateBlockFail",
656+
)
657+
}
658+
err = bs.PushBlock(previousBlock, block, true, true)
657659
if err != nil {
660+
bs.Logger.Warnf("ScanBlockPool:PushBlockFail: %v\n", err)
658661
return blocker.NewBlocker(
659662
blocker.BlockErr, "ScanBlockPool:PushBlockFail",
660663
)

0 commit comments

Comments
 (0)