7 "github.com/vapor/consensus"
8 "github.com/vapor/encoding/json"
9 "github.com/vapor/errors"
10 "github.com/vapor/protocol/bc/types"
15 ErrBadActionType = errors.New("bad action type")
16 ErrBadAction = errors.New("bad action object")
17 ErrBadActionConstruction = errors.New("bad action construction")
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"`
28 func (a *API) completeMissingIDs(ctx context.Context, br *BuildRequest) error {
29 for i, m := range br.Actions {
30 if err := a.completeMissingAssetID(m, i); err != nil {
33 if err := a.completeMissingAccountID(m, i, ctx); err != nil {
40 func (a *API) completeMissingAssetID(m map[string]interface{}, index int) error {
41 id, _ := m["asset_id"].(string)
42 alias, _ := m["asset_alias"].(string)
43 if id == "" && alias != "" {
44 alias = strings.ToUpper(alias)
46 case consensus.BTMAlias:
47 m["asset_id"] = consensus.BTMAssetID.String()
49 asset, err := a.wallet.AssetReg.FindByAlias(alias)
51 return errors.WithDetailf(err, "invalid asset alias %s on action %d", alias, index)
53 m["asset_id"] = asset.AssetID.String()
59 func (a *API) completeMissingAccountID(m map[string]interface{}, index int, ctx context.Context) error {
60 id, _ := m["account_id"].(string)
61 alias, _ := m["account_alias"].(string)
62 if id == "" && alias != "" {
63 acc, err := a.wallet.AccountMgr.FindByAlias(alias)
65 return errors.WithDetailf(err, "invalid account alias %s on action %d", alias, index)
67 m["account_id"] = acc.ID