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
cc9ae399
Commit
cc9ae399
authored
Jun 09, 2015
by
Bas van Kervel
Committed by
Bas van Kervel
Jun 11, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added admin API
parent
08d72a92
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
613 additions
and
203 deletions
+613
-203
admin.go
rpc/api/admin.go
+228
-0
admin_args.go
rpc/api/admin_args.go
+107
-0
admin_js.go
rpc/api/admin_js.go
+67
-0
api.go
rpc/api/api.go
+2
-5
debug.go
rpc/api/debug.go
+19
-19
eth.go
rpc/api/eth.go
+90
-90
eth_args.go
rpc/api/eth_args.go
+15
-15
mergedapi.go
rpc/api/mergedapi.go
+7
-7
miner.go
rpc/api/miner.go
+23
-23
net.go
rpc/api/net.go
+15
-15
net_js.go
rpc/api/net_js.go
+7
-0
personal.go
rpc/api/personal.go
+15
-15
utils.go
rpc/api/utils.go
+6
-2
web3.go
rpc/api/web3.go
+12
-12
No files found.
rpc/api/admin.go
0 → 100644
View file @
cc9ae399
package
api
import
(
"fmt"
"io"
"os"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc/codec"
"github.com/ethereum/go-ethereum/rpc/shared"
"github.com/ethereum/go-ethereum/xeth"
)
const
(
AdminVersion
=
"1.0.0"
importBatchSize
=
2500
)
var
(
// mapping between methods and handlers
AdminMapping
=
map
[
string
]
adminhandler
{
// "admin_startRPC": (*adminApi).StartRPC,
// "admin_stopRPC": (*adminApi).StopRPC,
"admin_addPeer"
:
(
*
adminApi
)
.
AddPeer
,
"admin_peers"
:
(
*
adminApi
)
.
Peers
,
"admin_nodeInfo"
:
(
*
adminApi
)
.
NodeInfo
,
"admin_exportChain"
:
(
*
adminApi
)
.
ExportChain
,
"admin_importChain"
:
(
*
adminApi
)
.
ImportChain
,
"admin_verbosity"
:
(
*
adminApi
)
.
Verbosity
,
"admin_syncStatus"
:
(
*
adminApi
)
.
SyncStatus
,
"admin_setSolc"
:
(
*
adminApi
)
.
SetSolc
,
}
)
// admin callback handler
type
adminhandler
func
(
*
adminApi
,
*
shared
.
Request
)
(
interface
{},
error
)
// admin api provider
type
adminApi
struct
{
xeth
*
xeth
.
XEth
ethereum
*
eth
.
Ethereum
methods
map
[
string
]
adminhandler
codec
codec
.
ApiCoder
}
// create a new admin api instance
func
NewAdminApi
(
xeth
*
xeth
.
XEth
,
ethereum
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
adminApi
{
return
&
adminApi
{
xeth
:
xeth
,
ethereum
:
ethereum
,
methods
:
AdminMapping
,
codec
:
coder
.
New
(
nil
),
}
}
// collection with supported methods
func
(
self
*
adminApi
)
Methods
()
[]
string
{
methods
:=
make
([]
string
,
len
(
self
.
methods
))
i
:=
0
for
k
:=
range
self
.
methods
{
methods
[
i
]
=
k
i
++
}
return
methods
}
// Execute given request
func
(
self
*
adminApi
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
return
callback
(
self
,
req
)
}
return
nil
,
&
shared
.
NotImplementedError
{
req
.
Method
}
}
func
(
self
*
adminApi
)
Name
()
string
{
return
AdminApiName
}
func
(
self
*
adminApi
)
AddPeer
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
AddPeerArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
}
err
:=
self
.
ethereum
.
AddPeer
(
args
.
Url
)
if
err
==
nil
{
return
true
,
nil
}
return
false
,
err
}
func
(
self
*
adminApi
)
Peers
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
ethereum
.
PeersInfo
(),
nil
}
func
(
self
*
adminApi
)
StartRPC
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
false
,
nil
// Enable when http rpc interface is refactored to prevent import cycles
// args := new(StartRpcArgs)
// if err := self.codec.Decode(req.Params, &args); err != nil {
// return nil, shared.NewDecodeParamError(err.Error())
// }
//
// cfg := rpc.RpcConfig{
// ListenAddress: args.Address,
// ListenPort: args.Port,
// }
//
// err := rpc.Start(self.xeth, cfg)
// if err == nil {
// return true, nil
// }
// return false, err
}
func
(
self
*
adminApi
)
StopRPC
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
false
,
nil
// Enable when http rpc interface is refactored to prevent import cycles
// rpc.Stop()
// return true, nil
}
func
(
self
*
adminApi
)
NodeInfo
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
ethereum
.
NodeInfo
(),
nil
}
func
hasAllBlocks
(
chain
*
core
.
ChainManager
,
bs
[]
*
types
.
Block
)
bool
{
for
_
,
b
:=
range
bs
{
if
!
chain
.
HasBlock
(
b
.
Hash
())
{
return
false
}
}
return
true
}
func
(
self
*
adminApi
)
ImportChain
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
ImportExportChainArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
}
fh
,
err
:=
os
.
Open
(
args
.
Filename
)
if
err
!=
nil
{
return
false
,
err
}
defer
fh
.
Close
()
stream
:=
rlp
.
NewStream
(
fh
,
0
)
// Run actual the import.
blocks
:=
make
(
types
.
Blocks
,
importBatchSize
)
n
:=
0
for
batch
:=
0
;
;
batch
++
{
i
:=
0
for
;
i
<
importBatchSize
;
i
++
{
var
b
types
.
Block
if
err
:=
stream
.
Decode
(
&
b
);
err
==
io
.
EOF
{
break
}
else
if
err
!=
nil
{
return
false
,
fmt
.
Errorf
(
"at block %d: %v"
,
n
,
err
)
}
blocks
[
i
]
=
&
b
n
++
}
if
i
==
0
{
break
}
// Import the batch.
if
hasAllBlocks
(
self
.
ethereum
.
ChainManager
(),
blocks
[
:
i
])
{
continue
}
if
_
,
err
:=
self
.
ethereum
.
ChainManager
()
.
InsertChain
(
blocks
[
:
i
]);
err
!=
nil
{
return
false
,
fmt
.
Errorf
(
"invalid block %d: %v"
,
n
,
err
)
}
}
return
true
,
nil
}
func
(
self
*
adminApi
)
ExportChain
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
ImportExportChainArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
}
fh
,
err
:=
os
.
OpenFile
(
args
.
Filename
,
os
.
O_CREATE
|
os
.
O_WRONLY
|
os
.
O_TRUNC
,
os
.
ModePerm
)
if
err
!=
nil
{
return
false
,
err
}
defer
fh
.
Close
()
if
err
:=
self
.
ethereum
.
ChainManager
()
.
Export
(
fh
);
err
!=
nil
{
return
false
,
err
}
return
true
,
nil
}
func
(
self
*
adminApi
)
Verbosity
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
VerbosityArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
}
glog
.
SetV
(
args
.
Level
)
return
true
,
nil
}
func
(
self
*
adminApi
)
SyncStatus
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
pending
,
cached
:=
self
.
ethereum
.
Downloader
()
.
Stats
()
return
map
[
string
]
interface
{}{
"available"
:
pending
,
"waitingForImport"
:
cached
},
nil
}
func
(
self
*
adminApi
)
SetSolc
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
SetSolcArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
}
solc
,
err
:=
self
.
xeth
.
SetSolc
(
args
.
Path
)
if
err
!=
nil
{
return
nil
,
err
}
return
solc
.
Info
(),
nil
}
rpc/api/admin_args.go
0 → 100644
View file @
cc9ae399
package
api
import
(
"encoding/json"
"math/big"
"github.com/ethereum/go-ethereum/rpc/shared"
)
type
AddPeerArgs
struct
{
Url
string
}
func
(
args
*
AddPeerArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
var
obj
[]
interface
{}
if
err
:=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
shared
.
NewDecodeParamError
(
err
.
Error
())
}
if
len
(
obj
)
!=
1
{
return
shared
.
NewDecodeParamError
(
"Expected enode as argument"
)
}
urlstr
,
ok
:=
obj
[
0
]
.
(
string
)
if
!
ok
{
return
shared
.
NewInvalidTypeError
(
"url"
,
"not a string"
)
}
args
.
Url
=
urlstr
return
nil
}
type
ImportExportChainArgs
struct
{
Filename
string
}
func
(
args
*
ImportExportChainArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
var
obj
[]
interface
{}
if
err
:=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
shared
.
NewDecodeParamError
(
err
.
Error
())
}
if
len
(
obj
)
!=
1
{
return
shared
.
NewDecodeParamError
(
"Expected filename as argument"
)
}
filename
,
ok
:=
obj
[
0
]
.
(
string
)
if
!
ok
{
return
shared
.
NewInvalidTypeError
(
"filename"
,
"not a string"
)
}
args
.
Filename
=
filename
return
nil
}
type
VerbosityArgs
struct
{
Level
int
}
func
(
args
*
VerbosityArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
var
obj
[]
interface
{}
if
err
:=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
shared
.
NewDecodeParamError
(
err
.
Error
())
}
if
len
(
obj
)
!=
1
{
return
shared
.
NewDecodeParamError
(
"Expected enode as argument"
)
}
if
levelint
,
ok
:=
obj
[
0
]
.
(
int
);
ok
{
args
.
Level
=
levelint
}
else
if
levelstr
,
ok
:=
obj
[
0
]
.
(
string
);
ok
{
if
!
ok
{
return
shared
.
NewInvalidTypeError
(
"level"
,
"not a string"
)
}
level
,
success
:=
new
(
big
.
Int
)
.
SetString
(
levelstr
,
0
)
if
!
success
{
return
shared
.
NewDecodeParamError
(
"Unable to parse verbosity level"
)
}
args
.
Level
=
int
(
level
.
Int64
())
}
return
nil
}
type
SetSolcArgs
struct
{
Path
string
}
func
(
args
*
SetSolcArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
var
obj
[]
interface
{}
if
err
:=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
shared
.
NewDecodeParamError
(
err
.
Error
())
}
if
len
(
obj
)
!=
1
{
return
shared
.
NewDecodeParamError
(
"Expected path as argument"
)
}
if
pathstr
,
ok
:=
obj
[
0
]
.
(
string
);
ok
{
args
.
Path
=
pathstr
return
nil
}
return
shared
.
NewInvalidTypeError
(
"path"
,
"not a string"
)
}
rpc/api/admin_js.go
0 → 100644
View file @
cc9ae399
package
api
const
Admin_JS
=
`
web3.extend({
property: 'admin',
methods:
[
new web3.extend.Method({
name: 'addPeer',
call: 'admin_addPeer',
params: 1,
inputFormatter: [web3.extend.utils.formatInputString],
outputFormatter: web3.extend.formatters.formatOutputBool
}),
new web3.extend.Method({
name: 'peers',
call: 'admin_peers',
params: 0,
inputFormatter: [],
outputFormatter: function(obj) { return obj; }
}),
new web3.extend.Method({
name: 'exportChain',
call: 'admin_exportChain',
params: 1,
inputFormatter: [web3.extend.utils.formatInputString],
outputFormatter: function(obj) { return obj; }
}),
new web3.extend.Method({
name: 'importChain',
call: 'admin_importChain',
params: 1,
inputFormatter: [web3.extend.utils.formatInputString],
outputFormatter: function(obj) { return obj; }
}),
new web3.extend.Method({
name: 'verbosity',
call: 'admin_verbosity',
params: 1,
inputFormatter: [web3.extend.utils.formatInputInt],
outputFormatter: web3.extend.formatters.formatOutputBool
}),
new web3.extend.Method({
name: 'syncStatus',
call: 'admin_syncStatus',
params: 1,
inputFormatter: [web3.extend.utils.formatInputInt],
outputFormatter: function(obj) { return obj; }
}),
new web3.extend.Method({
name: 'setSolc',
call: 'admin_setSolc',
params: 1,
inputFormatter: [web3.extend.utils.formatInputString],
outputFormatter: web3.extend.formatters.formatOutputString
})
],
properties:
[
new web3.extend.Property({
name: 'nodeInfo',
getter: 'admin_nodeInfo',
outputFormatter: web3.extend.formatters.formatOutputString
})
]
});
`
rpc/api/api.go
View file @
cc9ae399
...
@@ -7,6 +7,7 @@ import (
...
@@ -7,6 +7,7 @@ import (
)
)
const
(
const
(
AdminApiName
=
"admin"
EthApiName
=
"eth"
EthApiName
=
"eth"
DebugApiName
=
"debug"
DebugApiName
=
"debug"
MergedApiName
=
"merged"
MergedApiName
=
"merged"
...
@@ -19,11 +20,7 @@ const (
...
@@ -19,11 +20,7 @@ const (
var
(
var
(
// List with all API's which are offered over the IPC interface by default
// List with all API's which are offered over the IPC interface by default
DefaultIpcApis
=
strings
.
Join
([]
string
{
DefaultIpcApis
=
strings
.
Join
([]
string
{
EthApiName
,
AdminApiName
,
EthApiName
,
DebugApiName
,
MinerApiName
,
NetApiName
,
PersonalApiName
,
Web3ApiName
,
DebugApiName
,
MinerApiName
,
NetApiName
,
PersonalApiName
,
},
","
)
},
","
)
)
)
...
...
rpc/api/debug.go
View file @
cc9ae399
...
@@ -20,20 +20,20 @@ const (
...
@@ -20,20 +20,20 @@ const (
var
(
var
(
// mapping between methods and handlers
// mapping between methods and handlers
DebugMapping
=
map
[
string
]
debughandler
{
DebugMapping
=
map
[
string
]
debughandler
{
"debug_dumpBlock"
:
(
*
D
ebugApi
)
.
DumpBlock
,
"debug_dumpBlock"
:
(
*
d
ebugApi
)
.
DumpBlock
,
"debug_getBlockRlp"
:
(
*
D
ebugApi
)
.
GetBlockRlp
,
"debug_getBlockRlp"
:
(
*
d
ebugApi
)
.
GetBlockRlp
,
"debug_printBlock"
:
(
*
D
ebugApi
)
.
PrintBlock
,
"debug_printBlock"
:
(
*
d
ebugApi
)
.
PrintBlock
,
"debug_processBlock"
:
(
*
D
ebugApi
)
.
ProcessBlock
,
"debug_processBlock"
:
(
*
d
ebugApi
)
.
ProcessBlock
,
"debug_seedHash"
:
(
*
D
ebugApi
)
.
SeedHash
,
"debug_seedHash"
:
(
*
d
ebugApi
)
.
SeedHash
,
"debug_setHead"
:
(
*
D
ebugApi
)
.
SetHead
,
"debug_setHead"
:
(
*
d
ebugApi
)
.
SetHead
,
}
}
)
)
// debug callback handler
// debug callback handler
type
debughandler
func
(
*
D
ebugApi
,
*
shared
.
Request
)
(
interface
{},
error
)
type
debughandler
func
(
*
d
ebugApi
,
*
shared
.
Request
)
(
interface
{},
error
)
// admin api provider
// admin api provider
type
D
ebugApi
struct
{
type
d
ebugApi
struct
{
xeth
*
xeth
.
XEth
xeth
*
xeth
.
XEth
ethereum
*
eth
.
Ethereum
ethereum
*
eth
.
Ethereum
methods
map
[
string
]
debughandler
methods
map
[
string
]
debughandler
...
@@ -41,8 +41,8 @@ type DebugApi struct {
...
@@ -41,8 +41,8 @@ type DebugApi struct {
}
}
// create a new debug api instance
// create a new debug api instance
func
NewDebugApi
(
xeth
*
xeth
.
XEth
,
ethereum
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
D
ebugApi
{
func
NewDebugApi
(
xeth
*
xeth
.
XEth
,
ethereum
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
d
ebugApi
{
return
&
D
ebugApi
{
return
&
d
ebugApi
{
xeth
:
xeth
,
xeth
:
xeth
,
ethereum
:
ethereum
,
ethereum
:
ethereum
,
methods
:
DebugMapping
,
methods
:
DebugMapping
,
...
@@ -51,7 +51,7 @@ func NewDebugApi(xeth *xeth.XEth, ethereum *eth.Ethereum, coder codec.Codec) *De
...
@@ -51,7 +51,7 @@ func NewDebugApi(xeth *xeth.XEth, ethereum *eth.Ethereum, coder codec.Codec) *De
}
}
// collection with supported methods
// collection with supported methods
func
(
self
*
D
ebugApi
)
Methods
()
[]
string
{
func
(
self
*
d
ebugApi
)
Methods
()
[]
string
{
methods
:=
make
([]
string
,
len
(
self
.
methods
))
methods
:=
make
([]
string
,
len
(
self
.
methods
))
i
:=
0
i
:=
0
for
k
:=
range
self
.
methods
{
for
k
:=
range
self
.
methods
{
...
@@ -62,7 +62,7 @@ func (self *DebugApi) Methods() []string {
...
@@ -62,7 +62,7 @@ func (self *DebugApi) Methods() []string {
}
}
// Execute given request
// Execute given request
func
(
self
*
D
ebugApi
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
d
ebugApi
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
return
callback
(
self
,
req
)
return
callback
(
self
,
req
)
}
}
...
@@ -70,11 +70,11 @@ func (self *DebugApi) Execute(req *shared.Request) (interface{}, error) {
...
@@ -70,11 +70,11 @@ func (self *DebugApi) Execute(req *shared.Request) (interface{}, error) {
return
nil
,
&
shared
.
NotImplementedError
{
req
.
Method
}
return
nil
,
&
shared
.
NotImplementedError
{
req
.
Method
}
}
}
func
(
self
*
D
ebugApi
)
Name
()
string
{
func
(
self
*
d
ebugApi
)
Name
()
string
{
return
DebugApiName
return
DebugApiName
}
}
func
(
self
*
D
ebugApi
)
PrintBlock
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
d
ebugApi
)
PrintBlock
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
BlockNumArg
)
args
:=
new
(
BlockNumArg
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
@@ -84,7 +84,7 @@ func (self *DebugApi) PrintBlock(req *shared.Request) (interface{}, error) {
...
@@ -84,7 +84,7 @@ func (self *DebugApi) PrintBlock(req *shared.Request) (interface{}, error) {
return
fmt
.
Sprintf
(
"%s"
,
block
),
nil
return
fmt
.
Sprintf
(
"%s"
,
block
),
nil
}
}
func
(
self
*
D
ebugApi
)
DumpBlock
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
d
ebugApi
)
DumpBlock
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
BlockNumArg
)
args
:=
new
(
BlockNumArg
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
@@ -103,7 +103,7 @@ func (self *DebugApi) DumpBlock(req *shared.Request) (interface{}, error) {
...
@@ -103,7 +103,7 @@ func (self *DebugApi) DumpBlock(req *shared.Request) (interface{}, error) {
return
stateDb
.
Dump
(),
nil
return
stateDb
.
Dump
(),
nil
}
}
func
(
self
*
D
ebugApi
)
GetBlockRlp
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
d
ebugApi
)
GetBlockRlp
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
BlockNumArg
)
args
:=
new
(
BlockNumArg
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
@@ -117,7 +117,7 @@ func (self *DebugApi) GetBlockRlp(req *shared.Request) (interface{}, error) {
...
@@ -117,7 +117,7 @@ func (self *DebugApi) GetBlockRlp(req *shared.Request) (interface{}, error) {
return
fmt
.
Sprintf
(
"%x"
,
encoded
),
err
return
fmt
.
Sprintf
(
"%x"
,
encoded
),
err
}
}
func
(
self
*
D
ebugApi
)
SetHead
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
d
ebugApi
)
SetHead
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
BlockNumArg
)
args
:=
new
(
BlockNumArg
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
@@ -133,7 +133,7 @@ func (self *DebugApi) SetHead(req *shared.Request) (interface{}, error) {
...
@@ -133,7 +133,7 @@ func (self *DebugApi) SetHead(req *shared.Request) (interface{}, error) {
return
nil
,
nil
return
nil
,
nil
}
}
func
(
self
*
D
ebugApi
)
ProcessBlock
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
d
ebugApi
)
ProcessBlock
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
BlockNumArg
)
args
:=
new
(
BlockNumArg
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
@@ -155,7 +155,7 @@ func (self *DebugApi) ProcessBlock(req *shared.Request) (interface{}, error) {
...
@@ -155,7 +155,7 @@ func (self *DebugApi) ProcessBlock(req *shared.Request) (interface{}, error) {
return
false
,
err
return
false
,
err
}
}
func
(
self
*
D
ebugApi
)
SeedHash
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
d
ebugApi
)
SeedHash
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
BlockNumArg
)
args
:=
new
(
BlockNumArg
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
...
rpc/api/eth.go
View file @
cc9ae399
This diff is collapsed.
Click to expand it.
rpc/api/eth_args.go
View file @
cc9ae399
...
@@ -226,19 +226,14 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -226,19 +226,14 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
return
nil
return
nil
}
}
type
NewSig
n
Args
struct
{
type
NewSigArgs
struct
{
From
string
From
string
Data
string
Data
string
}
}
func
(
args
*
NewSignArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
func
(
args
*
NewSigArgs
)
UnmarshalJSON
(
b
[]
byte
)
(
err
error
)
{
var
obj
[]
json
.
RawMessage
var
obj
[]
interface
{}
var
ext
struct
{
From
string
Data
string
}
// Decode byte slice to array of RawMessages
if
err
:=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
b
,
&
obj
);
err
!=
nil
{
return
shared
.
NewDecodeParamError
(
err
.
Error
())
return
shared
.
NewDecodeParamError
(
err
.
Error
())
}
}
...
@@ -248,21 +243,26 @@ func (args *NewSignArgs) UnmarshalJSON(b []byte) (err error) {
...
@@ -248,21 +243,26 @@ func (args *NewSignArgs) UnmarshalJSON(b []byte) (err error) {
return
shared
.
NewInsufficientParamsError
(
len
(
obj
),
1
)
return
shared
.
NewInsufficientParamsError
(
len
(
obj
),
1
)
}
}
// Decode 0th RawMessage to temporary struct
from
,
ok
:=
obj
[
0
]
.
(
string
)
if
err
:=
json
.
Unmarshal
(
obj
[
0
],
&
ext
);
err
!=
nil
{
if
!
ok
{
return
shared
.
New
DecodeParamError
(
err
.
Error
()
)
return
shared
.
New
InvalidTypeError
(
"from"
,
"not a string"
)
}
}
args
.
From
=
from
if
len
(
ext
.
From
)
==
0
{
if
len
(
args
.
From
)
==
0
{
return
shared
.
NewValidationError
(
"from"
,
"is required"
)
return
shared
.
NewValidationError
(
"from"
,
"is required"
)
}
}
if
len
(
ext
.
Data
)
==
0
{
data
,
ok
:=
obj
[
1
]
.
(
string
)
if
!
ok
{
return
shared
.
NewInvalidTypeError
(
"data"
,
"not a string"
)
}
args
.
Data
=
data
if
len
(
args
.
Data
)
==
0
{
return
shared
.
NewValidationError
(
"data"
,
"is required"
)
return
shared
.
NewValidationError
(
"data"
,
"is required"
)
}
}
args
.
From
=
ext
.
From
args
.
Data
=
ext
.
Data
return
nil
return
nil
}
}
...
...
rpc/api/mergedapi.go
View file @
cc9ae399
...
@@ -3,14 +3,14 @@ package api
...
@@ -3,14 +3,14 @@ package api
import
"github.com/ethereum/go-ethereum/rpc/shared"
import
"github.com/ethereum/go-ethereum/rpc/shared"
// combines multiple API's
// combines multiple API's
type
m
ergedApi
struct
{
type
M
ergedApi
struct
{
apis
[]
string
apis
[]
string
methods
map
[
string
]
EthereumApi
methods
map
[
string
]
EthereumApi
}
}
// create new merged api instance
// create new merged api instance
func
newMergedApi
(
apis
...
EthereumApi
)
*
m
ergedApi
{
func
newMergedApi
(
apis
...
EthereumApi
)
*
M
ergedApi
{
mergedApi
:=
new
(
m
ergedApi
)
mergedApi
:=
new
(
M
ergedApi
)
mergedApi
.
apis
=
make
([]
string
,
len
(
apis
))
mergedApi
.
apis
=
make
([]
string
,
len
(
apis
))
mergedApi
.
methods
=
make
(
map
[
string
]
EthereumApi
)
mergedApi
.
methods
=
make
(
map
[
string
]
EthereumApi
)
...
@@ -24,7 +24,7 @@ func newMergedApi(apis ...EthereumApi) *mergedApi {
...
@@ -24,7 +24,7 @@ func newMergedApi(apis ...EthereumApi) *mergedApi {
}
}
// Supported RPC methods
// Supported RPC methods
func
(
self
*
m
ergedApi
)
Methods
()
[]
string
{
func
(
self
*
M
ergedApi
)
Methods
()
[]
string
{
all
:=
make
([]
string
,
len
(
self
.
methods
))
all
:=
make
([]
string
,
len
(
self
.
methods
))
for
method
,
_
:=
range
self
.
methods
{
for
method
,
_
:=
range
self
.
methods
{
all
=
append
(
all
,
method
)
all
=
append
(
all
,
method
)
...
@@ -33,7 +33,7 @@ func (self *mergedApi) Methods() []string {
...
@@ -33,7 +33,7 @@ func (self *mergedApi) Methods() []string {
}
}
// Call the correct API's Execute method for the given request
// Call the correct API's Execute method for the given request
func
(
self
*
m
ergedApi
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
M
ergedApi
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
res
,
_
:=
self
.
handle
(
req
);
res
!=
nil
{
if
res
,
_
:=
self
.
handle
(
req
);
res
!=
nil
{
return
res
,
nil
return
res
,
nil
}
}
...
@@ -43,11 +43,11 @@ func (self *mergedApi) Execute(req *shared.Request) (interface{}, error) {
...
@@ -43,11 +43,11 @@ func (self *mergedApi) Execute(req *shared.Request) (interface{}, error) {
return
nil
,
shared
.
NewNotImplementedError
(
req
.
Method
)
return
nil
,
shared
.
NewNotImplementedError
(
req
.
Method
)
}
}
func
(
self
*
m
ergedApi
)
Name
()
string
{
func
(
self
*
M
ergedApi
)
Name
()
string
{
return
MergedApiName
return
MergedApiName
}
}
func
(
self
*
m
ergedApi
)
handle
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
M
ergedApi
)
handle
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
req
.
Method
==
"support_apis"
{
// provided API's
if
req
.
Method
==
"support_apis"
{
// provided API's
return
self
.
apis
,
nil
return
self
.
apis
,
nil
}
}
...
...
rpc/api/miner.go
View file @
cc9ae399
...
@@ -15,30 +15,30 @@ const (
...
@@ -15,30 +15,30 @@ const (
var
(
var
(
// mapping between methods and handlers
// mapping between methods and handlers
MinerMapping
=
map
[
string
]
minerhandler
{
MinerMapping
=
map
[
string
]
minerhandler
{
"miner_hashrate"
:
(
*
miner
)
.
Hashrate
,
"miner_hashrate"
:
(
*
miner
Api
)
.
Hashrate
,
"miner_makeDAG"
:
(
*
miner
)
.
MakeDAG
,
"miner_makeDAG"
:
(
*
miner
Api
)
.
MakeDAG
,
"miner_setExtra"
:
(
*
miner
)
.
SetExtra
,
"miner_setExtra"
:
(
*
miner
Api
)
.
SetExtra
,
"miner_setGasPrice"
:
(
*
miner
)
.
SetGasPrice
,
"miner_setGasPrice"
:
(
*
miner
Api
)
.
SetGasPrice
,
"miner_startAutoDAG"
:
(
*
miner
)
.
StartAutoDAG
,
"miner_startAutoDAG"
:
(
*
miner
Api
)
.
StartAutoDAG
,
"miner_start"
:
(
*
miner
)
.
StartMiner
,
"miner_start"
:
(
*
miner
Api
)
.
StartMiner
,
"miner_stopAutoDAG"
:
(
*
miner
)
.
StopAutoDAG
,
"miner_stopAutoDAG"
:
(
*
miner
Api
)
.
StopAutoDAG
,
"miner_stop"
:
(
*
miner
)
.
StopMiner
,
"miner_stop"
:
(
*
miner
Api
)
.
StopMiner
,
}
}
)
)
// miner callback handler
// miner callback handler
type
minerhandler
func
(
*
miner
,
*
shared
.
Request
)
(
interface
{},
error
)
type
minerhandler
func
(
*
miner
Api
,
*
shared
.
Request
)
(
interface
{},
error
)
// miner api provider
// miner api provider
type
miner
struct
{
type
miner
Api
struct
{
ethereum
*
eth
.
Ethereum
ethereum
*
eth
.
Ethereum
methods
map
[
string
]
minerhandler
methods
map
[
string
]
minerhandler
codec
codec
.
ApiCoder
codec
codec
.
ApiCoder
}
}
// create a new miner api instance
// create a new miner api instance
func
NewMinerApi
(
ethereum
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
miner
{
func
NewMinerApi
(
ethereum
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
miner
Api
{
return
&
miner
{
return
&
miner
Api
{
ethereum
:
ethereum
,
ethereum
:
ethereum
,
methods
:
MinerMapping
,
methods
:
MinerMapping
,
codec
:
coder
.
New
(
nil
),
codec
:
coder
.
New
(
nil
),
...
@@ -46,7 +46,7 @@ func NewMinerApi(ethereum *eth.Ethereum, coder codec.Codec) *miner {
...
@@ -46,7 +46,7 @@ func NewMinerApi(ethereum *eth.Ethereum, coder codec.Codec) *miner {
}
}
// Execute given request
// Execute given request
func
(
self
*
miner
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
return
callback
(
self
,
req
)
return
callback
(
self
,
req
)
}
}
...
@@ -55,7 +55,7 @@ func (self *miner) Execute(req *shared.Request) (interface{}, error) {
...
@@ -55,7 +55,7 @@ func (self *miner) Execute(req *shared.Request) (interface{}, error) {
}
}
// collection with supported methods
// collection with supported methods
func
(
self
*
miner
)
Methods
()
[]
string
{
func
(
self
*
miner
Api
)
Methods
()
[]
string
{
methods
:=
make
([]
string
,
len
(
self
.
methods
))
methods
:=
make
([]
string
,
len
(
self
.
methods
))
i
:=
0
i
:=
0
for
k
:=
range
self
.
methods
{
for
k
:=
range
self
.
methods
{
...
@@ -65,11 +65,11 @@ func (self *miner) Methods() []string {
...
@@ -65,11 +65,11 @@ func (self *miner) Methods() []string {
return
methods
return
methods
}
}
func
(
self
*
miner
)
Name
()
string
{
func
(
self
*
miner
Api
)
Name
()
string
{
return
MinerApiName
return
MinerApiName
}
}
func
(
self
*
miner
)
StartMiner
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
StartMiner
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
StartMinerArgs
)
args
:=
new
(
StartMinerArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -87,16 +87,16 @@ func (self *miner) StartMiner(req *shared.Request) (interface{}, error) {
...
@@ -87,16 +87,16 @@ func (self *miner) StartMiner(req *shared.Request) (interface{}, error) {
return
false
,
err
return
false
,
err
}
}
func
(
self
*
miner
)
StopMiner
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
StopMiner
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
self
.
ethereum
.
StopMining
()
self
.
ethereum
.
StopMining
()
return
true
,
nil
return
true
,
nil
}
}
func
(
self
*
miner
)
Hashrate
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
Hashrate
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
ethereum
.
Miner
()
.
HashRate
(),
nil
return
self
.
ethereum
.
Miner
()
.
HashRate
(),
nil
}
}
func
(
self
*
miner
)
SetExtra
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
SetExtra
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
SetExtraArgs
)
args
:=
new
(
SetExtraArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -105,7 +105,7 @@ func (self *miner) SetExtra(req *shared.Request) (interface{}, error) {
...
@@ -105,7 +105,7 @@ func (self *miner) SetExtra(req *shared.Request) (interface{}, error) {
return
true
,
nil
return
true
,
nil
}
}
func
(
self
*
miner
)
SetGasPrice
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
SetGasPrice
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
GasPriceArgs
)
args
:=
new
(
GasPriceArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
false
,
err
return
false
,
err
...
@@ -115,17 +115,17 @@ func (self *miner) SetGasPrice(req *shared.Request) (interface{}, error) {
...
@@ -115,17 +115,17 @@ func (self *miner) SetGasPrice(req *shared.Request) (interface{}, error) {
return
true
,
nil
return
true
,
nil
}
}
func
(
self
*
miner
)
StartAutoDAG
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
StartAutoDAG
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
self
.
ethereum
.
StartAutoDAG
()
self
.
ethereum
.
StartAutoDAG
()
return
true
,
nil
return
true
,
nil
}
}
func
(
self
*
miner
)
StopAutoDAG
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
StopAutoDAG
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
self
.
ethereum
.
StopAutoDAG
()
self
.
ethereum
.
StopAutoDAG
()
return
true
,
nil
return
true
,
nil
}
}
func
(
self
*
miner
)
MakeDAG
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
miner
Api
)
MakeDAG
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
MakeDAGArgs
)
args
:=
new
(
MakeDAGArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
rpc/api/net.go
View file @
cc9ae399
...
@@ -10,18 +10,18 @@ import (
...
@@ -10,18 +10,18 @@ import (
var
(
var
(
// mapping between methods and handlers
// mapping between methods and handlers
netMapping
=
map
[
string
]
nethandler
{
netMapping
=
map
[
string
]
nethandler
{
"net_id"
:
(
*
net
)
.
NetworkVersion
,
"net_id"
:
(
*
net
Api
)
.
NetworkVersion
,
"net_peerCount"
:
(
*
net
)
.
PeerCount
,
"net_peerCount"
:
(
*
net
Api
)
.
PeerCount
,
"net_listening"
:
(
*
net
)
.
IsListening
,
"net_listening"
:
(
*
net
Api
)
.
IsListening
,
"net_peers"
:
(
*
net
)
.
Peers
,
"net_peers"
:
(
*
net
Api
)
.
Peers
,
}
}
)
)
// net callback handler
// net callback handler
type
nethandler
func
(
*
net
,
*
shared
.
Request
)
(
interface
{},
error
)
type
nethandler
func
(
*
net
Api
,
*
shared
.
Request
)
(
interface
{},
error
)
// net api provider
// net api provider
type
net
struct
{
type
net
Api
struct
{
xeth
*
xeth
.
XEth
xeth
*
xeth
.
XEth
ethereum
*
eth
.
Ethereum
ethereum
*
eth
.
Ethereum
methods
map
[
string
]
nethandler
methods
map
[
string
]
nethandler
...
@@ -29,8 +29,8 @@ type net struct {
...
@@ -29,8 +29,8 @@ type net struct {
}
}
// create a new net api instance
// create a new net api instance
func
NewNetApi
(
xeth
*
xeth
.
XEth
,
eth
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
net
{
func
NewNetApi
(
xeth
*
xeth
.
XEth
,
eth
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
net
Api
{
return
&
net
{
return
&
net
Api
{
xeth
:
xeth
,
xeth
:
xeth
,
ethereum
:
eth
,
ethereum
:
eth
,
methods
:
netMapping
,
methods
:
netMapping
,
...
@@ -39,7 +39,7 @@ func NewNetApi(xeth *xeth.XEth, eth *eth.Ethereum, coder codec.Codec) *net {
...
@@ -39,7 +39,7 @@ func NewNetApi(xeth *xeth.XEth, eth *eth.Ethereum, coder codec.Codec) *net {
}
}
// collection with supported methods
// collection with supported methods
func
(
self
*
net
)
Methods
()
[]
string
{
func
(
self
*
net
Api
)
Methods
()
[]
string
{
methods
:=
make
([]
string
,
len
(
self
.
methods
))
methods
:=
make
([]
string
,
len
(
self
.
methods
))
i
:=
0
i
:=
0
for
k
:=
range
self
.
methods
{
for
k
:=
range
self
.
methods
{
...
@@ -50,7 +50,7 @@ func (self *net) Methods() []string {
...
@@ -50,7 +50,7 @@ func (self *net) Methods() []string {
}
}
// Execute given request
// Execute given request
func
(
self
*
net
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
net
Api
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
return
callback
(
self
,
req
)
return
callback
(
self
,
req
)
}
}
...
@@ -58,24 +58,24 @@ func (self *net) Execute(req *shared.Request) (interface{}, error) {
...
@@ -58,24 +58,24 @@ func (self *net) Execute(req *shared.Request) (interface{}, error) {
return
nil
,
shared
.
NewNotImplementedError
(
req
.
Method
)
return
nil
,
shared
.
NewNotImplementedError
(
req
.
Method
)
}
}
func
(
self
*
net
)
Name
()
string
{
func
(
self
*
net
Api
)
Name
()
string
{
return
NetApiName
return
NetApiName
}
}
// Network version
// Network version
func
(
self
*
net
)
NetworkVersion
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
net
Api
)
NetworkVersion
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
xeth
.
NetworkVersion
(),
nil
return
self
.
xeth
.
NetworkVersion
(),
nil
}
}
// Number of connected peers
// Number of connected peers
func
(
self
*
net
)
PeerCount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
net
Api
)
PeerCount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
xeth
.
PeerCount
(),
nil
return
self
.
xeth
.
PeerCount
(),
nil
}
}
func
(
self
*
net
)
IsListening
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
net
Api
)
IsListening
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
xeth
.
IsListening
(),
nil
return
self
.
xeth
.
IsListening
(),
nil
}
}
func
(
self
*
net
)
Peers
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
net
Api
)
Peers
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
ethereum
.
PeersInfo
(),
nil
return
self
.
ethereum
.
PeersInfo
(),
nil
}
}
rpc/api/net_js.go
View file @
cc9ae399
...
@@ -5,6 +5,13 @@ web3.extend({
...
@@ -5,6 +5,13 @@ web3.extend({
property: 'network',
property: 'network',
methods:
methods:
[
[
new web3.extend.Method({
name: 'addPeer',
call: 'net_addPeer',
params: 1,
inputFormatter: [web3.extend.utils.formatInputString],
outputFormatter: web3.extend.formatters.formatOutputBool
}),
new web3.extend.Method({
new web3.extend.Method({
name: 'id',
name: 'id',
call: 'net_id',
call: 'net_id',
...
...
rpc/api/personal.go
View file @
cc9ae399
...
@@ -13,18 +13,18 @@ import (
...
@@ -13,18 +13,18 @@ import (
var
(
var
(
// mapping between methods and handlers
// mapping between methods and handlers
personalMapping
=
map
[
string
]
personalhandler
{
personalMapping
=
map
[
string
]
personalhandler
{
"personal_listAccounts"
:
(
*
personal
)
.
ListAccounts
,
"personal_listAccounts"
:
(
*
personal
Api
)
.
ListAccounts
,
"personal_newAccount"
:
(
*
personal
)
.
NewAccount
,
"personal_newAccount"
:
(
*
personal
Api
)
.
NewAccount
,
"personal_deleteAccount"
:
(
*
personal
)
.
DeleteAccount
,
"personal_deleteAccount"
:
(
*
personal
Api
)
.
DeleteAccount
,
"personal_unlockAccount"
:
(
*
personal
)
.
UnlockAccount
,
"personal_unlockAccount"
:
(
*
personal
Api
)
.
UnlockAccount
,
}
}
)
)
// net callback handler
// net callback handler
type
personalhandler
func
(
*
personal
,
*
shared
.
Request
)
(
interface
{},
error
)
type
personalhandler
func
(
*
personal
Api
,
*
shared
.
Request
)
(
interface
{},
error
)
// net api provider
// net api provider
type
personal
struct
{
type
personal
Api
struct
{
xeth
*
xeth
.
XEth
xeth
*
xeth
.
XEth
ethereum
*
eth
.
Ethereum
ethereum
*
eth
.
Ethereum
methods
map
[
string
]
personalhandler
methods
map
[
string
]
personalhandler
...
@@ -32,8 +32,8 @@ type personal struct {
...
@@ -32,8 +32,8 @@ type personal struct {
}
}
// create a new net api instance
// create a new net api instance
func
NewPersonal
(
xeth
*
xeth
.
XEth
,
eth
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
personal
{
func
NewPersonal
Api
(
xeth
*
xeth
.
XEth
,
eth
*
eth
.
Ethereum
,
coder
codec
.
Codec
)
*
personalApi
{
return
&
personal
{
return
&
personal
Api
{
xeth
:
xeth
,
xeth
:
xeth
,
ethereum
:
eth
,
ethereum
:
eth
,
methods
:
personalMapping
,
methods
:
personalMapping
,
...
@@ -42,7 +42,7 @@ func NewPersonal(xeth *xeth.XEth, eth *eth.Ethereum, coder codec.Codec) *persona
...
@@ -42,7 +42,7 @@ func NewPersonal(xeth *xeth.XEth, eth *eth.Ethereum, coder codec.Codec) *persona
}
}
// collection with supported methods
// collection with supported methods
func
(
self
*
personal
)
Methods
()
[]
string
{
func
(
self
*
personal
Api
)
Methods
()
[]
string
{
methods
:=
make
([]
string
,
len
(
self
.
methods
))
methods
:=
make
([]
string
,
len
(
self
.
methods
))
i
:=
0
i
:=
0
for
k
:=
range
self
.
methods
{
for
k
:=
range
self
.
methods
{
...
@@ -53,7 +53,7 @@ func (self *personal) Methods() []string {
...
@@ -53,7 +53,7 @@ func (self *personal) Methods() []string {
}
}
// Execute given request
// Execute given request
func
(
self
*
personal
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
personal
Api
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
return
callback
(
self
,
req
)
return
callback
(
self
,
req
)
}
}
...
@@ -61,15 +61,15 @@ func (self *personal) Execute(req *shared.Request) (interface{}, error) {
...
@@ -61,15 +61,15 @@ func (self *personal) Execute(req *shared.Request) (interface{}, error) {
return
nil
,
shared
.
NewNotImplementedError
(
req
.
Method
)
return
nil
,
shared
.
NewNotImplementedError
(
req
.
Method
)
}
}
func
(
self
*
personal
)
Name
()
string
{
func
(
self
*
personal
Api
)
Name
()
string
{
return
PersonalApiName
return
PersonalApiName
}
}
func
(
self
*
personal
)
ListAccounts
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
personal
Api
)
ListAccounts
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
xeth
.
Accounts
(),
nil
return
self
.
xeth
.
Accounts
(),
nil
}
}
func
(
self
*
personal
)
NewAccount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
personal
Api
)
NewAccount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
NewAccountArgs
)
args
:=
new
(
NewAccountArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
@@ -80,7 +80,7 @@ func (self *personal) NewAccount(req *shared.Request) (interface{}, error) {
...
@@ -80,7 +80,7 @@ func (self *personal) NewAccount(req *shared.Request) (interface{}, error) {
return
acc
.
Address
.
Hex
(),
err
return
acc
.
Address
.
Hex
(),
err
}
}
func
(
self
*
personal
)
DeleteAccount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
personal
Api
)
DeleteAccount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
DeleteAccountArgs
)
args
:=
new
(
DeleteAccountArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
@@ -95,7 +95,7 @@ func (self *personal) DeleteAccount(req *shared.Request) (interface{}, error) {
...
@@ -95,7 +95,7 @@ func (self *personal) DeleteAccount(req *shared.Request) (interface{}, error) {
}
}
}
}
func
(
self
*
personal
)
UnlockAccount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
personal
Api
)
UnlockAccount
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
UnlockAccountArgs
)
args
:=
new
(
UnlockAccountArgs
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
return
nil
,
shared
.
NewDecodeParamError
(
err
.
Error
())
...
...
rpc/api/utils.go
View file @
cc9ae399
...
@@ -21,6 +21,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
...
@@ -21,6 +21,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
for
i
,
name
:=
range
names
{
for
i
,
name
:=
range
names
{
switch
strings
.
ToLower
(
strings
.
TrimSpace
(
name
))
{
switch
strings
.
ToLower
(
strings
.
TrimSpace
(
name
))
{
case
AdminApiName
:
apis
[
i
]
=
NewAdminApi
(
xeth
,
eth
,
codec
)
case
DebugApiName
:
case
DebugApiName
:
apis
[
i
]
=
NewDebugApi
(
xeth
,
eth
,
codec
)
apis
[
i
]
=
NewDebugApi
(
xeth
,
eth
,
codec
)
case
EthApiName
:
case
EthApiName
:
...
@@ -30,9 +32,9 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
...
@@ -30,9 +32,9 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
case
NetApiName
:
case
NetApiName
:
apis
[
i
]
=
NewNetApi
(
xeth
,
eth
,
codec
)
apis
[
i
]
=
NewNetApi
(
xeth
,
eth
,
codec
)
case
PersonalApiName
:
case
PersonalApiName
:
apis
[
i
]
=
NewPersonal
(
xeth
,
eth
,
codec
)
apis
[
i
]
=
NewPersonal
Api
(
xeth
,
eth
,
codec
)
case
Web3ApiName
:
case
Web3ApiName
:
apis
[
i
]
=
NewWeb3
(
xeth
,
codec
)
apis
[
i
]
=
NewWeb3
Api
(
xeth
,
codec
)
default
:
default
:
return
nil
,
fmt
.
Errorf
(
"Unknown API '%s'"
,
name
)
return
nil
,
fmt
.
Errorf
(
"Unknown API '%s'"
,
name
)
}
}
...
@@ -43,6 +45,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
...
@@ -43,6 +45,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
func
Javascript
(
name
string
)
string
{
func
Javascript
(
name
string
)
string
{
switch
strings
.
ToLower
(
strings
.
TrimSpace
(
name
))
{
switch
strings
.
ToLower
(
strings
.
TrimSpace
(
name
))
{
case
AdminApiName
:
return
Admin_JS
case
DebugApiName
:
case
DebugApiName
:
return
Debug_JS
return
Debug_JS
case
MinerApiName
:
case
MinerApiName
:
...
...
rpc/api/web3.go
View file @
cc9ae399
...
@@ -15,24 +15,24 @@ const (
...
@@ -15,24 +15,24 @@ const (
var
(
var
(
// mapping between methods and handlers
// mapping between methods and handlers
Web3Mapping
=
map
[
string
]
web3handler
{
Web3Mapping
=
map
[
string
]
web3handler
{
"web3_sha3"
:
(
*
web3
)
.
Sha3
,
"web3_sha3"
:
(
*
web3
Api
)
.
Sha3
,
"web3_clientVersion"
:
(
*
web3
)
.
ClientVersion
,
"web3_clientVersion"
:
(
*
web3
Api
)
.
ClientVersion
,
}
}
)
)
// web3 callback handler
// web3 callback handler
type
web3handler
func
(
*
web3
,
*
shared
.
Request
)
(
interface
{},
error
)
type
web3handler
func
(
*
web3
Api
,
*
shared
.
Request
)
(
interface
{},
error
)
// web3 api provider
// web3 api provider
type
web3
struct
{
type
web3
Api
struct
{
xeth
*
xeth
.
XEth
xeth
*
xeth
.
XEth
methods
map
[
string
]
web3handler
methods
map
[
string
]
web3handler
codec
codec
.
ApiCoder
codec
codec
.
ApiCoder
}
}
// create a new web3 api instance
// create a new web3 api instance
func
NewWeb3
(
xeth
*
xeth
.
XEth
,
coder
codec
.
Codec
)
*
web3
{
func
NewWeb3
Api
(
xeth
*
xeth
.
XEth
,
coder
codec
.
Codec
)
*
web3Api
{
return
&
web3
{
return
&
web3
Api
{
xeth
:
xeth
,
xeth
:
xeth
,
methods
:
Web3Mapping
,
methods
:
Web3Mapping
,
codec
:
coder
.
New
(
nil
),
codec
:
coder
.
New
(
nil
),
...
@@ -40,7 +40,7 @@ func NewWeb3(xeth *xeth.XEth, coder codec.Codec) *web3 {
...
@@ -40,7 +40,7 @@ func NewWeb3(xeth *xeth.XEth, coder codec.Codec) *web3 {
}
}
// collection with supported methods
// collection with supported methods
func
(
self
*
web3
)
Methods
()
[]
string
{
func
(
self
*
web3
Api
)
Methods
()
[]
string
{
methods
:=
make
([]
string
,
len
(
self
.
methods
))
methods
:=
make
([]
string
,
len
(
self
.
methods
))
i
:=
0
i
:=
0
for
k
:=
range
self
.
methods
{
for
k
:=
range
self
.
methods
{
...
@@ -51,7 +51,7 @@ func (self *web3) Methods() []string {
...
@@ -51,7 +51,7 @@ func (self *web3) Methods() []string {
}
}
// Execute given request
// Execute given request
func
(
self
*
web3
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
web3
Api
)
Execute
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
if
callback
,
ok
:=
self
.
methods
[
req
.
Method
];
ok
{
return
callback
(
self
,
req
)
return
callback
(
self
,
req
)
}
}
...
@@ -59,17 +59,17 @@ func (self *web3) Execute(req *shared.Request) (interface{}, error) {
...
@@ -59,17 +59,17 @@ func (self *web3) Execute(req *shared.Request) (interface{}, error) {
return
nil
,
&
shared
.
NotImplementedError
{
req
.
Method
}
return
nil
,
&
shared
.
NotImplementedError
{
req
.
Method
}
}
}
func
(
self
*
web3
)
Name
()
string
{
func
(
self
*
web3
Api
)
Name
()
string
{
return
Web3ApiName
return
Web3ApiName
}
}
// Version of the API this instance provides
// Version of the API this instance provides
func
(
self
*
web3
)
Version
()
string
{
func
(
self
*
web3
Api
)
Version
()
string
{
return
Web3Version
return
Web3Version
}
}
// Calculates the sha3 over req.Params.Data
// Calculates the sha3 over req.Params.Data
func
(
self
*
web3
)
Sha3
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
web3
Api
)
Sha3
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
args
:=
new
(
Sha3Args
)
args
:=
new
(
Sha3Args
)
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
self
.
codec
.
Decode
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -79,6 +79,6 @@ func (self *web3) Sha3(req *shared.Request) (interface{}, error) {
...
@@ -79,6 +79,6 @@ func (self *web3) Sha3(req *shared.Request) (interface{}, error) {
}
}
// returns the xeth client vrsion
// returns the xeth client vrsion
func
(
self
*
web3
)
ClientVersion
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
func
(
self
*
web3
Api
)
ClientVersion
(
req
*
shared
.
Request
)
(
interface
{},
error
)
{
return
self
.
xeth
.
ClientVersion
(),
nil
return
self
.
xeth
.
ClientVersion
(),
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