MCPcopy Create free account
hub / github.com/tendermint/tendermint / startRPC

Method startRPC

node/node.go:909–1033  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

907}
908
909func (n *nodeImpl) startRPC() ([]net.Listener, error) {
910 if n.config.Mode == config.ModeValidator {
911 pubKey, err := n.privValidator.GetPubKey(context.TODO())
912 if pubKey == nil || err != nil {
913 return nil, fmt.Errorf("can't get pubkey: %w", err)
914 }
915 n.rpcEnv.PubKey = pubKey
916 }
917 if err := n.rpcEnv.InitGenesisChunks(); err != nil {
918 return nil, err
919 }
920
921 listenAddrs := strings.SplitAndTrimEmpty(n.config.RPC.ListenAddress, ",", " ")
922 routes := n.rpcEnv.GetRoutes()
923
924 if n.config.RPC.Unsafe {
925 n.rpcEnv.AddUnsafe(routes)
926 }
927
928 cfg := rpcserver.DefaultConfig()
929 cfg.MaxBodyBytes = n.config.RPC.MaxBodyBytes
930 cfg.MaxHeaderBytes = n.config.RPC.MaxHeaderBytes
931 cfg.MaxOpenConnections = n.config.RPC.MaxOpenConnections
932 // If necessary adjust global WriteTimeout to ensure it's greater than
933 // TimeoutBroadcastTxCommit.
934 // See https://github.com/tendermint/tendermint/issues/3435
935 if cfg.WriteTimeout <= n.config.RPC.TimeoutBroadcastTxCommit {
936 cfg.WriteTimeout = n.config.RPC.TimeoutBroadcastTxCommit + 1*time.Second
937 }
938
939 // we may expose the rpc over both a unix and tcp socket
940 listeners := make([]net.Listener, len(listenAddrs))
941 for i, listenAddr := range listenAddrs {
942 mux := http.NewServeMux()
943 rpcLogger := n.Logger.With("module", "rpc-server")
944 wmLogger := rpcLogger.With("protocol", "websocket")
945 wm := rpcserver.NewWebsocketManager(routes,
946 rpcserver.OnDisconnect(func(remoteAddr string) {
947 err := n.eventBus.UnsubscribeAll(context.Background(), remoteAddr)
948 if err != nil && err != tmpubsub.ErrSubscriptionNotFound {
949 wmLogger.Error("Failed to unsubscribe addr from events", "addr", remoteAddr, "err", err)
950 }
951 }),
952 rpcserver.ReadLimit(cfg.MaxBodyBytes),
953 rpcserver.WriteChanCapacity(n.config.RPC.WebSocketWriteBufferSize),
954 )
955 wm.SetLogger(wmLogger)
956 mux.HandleFunc("/websocket", wm.WebsocketHandler)
957 rpcserver.RegisterRPCFuncs(mux, routes, rpcLogger)
958 listener, err := rpcserver.Listen(
959 listenAddr,
960 cfg.MaxOpenConnections,
961 )
962 if err != nil {
963 return nil, err
964 }
965
966 var rootHandler http.Handler = mux

Callers 1

OnStartMethod · 0.95

Calls 14

SetLoggerMethod · 0.95
SplitAndTrimEmptyFunction · 0.92
InitGenesisChunksMethod · 0.80
GetRoutesMethod · 0.80
AddUnsafeMethod · 0.80
ListenMethod · 0.80
IsCorsEnabledMethod · 0.80
IsTLSEnabledMethod · 0.80
CertFileMethod · 0.80
GetPubKeyMethod · 0.65
WithMethod · 0.65
UnsubscribeAllMethod · 0.65

Tested by

no test coverage detected