From b8cb19732f725154b2ed1e2345d57e49d6c2f2e8 Mon Sep 17 00:00:00 2001 From: AnilChinchawale Date: Tue, 6 Nov 2018 18:05:59 +0530 Subject: [PATCH] lookup txPool before listening to imcoming tx --- eth/backend.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index 6bab13c56a..7f18fe70b7 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -209,9 +209,28 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { return } if eth.etherbase != m2 { - //wait until signTx from m2 comes into txPool + // firstly, look into txPool + pendingMap, err := eth.txPool.Pending() + if err != nil { + log.Error("Fail to get txPool pending", "err", err) + //reset pendingMap + pendingMap = map[common.Address]types.Transactions{} + } + txsSentFromM2 := pendingMap[m2] + if len(txsSentFromM2) > 0 { + for _, tx := range txsSentFromM2 { + if tx.To().String() == common.BlockSigners { + if err := contracts.CreateTransactionSign(chainConfig, eth.txPool, eth.accountManager, block, chainDb); err != nil { + log.Error("Fail to create tx sign for imported block", "error", err) + return + } + return + } + } + } + //then wait until signTx from m2 comes into txPool txCh := make(chan core.TxPreEvent, txChanSize) - eth.txPool.SubscribeTxPreEvent(txCh) + subEvent := eth.txPool.SubscribeTxPreEvent(txCh) G: select { case event := <-txCh: @@ -226,7 +245,7 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { case <-time.After(time.Duration(10) * time.Second): break G } - close(txCh) + subEvent.Unsubscribe() } else if err := contracts.CreateTransactionSign(chainConfig, eth.txPool, eth.accountManager, block, chainDb); err != nil { log.Error("Fail to create tx sign for imported block", "error", err) return