code: func (ef *FeeEstimator) ObserveTransaction(t *TxDesc) {
  	ef.mtx.Lock()
  	defer ef.mtx.Unlock()
  
  	// If we haven't seen a block yet we don't know when this one arrived,
  	// so we ignore it.
  	if ef.lastKnownHeight == mining.UnminedHeight {
  		return
  	}
  
  	hash := *t.Tx.Hash()
  	if _, ok := ef.observed[hash]; !ok {
  		size := uint32(GetTxVirtualSize(t.Tx))
  
  		ef.observed[hash] = &observedTransaction{
  			hash:     hash,
  			feeRate:  NewSatoshiPerByte(btcutil.Amount(t.Fee), size),
  			observed: t.Height,
  			mined:    mining.UnminedHeight,
  		}
  	}
  }
docs: // ObserveTransaction is called when a new transaction is observed in the mempool.