package api import ( "context" "strings" "github.com/vapor/consensus" "github.com/vapor/encoding/json" "github.com/vapor/errors" "github.com/vapor/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 }