ex_power.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package exchange
  2. import (
  3. "fmt"
  4. "github.com/shopspring/decimal"
  5. "time"
  6. )
  7. type ExPower struct {
  8. expr int64
  9. power decimal.Decimal
  10. }
  11. var exPower = &ExPower{
  12. expr: 0,
  13. power: decimal.Zero,
  14. }
  15. var totalPower = decimal.NewFromFloat(21 * 10000 * 1000)
  16. var hisProduct = decimal.NewFromFloat(28080000)
  17. type ExPowerResp struct {
  18. Code int `json:"code"`
  19. Msg string `json:"msg"`
  20. Time int `json:"time"`
  21. Data string `json:"data"`
  22. }
  23. func GetExPower() decimal.Decimal {
  24. nowProduct := exPower.power
  25. if exPower.expr < time.Now().Unix() {
  26. nowProduct = lastPower()
  27. }
  28. lessPower := totalPower.Sub(nowProduct)
  29. if lessPower.LessThanOrEqual(decimal.Zero) || lessPower.GreaterThanOrEqual(totalPower.Sub(hisProduct)) {
  30. return totalPower.Sub(hisProduct)
  31. }
  32. return lessPower
  33. }
  34. func lastPower() decimal.Decimal {
  35. url := fmt.Sprintf("https://openapi.aichash.xyz/openapi/v1/server/wholeNetwork")
  36. resp, err := get[ExPowerResp](url)
  37. if err != nil {
  38. return exPower.power
  39. }
  40. if resp.Code == 200 {
  41. power, err := decimal.NewFromString(resp.Data)
  42. if err != nil {
  43. return exPower.power
  44. } else {
  45. setLastPower(power)
  46. }
  47. }
  48. return exPower.power
  49. }
  50. func setLastPower(power decimal.Decimal) {
  51. exPower.expr = time.Now().Unix() + 3600
  52. exPower.power = power
  53. }