code: func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {
  	// Fetch the transaction we wish to delete
  	tx := pool.all.Get(hash)
  	if tx == nil {
  		return
  	}
  	addr, _ := types.Sender(pool.signer, tx) // already validated during insertion
  
  	// Remove it from the list of known transactions
  	pool.all.Remove(hash)
  	if outofbound {
  		pool.priced.Removed()
  	}
  	// Remove the transaction from the pending lists and reset the account nonce
  	if pending := pool.pending[addr]; pending != nil {
  		if removed, invalids := pending.Remove(tx); removed {
  			// If no more pending transactions are left, remove the list
  			if pending.Empty() {
  				delete(pool.pending, addr)
  				delete(pool.beats, addr)
  			}
  			// Postpone any invalidated transactions
  			for _, tx := range invalids {
  				pool.enqueueTx(tx.Hash(), tx)
  			}
  			// Update the account nonce if needed
  			if nonce := tx.Nonce(); pool.pendingState.GetNonce(addr) > nonce {
  				pool.pendingState.SetNonce(addr, nonce)
  			}
  			return
  		}
  	}
  	// Transaction is in the future queue
  	if future := pool.queue[addr]; future != nil {
  		future.Remove(tx)
  		if future.Empty() {
  			delete(pool.queue, addr)
  		}
  	}
  }
docs: // removeTx removes a single transaction from the queue, moving all subsequent
  // transactions back to the future queue.