The backend for the project formerly known as signet, now known as beignet.
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

offers.go 1.7 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package utils
  2. import (
  3. "errors"
  4. "strconv"
  5. "github.com/imosed/signet/client"
  6. "github.com/imosed/signet/data"
  7. "github.com/stellar/go/clients/horizonclient"
  8. "github.com/stellar/go/protocols/horizon"
  9. )
  10. func FindOffer(offerReq horizonclient.OfferRequest, rewardFund *data.RewardFund) (error, bool) {
  11. op, err := client.SignetClient.Offers(offerReq)
  12. if err != nil {
  13. return errors.New("could not get offers"), false
  14. }
  15. offers := op.Embedded.Records
  16. var price float64
  17. var amt float64
  18. if len(offers) == 1 {
  19. price, err = strconv.ParseFloat(op.Embedded.Records[0].Price, 64)
  20. if err != nil {
  21. return errors.New("could not parse single offer price to float"), false
  22. }
  23. amt, err = strconv.ParseFloat(op.Embedded.Records[0].Amount, 64)
  24. if err != nil {
  25. return errors.New("could not parse single offer amount to float"), false
  26. }
  27. rewardFund.Price = price
  28. rewardFund.AmountAvailable = amt
  29. return nil, true
  30. } else if len(offers) > 1 {
  31. var maxOffers float64 = 0
  32. var correctOffer horizon.Offer
  33. for _, o := range op.Embedded.Records {
  34. parsedAmt, err := strconv.ParseFloat(o.Amount, 64)
  35. if err != nil {
  36. return errors.New("could not parse amount from offer slice to float"), false
  37. }
  38. if parsedAmt > maxOffers {
  39. correctOffer = o
  40. maxOffers = parsedAmt
  41. }
  42. }
  43. price, err = strconv.ParseFloat(correctOffer.Price, 64)
  44. if err != nil {
  45. return errors.New("could not parse correct offer price to float"), false
  46. }
  47. amt, err = strconv.ParseFloat(correctOffer.Amount, 64)
  48. if err != nil {
  49. return errors.New("could not parse correct offer amount to float"), false
  50. }
  51. rewardFund.Price = price
  52. rewardFund.AmountAvailable = amt
  53. return nil, true
  54. } else {
  55. return nil, false // no offers shouldn't error
  56. }
  57. }