|
- package endpoints
-
- import (
- "encoding/json"
- "net/http"
- "strconv"
-
- "github.com/rs/zerolog/log"
- "github.com/stellar/go/clients/horizonclient"
- "github.com/stellar/go/keypair"
- "github.com/stellar/go/protocols/horizon"
- )
-
- type GetBalanceRequest struct {
- SecretKey string `json:"secretKey"`
- }
-
- type GetBalanceResponse struct {
- Balance float64 `json:"balance"`
- }
-
- func GetBalance(w http.ResponseWriter, r *http.Request) {
- var req GetBalanceRequest
- err := json.NewDecoder(r.Body).Decode(&req)
- if err != nil {
- log.Error().Err(err).Msg("Could not decode body in GetBalance call")
- return
- }
-
- var kp keypair.KP
- kp, err = keypair.Parse(req.SecretKey)
- if err != nil {
- w.WriteHeader(404)
- return
- }
-
- acctReq := horizonclient.AccountRequest{
- AccountID: kp.Address(),
- }
- var acct horizon.Account
- acct, err = client.AccountDetail(acctReq)
- if err != nil {
- log.Error().Err(err).Msg("Could not get account data from public key")
- return
- }
-
- var blnce = -1.0
- for _, balance := range acct.Balances {
- if balance.Asset.Type == "native" {
- blnce, err = strconv.ParseFloat(balance.Balance, 64)
- }
- }
-
- if blnce == -1.0 {
- log.Error().Err(err).Msg("Could not get XLM balance")
- return
- }
-
- var resp GetBalanceResponse
- resp.Balance = blnce
-
- err = json.NewEncoder(w).Encode(resp)
- if err != nil {
- log.Error().Err(err).Msg("Could not deliver response in GetBalance call")
- }
- }
|