github.com/okex/exchain@v1.8.0/libs/tendermint/rpc/core/net.go (about) 1 package core 2 3 import ( 4 "fmt" 5 6 "github.com/pkg/errors" 7 8 "github.com/okex/exchain/libs/tendermint/p2p" 9 ctypes "github.com/okex/exchain/libs/tendermint/rpc/core/types" 10 rpctypes "github.com/okex/exchain/libs/tendermint/rpc/jsonrpc/types" 11 ) 12 13 // NetInfo returns network info. 14 // More: https://docs.tendermint.com/master/rpc/#/Info/net_info 15 func NetInfo(ctx *rpctypes.Context) (*ctypes.ResultNetInfo, error) { 16 peersList := env.P2PPeers.Peers().List() 17 peers := make([]ctypes.Peer, 0, len(peersList)) 18 for _, peer := range peersList { 19 nodeInfo, ok := peer.NodeInfo().(p2p.DefaultNodeInfo) 20 if !ok { 21 return nil, fmt.Errorf("peer.NodeInfo() is not DefaultNodeInfo") 22 } 23 peers = append(peers, ctypes.Peer{ 24 NodeInfo: nodeInfo, 25 IsOutbound: peer.IsOutbound(), 26 ConnectionStatus: peer.Status(), 27 RemoteIP: peer.RemoteIP().String(), 28 }) 29 } 30 // TODO: Should we include PersistentPeers and Seeds in here? 31 // PRO: useful info 32 // CON: privacy 33 return &ctypes.ResultNetInfo{ 34 Listening: env.P2PTransport.IsListening(), 35 Listeners: env.P2PTransport.Listeners(), 36 NPeers: len(peers), 37 Peers: peers, 38 }, nil 39 } 40 41 // UnsafeDialSeeds dials the given seeds (comma-separated id@IP:PORT). 42 func UnsafeDialSeeds(ctx *rpctypes.Context, seeds []string) (*ctypes.ResultDialSeeds, error) { 43 if len(seeds) == 0 { 44 return &ctypes.ResultDialSeeds{}, errors.New("no seeds provided") 45 } 46 env.Logger.Info("DialSeeds", "seeds", seeds) 47 if err := env.P2PPeers.DialPeersAsync(seeds); err != nil { 48 return &ctypes.ResultDialSeeds{}, err 49 } 50 return &ctypes.ResultDialSeeds{Log: "Dialing seeds in progress. See /net_info for details"}, nil 51 } 52 53 // UnsafeDialPeers dials the given peers (comma-separated id@IP:PORT), 54 // optionally making them persistent. 55 func UnsafeDialPeers(ctx *rpctypes.Context, peers []string, persistent bool) (*ctypes.ResultDialPeers, error) { 56 if len(peers) == 0 { 57 return &ctypes.ResultDialPeers{}, errors.New("no peers provided") 58 } 59 env.Logger.Info("DialPeers", "peers", peers, "persistent", persistent) 60 if persistent { 61 if err := env.P2PPeers.AddPersistentPeers(peers); err != nil { 62 return &ctypes.ResultDialPeers{}, err 63 } 64 } 65 if err := env.P2PPeers.DialPeersAsync(peers); err != nil { 66 return &ctypes.ResultDialPeers{}, err 67 } 68 return &ctypes.ResultDialPeers{Log: "Dialing peers in progress. See /net_info for details"}, nil 69 } 70 71 // Genesis returns genesis file. 72 // More: https://docs.tendermint.com/master/rpc/#/Info/genesis 73 func Genesis(ctx *rpctypes.Context) (*ctypes.ResultGenesis, error) { 74 return &ctypes.ResultGenesis{Genesis: env.GenDoc}, nil 75 }