core: cache tx signature before obtaining lock (#19351)

This commit is contained in:
Daniel Liu 2024-05-10 10:46:08 +08:00
parent c5b22fbc32
commit 65baaaaf80

View file

@ -970,8 +970,9 @@ func (pool *TxPool) AddRemotes(txs []*types.Transaction) []error {
// addTx enqueues a single transaction into the pool if it is valid.
func (pool *TxPool) addTx(tx *types.Transaction, local bool) error {
tx.CacheHash()
types.CacheSigner(pool.signer, tx)
// Cache sender in transaction before obtaining lock (pool.signer is immutable)
types.Sender(pool.signer, tx)
pool.mu.Lock()
defer pool.mu.Unlock()
@ -990,6 +991,10 @@ func (pool *TxPool) addTx(tx *types.Transaction, local bool) error {
// addTxs attempts to queue a batch of transactions if they are valid.
func (pool *TxPool) addTxs(txs []*types.Transaction, local bool) []error {
// Cache senders in transactions before obtaining lock (pool.signer is immutable)
for _, tx := range txs {
types.Sender(pool.signer, tx)
}
pool.mu.Lock()
defer pool.mu.Unlock()