diff --git a/cmd/rpcdaemon/cli/config.go b/cmd/rpcdaemon/cli/config.go index 1c097982369..ec2973bf0f5 100644 --- a/cmd/rpcdaemon/cli/config.go +++ b/cmd/rpcdaemon/cli/config.go @@ -97,6 +97,11 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().StringVar(&cfg.GRPCListenAddress, "grpc.addr", nodecfg.DefaultGRPCHost, "GRPC server listening interface") rootCmd.PersistentFlags().IntVar(&cfg.GRPCPort, "grpc.port", nodecfg.DefaultGRPCPort, "GRPC server listening port") rootCmd.PersistentFlags().BoolVar(&cfg.GRPCHealthCheckEnabled, "grpc.healthcheck", false, "Enable GRPC health check") + + rootCmd.PersistentFlags().BoolVar(&cfg.TCPServerEnabled, "tcp", false, "Enable TCP server") + rootCmd.PersistentFlags().StringVar(&cfg.TCPListenAddress, "tcp.addr", nodecfg.DefaultTCPHost, "TCP server listening interface") + rootCmd.PersistentFlags().IntVar(&cfg.TCPPort, "tcp.port", nodecfg.DefaultTCPPort, "TCP server listening port") + rootCmd.PersistentFlags().BoolVar(&cfg.TraceRequests, utils.HTTPTraceFlag.Name, false, "Trace HTTP requests with INFO level") rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.ReadTimeout, "http.timeouts.read", rpccfg.DefaultHTTPTimeouts.ReadTimeout, "Maximum duration for reading the entire request, including the body.") rootCmd.PersistentFlags().DurationVar(&cfg.HTTPTimeouts.WriteTimeout, "http.timeouts.write", rpccfg.DefaultHTTPTimeouts.WriteTimeout, "Maximum duration before timing out writes of the response. It is reset whenever a new request's header is read") @@ -516,6 +521,23 @@ func startRegularRpcServer(ctx context.Context, cfg httpcfg.HttpCfg, rpcAPI []rp if err != nil { return fmt.Errorf("could not start RPC api: %w", err) } + + if cfg.TCPServerEnabled { + tcpEndpoint := fmt.Sprintf("%s:%d", cfg.TCPListenAddress, cfg.TCPPort) + tcpListener, err := net.Listen("tcp", tcpEndpoint) + if err != nil { + return fmt.Errorf("could not start TCP Listener: %w", err) + } + go func() { + defer tcpListener.Close() + err := srv.ServeListener(tcpListener) + if err != nil { + log.Error("TCP Listener Fatal Error", "err", err) + } + }() + log.Info("TCP Endpoint opened", "url", tcpEndpoint) + } + info := []interface{}{"url", httpEndpoint, "ws", cfg.WebsocketEnabled, "ws.compression", cfg.WebsocketCompression, "grpc", cfg.GRPCServerEnabled} diff --git a/cmd/rpcdaemon/cli/httpcfg/http_cfg.go b/cmd/rpcdaemon/cli/httpcfg/http_cfg.go index 1cc3f3e4709..c64ec8128d1 100644 --- a/cmd/rpcdaemon/cli/httpcfg/http_cfg.go +++ b/cmd/rpcdaemon/cli/httpcfg/http_cfg.go @@ -40,17 +40,25 @@ type HttpCfg struct { StateCache kvcache.CoherentConfig Snap ethconfig.Snapshot Sync ethconfig.Sync - GRPCServerEnabled bool - GRPCListenAddress string - GRPCPort int - GRPCHealthCheckEnabled bool - StarknetGRPCAddress string - JWTSecretPath string // Engine API Authentication - TraceRequests bool // Always trace requests in INFO level - HTTPTimeouts rpccfg.HTTPTimeouts - AuthRpcTimeouts rpccfg.HTTPTimeouts - EvmCallTimeout time.Duration - InternalCL bool - LogDirVerbosity string - LogDirPath string + + // GRPC server + GRPCServerEnabled bool + GRPCListenAddress string + GRPCPort int + GRPCHealthCheckEnabled bool + + // Raw TCP Server + TCPServerEnabled bool + TCPListenAddress string + TCPPort int + + StarknetGRPCAddress string + JWTSecretPath string // Engine API Authentication + TraceRequests bool // Always trace requests in INFO level + HTTPTimeouts rpccfg.HTTPTimeouts + AuthRpcTimeouts rpccfg.HTTPTimeouts + EvmCallTimeout time.Duration + InternalCL bool + LogDirVerbosity string + LogDirPath string } diff --git a/node/nodecfg/defaults.go b/node/nodecfg/defaults.go index 3dc119ea399..6268d26a85b 100644 --- a/node/nodecfg/defaults.go +++ b/node/nodecfg/defaults.go @@ -32,6 +32,8 @@ const ( DefaultWSPort = 8546 // Default TCP port for the websocket RPC server DefaultGRPCHost = "localhost" // Default host interface for the GRPC server DefaultGRPCPort = 8547 // Default TCP port for the GRPC server + DefaultTCPHost = "localhost" // default host interrface for TCP RPC server + DefaultTCPPort = 8548 // default TCP port for TCP RPC server ) // DefaultConfig contains reasonable default settings.