|
|
@@ -781,16 +781,22 @@ func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error {
|
|
|
knownTxMeter.Mark(1)
|
|
|
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
|
|
|
news = append(news, tx)
|
|
|
}
|
|
|
if len(news) == 0 {
|
|
|
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
|
|
|
pool.mu.Lock()
|
|
|
newErrs, dirtyAddrs := pool.addTxsLocked(news, local)
|