Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
094f921e
Commit
094f921e
authored
Mar 13, 2015
by
Taylor Gerring
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Convert to proper errors
Allow returning different JSON RPC error codes depending on error type
parent
14bdcd2c
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
183 additions
and
104 deletions
+183
-104
api.go
rpc/api.go
+9
-9
args.go
rpc/args.go
+77
-48
http.go
rpc/http.go
+34
-5
messages.go
rpc/messages.go
+60
-39
util.go
rpc/util.go
+3
-3
No files found.
rpc/api.go
View file @
094f921e
...
@@ -578,7 +578,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -578,7 +578,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
}
}
return
p
.
Call
(
args
,
reply
)
return
p
.
Call
(
args
,
reply
)
case
"eth_flush"
:
case
"eth_flush"
:
return
errNotImplemented
return
NewNotImplementedError
(
req
.
Method
)
case
"eth_getBlockByHash"
:
case
"eth_getBlockByHash"
:
args
:=
new
(
GetBlockByHashArgs
)
args
:=
new
(
GetBlockByHashArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
...
@@ -618,7 +618,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -618,7 +618,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
err
return
err
}
}
if
args
.
Index
>
int64
(
len
(
v
.
Transactions
))
||
args
.
Index
<
0
{
if
args
.
Index
>
int64
(
len
(
v
.
Transactions
))
||
args
.
Index
<
0
{
return
New
ErrorWithMessage
(
errDecodeArgs
,
"Transaction index
does not exist"
)
return
New
ValidationError
(
"Index"
,
"
does not exist"
)
}
}
*
reply
=
v
.
Transactions
[
args
.
Index
]
*
reply
=
v
.
Transactions
[
args
.
Index
]
case
"eth_getTransactionByBlockNumberAndIndex"
:
case
"eth_getTransactionByBlockNumberAndIndex"
:
...
@@ -632,7 +632,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -632,7 +632,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
err
return
err
}
}
if
args
.
Index
>
int64
(
len
(
v
.
Transactions
))
||
args
.
Index
<
0
{
if
args
.
Index
>
int64
(
len
(
v
.
Transactions
))
||
args
.
Index
<
0
{
return
New
ErrorWithMessage
(
errDecodeArgs
,
"Transaction index
does not exist"
)
return
New
ValidationError
(
"Index"
,
"
does not exist"
)
}
}
*
reply
=
v
.
Transactions
[
args
.
Index
]
*
reply
=
v
.
Transactions
[
args
.
Index
]
case
"eth_getUncleByBlockHashAndIndex"
:
case
"eth_getUncleByBlockHashAndIndex"
:
...
@@ -646,7 +646,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -646,7 +646,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
err
return
err
}
}
if
args
.
Index
>
int64
(
len
(
v
.
Uncles
))
||
args
.
Index
<
0
{
if
args
.
Index
>
int64
(
len
(
v
.
Uncles
))
||
args
.
Index
<
0
{
return
New
ErrorWithMessage
(
errDecodeArgs
,
"Uncle index
does not exist"
)
return
New
ValidationError
(
"Index"
,
"
does not exist"
)
}
}
uncle
,
err
:=
p
.
GetBlockByHash
(
toHex
(
v
.
Uncles
[
args
.
Index
]),
false
)
uncle
,
err
:=
p
.
GetBlockByHash
(
toHex
(
v
.
Uncles
[
args
.
Index
]),
false
)
...
@@ -665,7 +665,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -665,7 +665,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
err
return
err
}
}
if
args
.
Index
>
int64
(
len
(
v
.
Uncles
))
||
args
.
Index
<
0
{
if
args
.
Index
>
int64
(
len
(
v
.
Uncles
))
||
args
.
Index
<
0
{
return
New
ErrorWithMessage
(
errDecodeArgs
,
"Uncle index
does not exist"
)
return
New
ValidationError
(
"Index"
,
"
does not exist"
)
}
}
uncle
,
err
:=
p
.
GetBlockByHash
(
toHex
(
v
.
Uncles
[
args
.
Index
]),
false
)
uncle
,
err
:=
p
.
GetBlockByHash
(
toHex
(
v
.
Uncles
[
args
.
Index
]),
false
)
...
@@ -678,7 +678,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -678,7 +678,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
case
"eth_compileSolidity"
:
case
"eth_compileSolidity"
:
case
"eth_compileLLL"
:
case
"eth_compileLLL"
:
case
"eth_compileSerpent"
:
case
"eth_compileSerpent"
:
return
errNotImplemented
return
NewNotImplementedError
(
req
.
Method
)
case
"eth_newFilter"
:
case
"eth_newFilter"
:
args
:=
new
(
FilterOptions
)
args
:=
new
(
FilterOptions
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
...
@@ -717,7 +717,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -717,7 +717,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
p
.
AllLogs
(
args
,
reply
)
return
p
.
AllLogs
(
args
,
reply
)
case
"eth_getWork"
:
case
"eth_getWork"
:
case
"eth_submitWork"
:
case
"eth_submitWork"
:
return
errNotImplemented
return
NewNotImplementedError
(
req
.
Method
)
case
"db_put"
:
case
"db_put"
:
args
:=
new
(
DbArgs
)
args
:=
new
(
DbArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
...
@@ -746,7 +746,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -746,7 +746,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
p
.
HasWhisperIdentity
(
args
.
Identity
,
reply
)
return
p
.
HasWhisperIdentity
(
args
.
Identity
,
reply
)
case
"shh_newGroup"
:
case
"shh_newGroup"
:
case
"shh_addToGroup"
:
case
"shh_addToGroup"
:
return
errNotImplemented
return
NewNotImplementedError
(
req
.
Method
)
case
"shh_newFilter"
:
case
"shh_newFilter"
:
args
:=
new
(
WhisperFilterArgs
)
args
:=
new
(
WhisperFilterArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
...
@@ -790,7 +790,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -790,7 +790,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
// }
// }
// return p.WatchTx(args, reply)
// return p.WatchTx(args, reply)
default
:
default
:
return
New
ErrorWithMessage
(
errNotImplemented
,
req
.
Method
)
return
New
NotImplementedError
(
req
.
Method
)
}
}
rpclogger
.
DebugDetailf
(
"Reply: %T %s"
,
reply
,
reply
)
rpclogger
.
DebugDetailf
(
"Reply: %T %s"
,
reply
,
reply
)
...
...
rpc/args.go
View file @
094f921e
...
@@ -11,7 +11,7 @@ import (
...
@@ -11,7 +11,7 @@ import (
func
blockNumber
(
raw
json
.
RawMessage
,
number
*
int64
)
(
err
error
)
{
func
blockNumber
(
raw
json
.
RawMessage
,
number
*
int64
)
(
err
error
)
{
var
str
string
var
str
string
if
err
=
json
.
Unmarshal
(
raw
,
&
str
);
err
!=
nil
{
if
err
=
json
.
Unmarshal
(
raw
,
&
str
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
switch
str
{
switch
str
{
...
@@ -34,16 +34,16 @@ func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -34,16 +34,16 @@ func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
argstr
,
ok
:=
obj
[
0
]
.
(
string
)
argstr
,
ok
:=
obj
[
0
]
.
(
string
)
if
!
ok
{
if
!
ok
{
return
errDecodeArgs
return
NewDecodeParamError
(
"BlockHash not a string"
)
}
}
args
.
BlockHash
=
argstr
args
.
BlockHash
=
argstr
...
@@ -63,11 +63,11 @@ func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -63,11 +63,11 @@ func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
if
v
,
ok
:=
obj
[
0
]
.
(
float64
);
ok
{
if
v
,
ok
:=
obj
[
0
]
.
(
float64
);
ok
{
...
@@ -117,7 +117,7 @@ type GetStorageArgs struct {
...
@@ -117,7 +117,7 @@ type GetStorageArgs struct {
func
(
args
*
GetStorageArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
func
(
args
*
GetStorageArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
if
err
=
UnmarshalRawMessages
(
b
,
&
args
.
Address
,
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
=
UnmarshalRawMessages
(
b
,
&
args
.
Address
,
&
args
.
BlockNumber
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
return
nil
return
nil
...
@@ -125,7 +125,7 @@ func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -125,7 +125,7 @@ func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) {
func
(
args
*
GetStorageArgs
)
requirements
()
error
{
func
(
args
*
GetStorageArgs
)
requirements
()
error
{
if
len
(
args
.
Address
)
==
0
{
if
len
(
args
.
Address
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Address
cannot be blank"
)
return
New
ValidationError
(
"Address"
,
"
cannot be blank"
)
}
}
return
nil
return
nil
}
}
...
@@ -139,10 +139,10 @@ type GetStorageAtArgs struct {
...
@@ -139,10 +139,10 @@ type GetStorageAtArgs struct {
func
(
args
*
GetStorageAtArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
func
(
args
*
GetStorageAtArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
var
obj
[]
string
var
obj
[]
string
if
err
=
UnmarshalRawMessages
(
b
,
&
obj
,
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
=
UnmarshalRawMessages
(
b
,
&
obj
,
&
args
.
BlockNumber
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
2
{
if
len
(
obj
)
<
2
{
return
errDecodeArgs
return
NewInsufficientParamsError
(
len
(
obj
),
2
)
}
}
args
.
Address
=
obj
[
0
]
args
.
Address
=
obj
[
0
]
...
@@ -153,11 +153,11 @@ func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -153,11 +153,11 @@ func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) {
func
(
args
*
GetStorageAtArgs
)
requirements
()
error
{
func
(
args
*
GetStorageAtArgs
)
requirements
()
error
{
if
len
(
args
.
Address
)
==
0
{
if
len
(
args
.
Address
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Address
cannot be blank"
)
return
New
ValidationError
(
"Address"
,
"
cannot be blank"
)
}
}
if
len
(
args
.
Key
)
==
0
{
if
len
(
args
.
Key
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Key
cannot be blank"
)
return
New
ValidationError
(
"Key"
,
"
cannot be blank"
)
}
}
return
nil
return
nil
}
}
...
@@ -169,7 +169,7 @@ type GetTxCountArgs struct {
...
@@ -169,7 +169,7 @@ type GetTxCountArgs struct {
func
(
args
*
GetTxCountArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
func
(
args
*
GetTxCountArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
if
err
=
UnmarshalRawMessages
(
b
,
&
args
.
Address
,
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
=
UnmarshalRawMessages
(
b
,
&
args
.
Address
,
&
args
.
BlockNumber
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
return
nil
return
nil
...
@@ -177,7 +177,7 @@ func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -177,7 +177,7 @@ func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) {
func
(
args
*
GetTxCountArgs
)
requirements
()
error
{
func
(
args
*
GetTxCountArgs
)
requirements
()
error
{
if
len
(
args
.
Address
)
==
0
{
if
len
(
args
.
Address
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Address
cannot be blank"
)
return
New
ValidationError
(
"Address"
,
"
cannot be blank"
)
}
}
return
nil
return
nil
}
}
...
@@ -191,16 +191,16 @@ func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -191,16 +191,16 @@ func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
addstr
,
ok
:=
obj
[
0
]
.
(
string
)
addstr
,
ok
:=
obj
[
0
]
.
(
string
)
if
!
ok
{
if
!
ok
{
return
errDecodeArgs
return
NewDecodeParamError
(
"Address is not a string"
)
}
}
args
.
Address
=
addstr
args
.
Address
=
addstr
...
@@ -213,7 +213,7 @@ func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -213,7 +213,7 @@ func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
}
}
// if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
// if err = UnmarshalRawMessages(b, &args.Address, &args.BlockNumber); err != nil {
// return
errDecodeArgs
// return
NewDecodeParamError(err.Error())
// }
// }
return
nil
return
nil
...
@@ -221,7 +221,7 @@ func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -221,7 +221,7 @@ func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
func
(
args
*
GetBalanceArgs
)
requirements
()
error
{
func
(
args
*
GetBalanceArgs
)
requirements
()
error
{
if
len
(
args
.
Address
)
==
0
{
if
len
(
args
.
Address
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Address
cannot be blank"
)
return
New
ValidationError
(
"Address"
,
"
cannot be blank"
)
}
}
return
nil
return
nil
}
}
...
@@ -233,7 +233,7 @@ type GetDataArgs struct {
...
@@ -233,7 +233,7 @@ type GetDataArgs struct {
func
(
args
*
GetDataArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
func
(
args
*
GetDataArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
if
err
=
UnmarshalRawMessages
(
b
,
&
args
.
Address
,
&
args
.
BlockNumber
);
err
!=
nil
{
if
err
=
UnmarshalRawMessages
(
b
,
&
args
.
Address
,
&
args
.
BlockNumber
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
return
nil
return
nil
...
@@ -241,7 +241,7 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -241,7 +241,7 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
func
(
args
*
GetDataArgs
)
requirements
()
error
{
func
(
args
*
GetDataArgs
)
requirements
()
error
{
if
len
(
args
.
Address
)
==
0
{
if
len
(
args
.
Address
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Address
cannot be blank"
)
return
New
ValidationError
(
"Address"
,
"
cannot be blank"
)
}
}
return
nil
return
nil
}
}
...
@@ -255,23 +255,23 @@ func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -255,23 +255,23 @@ func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
arg0
,
ok
:=
obj
[
0
]
.
(
string
)
arg0
,
ok
:=
obj
[
0
]
.
(
string
)
if
!
ok
{
if
!
ok
{
return
errDecodeArgs
return
NewDecodeParamError
(
"BlockNumber is not string"
)
}
}
args
.
BlockNumber
=
ethutil
.
Big
(
arg0
)
.
Int64
()
args
.
BlockNumber
=
ethutil
.
Big
(
arg0
)
.
Int64
()
if
len
(
obj
)
>
1
{
if
len
(
obj
)
>
1
{
arg1
,
ok
:=
obj
[
1
]
.
(
string
)
arg1
,
ok
:=
obj
[
1
]
.
(
string
)
if
!
ok
{
if
!
ok
{
return
errDecodeArgs
return
NewDecodeParamError
(
"Index not a string"
)
}
}
args
.
Index
=
ethutil
.
Big
(
arg1
)
.
Int64
()
args
.
Index
=
ethutil
.
Big
(
arg1
)
.
Int64
()
}
}
...
@@ -288,23 +288,23 @@ func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -288,23 +288,23 @@ func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
arg0
,
ok
:=
obj
[
0
]
.
(
string
)
arg0
,
ok
:=
obj
[
0
]
.
(
string
)
if
!
ok
{
if
!
ok
{
return
errDecodeArgs
return
NewDecodeParamError
(
"Hash not a string"
)
}
}
args
.
Hash
=
arg0
args
.
Hash
=
arg0
if
len
(
obj
)
>
1
{
if
len
(
obj
)
>
1
{
arg1
,
ok
:=
obj
[
1
]
.
(
string
)
arg1
,
ok
:=
obj
[
1
]
.
(
string
)
if
!
ok
{
if
!
ok
{
return
errDecodeArgs
return
NewDecodeParamError
(
"Index not a string"
)
}
}
args
.
Index
=
ethutil
.
Big
(
arg1
)
.
Int64
()
args
.
Index
=
ethutil
.
Big
(
arg1
)
.
Int64
()
}
}
...
@@ -320,11 +320,11 @@ func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) {
...
@@ -320,11 +320,11 @@ func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
New
ErrorWithMessage
(
errDecodeArgs
,
err
.
Error
())
return
New
DecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
args
.
Data
=
obj
[
0
]
.
(
string
)
args
.
Data
=
obj
[
0
]
.
(
string
)
...
@@ -387,12 +387,13 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
...
@@ -387,12 +387,13 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
}
}
if
err
=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
if
err
=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
args
.
Earliest
=
int64
(
ethutil
.
Big
(
obj
[
0
]
.
FromBlock
)
.
Int64
())
args
.
Earliest
=
int64
(
ethutil
.
Big
(
obj
[
0
]
.
FromBlock
)
.
Int64
())
args
.
Latest
=
int64
(
ethutil
.
Big
(
obj
[
0
]
.
ToBlock
)
.
Int64
())
args
.
Latest
=
int64
(
ethutil
.
Big
(
obj
[
0
]
.
ToBlock
)
.
Int64
())
args
.
Max
=
int
(
ethutil
.
Big
(
obj
[
0
]
.
Limit
)
.
Int64
())
args
.
Max
=
int
(
ethutil
.
Big
(
obj
[
0
]
.
Limit
)
.
Int64
())
...
@@ -417,11 +418,11 @@ func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -417,11 +418,11 @@ func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
2
{
if
len
(
obj
)
<
2
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
2
)
}
}
args
.
Database
=
obj
[
0
]
.
(
string
)
args
.
Database
=
obj
[
0
]
.
(
string
)
args
.
Key
=
obj
[
1
]
.
(
string
)
args
.
Key
=
obj
[
1
]
.
(
string
)
...
@@ -435,10 +436,10 @@ func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -435,10 +436,10 @@ func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
func
(
a
*
DbArgs
)
requirements
()
error
{
func
(
a
*
DbArgs
)
requirements
()
error
{
if
len
(
a
.
Database
)
==
0
{
if
len
(
a
.
Database
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Database
cannot be blank"
)
return
New
ValidationError
(
"Database"
,
"
cannot be blank"
)
}
}
if
len
(
a
.
Key
)
==
0
{
if
len
(
a
.
Key
)
==
0
{
return
New
ErrorWithMessage
(
errArguments
,
"Key
cannot be blank"
)
return
New
ValidationError
(
"Key"
,
"
cannot be blank"
)
}
}
return
nil
return
nil
}
}
...
@@ -463,11 +464,11 @@ func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -463,11 +464,11 @@ func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) {
}
}
if
err
=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
if
err
=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
args
.
Payload
=
obj
[
0
]
.
Payload
args
.
Payload
=
obj
[
0
]
.
Payload
args
.
To
=
obj
[
0
]
.
To
args
.
To
=
obj
[
0
]
.
To
...
@@ -487,7 +488,7 @@ func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -487,7 +488,7 @@ func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
interface
{}
var
obj
[]
interface
{}
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
>
0
{
if
len
(
obj
)
>
0
{
...
@@ -505,11 +506,11 @@ func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -505,11 +506,11 @@ func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
string
var
obj
[]
string
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errDecodeArgs
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
args
.
Word
=
obj
[
0
]
args
.
Word
=
obj
[
0
]
...
@@ -525,11 +526,11 @@ func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -525,11 +526,11 @@ func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
string
var
obj
[]
string
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errDecodeArgs
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
args
.
Id
=
int
(
ethutil
.
Big
(
obj
[
0
])
.
Int64
())
args
.
Id
=
int
(
ethutil
.
Big
(
obj
[
0
])
.
Int64
())
...
@@ -545,11 +546,11 @@ func (args *WhisperIdentityArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -545,11 +546,11 @@ func (args *WhisperIdentityArgs) UnmarshalJSON(b []byte) (err error) {
var
obj
[]
string
var
obj
[]
string
r
:=
bytes
.
NewReader
(
b
)
r
:=
bytes
.
NewReader
(
b
)
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
if
err
:=
json
.
NewDecoder
(
r
)
.
Decode
(
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errDecodeArgs
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
args
.
Identity
=
obj
[
0
]
args
.
Identity
=
obj
[
0
]
...
@@ -571,11 +572,11 @@ func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -571,11 +572,11 @@ func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
}
}
if
err
=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
if
err
=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
if
len
(
obj
)
<
1
{
if
len
(
obj
)
<
1
{
return
errArguments
return
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
args
.
To
=
obj
[
0
]
.
To
args
.
To
=
obj
[
0
]
.
To
...
@@ -584,3 +585,31 @@ func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -584,3 +585,31 @@ func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
return
nil
return
nil
}
}
// func (req *RpcRequest) ToRegisterArgs() (string, error) {
// if len(req.Params) < 1 {
// return "", errArguments
// }
// var args string
// err := json.Unmarshal(req.Params, &args)
// if err != nil {
// return "", err
// }
// return args, nil
// }
// func (req *RpcRequest) ToWatchTxArgs() (string, error) {
// if len(req.Params) < 1 {
// return "", errArguments
// }
// var args string
// err := json.Unmarshal(req.Params, &args)
// if err != nil {
// return "", err
// }
// return args, nil
// }
rpc/http.go
View file @
094f921e
...
@@ -25,22 +25,51 @@ func JSONRPC(pipe *xeth.XEth, dataDir string) http.Handler {
...
@@ -25,22 +25,51 @@ func JSONRPC(pipe *xeth.XEth, dataDir string) http.Handler {
rpchttplogger
.
DebugDetailln
(
"Handling request"
)
rpchttplogger
.
DebugDetailln
(
"Handling request"
)
if
req
.
ContentLength
>
maxSizeReqLength
{
if
req
.
ContentLength
>
maxSizeReqLength
{
jsonerr
:=
&
RpcErrorObject
{
-
32700
,
"
Error:
Request too large"
}
jsonerr
:=
&
RpcErrorObject
{
-
32700
,
"Request too large"
}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
return
return
}
}
reqParsed
,
reqerr
:=
json
.
ParseRequestBody
(
req
)
reqParsed
,
reqerr
:=
json
.
ParseRequestBody
(
req
)
if
reqerr
!=
nil
{
switch
reqerr
.
(
type
)
{
jsonerr
:=
&
RpcErrorObject
{
-
32700
,
"Error: Could not parse request"
}
case
nil
:
break
case
*
DecodeParamError
:
jsonerr
:=
&
RpcErrorObject
{
-
32602
,
reqerr
.
Error
()}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
return
case
*
InsufficientParamsError
:
jsonerr
:=
&
RpcErrorObject
{
-
32602
,
reqerr
.
Error
()}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
return
case
*
ValidationError
:
jsonerr
:=
&
RpcErrorObject
{
-
32602
,
reqerr
.
Error
()}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
return
default
:
jsonerr
:=
&
RpcErrorObject
{
-
32700
,
"Could not parse request"
}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
return
return
}
}
var
response
interface
{}
var
response
interface
{}
reserr
:=
api
.
GetRequestReply
(
&
reqParsed
,
&
response
)
reserr
:=
api
.
GetRequestReply
(
&
reqParsed
,
&
response
)
if
reserr
!=
nil
{
switch
reserr
.
(
type
)
{
rpchttplogger
.
Warnln
(
reserr
)
case
nil
:
break
case
*
NotImplementedError
:
jsonerr
:=
&
RpcErrorObject
{
-
32601
,
reserr
.
Error
()}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
reqParsed
.
ID
,
Error
:
jsonerr
})
return
case
*
InsufficientParamsError
:
jsonerr
:=
&
RpcErrorObject
{
-
32602
,
reserr
.
Error
()}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
reqParsed
.
ID
,
Error
:
jsonerr
})
return
case
*
ValidationError
:
jsonerr
:=
&
RpcErrorObject
{
-
32602
,
reserr
.
Error
()}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
reqParsed
.
ID
,
Error
:
jsonerr
})
return
default
:
jsonerr
:=
&
RpcErrorObject
{
-
32603
,
reserr
.
Error
()}
jsonerr
:=
&
RpcErrorObject
{
-
32603
,
reserr
.
Error
()}
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
reqParsed
.
ID
,
Error
:
jsonerr
})
json
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
reqParsed
.
ID
,
Error
:
jsonerr
})
return
return
...
...
rpc/messages.go
View file @
094f921e
...
@@ -18,16 +18,69 @@ package rpc
...
@@ -18,16 +18,69 @@ package rpc
import
(
import
(
"encoding/json"
"encoding/json"
"errors"
"fmt"
"fmt"
)
)
var
(
type
InsufficientParamsError
struct
{
errArguments
=
errors
.
New
(
"Error: Insufficient arguments"
)
have
int
errNotImplemented
=
errors
.
New
(
"Error: Method not implemented"
)
want
int
errUnknown
=
errors
.
New
(
"Error: Unknown error"
)
}
errDecodeArgs
=
errors
.
New
(
"Error: Could not decode arguments"
)
)
func
(
e
*
InsufficientParamsError
)
Error
()
string
{
return
fmt
.
Sprintf
(
"insufficient params, want %d have %d"
,
e
.
want
,
e
.
have
)
}
func
NewInsufficientParamsError
(
have
int
,
want
int
)
*
InsufficientParamsError
{
return
&
InsufficientParamsError
{
have
:
have
,
want
:
want
,
}
}
type
NotImplementedError
struct
{
Method
string
}
func
(
e
*
NotImplementedError
)
Error
()
string
{
return
fmt
.
Sprintf
(
"%s method not implemented"
,
e
.
Method
)
}
func
NewNotImplementedError
(
method
string
)
*
NotImplementedError
{
return
&
NotImplementedError
{
Method
:
method
,
}
}
type
DecodeParamError
struct
{
err
string
}
func
(
e
*
DecodeParamError
)
Error
()
string
{
return
fmt
.
Sprintf
(
"could not decode, %s"
,
e
.
err
)
}
func
NewDecodeParamError
(
errstr
string
)
error
{
return
&
DecodeParamError
{
err
:
errstr
,
}
}
type
ValidationError
struct
{
ParamName
string
msg
string
}
func
(
e
*
ValidationError
)
Error
()
string
{
return
fmt
.
Sprintf
(
"%s not valid, %s"
,
e
.
ParamName
,
e
.
msg
)
}
func
NewValidationError
(
param
string
,
msg
string
)
error
{
return
&
ValidationError
{
ParamName
:
param
,
msg
:
msg
,
}
}
type
RpcRequest
struct
{
type
RpcRequest
struct
{
ID
interface
{}
`json:"id"`
ID
interface
{}
`json:"id"`
...
@@ -53,35 +106,3 @@ type RpcErrorObject struct {
...
@@ -53,35 +106,3 @@ type RpcErrorObject struct {
Message
string
`json:"message"`
Message
string
`json:"message"`
// Data interface{} `json:"data"`
// Data interface{} `json:"data"`
}
}
func
NewErrorWithMessage
(
err
error
,
msg
string
)
error
{
return
fmt
.
Errorf
(
"%s: %s"
,
err
.
Error
(),
msg
)
}
// func (req *RpcRequest) ToRegisterArgs() (string, error) {
// if len(req.Params) < 1 {
// return "", errArguments
// }
// var args string
// err := json.Unmarshal(req.Params, &args)
// if err != nil {
// return "", err
// }
// return args, nil
// }
// func (req *RpcRequest) ToWatchTxArgs() (string, error) {
// if len(req.Params) < 1 {
// return "", errArguments
// }
// var args string
// err := json.Unmarshal(req.Params, &args)
// if err != nil {
// return "", err
// }
// return args, nil
// }
rpc/util.go
View file @
094f921e
...
@@ -42,7 +42,7 @@ type JsonWrapper struct{}
...
@@ -42,7 +42,7 @@ type JsonWrapper struct{}
func
UnmarshalRawMessages
(
b
[]
byte
,
iface
interface
{},
number
*
int64
)
(
err
error
)
{
func
UnmarshalRawMessages
(
b
[]
byte
,
iface
interface
{},
number
*
int64
)
(
err
error
)
{
var
data
[]
json
.
RawMessage
var
data
[]
json
.
RawMessage
if
err
=
json
.
Unmarshal
(
b
,
&
data
);
err
!=
nil
&&
len
(
data
)
==
0
{
if
err
=
json
.
Unmarshal
(
b
,
&
data
);
err
!=
nil
&&
len
(
data
)
==
0
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
// Number index determines the index in the array for a possible block number
// Number index determines the index in the array for a possible block number
...
@@ -74,7 +74,7 @@ func UnmarshalRawMessages(b []byte, iface interface{}, number *int64) (err error
...
@@ -74,7 +74,7 @@ func UnmarshalRawMessages(b []byte, iface interface{}, number *int64) (err error
fallthrough
fallthrough
default
:
default
:
if
err
=
json
.
Unmarshal
(
data
[
0
],
iface
);
err
!=
nil
{
if
err
=
json
.
Unmarshal
(
data
[
0
],
iface
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
numberIndex
=
1
numberIndex
=
1
}
}
...
@@ -82,7 +82,7 @@ func UnmarshalRawMessages(b []byte, iface interface{}, number *int64) (err error
...
@@ -82,7 +82,7 @@ func UnmarshalRawMessages(b []byte, iface interface{}, number *int64) (err error
// <0 index means out of bound for block number
// <0 index means out of bound for block number
if
numberIndex
>=
0
&&
len
(
data
)
>
numberIndex
{
if
numberIndex
>=
0
&&
len
(
data
)
>
numberIndex
{
if
err
=
blockNumber
(
data
[
numberIndex
],
number
);
err
!=
nil
{
if
err
=
blockNumber
(
data
[
numberIndex
],
number
);
err
!=
nil
{
return
errDecodeArgs
return
NewDecodeParamError
(
err
.
Error
())
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment