From 299e17156e4d10e372974e5e383ad5729a0ddf96 Mon Sep 17 00:00:00 2001 From: Crossle Song Date: Sun, 14 Oct 2018 18:22:04 +0800 Subject: [PATCH] Create address API --- address.go | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ asset.go | 18 +++++++++------ 2 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 address.go diff --git a/address.go b/address.go new file mode 100644 index 0000000..42d3f0c --- /dev/null +++ b/address.go @@ -0,0 +1,67 @@ +package bot + +import ( + "context" + "encoding/json" + "time" +) + +type AddressInput struct { + AssetId string + Label string + PublicKey string + AccountName string + AccountTag string +} + +type Address struct { + AddressId string `json:"address_id"` + AssetId string `json:"asset_id"` + Label string `json:"label"` + PublicKey string `json:"public_key,omitempty"` + AccountName string `json:"account_name,omitempty"` + AccountTag string `json:"account_tag,omitempty"` + Fee string `json:"fee"` + Reserve string `json:"reserve"` + UpdatedAt string `json:"updated_at"` +} + +func CreateAddress(ctx context.Context, in *AddressInput, uid, sid, sessionKey, pin, pinToken string) (*Address, error) { + encryptedPIN, err := EncryptPIN(ctx, pin, pinToken, sid, sessionKey, uint64(time.Now().UnixNano())) + if err != nil { + return nil, err + } + data, err := json.Marshal(map[string]interface{}{ + "asset_id": in.AssetId, + "label": in.Label, + "public_key": in.PublicKey, + "account_name": in.AccountName, + "account_tag": in.AccountTag, + "pin": encryptedPIN, + }) + if err != nil { + return nil, err + } + + token, err := SignAuthenticationToken(uid, sid, sessionKey, "POST", "/addresses", string(data)) + if err != nil { + return nil, err + } + body, err := Request(ctx, "POST", "/addresses", data, token) + if err != nil { + return nil, err + } + + var resp struct { + Data *Address `json:"data"` + Error Error `json:"error"` + } + err = json.Unmarshal(body, &resp) + if err != nil { + return nil, BadDataError(ctx) + } + if resp.Error.Code > 0 { + return nil, resp.Error + } + return resp.Data, nil +} diff --git a/asset.go b/asset.go index 9e7d6d7..85a59e6 100644 --- a/asset.go +++ b/asset.go @@ -6,13 +6,17 @@ import ( ) type Asset struct { - AssetId string `json:"asset_id"` - Symbol string `json:"symbol"` - Name string `json:"name"` - IconURL string `json:"icon_url"` - PriceBTC string `json:"price_btc"` - PriceUSD string `json:"price_usd"` - Balance string `json:"balance"` + AssetId string `json:"asset_id"` + ChainId string `json:"chain_id"` + Symbol string `json:"symbol"` + Name string `json:"name"` + IconURL string `json:"icon_url"` + PriceBTC string `json:"price_btc"` + PriceUSD string `json:"price_usd"` + Balance string `json:"balance"` + PublicKey string `json:"public_key"` + AccountName string `json:"account_name"` + AccountTag string `json:"account_tag"` } func AssetList(ctx context.Context, accessToken string) ([]Asset, error) {