From 2854d91688b824ac3e0e9aa6425a9660ea9735b4 Mon Sep 17 00:00:00 2001 From: stasatdaglabs <39559713+stasatdaglabs@users.noreply.github.com> Date: Wed, 31 Mar 2021 10:28:02 +0300 Subject: [PATCH] Add missing call to broadcastTransactionsAfterBlockAdded (#1639) * Add missing call to broadcastTransactionsAfterBlockAdded. * Fix a comment. * Fix a comment some more. Co-authored-by: Ori Newman --- app/protocol/flowcontext/blocks.go | 10 ++++++---- app/protocol/flowcontext/transactions.go | 15 +++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/protocol/flowcontext/blocks.go b/app/protocol/flowcontext/blocks.go index 15a74848e..c875501b2 100644 --- a/app/protocol/flowcontext/blocks.go +++ b/app/protocol/flowcontext/blocks.go @@ -37,12 +37,14 @@ func (f *FlowContext) OnNewBlock(block *externalapi.DomainBlock, newBlockInsertionResults = append(newBlockInsertionResults, unorphaningResult.blockInsertionResult) } + allAcceptedTransactions := make([]*externalapi.DomainTransaction, 0) for i, newBlock := range newBlocks { log.Debugf("OnNewBlock: passing block %s transactions to mining manager", hash) - _, err = f.Domain().MiningManager().HandleNewBlockTransactions(newBlock.Transactions) + acceptedTransactions, err := f.Domain().MiningManager().HandleNewBlockTransactions(newBlock.Transactions) if err != nil { return err } + allAcceptedTransactions = append(allAcceptedTransactions, acceptedTransactions...) if f.onBlockAddedToDAGHandler != nil { log.Debugf("OnNewBlock: calling f.onBlockAddedToDAGHandler for block %s", hash) @@ -54,7 +56,7 @@ func (f *FlowContext) OnNewBlock(block *externalapi.DomainBlock, } } - return nil + return f.broadcastTransactionsAfterBlockAdded(newBlocks, allAcceptedTransactions) } // OnPruningPointUTXOSetOverride calls the handler function whenever the UTXO set @@ -67,9 +69,9 @@ func (f *FlowContext) OnPruningPointUTXOSetOverride() error { } func (f *FlowContext) broadcastTransactionsAfterBlockAdded( - block *externalapi.DomainBlock, transactionsAcceptedToMempool []*externalapi.DomainTransaction) error { + addedBlocks []*externalapi.DomainBlock, transactionsAcceptedToMempool []*externalapi.DomainTransaction) error { - f.updateTransactionsToRebroadcast(block) + f.updateTransactionsToRebroadcast(addedBlocks) // Don't relay transactions when in IBD. if f.IsIBDRunning() { diff --git a/app/protocol/flowcontext/transactions.go b/app/protocol/flowcontext/transactions.go index 3e891773f..9f87431d7 100644 --- a/app/protocol/flowcontext/transactions.go +++ b/app/protocol/flowcontext/transactions.go @@ -25,14 +25,17 @@ func (f *FlowContext) AddTransaction(tx *externalapi.DomainTransaction) error { return f.Broadcast(inv) } -func (f *FlowContext) updateTransactionsToRebroadcast(block *externalapi.DomainBlock) { +func (f *FlowContext) updateTransactionsToRebroadcast(addedBlocks []*externalapi.DomainBlock) { f.transactionsToRebroadcastLock.Lock() defer f.transactionsToRebroadcastLock.Unlock() - // Note: if the block is red, its transactions won't be rebroadcasted - // anymore, although they are not included in the UTXO set. - // This is probably ok, since red blocks are quite rare. - for _, tx := range block.Transactions { - delete(f.transactionsToRebroadcast, *consensushashing.TransactionID(tx)) + + for _, block := range addedBlocks { + // Note: if a transaction is included in the DAG but not accepted, + // it won't be rebroadcast anymore, although it is not included in + // the UTXO set + for _, tx := range block.Transactions { + delete(f.transactionsToRebroadcast, *consensushashing.TransactionID(tx)) + } } }