Merge pull request #21170 from duanhao0814/fix-dup-ecrecover
core: filter out txs with invalid signatures as soon as possible
This commit is contained in:
commit
eb9d7d15ec
@ -781,16 +781,22 @@ func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error {
|
|||||||
knownTxMeter.Mark(1)
|
knownTxMeter.Mark(1)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// Exclude transactions with invalid signatures as soon as
|
||||||
|
// possible and cache senders in transactions before
|
||||||
|
// obtaining lock
|
||||||
|
_, err := types.Sender(pool.signer, tx)
|
||||||
|
if err != nil {
|
||||||
|
errs[i] = ErrInvalidSender
|
||||||
|
invalidTxMeter.Mark(1)
|
||||||
|
continue
|
||||||
|
}
|
||||||
// Accumulate all unknown transactions for deeper processing
|
// Accumulate all unknown transactions for deeper processing
|
||||||
news = append(news, tx)
|
news = append(news, tx)
|
||||||
}
|
}
|
||||||
if len(news) == 0 {
|
if len(news) == 0 {
|
||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
// Cache senders in transactions before obtaining lock (pool.signer is immutable)
|
|
||||||
for _, tx := range news {
|
|
||||||
types.Sender(pool.signer, tx)
|
|
||||||
}
|
|
||||||
// Process all the new transaction and merge any errors into the original slice
|
// Process all the new transaction and merge any errors into the original slice
|
||||||
pool.mu.Lock()
|
pool.mu.Lock()
|
||||||
newErrs, dirtyAddrs := pool.addTxsLocked(news, local)
|
newErrs, dirtyAddrs := pool.addTxsLocked(news, local)
|
||||||
|
Loading…
Reference in New Issue
Block a user