code: func (b *BlockChain) FetchUtxoEntry(outpoint wire.OutPoint) (*UtxoEntry, error) {
  	b.chainLock.RLock()
  	defer b.chainLock.RUnlock()
  
  	var entry *UtxoEntry
  	err := b.db.View(func(dbTx database.Tx) error {
  		var err error
  		entry, err = dbFetchUtxoEntry(dbTx, outpoint)
  		return err
  	})
  	if err != nil {
  		return nil, err
  	}
  
  	return entry, nil
  }
docs: // FetchUtxoEntry loads and returns the requested unspent transaction output
  // from the point of view of the end of the main chain.
  //
  // NOTE: Requesting an output for which there is no data will NOT return an
  // error.  Instead both the entry and the error will be nil.  This is done to
  // allow pruning of spent transaction outputs.  In practice this means the
  // caller must check if the returned entry is nil before invoking methods on it.
  //
  // This function is safe for concurrent access however the returned entry (if
  // any) is NOT.