diff --git a/rpc/tendermint/client/client.go b/rpc/tendermint/client/client.go index 601b1fb4d0f05730a9dd731b8858d53c0c138f97..9750b373c8f8978e38af9a6770f54b3c3fdfc7af 100644 --- a/rpc/tendermint/client/client.go +++ b/rpc/tendermint/client/client.go @@ -1,7 +1,9 @@ package client import ( + "errors" "fmt" + acm "github.com/eris-ltd/eris-db/account" core_types "github.com/eris-ltd/eris-db/core/types" rpc_types "github.com/eris-ltd/eris-db/rpc/tendermint/core/types" @@ -126,34 +128,39 @@ func BlockchainInfo(client rpcclient.Client, minHeight, func performCall(client rpcclient.Client, method string, paramKeyVals ...interface{}) (res rpc_types.ErisDBResult, err error) { - paramsMap, paramsSlice := mapAndValues(paramKeyVals...) + paramsMap, paramsSlice, err := mapAndValues(paramKeyVals...) + if err != nil { + return + } switch cli := client.(type) { case *rpcclient.ClientJSONRPC: _, err = cli.Call(method, paramsSlice, &res) case *rpcclient.ClientURI: _, err = cli.Call(method, paramsMap, &res) } - return res, err + return } -func mapAndValues(orderedKeyVals ...interface{}) (map[string]interface{}, []interface{}) { +func mapAndValues(orderedKeyVals ...interface{}) (map[string]interface{}, + []interface{}, error) { if len(orderedKeyVals)%2 != 0 { - panic(fmt.Sprintf("mapAndValues requires a even length list of keys and "+ - "values but got: %v (length %v)", - orderedKeyVals, len(orderedKeyVals))) + return nil, nil, fmt.Errorf("mapAndValues requires a even length list of"+ + " keys and values but got: %v (length %v)", + orderedKeyVals, len(orderedKeyVals)) } paramsMap := make(map[string]interface{}) paramsSlice := make([]interface{}, len(orderedKeyVals)/2) for i := 0; i < len(orderedKeyVals); i += 2 { key, ok := orderedKeyVals[i].(string) if !ok { - panic("mapAndValues requires every even element of orderedKeyVals to be a string key") + return nil, nil, errors.New("mapAndValues requires every even element" + + " of orderedKeyVals to be a string key") } val := orderedKeyVals[i+1] paramsMap[key] = val paramsSlice = append(paramsSlice, val) } - return paramsMap, paramsSlice + return paramsMap, paramsSlice, nil } type wrappedTx struct {