OSDN Git Service

Merge pull request #769 from Bytom/update-dashboard
[bytom/bytom-spv.git] / api / request.go
1 package api
2
3 import (
4         "context"
5         "strings"
6
7         "github.com/bytom/consensus"
8         "github.com/bytom/encoding/json"
9         "github.com/bytom/errors"
10         "github.com/bytom/protocol/bc/types"
11 )
12
13 var (
14         errBadActionType = errors.New("bad action type")
15         errBadAction     = errors.New("bad action object")
16         errEmptyAmount   = errors.New("nil amount in the request actions")
17         errBadAmount     = errors.New("bad amount in the request actions")
18 )
19
20 // BuildRequest is main struct when building transactions
21 type BuildRequest struct {
22         Tx        *types.TxData            `json:"base_transaction"`
23         Actions   []map[string]interface{} `json:"actions"`
24         TTL       json.Duration            `json:"ttl"`
25         TimeRange uint64                   `json:"time_range"`
26 }
27
28 func (a *API) filterAliases(ctx context.Context, br *BuildRequest) error {
29         for i, m := range br.Actions {
30                 id, _ := m["asset_id"].(string)
31                 alias, _ := m["asset_alias"].(string)
32                 alias = strings.ToUpper(alias)
33                 if id == "" && alias != "" {
34                         switch alias {
35                         case consensus.BTMAlias:
36                                 m["asset_id"] = consensus.BTMAssetID.String()
37                         default:
38                                 asset, err := a.wallet.AssetReg.FindByAlias(alias)
39                                 if err != nil {
40                                         return errors.WithDetailf(err, "invalid asset alias %s on action %d", alias, i)
41                                 }
42                                 m["asset_id"] = asset.AssetID.String()
43                         }
44                 }
45
46                 id, _ = m["account_id"].(string)
47                 alias, _ = m["account_alias"].(string)
48                 if id == "" && alias != "" {
49                         acc, err := a.wallet.AccountMgr.FindByAlias(ctx, alias)
50                         if err != nil {
51                                 return errors.WithDetailf(err, "invalid account alias %s on action %d", alias, i)
52                         }
53                         m["account_id"] = acc.ID
54                 }
55         }
56         return nil
57 }