defi.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package defi
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "net/http"
  6. "net/url"
  7. "os"
  8. "strconv"
  9. "strings"
  10. "birdcall/internal/library/birdeye"
  11. "github.com/gogf/gf/v2/util/gconv"
  12. )
  13. type Defi struct{}
  14. // 获取当前支持的网络
  15. // @return *birdeye.CommonRes
  16. // @return error
  17. func (d *Defi) Support() (*NetWorkRes, error) {
  18. //构建基本请求连接
  19. baseURL := os.Getenv(birdeye.DEFI_URL)
  20. fullURL := baseURL + birdeye.NET_WORKS
  21. apiReq, err := http.NewRequest(birdeye.GET, fullURL, nil)
  22. if err != nil {
  23. return nil, err
  24. }
  25. //构建并发送请求
  26. apiReq = birdeye.MakeHeader(apiReq)
  27. body, err := birdeye.SendRequest(apiReq)
  28. if err != nil {
  29. return nil, err
  30. }
  31. //处理返回数据
  32. var res *NetWorkRes
  33. err = gconv.Struct(body, &res)
  34. if err != nil {
  35. return nil, err
  36. }
  37. return res, nil
  38. }
  39. // Price 获取token的价格
  40. // @param check_liquidity
  41. // @param include_liquidity
  42. // @param address
  43. // @return *birdeye.CommonRes
  44. // @return error
  45. func (d *Defi) Price(chain_name string, check_liquidity float64, include_liquidity bool, address string) (*PriceRes, error) {
  46. //构建基本请求连接
  47. baseURL := os.Getenv(birdeye.DEFI_URL)
  48. params := url.Values{}
  49. params.Add(birdeye.CheckLiquidity, strconv.FormatFloat(check_liquidity, 'f', 2, 64))
  50. params.Add(birdeye.IncludeLiquidity, strconv.FormatBool(include_liquidity))
  51. params.Add(birdeye.ADDRESS, address)
  52. fullURL := baseURL + birdeye.PRICE + birdeye.QUESTION_MARK + params.Encode()
  53. apiReq, err := http.NewRequest(birdeye.GET, fullURL, nil)
  54. if err != nil {
  55. return nil, err
  56. }
  57. //构建请求头
  58. apiReq = birdeye.MakeHeader(apiReq, chain_name)
  59. body, err := birdeye.SendRequest(apiReq)
  60. if err != nil {
  61. return nil, err
  62. }
  63. //处理返回数据
  64. var res *PriceRes
  65. //TODO :gfcover
  66. err = gconv.Struct(body, &res)
  67. if err != nil {
  68. return nil, err
  69. }
  70. return res, nil
  71. }
  72. // dc:一次获取多个token的价格
  73. // @return *birdeye.CommonRes
  74. // @return error
  75. func (d *Defi) MultiplePrice(chain_name string, check_liquidity float64, include_liquidity bool, address []string, method string) (*MultiplePriceRes, error) {
  76. //构建基本请求连接
  77. baseURL := os.Getenv(birdeye.DEFI_URL)
  78. params := url.Values{}
  79. params.Add(birdeye.CheckLiquidity, strconv.FormatFloat(check_liquidity, 'f', 2, 64))
  80. params.Add(birdeye.IncludeLiquidity, strconv.FormatBool(include_liquidity))
  81. var ApiReq *http.Request
  82. var payload *bytes.Buffer = nil
  83. //判断请求类型
  84. if method == birdeye.GET {
  85. addresses := strings.Join(address, birdeye.COMMAS)
  86. params.Add(birdeye.LIST_ADDRESS, addresses)
  87. } else if method == birdeye.POST {
  88. data, err := json.Marshal(address)
  89. if err != nil {
  90. return nil, err
  91. }
  92. payload = bytes.NewBuffer(data)
  93. }
  94. fullURL := baseURL + birdeye.MULTIPLE_PRICE + birdeye.QUESTION_MARK + params.Encode()
  95. if method == birdeye.GET {
  96. apiReq, err := http.NewRequest(method, fullURL, nil)
  97. if err != nil {
  98. return nil, err
  99. }
  100. ApiReq = apiReq
  101. } else if method == birdeye.POST {
  102. apiReq, err := http.NewRequest(method, fullURL, payload)
  103. if err != nil {
  104. return nil, err
  105. }
  106. ApiReq = apiReq
  107. }
  108. //构建请求头
  109. ApiReq = birdeye.MakeHeader(ApiReq, chain_name)
  110. //发送请求
  111. body, err := birdeye.SendRequest(ApiReq)
  112. if err != nil {
  113. return nil, err
  114. }
  115. var res *MultiplePriceRes
  116. err = gconv.Struct(body, &res)
  117. if err != nil {
  118. return nil, err
  119. }
  120. return res, nil
  121. }