forked from BytomDAO/bytom
/
request.go
70 lines (63 loc) · 1.94 KB
/
request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package api
import (
"context"
"strings"
"github.com/hyper-fi/bytom/consensus"
"github.com/hyper-fi/bytom/encoding/json"
"github.com/hyper-fi/bytom/errors"
"github.com/hyper-fi/bytom/protocol/bc/types"
)
// action error
var (
ErrBadActionType = errors.New("bad action type")
ErrBadAction = errors.New("bad action object")
ErrBadActionConstruction = errors.New("bad action construction")
)
// BuildRequest is main struct when building transactions
type BuildRequest struct {
Tx *types.TxData `json:"base_transaction"`
Actions []map[string]interface{} `json:"actions"`
TTL json.Duration `json:"ttl"`
TimeRange uint64 `json:"time_range"`
}
func (a *API) completeMissingIDs(ctx context.Context, br *BuildRequest) error {
for i, m := range br.Actions {
if err := a.completeMissingAssetID(m, i); err != nil {
return err
}
if err := a.completeMissingAccountID(m, i, ctx); err != nil {
return err
}
}
return nil
}
func (a *API) completeMissingAssetID(m map[string]interface{}, index int) error {
id, _ := m["asset_id"].(string)
alias, _ := m["asset_alias"].(string)
if id == "" && alias != "" {
alias = strings.ToUpper(alias)
switch alias {
case consensus.BTMAlias:
m["asset_id"] = consensus.BTMAssetID.String()
default:
asset, err := a.wallet.AssetReg.FindByAlias(alias)
if err != nil {
return errors.WithDetailf(err, "invalid asset alias %s on action %d", alias, index)
}
m["asset_id"] = asset.AssetID.String()
}
}
return nil
}
func (a *API) completeMissingAccountID(m map[string]interface{}, index int, ctx context.Context) error {
id, _ := m["account_id"].(string)
alias, _ := m["account_alias"].(string)
if id == "" && alias != "" {
acc, err := a.wallet.AccountMgr.FindByAlias(alias)
if err != nil {
return errors.WithDetailf(err, "invalid account alias %s on action %d", alias, index)
}
m["account_id"] = acc.ID
}
return nil
}