github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/rpc/namespaces/net/api.go (about)

     1  package net
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/fibonacci-chain/fbc/app/rpc/monitor"
     7  	ethermint "github.com/fibonacci-chain/fbc/app/types"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
     9  	"github.com/fibonacci-chain/fbc/libs/tendermint/libs/log"
    10  	rpcclient "github.com/fibonacci-chain/fbc/libs/tendermint/rpc/client"
    11  	"github.com/spf13/viper"
    12  )
    13  
    14  const (
    15  	NameSpace = "net"
    16  )
    17  
    18  // PublicNetAPI is the eth_ prefixed set of APIs in the Web3 JSON-RPC spec.
    19  type PublicNetAPI struct {
    20  	networkVersion uint64
    21  	logger         log.Logger
    22  	Metrics        *monitor.RpcMetrics
    23  	tmClient       rpcclient.Client
    24  }
    25  
    26  // NewAPI creates an instance of the public Net Web3 API.
    27  func NewAPI(clientCtx context.CLIContext, log log.Logger) *PublicNetAPI {
    28  	// parse the chainID from a integer string
    29  	chainIDEpoch, err := ethermint.ParseChainID(clientCtx.ChainID)
    30  	if err != nil {
    31  		panic(err)
    32  	}
    33  
    34  	api := &PublicNetAPI{
    35  		networkVersion: chainIDEpoch.Uint64(),
    36  		logger:         log.With("module", "json-rpc", "namespace", NameSpace),
    37  		tmClient:       clientCtx.Client,
    38  	}
    39  	if viper.GetBool(monitor.FlagEnableMonitor) {
    40  		api.Metrics = monitor.MakeMonitorMetrics(NameSpace)
    41  	}
    42  	return api
    43  }
    44  
    45  // Version returns the current ethereum protocol version.
    46  func (api *PublicNetAPI) Version() string {
    47  	monitor := monitor.GetMonitor("net_version", api.logger, api.Metrics).OnBegin()
    48  	defer monitor.OnEnd()
    49  	return fmt.Sprintf("%d", api.networkVersion)
    50  }
    51  
    52  // Listening returns if client is actively listening for network connections.
    53  func (api *PublicNetAPI) Listening() bool {
    54  	monitor := monitor.GetMonitor("net_listening", api.logger, api.Metrics).OnBegin()
    55  	defer monitor.OnEnd()
    56  	netInfo, err := api.tmClient.NetInfo()
    57  	if err != nil {
    58  		return false
    59  	}
    60  	return netInfo.Listening
    61  }
    62  
    63  // PeerCount returns the number of peers currently connected to the client.
    64  func (api *PublicNetAPI) PeerCount() int {
    65  	monitor := monitor.GetMonitor("net_peerCount", api.logger, api.Metrics).OnBegin()
    66  	defer monitor.OnEnd()
    67  	netInfo, err := api.tmClient.NetInfo()
    68  	if err != nil {
    69  		return 0
    70  	}
    71  	return len(netInfo.Peers)
    72  }