2021-09-14 03:51:47 +00:00
|
|
|
package heliumapi
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
2021-09-15 03:34:08 +00:00
|
|
|
"time"
|
2021-09-14 03:51:47 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Account struct {
|
|
|
|
Data struct {
|
|
|
|
Address string `json:"address"`
|
|
|
|
Balance int `json:"balance"`
|
|
|
|
Block int `json:"block"`
|
|
|
|
DCBalance int `json:"dc_balance"`
|
|
|
|
DCNonce int `json:"dc_nonce"`
|
|
|
|
SECBalance int `json:"sec_balance"`
|
|
|
|
SECNonce int `json:"sec_nonce"`
|
|
|
|
SpeculativeNonce int `json:"speculative_nonce"`
|
|
|
|
} `json:"data"`
|
|
|
|
}
|
|
|
|
|
2021-09-15 05:04:32 +00:00
|
|
|
type AccountHotspots struct {
|
|
|
|
Data []struct {
|
|
|
|
Lng float64 `json:"lng"`
|
|
|
|
Lat float64 `json:"lat"`
|
|
|
|
TimestampAdded string `json:"timestamp_added"`
|
|
|
|
Status struct {
|
2021-09-17 20:45:01 +00:00
|
|
|
Timestamp string `json:"timestamp"`
|
|
|
|
Online string `json:"online"`
|
|
|
|
ListenAddrs []string `json:"listen_addrs"`
|
|
|
|
Height int `json:"height"`
|
2021-09-15 05:04:32 +00:00
|
|
|
} `json:"status"`
|
|
|
|
RewardScale float64 `json:"reward_scale"`
|
|
|
|
Payer string `json:"payer"`
|
|
|
|
Owner string `json:"owner"`
|
|
|
|
Nonce int `json:"nonce"`
|
|
|
|
Name string `json:"name"`
|
|
|
|
Mode string `json:"mode"`
|
|
|
|
LocationHex string `json:"location_hex"`
|
|
|
|
Location string `json:"location"`
|
|
|
|
LastPocChallenge int `json:"last_poc_challenge"`
|
|
|
|
LastChangeBlock int `json:"last_change_block"`
|
|
|
|
Geocode struct {
|
|
|
|
ShortStreet string `json:"short_street"`
|
|
|
|
ShortState string `json:"short_state"`
|
|
|
|
ShortCountry string `json:"short_country"`
|
|
|
|
ShortCity string `json:"short_city"`
|
|
|
|
LongStreet string `json:"long_street"`
|
|
|
|
LongState string `json:"long_state"`
|
|
|
|
LongCountry string `json:"long_country"`
|
|
|
|
LongCity string `json:"long_city"`
|
|
|
|
CityID string `json:"city_id"`
|
|
|
|
} `json:"geocode"`
|
|
|
|
Gain int `json:"gain"`
|
|
|
|
Elevation int `json:"elevation"`
|
|
|
|
BlockAdded int `json:"block_added"`
|
|
|
|
Block int `json:"block"`
|
|
|
|
Address string `json:"address"`
|
|
|
|
} `json:"data"`
|
|
|
|
}
|
|
|
|
|
2021-09-14 03:51:47 +00:00
|
|
|
func GetAccountForAddress(account string) (*Account, error) {
|
|
|
|
path := "/v1/accounts/" + account
|
|
|
|
|
|
|
|
// query the api
|
|
|
|
respBody, err := getHeliumApi(path, nil)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// unmarshal the response
|
|
|
|
respobject := Account{}
|
|
|
|
err = json.Unmarshal(respBody, &respobject)
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &respobject, nil
|
|
|
|
}
|
2021-09-15 03:34:08 +00:00
|
|
|
|
|
|
|
func GetActivityCountsForAccount(account string) (*ActivityCounts, error) {
|
|
|
|
path := "/v1/accounts/" + account + "/activity/count"
|
|
|
|
|
|
|
|
// query the api
|
|
|
|
respBody, err := getHeliumApi(path, nil)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// unmarshal the response
|
|
|
|
respobject := ActivityCounts{}
|
|
|
|
err = json.Unmarshal(respBody, &respobject)
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &respobject, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetRewardTotalsForAccount(account string, minTime *time.Time, maxTime *time.Time) (*RewardTotal, error) {
|
|
|
|
path := "/v1/accounts/" + account + "/rewards/sum"
|
|
|
|
params := map[string]string{}
|
|
|
|
if minTime != nil {
|
|
|
|
params["min_time"] = minTime.UTC().Format("2006-01-02T15:04:05Z")
|
|
|
|
}
|
|
|
|
if maxTime != nil {
|
2021-09-17 20:45:01 +00:00
|
|
|
params["max_time"] = maxTime.UTC().Format("2006-01-02T15:04:05Z")
|
2021-09-15 03:34:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// query the api
|
|
|
|
respBody, err := getHeliumApi(path, ¶ms)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// unmarshal the response
|
|
|
|
respobject := RewardTotal{}
|
|
|
|
err = json.Unmarshal(respBody, &respobject)
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &respobject, nil
|
2021-09-15 05:04:32 +00:00
|
|
|
}
|
2021-09-15 03:34:08 +00:00
|
|
|
|
2021-09-15 05:04:32 +00:00
|
|
|
func GetHotspotsForAccount(account string) (*AccountHotspots, error) {
|
|
|
|
path := "/v1/accounts/" + account + "/hotspots"
|
|
|
|
|
|
|
|
// query the api
|
|
|
|
respBody, err := getHeliumApi(path, nil)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// unmarshal the response
|
|
|
|
respobject := AccountHotspots{}
|
|
|
|
err = json.Unmarshal(respBody, &respobject)
|
|
|
|
if err != nil {
|
|
|
|
return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return &respobject, nil
|
2021-09-15 03:34:08 +00:00
|
|
|
}
|