From 3271a5afa0b3a8d65357347db65b45ddb91c5bcd Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Wed, 19 Jun 2019 13:09:28 +0200 Subject: [PATCH] miner: don't update pending state when no transactions are added (#19734) * miner: don't update pending state when no transactions are added * miner: avoid transaction processing when pending block is already full --- miner/worker.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index 64ac21ccd..4a9528c39 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -453,6 +453,10 @@ func (w *worker) mainLoop() { // already included in the current mining block. These transactions will // be automatically eliminated. if !w.isRunning() && w.current != nil { + // If block is already full, abort + if gp := w.current.gasPool; gp != nil && gp.Gas() < params.TxGas { + continue + } w.mu.RLock() coinbase := w.coinbase w.mu.RUnlock() @@ -463,8 +467,13 @@ func (w *worker) mainLoop() { txs[acc] = append(txs[acc], tx) } txset := types.NewTransactionsByPriceAndNonce(w.current.signer, txs) + tcount := w.current.tcount w.commitTransactions(txset, coinbase, nil) - w.updateSnapshot() + // Only update the snapshot if any new transactons were added + // to the pending block + if tcount != w.current.tcount { + w.updateSnapshot() + } } else { // If clique is running in dev mode(period is 0), disable // advance sealing here.