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
d790229a
Commit
d790229a
authored
Jan 25, 2015
by
Taylor Gerring
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move HTTP transport to sub package of RPC
parent
7a894e37
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
66 additions
and
53 deletions
+66
-53
cmd.go
cmd/utils/cmd.go
+2
-2
backend.go
eth/backend.go
+1
-1
server.go
rpc/http/server.go
+34
-31
json.go
rpc/json.go
+10
-9
message.go
rpc/message.go
+7
-7
packages.go
rpc/packages.go
+12
-3
No files found.
cmd/utils/cmd.go
View file @
d790229a
...
@@ -38,7 +38,7 @@ import (
...
@@ -38,7 +38,7 @@ import (
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/miner"
"github.com/ethereum/go-ethereum/miner"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc
"
rpchttp
"github.com/ethereum/go-ethereum/rpc/http
"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/websocket"
"github.com/ethereum/go-ethereum/websocket"
"github.com/ethereum/go-ethereum/xeth"
"github.com/ethereum/go-ethereum/xeth"
...
@@ -193,7 +193,7 @@ func KeyTasks(keyManager *crypto.KeyManager, KeyRing string, GenAddr bool, Secre
...
@@ -193,7 +193,7 @@ func KeyTasks(keyManager *crypto.KeyManager, KeyRing string, GenAddr bool, Secre
func
StartRpc
(
ethereum
*
eth
.
Ethereum
,
RpcPort
int
)
{
func
StartRpc
(
ethereum
*
eth
.
Ethereum
,
RpcPort
int
)
{
var
err
error
var
err
error
ethereum
.
RpcServer
,
err
=
rpc
.
NewJsonRpc
Server
(
xeth
.
NewJSXEth
(
ethereum
),
RpcPort
)
ethereum
.
RpcServer
,
err
=
rpc
http
.
NewRpcHttp
Server
(
xeth
.
NewJSXEth
(
ethereum
),
RpcPort
)
if
err
!=
nil
{
if
err
!=
nil
{
clilogger
.
Errorf
(
"Could not start RPC interface (port %v): %v"
,
RpcPort
,
err
)
clilogger
.
Errorf
(
"Could not start RPC interface (port %v): %v"
,
RpcPort
,
err
)
}
else
{
}
else
{
...
...
eth/backend.go
View file @
d790229a
...
@@ -66,7 +66,7 @@ type Ethereum struct {
...
@@ -66,7 +66,7 @@ type Ethereum struct {
txSub
event
.
Subscription
txSub
event
.
Subscription
blockSub
event
.
Subscription
blockSub
event
.
Subscription
RpcServer
*
rpc
.
Json
RpcServer
RpcServer
rpc
.
RpcServer
keyManager
*
crypto
.
KeyManager
keyManager
*
crypto
.
KeyManager
clientIdentity
p2p
.
ClientIdentity
clientIdentity
p2p
.
ClientIdentity
...
...
rpc/server.go
→
rpc/
http/
server.go
View file @
d790229a
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
*/
*/
package
rpc
package
rpc
http
import
(
import
(
"fmt"
"fmt"
...
@@ -22,18 +22,34 @@ import (
...
@@ -22,18 +22,34 @@ import (
"net/http"
"net/http"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/xeth"
"github.com/ethereum/go-ethereum/xeth"
)
)
var
jsonlogger
=
logger
.
NewLogger
(
"JSON"
)
var
rpchttplogger
=
logger
.
NewLogger
(
"RPC-HTTP"
)
var
JSON
rpc
.
JsonWrapper
type
JsonRpcServer
struct
{
func
NewRpcHttpServer
(
pipe
*
xeth
.
JSXEth
,
port
int
)
(
*
RpcHttpServer
,
error
)
{
sport
:=
fmt
.
Sprintf
(
":%d"
,
port
)
l
,
err
:=
net
.
Listen
(
"tcp"
,
sport
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
RpcHttpServer
{
listener
:
l
,
quit
:
make
(
chan
bool
),
pipe
:
pipe
,
},
nil
}
type
RpcHttpServer
struct
{
quit
chan
bool
quit
chan
bool
listener
net
.
Listener
listener
net
.
Listener
pipe
*
xeth
.
JSXEth
pipe
*
xeth
.
JSXEth
}
}
func
(
s
*
JsonRpc
Server
)
exitHandler
()
{
func
(
s
*
RpcHttp
Server
)
exitHandler
()
{
out
:
out
:
for
{
for
{
select
{
select
{
...
@@ -43,61 +59,48 @@ out:
...
@@ -43,61 +59,48 @@ out:
}
}
}
}
jsonlogger
.
Infoln
(
"Shutdown JSON-RPC
server"
)
rpchttplogger
.
Infoln
(
"Shutdown RPC-HTTP
server"
)
}
}
func
(
s
*
JsonRpc
Server
)
Stop
()
{
func
(
s
*
RpcHttp
Server
)
Stop
()
{
close
(
s
.
quit
)
close
(
s
.
quit
)
}
}
func
(
s
*
JsonRpc
Server
)
Start
()
{
func
(
s
*
RpcHttp
Server
)
Start
()
{
jsonlogger
.
Infoln
(
"Starting JSON-RPC
server"
)
rpchttplogger
.
Infoln
(
"Starting RPC-HTTP
server"
)
go
s
.
exitHandler
()
go
s
.
exitHandler
()
h
:=
apiHandler
(
&
EthereumApi
{
pipe
:
s
.
pipe
})
api
:=
rpc
.
NewEthereumApi
(
s
.
pipe
)
h
:=
s
.
apiHandler
(
api
)
http
.
Handle
(
"/"
,
h
)
http
.
Handle
(
"/"
,
h
)
err
:=
http
.
Serve
(
s
.
listener
,
nil
)
err
:=
http
.
Serve
(
s
.
listener
,
nil
)
// FIX Complains on shutdown due to listner already being closed
// FIX Complains on shutdown due to listner already being closed
if
err
!=
nil
{
if
err
!=
nil
{
jsonlogger
.
Errorln
(
"Error on JSON-RPC
interface:"
,
err
)
rpchttplogger
.
Errorln
(
"Error on RPC-HTTP
interface:"
,
err
)
}
}
}
}
func
NewJsonRpcServer
(
pipe
*
xeth
.
JSXEth
,
port
int
)
(
*
JsonRpcServer
,
error
)
{
func
(
s
*
RpcHttpServer
)
apiHandler
(
xeth
*
rpc
.
EthereumApi
)
http
.
Handler
{
sport
:=
fmt
.
Sprintf
(
":%d"
,
port
)
l
,
err
:=
net
.
Listen
(
"tcp"
,
sport
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
JsonRpcServer
{
listener
:
l
,
quit
:
make
(
chan
bool
),
pipe
:
pipe
,
},
nil
}
func
apiHandler
(
xeth
*
EthereumApi
)
http
.
Handler
{
fn
:=
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
fn
:=
func
(
w
http
.
ResponseWriter
,
req
*
http
.
Request
)
{
json
logger
.
Debugln
(
"Handling request"
)
rpchttp
logger
.
Debugln
(
"Handling request"
)
reqParsed
,
reqerr
:=
JSON
.
ParseRequestBody
(
req
)
reqParsed
,
reqerr
:=
JSON
.
ParseRequestBody
(
req
)
if
reqerr
!=
nil
{
if
reqerr
!=
nil
{
JSON
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
reqParsed
.
JsonRpc
,
ID
:
reqParsed
.
ID
,
Error
:
true
,
ErrorText
:
ErrorParseRequest
})
JSON
.
Send
(
w
,
&
rpc
.
RpcErrorResponse
{
JsonRpc
:
reqParsed
.
JsonRpc
,
ID
:
reqParsed
.
ID
,
Error
:
true
,
ErrorText
:
rpc
.
ErrorParseRequest
})
return
return
}
}
var
response
interface
{}
var
response
interface
{}
reserr
:=
xeth
.
GetRequestReply
(
&
reqParsed
,
&
response
)
reserr
:=
xeth
.
GetRequestReply
(
&
reqParsed
,
&
response
)
if
reserr
!=
nil
{
if
reserr
!=
nil
{
json
logger
.
Errorln
(
reserr
)
rpchttp
logger
.
Errorln
(
reserr
)
JSON
.
Send
(
w
,
&
RpcErrorResponse
{
JsonRpc
:
reqParsed
.
JsonRpc
,
ID
:
reqParsed
.
ID
,
Error
:
true
,
ErrorText
:
reserr
.
Error
()})
JSON
.
Send
(
w
,
&
rpc
.
RpcErrorResponse
{
JsonRpc
:
reqParsed
.
JsonRpc
,
ID
:
reqParsed
.
ID
,
Error
:
true
,
ErrorText
:
reserr
.
Error
()})
return
return
}
}
json
logger
.
Debugf
(
"Generated response: %T %s"
,
response
,
response
)
rpchttp
logger
.
Debugf
(
"Generated response: %T %s"
,
response
,
response
)
JSON
.
Send
(
w
,
&
RpcSuccessResponse
{
JsonRpc
:
reqParsed
.
JsonRpc
,
ID
:
reqParsed
.
ID
,
Error
:
false
,
Result
:
response
})
JSON
.
Send
(
w
,
&
rpc
.
RpcSuccessResponse
{
JsonRpc
:
reqParsed
.
JsonRpc
,
ID
:
reqParsed
.
ID
,
Error
:
false
,
Result
:
response
})
}
}
return
http
.
HandlerFunc
(
fn
)
return
http
.
HandlerFunc
(
fn
)
...
...
rpc/json.go
View file @
d790229a
...
@@ -18,25 +18,28 @@ package rpc
...
@@ -18,25 +18,28 @@ package rpc
import
(
import
(
"encoding/json"
"encoding/json"
"github.com/ethereum/go-ethereum/logger"
"io"
"io"
"net/http"
"net/http"
)
)
type
jsonWrapper
struct
{}
var
rpclogger
=
logger
.
NewLogger
(
"RPC"
)
func
(
self
jsonWrapper
)
Send
(
writer
io
.
Writer
,
v
interface
{})
(
n
int
,
err
error
)
{
type
JsonWrapper
struct
{}
func
(
self
JsonWrapper
)
Send
(
writer
io
.
Writer
,
v
interface
{})
(
n
int
,
err
error
)
{
var
payload
[]
byte
var
payload
[]
byte
payload
,
err
=
json
.
Marshal
(
v
)
payload
,
err
=
json
.
Marshal
(
v
)
if
err
!=
nil
{
if
err
!=
nil
{
json
logger
.
Fatalln
(
"Error marshalling JSON"
,
err
)
rpc
logger
.
Fatalln
(
"Error marshalling JSON"
,
err
)
return
0
,
err
return
0
,
err
}
}
json
logger
.
Infof
(
"Sending payload: %s"
,
payload
)
rpc
logger
.
Infof
(
"Sending payload: %s"
,
payload
)
return
writer
.
Write
(
payload
)
return
writer
.
Write
(
payload
)
}
}
func
(
self
j
sonWrapper
)
ParseRequestBody
(
req
*
http
.
Request
)
(
RpcRequest
,
error
)
{
func
(
self
J
sonWrapper
)
ParseRequestBody
(
req
*
http
.
Request
)
(
RpcRequest
,
error
)
{
var
reqParsed
RpcRequest
var
reqParsed
RpcRequest
// Convert JSON to native types
// Convert JSON to native types
...
@@ -46,12 +49,10 @@ func (self jsonWrapper) ParseRequestBody(req *http.Request) (RpcRequest, error)
...
@@ -46,12 +49,10 @@ func (self jsonWrapper) ParseRequestBody(req *http.Request) (RpcRequest, error)
err
:=
d
.
Decode
(
&
reqParsed
)
err
:=
d
.
Decode
(
&
reqParsed
)
if
err
!=
nil
{
if
err
!=
nil
{
json
logger
.
Errorln
(
"Error decoding JSON: "
,
err
)
rpc
logger
.
Errorln
(
"Error decoding JSON: "
,
err
)
return
reqParsed
,
err
return
reqParsed
,
err
}
}
json
logger
.
DebugDetailf
(
"Parsed request: %s"
,
reqParsed
)
rpc
logger
.
DebugDetailf
(
"Parsed request: %s"
,
reqParsed
)
return
reqParsed
,
nil
return
reqParsed
,
nil
}
}
var
JSON
jsonWrapper
rpc/message.go
View file @
d790229a
...
@@ -67,7 +67,7 @@ func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) {
...
@@ -67,7 +67,7 @@ func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
}
json
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
rpc
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
return
args
,
nil
}
}
...
@@ -82,7 +82,7 @@ func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) {
...
@@ -82,7 +82,7 @@ func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
}
json
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
rpc
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
return
args
,
nil
}
}
...
@@ -97,7 +97,7 @@ func (req *RpcRequest) ToPushTxArgs() (*PushTxArgs, error) {
...
@@ -97,7 +97,7 @@ func (req *RpcRequest) ToPushTxArgs() (*PushTxArgs, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
}
json
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
rpc
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
return
args
,
nil
}
}
...
@@ -113,7 +113,7 @@ func (req *RpcRequest) ToGetStorageArgs() (*GetStorageArgs, error) {
...
@@ -113,7 +113,7 @@ func (req *RpcRequest) ToGetStorageArgs() (*GetStorageArgs, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
}
json
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
rpc
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
return
args
,
nil
}
}
...
@@ -128,7 +128,7 @@ func (req *RpcRequest) ToGetTxCountArgs() (*GetTxCountArgs, error) {
...
@@ -128,7 +128,7 @@ func (req *RpcRequest) ToGetTxCountArgs() (*GetTxCountArgs, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
}
json
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
rpc
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
return
args
,
nil
}
}
...
@@ -143,7 +143,7 @@ func (req *RpcRequest) ToGetBalanceArgs() (*GetBalanceArgs, error) {
...
@@ -143,7 +143,7 @@ func (req *RpcRequest) ToGetBalanceArgs() (*GetBalanceArgs, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
}
json
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
rpc
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
return
args
,
nil
}
}
...
@@ -158,7 +158,7 @@ func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) {
...
@@ -158,7 +158,7 @@ func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) {
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
return
nil
,
NewErrorResponse
(
ErrorDecodeArgs
)
}
}
json
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
rpc
logger
.
DebugDetailf
(
"%T %v"
,
args
,
args
)
return
args
,
nil
return
args
,
nil
}
}
...
...
rpc/packages.go
View file @
d790229a
...
@@ -33,6 +33,15 @@ import (
...
@@ -33,6 +33,15 @@ import (
"github.com/ethereum/go-ethereum/xeth"
"github.com/ethereum/go-ethereum/xeth"
)
)
type
RpcServer
interface
{
Start
()
Stop
()
}
func
NewEthereumApi
(
xeth
*
xeth
.
JSXEth
)
*
EthereumApi
{
return
&
EthereumApi
{
pipe
:
xeth
}
}
type
EthereumApi
struct
{
type
EthereumApi
struct
{
pipe
*
xeth
.
JSXEth
pipe
*
xeth
.
JSXEth
}
}
...
@@ -103,7 +112,7 @@ func (p *EthereumApi) GetStorageAt(args *GetStorageArgs, reply *interface{}) err
...
@@ -103,7 +112,7 @@ func (p *EthereumApi) GetStorageAt(args *GetStorageArgs, reply *interface{}) err
i
,
_
:=
new
(
big
.
Int
)
.
SetString
(
args
.
Key
,
10
)
i
,
_
:=
new
(
big
.
Int
)
.
SetString
(
args
.
Key
,
10
)
hx
=
ethutil
.
Bytes2Hex
(
i
.
Bytes
())
hx
=
ethutil
.
Bytes2Hex
(
i
.
Bytes
())
}
}
json
logger
.
Debugf
(
"GetStorageAt(%s, %s)
\n
"
,
args
.
Address
,
hx
)
rpc
logger
.
Debugf
(
"GetStorageAt(%s, %s)
\n
"
,
args
.
Address
,
hx
)
value
:=
state
.
Storage
(
ethutil
.
Hex2Bytes
(
hx
))
value
:=
state
.
Storage
(
ethutil
.
Hex2Bytes
(
hx
))
*
reply
=
GetStorageAtRes
{
Address
:
args
.
Address
,
Key
:
args
.
Key
,
Value
:
value
.
Str
()}
*
reply
=
GetStorageAtRes
{
Address
:
args
.
Address
,
Key
:
args
.
Key
,
Value
:
value
.
Str
()}
return
nil
return
nil
...
@@ -159,7 +168,7 @@ func (p *EthereumApi) GetCodeAt(args *GetCodeAtArgs, reply *interface{}) error {
...
@@ -159,7 +168,7 @@ func (p *EthereumApi) GetCodeAt(args *GetCodeAtArgs, reply *interface{}) error {
func
(
p
*
EthereumApi
)
GetRequestReply
(
req
*
RpcRequest
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
GetRequestReply
(
req
*
RpcRequest
,
reply
*
interface
{})
error
{
// Spec at https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC
// Spec at https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC
json
logger
.
DebugDetailf
(
"%T %s"
,
req
.
Params
,
req
.
Params
)
rpc
logger
.
DebugDetailf
(
"%T %s"
,
req
.
Params
,
req
.
Params
)
switch
req
.
Method
{
switch
req
.
Method
{
case
"eth_coinbase"
:
case
"eth_coinbase"
:
return
p
.
GetCoinbase
(
reply
)
return
p
.
GetCoinbase
(
reply
)
...
@@ -203,6 +212,6 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -203,6 +212,6 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
return
NewErrorResponse
(
ErrorNotImplemented
)
return
NewErrorResponse
(
ErrorNotImplemented
)
}
}
json
logger
.
DebugDetailf
(
"Reply: %T %s"
,
reply
,
reply
)
rpc
logger
.
DebugDetailf
(
"Reply: %T %s"
,
reply
,
reply
)
return
nil
return
nil
}
}
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