|
|
|
@ -25,12 +25,12 @@ import ( |
|
|
|
|
"github.com/ethereum/go-ethereum/xeth" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
const ( |
|
|
|
|
ErrorArguments = "Error: Insufficient arguments" |
|
|
|
|
ErrorNotImplemented = "Error: Method not implemented" |
|
|
|
|
ErrorUnknown = "Error: Unknown error" |
|
|
|
|
ErrorParseRequest = "Error: Could not parse request" |
|
|
|
|
ErrorDecodeArgs = "Error: Could not decode arguments" |
|
|
|
|
var ( |
|
|
|
|
errArguments = errors.New("Error: Insufficient arguments") |
|
|
|
|
errNotImplemented = errors.New("Error: Method not implemented") |
|
|
|
|
errUnknown = errors.New("Error: Unknown error") |
|
|
|
|
errParseRequest = errors.New("Error: Could not parse request") |
|
|
|
|
errDecodeArgs = errors.New("Error: Could not decode arguments") |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type RpcRequest struct { |
|
|
|
@ -58,76 +58,72 @@ type RpcErrorObject struct { |
|
|
|
|
// Data interface{} `json:"data"`
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NewErrorResponse(msg string) error { |
|
|
|
|
return errors.New(msg) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NewErrorResponseWithError(msg string, err error) error { |
|
|
|
|
return fmt.Errorf("%s: %v", msg, err) |
|
|
|
|
func NewErrorWithMessage(err error, msg string) error { |
|
|
|
|
return fmt.Errorf("%s: %s", err.Error(), msg) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToSha3Args() (*Sha3Args, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(Sha3Args) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
if err := json.NewDecoder(r).Decode(args); err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(GetBlockArgs) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(NewTxArgs) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) |
|
|
|
|
return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToPushTxArgs() (*PushTxArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(PushTxArgs) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToGetStateArgs() (*GetStateArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(GetStateArgs) |
|
|
|
@ -135,234 +131,228 @@ func (req *RpcRequest) ToGetStateArgs() (*GetStateArgs, error) { |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToStorageAtArgs() (*GetStorageArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(GetStorageArgs) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToGetTxCountArgs() (*GetTxCountArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(GetTxCountArgs) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToGetBalanceArgs() (*GetBalanceArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(GetBalanceArgs) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(GetCodeAtArgs) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToBoolArgs() (bool, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return false, NewErrorResponse(ErrorArguments) |
|
|
|
|
return false, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args bool |
|
|
|
|
err := json.Unmarshal(req.Params[0], &args) |
|
|
|
|
if err != nil { |
|
|
|
|
return false, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return false, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToCompileArgs() (string, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return "", NewErrorResponse(ErrorArguments) |
|
|
|
|
return "", errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args string |
|
|
|
|
err := json.Unmarshal(req.Params[0], &args) |
|
|
|
|
if err != nil { |
|
|
|
|
return "", NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return "", errDecodeArgs |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToFilterArgs() (*FilterOptions, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
args := new(FilterOptions) |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return nil, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToFilterStringArgs() (string, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return "", NewErrorResponse(ErrorArguments) |
|
|
|
|
return "", errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args string |
|
|
|
|
err := json.Unmarshal(req.Params[0], &args) |
|
|
|
|
if err != nil { |
|
|
|
|
return "", NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return "", errDecodeArgs |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToUninstallFilterArgs() (int, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return 0, NewErrorResponse(ErrorArguments) |
|
|
|
|
return 0, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args int |
|
|
|
|
err := json.Unmarshal(req.Params[0], &args) |
|
|
|
|
if err != nil { |
|
|
|
|
return 0, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return 0, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToFilterChangedArgs() (int, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return 0, NewErrorResponse(ErrorArguments) |
|
|
|
|
return 0, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var id int |
|
|
|
|
r := bytes.NewReader(req.Params[0]) |
|
|
|
|
err := json.NewDecoder(r).Decode(&id) |
|
|
|
|
if err != nil { |
|
|
|
|
return 0, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return 0, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", id, id) |
|
|
|
|
return id, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToDbPutArgs() (*DbArgs, error) { |
|
|
|
|
if len(req.Params) < 3 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args DbArgs |
|
|
|
|
err := json.Unmarshal(req.Params[0], &args.Database) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) |
|
|
|
|
return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) |
|
|
|
|
} |
|
|
|
|
err = json.Unmarshal(req.Params[1], &args.Key) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) |
|
|
|
|
return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) |
|
|
|
|
} |
|
|
|
|
err = json.Unmarshal(req.Params[2], &args.Value) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) |
|
|
|
|
return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return &args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToDbGetArgs() (*DbArgs, error) { |
|
|
|
|
if len(req.Params) < 2 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args DbArgs |
|
|
|
|
err := json.Unmarshal(req.Params[0], &args.Database) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) |
|
|
|
|
return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err = json.Unmarshal(req.Params[1], &args.Key) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) |
|
|
|
|
return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return &args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToWhisperFilterArgs() (*xeth.Options, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args xeth.Options |
|
|
|
|
err := json.Unmarshal(req.Params[0], &args) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) |
|
|
|
|
return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return &args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToIdArgs() (int, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return 0, NewErrorResponse(ErrorArguments) |
|
|
|
|
return 0, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var id int |
|
|
|
|
err := json.Unmarshal(req.Params[0], &id) |
|
|
|
|
if err != nil { |
|
|
|
|
return 0, NewErrorResponse(ErrorDecodeArgs) |
|
|
|
|
return 0, errDecodeArgs |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", id, id) |
|
|
|
|
|
|
|
|
|
return id, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToWhisperPostArgs() (*WhisperMessageArgs, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return nil, NewErrorResponse(ErrorArguments) |
|
|
|
|
return nil, errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args WhisperMessageArgs |
|
|
|
@ -370,13 +360,13 @@ func (req *RpcRequest) ToWhisperPostArgs() (*WhisperMessageArgs, error) { |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return &args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToWhisperHasIdentityArgs() (string, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return "", NewErrorResponse(ErrorArguments) |
|
|
|
|
return "", errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args string |
|
|
|
@ -384,13 +374,13 @@ func (req *RpcRequest) ToWhisperHasIdentityArgs() (string, error) { |
|
|
|
|
if err != nil { |
|
|
|
|
return "", err |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToRegisterArgs() (string, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return "", NewErrorResponse(ErrorArguments) |
|
|
|
|
return "", errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args string |
|
|
|
@ -398,13 +388,13 @@ func (req *RpcRequest) ToRegisterArgs() (string, error) { |
|
|
|
|
if err != nil { |
|
|
|
|
return "", err |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (req *RpcRequest) ToWatchTxArgs() (string, error) { |
|
|
|
|
if len(req.Params) < 1 { |
|
|
|
|
return "", NewErrorResponse(ErrorArguments) |
|
|
|
|
return "", errArguments |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var args string |
|
|
|
@ -412,6 +402,6 @@ func (req *RpcRequest) ToWatchTxArgs() (string, error) { |
|
|
|
|
if err != nil { |
|
|
|
|
return "", err |
|
|
|
|
} |
|
|
|
|
rpclogger.DebugDetailf("%T %v", args, args) |
|
|
|
|
|
|
|
|
|
return args, nil |
|
|
|
|
} |
|
|
|
|