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 }