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
52ccaa60
Commit
52ccaa60
authored
Feb 24, 2015
by
Jeffrey Wilcke
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #379 from tgerring/rpcupdates
RPC cleanup
parents
ed90efb0
2e3a6e25
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
127 additions
and
170 deletions
+127
-170
api.go
rpc/api.go
+38
-40
api_test.go
rpc/api_test.go
+0
-0
args.go
rpc/args.go
+18
-48
server.go
rpc/http/server.go
+1
-1
messages.go
rpc/messages.go
+69
-80
server.go
rpc/ws/server.go
+1
-1
No files found.
rpc/
packages
.go
→
rpc/
api
.go
View file @
52ccaa60
...
...
@@ -9,7 +9,6 @@ For each request type, define the following:
package
rpc
import
(
"fmt"
"math/big"
"strings"
"sync"
...
...
@@ -26,8 +25,9 @@ import (
)
var
(
defaultGasPrice
=
big
.
NewInt
(
10000000000000
)
defaultGas
=
big
.
NewInt
(
10000
)
defaultGasPrice
=
big
.
NewInt
(
10000000000000
)
defaultGas
=
big
.
NewInt
(
10000
)
filterTickerTime
=
15
*
time
.
Second
)
type
EthereumApi
struct
{
...
...
@@ -63,6 +63,39 @@ func NewEthereumApi(eth *xeth.XEth) *EthereumApi {
return
api
}
func
(
self
*
EthereumApi
)
start
()
{
timer
:=
time
.
NewTicker
(
filterTickerTime
)
done
:
for
{
select
{
case
<-
timer
.
C
:
self
.
logMut
.
Lock
()
self
.
messagesMut
.
Lock
()
for
id
,
filter
:=
range
self
.
logs
{
if
time
.
Since
(
filter
.
timeout
)
>
20
*
time
.
Second
{
self
.
filterManager
.
UninstallFilter
(
id
)
delete
(
self
.
logs
,
id
)
}
}
for
id
,
filter
:=
range
self
.
messages
{
if
time
.
Since
(
filter
.
timeout
)
>
20
*
time
.
Second
{
self
.
xeth
.
Whisper
()
.
Unwatch
(
id
)
delete
(
self
.
messages
,
id
)
}
}
self
.
logMut
.
Unlock
()
self
.
messagesMut
.
Unlock
()
case
<-
self
.
quit
:
break
done
}
}
}
func
(
self
*
EthereumApi
)
stop
()
{
close
(
self
.
quit
)
}
func
(
self
*
EthereumApi
)
Register
(
args
string
,
reply
*
interface
{})
error
{
self
.
regmut
.
Lock
()
defer
self
.
regmut
.
Unlock
()
...
...
@@ -410,7 +443,7 @@ func (p *EthereumApi) WhisperMessages(id int, reply *interface{}) error {
}
func
(
p
*
EthereumApi
)
GetRequestReply
(
req
*
RpcRequest
,
reply
*
interface
{})
error
{
// Spec at https://github.com/ethereum/wiki/wiki/Generic-ON-RPC
// Spec at https://github.com/ethereum/wiki/wiki/Generic-
JS
ON-RPC
rpclogger
.
DebugDetailf
(
"%T %s"
,
req
.
Params
,
req
.
Params
)
switch
req
.
Method
{
case
"eth_coinbase"
:
...
...
@@ -595,44 +628,9 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
}
return
p
.
WhisperMessages
(
args
,
reply
)
default
:
return
NewError
Response
(
fmt
.
Sprintf
(
"%v %s"
,
ErrorNotImplemented
,
req
.
Method
)
)
return
NewError
WithMessage
(
errNotImplemented
,
req
.
Method
)
}
rpclogger
.
DebugDetailf
(
"Reply: %T %s"
,
reply
,
reply
)
return
nil
}
var
filterTickerTime
=
15
*
time
.
Second
func
(
self
*
EthereumApi
)
start
()
{
timer
:=
time
.
NewTicker
(
filterTickerTime
)
done
:
for
{
select
{
case
<-
timer
.
C
:
self
.
logMut
.
Lock
()
self
.
messagesMut
.
Lock
()
for
id
,
filter
:=
range
self
.
logs
{
if
time
.
Since
(
filter
.
timeout
)
>
20
*
time
.
Second
{
self
.
filterManager
.
UninstallFilter
(
id
)
delete
(
self
.
logs
,
id
)
}
}
for
id
,
filter
:=
range
self
.
messages
{
if
time
.
Since
(
filter
.
timeout
)
>
20
*
time
.
Second
{
self
.
xeth
.
Whisper
()
.
Unwatch
(
id
)
delete
(
self
.
messages
,
id
)
}
}
self
.
logMut
.
Unlock
()
self
.
messagesMut
.
Unlock
()
case
<-
self
.
quit
:
break
done
}
}
}
func
(
self
*
EthereumApi
)
stop
()
{
close
(
self
.
quit
)
}
rpc/
packages
_test.go
→
rpc/
api
_test.go
View file @
52ccaa60
File moved
rpc/args.go
View file @
52ccaa60
...
...
@@ -19,7 +19,7 @@ func (obj *GetBlockArgs) UnmarshalJSON(b []byte) (err error) {
obj
.
Hash
=
argstr
return
}
return
NewErrorResponse
(
ErrorDecodeArgs
)
return
errDecodeArgs
}
type
NewTxArgs
struct
{
...
...
@@ -57,7 +57,7 @@ func (obj *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
return
}
return
NewErrorResponse
(
ErrorDecodeArgs
)
return
errDecodeArgs
}
type
PushTxArgs
struct
{
...
...
@@ -70,12 +70,12 @@ func (obj *PushTxArgs) UnmarshalJSON(b []byte) (err error) {
obj
.
Tx
=
arg0
return
}
return
NewErrorResponse
(
ErrorDecodeArgs
)
return
errDecodeArgs
}
func
(
a
*
PushTxArgs
)
requirementsPushTx
()
error
{
if
a
.
Tx
==
""
{
return
NewError
Response
(
"PushTx requires a 'tx' as argument"
)
return
NewError
WithMessage
(
errArguments
,
"PushTx requires a 'tx' as argument"
)
}
return
nil
}
...
...
@@ -86,14 +86,14 @@ type GetStorageArgs struct {
func
(
obj
*
GetStorageArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
if
err
=
json
.
Unmarshal
(
b
,
&
obj
.
Address
);
err
!=
nil
{
return
NewErrorResponse
(
ErrorDecodeArgs
)
return
errDecodeArgs
}
return
}
func
(
a
*
GetStorageArgs
)
requirements
()
error
{
if
len
(
a
.
Address
)
==
0
{
return
NewError
Response
(
"GetStorageAt requires an 'address' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"GetStorageAt requires an 'address' value as argument"
)
}
return
nil
}
...
...
@@ -109,64 +109,39 @@ func (obj *GetStateArgs) UnmarshalJSON(b []byte) (err error) {
obj
.
Address
=
arg0
return
}
return
NewErrorResponse
(
ErrorDecodeArgs
)
return
errDecodeArgs
}
func
(
a
*
GetStateArgs
)
requirements
()
error
{
if
a
.
Address
==
""
{
return
NewError
Response
(
"GetStorageAt requires an 'address' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"GetStorageAt requires an 'address' value as argument"
)
}
if
a
.
Key
==
""
{
return
NewError
Response
(
"GetStorageAt requires an 'key' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"GetStorageAt requires an 'key' value as argument"
)
}
return
nil
}
type
GetStorageAtRes
struct
{
Key
string
`json:"key"`
Value
string
`json:"value"`
}
type
GetTxCountArgs
struct
{
Address
string
`json:"address"`
}
// type GetTxCountRes struct {
// Nonce int `json:"nonce"`
// }
func
(
obj
*
GetTxCountArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
arg0
:=
""
if
err
=
json
.
Unmarshal
(
b
,
&
arg0
);
err
==
nil
{
obj
.
Address
=
arg0
return
}
return
NewErrorResponse
(
"Could not determine JSON parameters"
)
return
errDecodeArgs
}
func
(
a
*
GetTxCountArgs
)
requirements
()
error
{
if
a
.
Address
==
""
{
return
NewError
Response
(
"GetTxCountAt requires an 'address' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"GetTxCountAt requires an 'address' value as argument"
)
}
return
nil
}
// type GetPeerCountRes struct {
// PeerCount int `json:"peerCount"`
// }
// type GetListeningRes struct {
// IsListening bool `json:"isListening"`
// }
// type GetCoinbaseRes struct {
// Coinbase string `json:"coinbase"`
// }
// type GetMiningRes struct {
// IsMining bool `json:"isMining"`
// }
type
GetBalanceArgs
struct
{
Address
string
}
...
...
@@ -177,21 +152,16 @@ func (obj *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
obj
.
Address
=
arg0
return
}
return
NewErrorResponse
(
"Could not determine JSON parameters"
)
return
errDecodeArgs
}
func
(
a
*
GetBalanceArgs
)
requirements
()
error
{
if
a
.
Address
==
""
{
return
NewError
Response
(
"GetBalanceAt requires an 'address' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"GetBalanceAt requires an 'address' value as argument"
)
}
return
nil
}
type
BalanceRes
struct
{
Balance
string
`json:"balance"`
Address
string
`json:"address"`
}
type
GetCodeAtArgs
struct
{
Address
string
}
...
...
@@ -202,12 +172,12 @@ func (obj *GetCodeAtArgs) UnmarshalJSON(b []byte) (err error) {
obj
.
Address
=
arg0
return
}
return
NewErrorResponse
(
ErrorDecodeArgs
)
return
errDecodeArgs
}
func
(
a
*
GetCodeAtArgs
)
requirements
()
error
{
if
a
.
Address
==
""
{
return
NewError
Response
(
"GetCodeAt requires an 'address' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"GetCodeAt requires an 'address' value as argument"
)
}
return
nil
}
...
...
@@ -218,7 +188,7 @@ type Sha3Args struct {
func
(
obj
*
Sha3Args
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
if
err
=
json
.
Unmarshal
(
b
,
&
obj
.
Data
);
err
!=
nil
{
return
NewErrorResponse
(
ErrorDecodeArgs
)
return
errDecodeArgs
}
return
}
...
...
@@ -270,10 +240,10 @@ type DbArgs struct {
func
(
a
*
DbArgs
)
requirements
()
error
{
if
len
(
a
.
Database
)
==
0
{
return
NewError
Response
(
"DbPutArgs requires an 'Database' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"DbPutArgs requires an 'Database' value as argument"
)
}
if
len
(
a
.
Key
)
==
0
{
return
NewError
Response
(
"DbPutArgs requires an 'Key' value as argument"
)
return
NewError
WithMessage
(
errArguments
,
"DbPutArgs requires an 'Key' value as argument"
)
}
return
nil
}
...
...
rpc/http/server.go
View file @
52ccaa60
...
...
@@ -92,7 +92,7 @@ func (s *RpcHttpServer) apiHandler(api *rpc.EthereumApi) http.Handler {
reqParsed
,
reqerr
:=
JSON
.
ParseRequestBody
(
req
)
if
reqerr
!=
nil
{
jsonerr
:=
&
rpc
.
RpcErrorObject
{
-
32700
,
rpc
.
ErrorParseRequest
}
jsonerr
:=
&
rpc
.
RpcErrorObject
{
-
32700
,
"Error: Could not parse request"
}
JSON
.
Send
(
w
,
&
rpc
.
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
return
}
...
...
rpc/message.go
→
rpc/message
s
.go
View file @
52ccaa60
This diff is collapsed.
Click to expand it.
rpc/ws/server.go
View file @
52ccaa60
...
...
@@ -99,7 +99,7 @@ func sockHandler(api *rpc.EthereumApi) websocket.Handler {
// reqParsed, reqerr := JSON.ParseRequestBody(conn.Request())
if
err
:=
websocket
.
JSON
.
Receive
(
conn
,
&
reqParsed
);
err
!=
nil
{
jsonerr
:=
&
rpc
.
RpcErrorObject
{
-
32700
,
rpc
.
ErrorParseRequest
}
jsonerr
:=
&
rpc
.
RpcErrorObject
{
-
32700
,
"Error: Could not parse request"
}
JSON
.
Send
(
conn
,
&
rpc
.
RpcErrorResponse
{
JsonRpc
:
jsonrpcver
,
ID
:
nil
,
Error
:
jsonerr
})
continue
}
...
...
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