rpc: implement net_listening
and net_peerCount
JSON-RPC endpoints (#252)
* Add net_listening net_peerCount endpoint * Add test cases * Use RPC client from context * Fix lint issue * Revert unnecessary changes * Update JSON RPC documentation
This commit is contained in:
parent
8f73d556c6
commit
8bfb6b0a67
@ -18,8 +18,8 @@ Check the JSON-RPC methods and namespaces supported on Ethermint. {synopsis}
|
|||||||
| [`web3_clientVersion`](#web3-clientversion) | Web3 | ✔ | |
|
| [`web3_clientVersion`](#web3-clientversion) | Web3 | ✔ | |
|
||||||
| [`web3_sha3`](#web3-sha3) | Web3 | ✔ | |
|
| [`web3_sha3`](#web3-sha3) | Web3 | ✔ | |
|
||||||
| [`net_version`](#net-version) | Net | ✔ | |
|
| [`net_version`](#net-version) | Net | ✔ | |
|
||||||
| `net_peerCount` | Net | | |
|
| [`net_peerCount`](#net-peerCount) | Net | ✔ | |
|
||||||
| `net_listening` | Net | | |
|
| [`net_listening`](#net-listening) | Net | ✔ | |
|
||||||
| [`eth_protocolVersion`](#eth-protocolversion) | Eth | ✔ | |
|
| [`eth_protocolVersion`](#eth-protocolversion) | Eth | ✔ | |
|
||||||
| [`eth_syncing`](#eth-syncing) | Eth | ✔ | |
|
| [`eth_syncing`](#eth-syncing) | Eth | ✔ | |
|
||||||
| [`eth_gasPrice`](#eth-gasprice) | Eth | ✔ | |
|
| [`eth_gasPrice`](#eth-gasprice) | Eth | ✔ | |
|
||||||
@ -199,6 +199,29 @@ curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}
|
|||||||
{"jsonrpc":"2.0","id":1,"result":"8"}
|
{"jsonrpc":"2.0","id":1,"result":"8"}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### net_peerCount
|
||||||
|
|
||||||
|
Returns the number of peers currently connected to the client.
|
||||||
|
```json
|
||||||
|
// Request
|
||||||
|
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545
|
||||||
|
|
||||||
|
// Result
|
||||||
|
{"jsonrpc":"2.0","id":1,"result":23}
|
||||||
|
```
|
||||||
|
|
||||||
|
### net_listening
|
||||||
|
|
||||||
|
Returns if client is actively listening for network connections.
|
||||||
|
|
||||||
|
```json
|
||||||
|
// Request
|
||||||
|
curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545
|
||||||
|
|
||||||
|
// Result
|
||||||
|
{"jsonrpc":"2.0","id":1,"result":true}
|
||||||
|
```
|
||||||
|
|
||||||
## Eth Methods
|
## Eth Methods
|
||||||
|
|
||||||
### eth_protocolVersion
|
### eth_protocolVersion
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
package net
|
package net
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
ethermint "github.com/tharsis/ethermint/types"
|
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
|
rpcclient "github.com/tendermint/tendermint/rpc/client"
|
||||||
|
ethermint "github.com/tharsis/ethermint/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PublicAPI is the eth_ prefixed set of APIs in the Web3 JSON-RPC spec.
|
// PublicAPI is the eth_ prefixed set of APIs in the Web3 JSON-RPC spec.
|
||||||
type PublicAPI struct {
|
type PublicAPI struct {
|
||||||
networkVersion uint64
|
networkVersion uint64
|
||||||
|
tmClient rpcclient.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewPublicAPI creates an instance of the public Net Web3 API.
|
// NewPublicAPI creates an instance of the public Net Web3 API.
|
||||||
@ -23,6 +25,7 @@ func NewPublicAPI(clientCtx client.Context) *PublicAPI {
|
|||||||
|
|
||||||
return &PublicAPI{
|
return &PublicAPI{
|
||||||
networkVersion: chainIDEpoch.Uint64(),
|
networkVersion: chainIDEpoch.Uint64(),
|
||||||
|
tmClient: clientCtx.Client,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,3 +33,23 @@ func NewPublicAPI(clientCtx client.Context) *PublicAPI {
|
|||||||
func (s *PublicAPI) Version() string {
|
func (s *PublicAPI) Version() string {
|
||||||
return fmt.Sprintf("%d", s.networkVersion)
|
return fmt.Sprintf("%d", s.networkVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Listening returns if client is actively listening for network connections.
|
||||||
|
func (s *PublicAPI) Listening() bool {
|
||||||
|
ctx := context.Background()
|
||||||
|
netInfo, err := s.tmClient.NetInfo(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return netInfo.Listening
|
||||||
|
}
|
||||||
|
|
||||||
|
// PeerCount returns the number of peers currently connected to the client.
|
||||||
|
func (s *PublicAPI) PeerCount() int {
|
||||||
|
ctx := context.Background()
|
||||||
|
netInfo, err := s.tmClient.NetInfo(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return len(netInfo.Peers)
|
||||||
|
}
|
||||||
|
@ -61,7 +61,7 @@ fi
|
|||||||
|
|
||||||
# Compile ethermint
|
# Compile ethermint
|
||||||
echo "compiling ethermint"
|
echo "compiling ethermint"
|
||||||
make build-ethermint
|
make build
|
||||||
|
|
||||||
# PID array declaration
|
# PID array declaration
|
||||||
arr=()
|
arr=()
|
||||||
|
35
tests/rpc/net_test.go
Normal file
35
tests/rpc/net_test.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package rpc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNet_Version(t *testing.T) {
|
||||||
|
rpcRes := Call(t, "net_version", []string{})
|
||||||
|
|
||||||
|
var res string
|
||||||
|
err := json.Unmarshal(rpcRes.Result, &res)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "2", res)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNet_Listening(t *testing.T) {
|
||||||
|
rpcRes := Call(t, "net_listening", []string{})
|
||||||
|
|
||||||
|
var res bool
|
||||||
|
err := json.Unmarshal(rpcRes.Result, &res)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.True(t, res)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNet_PeerCount(t *testing.T) {
|
||||||
|
rpcRes := Call(t, "net_peerCount", []string{})
|
||||||
|
|
||||||
|
var res int
|
||||||
|
err := json.Unmarshal(rpcRes.Result, &res)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, 0, res)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user