code: func (api *API) IsPromotable(tailTxHash Hash) (bool, error) {
  	var err1, err2 error
  	var isConsistent bool
  	var trytes []Trytes
  	wg := sync.WaitGroup{}
  	wg.Add(2)
  	go func() {
  		defer wg.Done()
  		isConsistent, _, err1 = api.CheckConsistency(tailTxHash)
  	}()
  
  	go func() {
  		defer wg.Done()
  		trytes, err2 = api.GetTrytes(tailTxHash)
  	}()
  
  	wg.Wait()
  	if err := firstNonNilErr(err1, err2); err != nil {
  		return false, err
  	}
  
  	tx, err := transaction.AsTransactionObject(trytes[0])
  	if err != nil {
  		return false, err
  	}
  
  	return isConsistent && isAboveMaxDepth(tx.AttachmentTimestamp), nil
  }
docs: // IsPromotable checks if a transaction is promotable by calling the checkConsistency IRI API command and
  // verifying that attachmentTimestamp is above a lower bound. Lower bound is calculated based on the number of milestones issued
  // since transaction attachment.