code: func (pool *TxPool) addTx(tx *types.Transaction, local bool) error {
  	// Cache sender in transaction before obtaining lock (pool.signer is immutable)
  	types.Sender(pool.signer, tx)
  
  	pool.mu.Lock()
  	defer pool.mu.Unlock()
  
  	// Try to inject the transaction and update any state
  	replace, err := pool.add(tx, local)
  	if err != nil {
  		return err
  	}
  	// If we added a new transaction, run promotion checks and return
  	if !replace {
  		from, _ := types.Sender(pool.signer, tx) // already validated
  		pool.promoteExecutables([]common.Address{from})
  	}
  	return nil
  }
docs: // addTx enqueues a single transaction into the pool if it is valid.