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