github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/api/request.go (about) 1 package api 2 3 import ( 4 "context" 5 "strings" 6 7 "github.com/bytom/bytom/consensus" 8 "github.com/bytom/bytom/encoding/json" 9 "github.com/bytom/bytom/errors" 10 "github.com/bytom/bytom/protocol/bc/types" 11 ) 12 13 // action error 14 var ( 15 ErrBadActionType = errors.New("bad action type") 16 ErrBadAction = errors.New("bad action object") 17 ErrBadActionConstruction = errors.New("bad action construction") 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) completeMissingIDs(ctx context.Context, br *BuildRequest) error { 29 for i, m := range br.Actions { 30 if err := a.completeMissingAssetID(m, i); err != nil { 31 return err 32 } 33 if err := a.completeMissingAccountID(m, i, ctx); err != nil { 34 return err 35 } 36 } 37 return nil 38 } 39 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) 45 switch alias { 46 case consensus.BTMAlias: 47 m["asset_id"] = consensus.BTMAssetID.String() 48 default: 49 asset, err := a.wallet.AssetReg.FindByAlias(alias) 50 if err != nil { 51 return errors.WithDetailf(err, "invalid asset alias %s on action %d", alias, index) 52 } 53 m["asset_id"] = asset.AssetID.String() 54 } 55 } 56 return nil 57 } 58 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) 64 if err != nil { 65 return errors.WithDetailf(err, "invalid account alias %s on action %d", alias, index) 66 } 67 m["account_id"] = acc.ID 68 } 69 return nil 70 }