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
This commit is contained in:
Martin Holst Swende 2019-06-19 13:09:28 +02:00 committed by Péter Szilágyi
parent 2b303e7d62
commit 3271a5afa0

View File

@ -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.