|
@@ -1,7 +1,8 @@
|
|
|
package defi
|
|
|
|
|
|
import (
|
|
|
- "io"
|
|
|
+ "bytes"
|
|
|
+ "encoding/json"
|
|
|
"net/http"
|
|
|
"net/url"
|
|
|
"os"
|
|
@@ -10,50 +11,52 @@ import (
|
|
|
|
|
|
"birdcall/internal/consts"
|
|
|
"birdcall/internal/library/birdeye"
|
|
|
- "encoding/json"
|
|
|
+ "birdcall/internal/model/birdeye/defi"
|
|
|
)
|
|
|
|
|
|
-type Defi struct {
|
|
|
- Address []string ` json:"address" dc:"代币地址"`
|
|
|
- Chain string ` json:"chain" dc:"链名"`
|
|
|
- CheckLiquidity float64 ` json:"check_liquidity" dc:"流动性验证"`
|
|
|
- IncludeLiquidity bool ` json:"include_liquidity" dc:"是否返回流动数据" `
|
|
|
-}
|
|
|
+type Defi struct{}
|
|
|
|
|
|
-func (d *Defi) Support() (*birdeye.CommonRes, error) {
|
|
|
+// 获取当前支持的网络
|
|
|
+// @return *birdeye.CommonRes
|
|
|
+// @return error
|
|
|
+func (d *Defi) Support() (*defi.NetWorkRes, error) {
|
|
|
//构建基本请求连接
|
|
|
baseURL := os.Getenv(consts.DEFI_URL)
|
|
|
fullURL := baseURL + consts.NET_WORKS
|
|
|
|
|
|
- apiReq, err := http.NewRequest("GET", fullURL, nil)
|
|
|
+ apiReq, err := http.NewRequest(consts.GET, fullURL, nil)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- //构建请求头
|
|
|
- apiReq = birdeye.MakeHeader(apiReq, d.Chain)
|
|
|
-
|
|
|
- apiRes, err := http.DefaultClient.Do(apiReq)
|
|
|
+ //构建并发送请求
|
|
|
+ apiReq = birdeye.MakeHeader(apiReq)
|
|
|
+ body, err := birdeye.SendRequest(apiReq)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
|
|
|
- //处理结果
|
|
|
- body, _ := io.ReadAll(apiRes.Body)
|
|
|
- var commonRes *birdeye.CommonRes
|
|
|
- err = json.Unmarshal(body, &commonRes)
|
|
|
+ //处理返回数据
|
|
|
+ var res *defi.NetWorkRes
|
|
|
+ err = json.Unmarshal([]byte(body), &res)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- return commonRes, nil
|
|
|
+ return res, nil
|
|
|
}
|
|
|
|
|
|
-func (d *Defi) Price() (*birdeye.CommonRes, error) {
|
|
|
+// Price 获取token的价格
|
|
|
+// @param check_liquidity
|
|
|
+// @param include_liquidity
|
|
|
+// @param address
|
|
|
+// @return *birdeye.CommonRes
|
|
|
+// @return error
|
|
|
+func (d *Defi) Price(chain_name string, check_liquidity float64, include_liquidity bool, address string) (*defi.PriceRes, error) {
|
|
|
//构建基本请求连接
|
|
|
baseURL := os.Getenv(consts.DEFI_URL)
|
|
|
params := url.Values{}
|
|
|
- params.Add(consts.CheckLiquidity, strconv.FormatFloat(d.CheckLiquidity, 'f', 2, 64))
|
|
|
- params.Add(consts.IncludeLiquidity, strconv.FormatBool(d.IncludeLiquidity))
|
|
|
- params.Add(consts.ADDRESS, d.Address[0])
|
|
|
+ params.Add(consts.CheckLiquidity, strconv.FormatFloat(check_liquidity, 'f', 2, 64))
|
|
|
+ params.Add(consts.IncludeLiquidity, strconv.FormatBool(include_liquidity))
|
|
|
+ params.Add(consts.ADDRESS, address)
|
|
|
fullURL := baseURL + consts.PRICE + consts.QUESTION_MARK + params.Encode()
|
|
|
|
|
|
apiReq, err := http.NewRequest(consts.GET, fullURL, nil)
|
|
@@ -62,54 +65,74 @@ func (d *Defi) Price() (*birdeye.CommonRes, error) {
|
|
|
}
|
|
|
|
|
|
//构建请求头
|
|
|
- apiReq = birdeye.MakeHeader(apiReq, d.Chain)
|
|
|
+ apiReq = birdeye.MakeHeader(apiReq, chain_name)
|
|
|
|
|
|
- //发送请求
|
|
|
- apiRes, err := http.DefaultClient.Do(apiReq)
|
|
|
+ body, err := birdeye.SendRequest(apiReq)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
-
|
|
|
- //处理结果
|
|
|
- body, _ := io.ReadAll(apiRes.Body)
|
|
|
- var commonRes *birdeye.CommonRes
|
|
|
- err = json.Unmarshal(body, &commonRes)
|
|
|
+ //处理返回数据
|
|
|
+ var res *defi.PriceRes
|
|
|
+ err = json.Unmarshal([]byte(body), &res)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- return commonRes, nil
|
|
|
+ return res, nil
|
|
|
}
|
|
|
|
|
|
-func (d *Defi) MultiplePrice() (*birdeye.CommonRes, error) {
|
|
|
+// dc:一次获取多个token的价格
|
|
|
+// @return *birdeye.CommonRes
|
|
|
+// @return error
|
|
|
+func (d *Defi) MultiplePrice(chain_name string, check_liquidity float64, include_liquidity bool, address []string, method string) (*defi.MultiplePriceRes, error) {
|
|
|
//构建基本请求连接
|
|
|
baseURL := os.Getenv(consts.DEFI_URL)
|
|
|
params := url.Values{}
|
|
|
- params.Add(consts.CheckLiquidity, strconv.FormatFloat(d.CheckLiquidity, 'f', 2, 64))
|
|
|
- params.Add(consts.IncludeLiquidity, strconv.FormatBool(d.IncludeLiquidity))
|
|
|
- addresses := strings.Join(d.Address, consts.COMMAS)
|
|
|
- params.Add(consts.LIST_ADDRESS, addresses)
|
|
|
+ params.Add(consts.CheckLiquidity, strconv.FormatFloat(check_liquidity, 'f', 2, 64))
|
|
|
+ params.Add(consts.IncludeLiquidity, strconv.FormatBool(include_liquidity))
|
|
|
+
|
|
|
+ var ApiReq *http.Request
|
|
|
+ var payload *bytes.Buffer = nil
|
|
|
+
|
|
|
+ //判断请求类型
|
|
|
+ if method == consts.GET {
|
|
|
+ addresses := strings.Join(address, consts.COMMAS)
|
|
|
+ params.Add(consts.LIST_ADDRESS, addresses)
|
|
|
+ } else if method == consts.POST {
|
|
|
+ data, err := json.Marshal(address)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ payload = bytes.NewBuffer(data)
|
|
|
+ }
|
|
|
+
|
|
|
fullURL := baseURL + consts.MULTIPLE_PRICE + consts.QUESTION_MARK + params.Encode()
|
|
|
|
|
|
- apiReq, err := http.NewRequest(consts.GET, fullURL, nil)
|
|
|
- if err != nil {
|
|
|
- return nil, err
|
|
|
+ if method == consts.GET {
|
|
|
+ apiReq, err := http.NewRequest(method, fullURL, nil)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ ApiReq = apiReq
|
|
|
+ } else if method == consts.POST {
|
|
|
+ apiReq, err := http.NewRequest(method, fullURL, payload)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ ApiReq = apiReq
|
|
|
}
|
|
|
|
|
|
//构建请求头
|
|
|
- apiReq = birdeye.MakeHeader(apiReq, d.Chain)
|
|
|
+ ApiReq = birdeye.MakeHeader(ApiReq, chain_name)
|
|
|
|
|
|
//发送请求
|
|
|
- apiRes, err := http.DefaultClient.Do(apiReq)
|
|
|
+ body, err := birdeye.SendRequest(ApiReq)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
-
|
|
|
- //处理结果
|
|
|
- body, _ := io.ReadAll(apiRes.Body)
|
|
|
- var commonRes *birdeye.CommonRes
|
|
|
- err = json.Unmarshal(body, &commonRes)
|
|
|
+ var res *defi.MultiplePriceRes
|
|
|
+ err = json.Unmarshal([]byte(body), &res)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- return commonRes, nil
|
|
|
+ return res, nil
|
|
|
}
|