code: func (s *ChainService) GetUtxo(options ...RescanOption) (*SpendReport, error) {
  	// Before we start we'll fetch the set of default options, and apply
  	// any user specified options in a functional manner.
  	ro := defaultRescanOptions()
  	ro.startBlock = &waddrmgr.BlockStamp{
  		Hash:   *s.chainParams.GenesisHash,
  		Height: 0,
  	}
  	for _, option := range options {
  		option(ro)
  	}
  
  	// As this is meant to fetch UTXO's, the options MUST specify exactly
  	// one outpoint.
  	if len(ro.watchInputs) != 1 {
  		return nil, fmt.Errorf("must pass exactly one OutPoint")
  	}
  
  	req, err := s.utxoScanner.Enqueue(
  		&ro.watchInputs[0], uint32(ro.startBlock.Height),
  	)
  	if err != nil {
  		return nil, err
  	}
  
  	// Wait for the result to be delivered by the rescan or until a shutdown
  	// is signaled.
  	report, err := req.Result(ro.quit)
  	if err != nil {
  		log.Debugf("Error finding spends for %s: %v",
  			ro.watchInputs[0].OutPoint.String(), err)
  		return nil, err
  	}
  
  	return report, nil
  }
docs: // GetUtxo gets the appropriate TxOut or errors if it's spent. The option
  // WatchOutPoints (with a single outpoint) is required. StartBlock can be used
  // to give a hint about which block the transaction is in, and TxIdx can be
  // used to give a hint of which transaction in the block matches it (coinbase
  // is 0, first normal transaction is 1, etc.).
  //
  // TODO(roasbeef): WTB utxo-commitments