package utils import ( "errors" "strconv" "github.com/imosed/signet/client" "github.com/imosed/signet/data" "github.com/stellar/go/clients/horizonclient" "github.com/stellar/go/protocols/horizon" ) func FindOffer(offerReq horizonclient.OfferRequest, rewardFund *data.RewardFund) (error, bool) { op, err := client.SignetClient.Offers(offerReq) if err != nil { return errors.New("could not get offers"), false } offers := op.Embedded.Records var price float64 var amt float64 if len(offers) == 1 { price, err = strconv.ParseFloat(op.Embedded.Records[0].Price, 64) if err != nil { return errors.New("could not parse single offer price to float"), false } amt, err = strconv.ParseFloat(op.Embedded.Records[0].Amount, 64) if err != nil { return errors.New("could not parse single offer amount to float"), false } rewardFund.Price = price rewardFund.AmountAvailable = amt return nil, true } else if len(offers) > 1 { var maxOffers float64 = 0 var correctOffer horizon.Offer for _, o := range op.Embedded.Records { parsedAmt, err := strconv.ParseFloat(o.Amount, 64) if err != nil { return errors.New("could not parse amount from offer slice to float"), false } if parsedAmt > maxOffers { correctOffer = o maxOffers = parsedAmt } } price, err = strconv.ParseFloat(correctOffer.Price, 64) if err != nil { return errors.New("could not parse correct offer price to float"), false } amt, err = strconv.ParseFloat(correctOffer.Amount, 64) if err != nil { return errors.New("could not parse correct offer amount to float"), false } rewardFund.Price = price rewardFund.AmountAvailable = amt return nil, true } else { return nil, false // no offers shouldn't error } }