added net API

pull/1239/head
Bas van Kervel 10 years ago committed by Bas van Kervel
parent 4b9b633dfe
commit d2a87f6f72
  1. 9
      rpc/api/api.go
  2. 4
      rpc/api/mergedapi.go
  3. 4
      rpc/api/miner.go
  4. 2
      rpc/api/miner_args.go
  5. 2
      rpc/api/miner_js.go
  6. 81
      rpc/api/net.go
  7. 44
      rpc/api/net_js.go
  8. 4
      rpc/api/utils.go
  9. 2
      rpc/api/web3.go

@ -4,12 +4,13 @@ import "github.com/ethereum/go-ethereum/rpc/shared"
const ( const (
// 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 = "eth,web3,miner" DefaultIpcApis = "eth,miner,net,web3"
EthApiName = "eth" EthApiName = "eth"
MergedApiName = "merged" MergedApiName = "merged"
MinerApiName = "miner" MinerApiName = "miner"
Web3ApiName = "web3" NetApiName = "net"
Web3ApiName = "web3"
) )
// Ethereum RPC API interface // Ethereum RPC API interface

@ -4,7 +4,7 @@ import "github.com/ethereum/go-ethereum/rpc/shared"
// combines multiple API's // combines multiple API's
type mergedApi struct { type mergedApi struct {
apis []string apis []string
methods map[string]EthereumApi methods map[string]EthereumApi
} }
@ -48,7 +48,7 @@ func (self *mergedApi) Name() string {
} }
func (self *mergedApi) handle(req *shared.Request) (interface{}, error) { func (self *mergedApi) 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
} }

@ -13,7 +13,7 @@ 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).Hashrate,
"miner_makeDAG": (*miner).MakeDAG, "miner_makeDAG": (*miner).MakeDAG,
@ -140,4 +140,4 @@ func (self *miner) MakeDAG(req *shared.Request) (interface{}, error) {
return true, nil return true, nil
} }
return false, err return false, err
} }

@ -90,4 +90,4 @@ func (args *MakeDAGArgs) UnmarshalJSON(b []byte) (err error) {
} }
return nil return nil
} }

@ -71,4 +71,4 @@ web3.extend({
}) })
] ]
}); });
` `

@ -0,0 +1,81 @@
package api
import (
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/rpc/codec"
"github.com/ethereum/go-ethereum/rpc/shared"
"github.com/ethereum/go-ethereum/xeth"
)
var (
// mapping between methods and handlers
netMapping = map[string]nethandler{
"net_id": (*net).NetworkVersion,
"net_peerCount": (*net).PeerCount,
"net_listening": (*net).IsListening,
"net_peers": (*net).Peers,
}
)
// net callback handler
type nethandler func(*net, *shared.Request) (interface{}, error)
// net api provider
type net struct {
xeth *xeth.XEth
ethereum *eth.Ethereum
methods map[string]nethandler
codec codec.ApiCoder
}
// create a new net api instance
func NewNetApi(xeth *xeth.XEth, eth *eth.Ethereum, coder codec.Codec) *net {
return &net{
xeth: xeth,
ethereum: eth,
methods: netMapping,
codec: coder.New(nil),
}
}
// collection with supported methods
func (self *net) 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 *net) Execute(req *shared.Request) (interface{}, error) {
if callback, ok := self.methods[req.Method]; ok {
return callback(self, req)
}
return nil, shared.NewNotImplementedError(req.Method)
}
func (self *net) Name() string {
return NetApiName
}
// Network version
func (self *net) NetworkVersion(req *shared.Request) (interface{}, error) {
return self.xeth.NetworkVersion(), nil
}
// Number of connected peers
func (self *net) PeerCount(req *shared.Request) (interface{}, error) {
return self.xeth.PeerCount(), nil
}
func (self *net) IsListening(req *shared.Request) (interface{}, error) {
return self.xeth.IsListening(), nil
}
func (self *net) Peers(req *shared.Request) (interface{}, error) {
return self.ethereum.PeersInfo(), nil
}

@ -0,0 +1,44 @@
package api
const Net_JS = `
web3.extend({
property: 'network',
methods:
[
new web3.extend.Method({
name: 'id',
call: 'net_id',
params: 0,
inputFormatter: [],
outputFormatter: web3.extend.formatters.formatOutputString
}),
new web3.extend.Method({
name: 'getPeerCount',
call: 'net_peerCount',
params: 0,
inputFormatter: [],
outputFormatter: web3.extend.formatters.formatOutputString
}),
new web3.extend.Method({
name: 'peers',
call: 'net_peers',
params: 0,
inputFormatter: [],
outputFormatter: function(obj) { return obj; }
})
],
properties:
[
new web3.extend.Property({
name: 'listening',
getter: 'net_listening',
outputFormatter: web3.extend.formatters.formatOutputBool
}),
new web3.extend.Property({
name: 'peerCount',
getter: 'net_peerCount',
outputFormatter: web3.extend.utils.toDecimal
})
]
});
`

@ -25,6 +25,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
apis[i] = NewEthApi(xeth, codec) apis[i] = NewEthApi(xeth, codec)
case MinerApiName: case MinerApiName:
apis[i] = NewMinerApi(eth, codec) apis[i] = NewMinerApi(eth, codec)
case NetApiName:
apis[i] = NewNetApi(xeth, eth, codec)
case Web3ApiName: case Web3ApiName:
apis[i] = NewWeb3(xeth, codec) apis[i] = NewWeb3(xeth, codec)
default: default:
@ -39,6 +41,8 @@ func Javascript(name string) string {
switch strings.ToLower(strings.TrimSpace(name)) { switch strings.ToLower(strings.TrimSpace(name)) {
case MinerApiName: case MinerApiName:
return Miner_JS return Miner_JS
case NetApiName:
return Net_JS
} }
return "" return ""

@ -13,7 +13,7 @@ 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).Sha3,
"web3_clientVersion": (*web3).ClientVersion, "web3_clientVersion": (*web3).ClientVersion,

Loading…
Cancel
Save