OSDN Git Service

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