From 80cefd3e5573ba8bcd3cd233a9d972d5f355669d Mon Sep 17 00:00:00 2001 From: Tuna Date: Tue, 9 Oct 2018 15:33:58 +0700 Subject: [PATCH] lookup txPool before listening to imcoming tx --- eth/backend.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index ff2cbf467f..fe7d386e5a 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: @@ -221,12 +240,13 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { log.Error("Fail to create tx sign for imported block", "error", err) return } + return } //timeout 10s 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