Browse Source

[dev]defi部分接口封装

Zhangzhenhua 1 week ago
parent
commit
9b172cf8a0

+ 29 - 12
internal/library/birdeye/consts.go

@@ -1,19 +1,32 @@
 package birdeye
 
 const (
+	//method
 	GET  string = "GET"
 	POST string = "POST"
 
-	NET_WORKS            string = "networks"
-	PRICE                string = "price"
-	MULTIPLE_PRICE       string = "multi_price"
-	QUESTION_MARK        string = "?"
-	X_API_KEY            string = "X-API-KEY"
-	DEFI_URL             string = "DEFI_URL"
-	TOKEN_URL            string = "DEFI_URL"
-	WALLET_URL           string = "WALLET_URL"
-	TOKEN_LIST_V2_URL    string = "TOKEN_LIST_V2_URL"
-	BIRD_EYE_API_KEY     string = "BIRD_EYE_API_KEY"
+	//API
+	NET_WORKS      string = "networks"
+	PRICE          string = "price"
+	MULTIPLE_PRICE string = "multi_price"
+	HISTORICAL     string = "history_price"
+	TRADES_TOKEN   string = "txs/token"
+	TRADES_PAIR    string = "txs/pair"
+
+	//symbol
+	QUESTION_MARK string = "?"
+	COMMAS        string = ","
+	TEN           int    = 10
+
+	//env
+	X_API_KEY         string = "X-API-KEY"
+	DEFI_URL          string = "DEFI_URL"
+	TOKEN_URL         string = "DEFI_URL"
+	WALLET_URL        string = "WALLET_URL"
+	TOKEN_LIST_V2_URL string = "TOKEN_LIST_V2_URL"
+	BIRD_EYE_API_KEY  string = "BIRD_EYE_API_KEY"
+
+	//params
 	CheckLiquidity       string = "check_liquidity"
 	IncludeLiquidity     string = "include_liquidity"
 	ADDRESS              string = "address"
@@ -21,7 +34,6 @@ const (
 	X_CHAIN              string = "x_chain"
 	APPLICATION_JSON     string = "application/json"
 	LIST_ADDRESS         string = "list_address"
-	COMMAS               string = ","
 	SORT_BY              string = "sort_by"
 	SORT_TYPE            string = "sort_type"
 	OFFSET               string = "offset"
@@ -32,5 +44,10 @@ const (
 	TX_LIST              string = "tx_list"
 	WALLET               string = "wallet"
 	BEFORE               string = "before"
-	TEN                  int    = 10
+	ADDRESS_TYPE         string = "address_type"
+	TYPE                 string = "type"
+	TIME_FROM            string = "time_from"
+	TIME_TO              string = "time_to"
+	UNIX_TIME            string = "unix_time"
+	TX_TYPE              string = "tx_type"
 )

+ 142 - 2
internal/library/birdeye/defi/defi.go

@@ -73,7 +73,6 @@ func (d *Defi) Price(chain_name string, check_liquidity float64, include_liquidi
 	}
 	//处理返回数据
 	var res *PriceRes
-	//TODO :gfcover
 	err = gconv.Struct(body, &res)
 	if err != nil {
 		return nil, err
@@ -84,7 +83,7 @@ func (d *Defi) Price(chain_name string, check_liquidity float64, include_liquidi
 // dc:一次获取多个token的价格
 // @return *birdeye.CommonRes
 // @return error
-func (d *Defi) MultiplePrice(chain_name string, check_liquidity float64, include_liquidity bool, address []string, method string) (*MultiplePriceRes, error) {
+func (d *Defi) PriceMultiple(chain_name string, check_liquidity float64, include_liquidity bool, address []string, method string) (*MultiplePriceRes, error) {
 	//构建基本请求连接
 	baseURL := os.Getenv(birdeye.DEFI_URL)
 	params := url.Values{}
@@ -137,3 +136,144 @@ func (d *Defi) MultiplePrice(chain_name string, check_liquidity float64, include
 	}
 	return res, nil
 }
+
+//	 PriceHistorical
+//		@param chain_name
+//		@param address_type
+//		@param time_type
+//		@param time_from
+//		@param time_to
+//		@param address
+//		@return *PriceHistoricalRes
+//		@return error
+func (d *Defi) PriceHistorical(chain_name string, address_type string, time_type string, time_from uint64, time_to uint64, address string) (*PriceHistoricalRes, error) {
+	//构建基本请求连接
+	baseURL := os.Getenv(birdeye.DEFI_URL)
+	params := url.Values{}
+	params.Add(birdeye.ADDRESS, address)
+	params.Add(birdeye.ADDRESS_TYPE, address_type)
+	params.Add(birdeye.TYPE, time_type)
+	params.Add(birdeye.TIME_FROM, strconv.FormatUint(time_from, 10))
+	params.Add(birdeye.TIME_TO, strconv.FormatUint(time_to, 10))
+	fullURL := baseURL + birdeye.HISTORICAL + birdeye.QUESTION_MARK + params.Encode()
+
+	apiReq, err := http.NewRequest(birdeye.GET, fullURL, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	//构建请求头
+	apiReq = birdeye.MakeHeader(apiReq, chain_name)
+
+	body, err := birdeye.SendRequest(apiReq)
+	if err != nil {
+		return nil, err
+	}
+	//处理返回数据
+	var res *PriceHistoricalRes
+	err = gconv.Struct(body, &res)
+	if err != nil {
+		return nil, err
+	}
+	return res, nil
+}
+
+//	 PriceHistoricalUnix
+//		@param chain_name
+//		@param address
+//		@param unix_time
+//		@return *PriceHistoricalUnixRes
+//		@return error
+func (d *Defi) PriceHistoricalUnix(chain_name string, address string, unix_time uint64) (*PriceHistoricalUnixRes, error) {
+	//构建基本请求连接
+	baseURL := os.Getenv(birdeye.DEFI_URL)
+	params := url.Values{}
+	params.Add(birdeye.ADDRESS, address)
+	params.Add(birdeye.UNIX_TIME, strconv.FormatUint(unix_time, birdeye.TEN))
+
+	fullURL := baseURL + birdeye.HISTORICAL + birdeye.QUESTION_MARK + params.Encode()
+
+	apiReq, err := http.NewRequest(birdeye.GET, fullURL, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	//构建请求头
+	apiReq = birdeye.MakeHeader(apiReq, chain_name)
+
+	body, err := birdeye.SendRequest(apiReq)
+	if err != nil {
+		return nil, err
+	}
+	//处理返回数据
+	var res *PriceHistoricalUnixRes
+	err = gconv.Struct(body, &res)
+	if err != nil {
+		return nil, err
+	}
+	return res, nil
+}
+
+func (d *Defi) TradesToken(chain_name string, address string, offset uint64, limit uint64, tx_type string, sort_type string) (*TradeTokenRes, error) {
+	//构建基本请求连接
+	baseURL := os.Getenv(birdeye.DEFI_URL)
+	params := url.Values{}
+	params.Add(birdeye.ADDRESS, address)
+	params.Add(birdeye.OFFSET, strconv.FormatUint(offset, birdeye.TEN))
+	params.Add(birdeye.LIMIT, strconv.FormatUint(limit, birdeye.TEN))
+	params.Add(birdeye.SORT_TYPE, sort_type)
+
+	fullURL := baseURL + birdeye.TRADES_TOKEN + birdeye.QUESTION_MARK + params.Encode()
+
+	apiReq, err := http.NewRequest(birdeye.GET, fullURL, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	//构建请求头
+	apiReq = birdeye.MakeHeader(apiReq, chain_name)
+
+	body, err := birdeye.SendRequest(apiReq)
+	if err != nil {
+		return nil, err
+	}
+	//处理返回数据
+	var res *TradeTokenRes
+	err = gconv.Struct(body, &res)
+	if err != nil {
+		return nil, err
+	}
+	return res, nil
+}
+
+func (d *Defi) TradesPair(chain_name string, address string, offset uint64, limit uint64, tx_type string, sort_type string) (*TradePairRes, error) {
+	//构建基本请求连接
+	baseURL := os.Getenv(birdeye.DEFI_URL)
+	params := url.Values{}
+	params.Add(birdeye.ADDRESS, address)
+	params.Add(birdeye.OFFSET, strconv.FormatUint(offset, birdeye.TEN))
+	params.Add(birdeye.LIMIT, strconv.FormatUint(limit, birdeye.TEN))
+	params.Add(birdeye.SORT_TYPE, sort_type)
+
+	fullURL := baseURL + birdeye.TRADES_PAIR + birdeye.QUESTION_MARK + params.Encode()
+
+	apiReq, err := http.NewRequest(birdeye.GET, fullURL, nil)
+	if err != nil {
+		return nil, err
+	}
+
+	//构建请求头
+	apiReq = birdeye.MakeHeader(apiReq, chain_name)
+
+	body, err := birdeye.SendRequest(apiReq)
+	if err != nil {
+		return nil, err
+	}
+	//处理返回数据
+	var res *TradePairRes
+	err = gconv.Struct(body, &res)
+	if err != nil {
+		return nil, err
+	}
+	return res, nil
+}

+ 115 - 0
internal/library/birdeye/defi/defi_res.go

@@ -1,5 +1,6 @@
 package defi
 
+//res
 type NetWorkRes struct {
 	Success bool     `json:"success" dc:"是否成功"`
 	Data    []string `json:"data"`
@@ -15,6 +16,42 @@ type MultiplePriceRes struct {
 	Prices  map[string]Price `json:"prices"`
 }
 
+type PriceHistoricalRes struct {
+	Success bool            `json:"success" dc:"是否成功"`
+	Data    HistoricalItems `json:"data"`
+}
+
+type PriceHistoricalUnixRes struct {
+	Success bool            `json:"success" dc:"是否成功"`
+	Data    HistoricalItems `json:"data"`
+}
+
+type TradeTokenRes struct {
+	Success bool            `json:"success" dc:"是否成功"`
+	Data    TradeTokenItems `json:"data"`
+}
+
+type TradePairRes struct {
+	Success bool           `json:"success" dc:"是否成功"`
+	Data    TradePairItems `json:"data"`
+}
+
+// items
+type HistoricalItems struct {
+	Historical []Historical `json:"historicalItems"`
+}
+
+type TradeTokenItems struct {
+	Items   []TradeTokenTransaction `json:"items" dc:"交易项"`
+	HasNext bool                    `json:"hasNext" dc:"是否有更多"`
+}
+
+type TradePairItems struct {
+	Items   []TradePairTransaction `json:"items" dc:"交易项"`
+	HasNext bool                   `json:"hasNext" dc:"是否有更多"`
+}
+
+// struct
 type Price struct {
 	Success         bool    `json:"success" dc:"是否成功"`
 	Value           float64 `json:"value"`
@@ -23,3 +60,81 @@ type Price struct {
 	PriceChange24h  float64 `json:"priceChange24h"`
 	PriceInNative   uint32  `json:"priceInNative"`
 }
+
+type Historical struct {
+	UnixTime uint32  `json:"unixTime"`
+	Value    float64 `json:"value"`
+	Address  string  `json:"address"`
+}
+
+type HistoricalUnix struct {
+	UpdateUnixTime uint32  `json:"updateUnixTime"`
+	Value          float64 `json:"value"`
+	PriceChange24h string  `json:"priceChange24h"`
+}
+
+type TradeTokenTransaction struct {
+	Quote         Amount   `json:"quote" dc:"报价"`
+	Base          Amount   `json:"base" dc:"基础"`
+	BasePrice     *float64 `json:"basePrice" dc:"基础价格"`
+	QuotePrice    *float64 `json:"quotePrice" dc:"报价价格"`
+	TxHash        string   `json:"txHash" dc:"交易哈希"`
+	Source        string   `json:"source" dc:"来源"`
+	BlockUnixTime uint64   `json:"blockUnixTime" dc:"区块时间"`
+	TxType        string   `json:"txType" dc:"交易类型"`
+	Owner         string   `json:"owner" dc:"所有者"`
+	Side          string   `json:"side" dc:"买/卖方向"`
+	Alias         *string  `json:"alias" dc:"别名"`
+	PricePair     float64  `json:"pricePair" dc:"价格对"`
+	From          Amount   `json:"from" dc:"从"`
+	To            Amount   `json:"to" dc:"到"`
+	TokenPrice    *float64 `json:"tokenPrice" dc:"代币价格"`
+	PoolId        string   `json:"poolId" dc:"池ID"`
+}
+
+type Amount struct {
+	Symbol         string   `json:"symbol" dc:"代币符号"`
+	Decimals       uint8    `json:"decimals" dc:"小数位数"`
+	Address        string   `json:"address" dc:"代币地址"`
+	Amount         uint64   `json:"amount" dc:"数量"`
+	UiAmount       float64  `json:"uiAmount" dc:"可视化数量"`
+	Price          *float64 `json:"price" dc:"价格"`
+	NearestPrice   *float64 `json:"nearestPrice" dc:"最接近的价格"`
+	ChangeAmount   int64    `json:"changeAmount" dc:"变化的数量"`
+	UiChangeAmount float64  `json:"uiChangeAmount" dc:"变化的可视化数量"`
+}
+
+type TradePairTransaction struct {
+	TxHash        string `json:"txHash" dc:"交易哈希"`
+	Source        string `json:"source" dc:"数据来源"`
+	BlockUnixTime int64  `json:"blockUnixTime" dc:"区块时间"`
+	Address       string `json:"address" dc:"地址"`
+	Owner         string `json:"owner" dc:"拥有者"`
+	From          struct {
+		Symbol         string   `json:"symbol" dc:"代币符号"`
+		Decimals       int      `json:"decimals" dc:"小数位数"`
+		Address        string   `json:"address" dc:"代币地址"`
+		Amount         int64    `json:"amount" dc:"数量"`
+		Type           string   `json:"type" dc:"交易类型"`
+		TypeSwap       string   `json:"typeSwap" dc:"交换类型"`
+		UiAmount       float64  `json:"uiAmount" dc:"用户可读数量"`
+		Price          *float64 `json:"price" dc:"价格"`
+		NearestPrice   float64  `json:"nearestPrice" dc:"最近价格"`
+		ChangeAmount   int64    `json:"changeAmount" dc:"变化数量"`
+		UiChangeAmount float64  `json:"uiChangeAmount" dc:"变化的用户可读数量"`
+	} `json:"from"`
+	To struct {
+		Symbol         string   `json:"symbol" dc:"代币符号"`
+		Decimals       int      `json:"decimals" dc:"小数位数"`
+		Address        string   `json:"address" dc:"代币地址"`
+		Amount         int64    `json:"amount" dc:"数量"`
+		Type           string   `json:"type" dc:"交易类型"`
+		TypeSwap       string   `json:"typeSwap" dc:"交换类型"`
+		FeeInfo        *string  `json:"feeInfo" dc:"费用信息"`
+		UiAmount       float64  `json:"uiAmount" dc:"用户可读数量"`
+		Price          *float64 `json:"price" dc:"价格"`
+		NearestPrice   float64  `json:"nearestPrice" dc:"最近价格"`
+		ChangeAmount   int64    `json:"changeAmount" dc:"变化数量"`
+		UiChangeAmount float64  `json:"uiChangeAmount" dc:"变化的用户可读数量"`
+	} `json:"to"`
+}