mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
feat: add more rpc server cli args (#2638)
This commit is contained in:
@ -28,6 +28,15 @@ use std::{
|
|||||||
};
|
};
|
||||||
use tracing::{debug, info};
|
use tracing::{debug, info};
|
||||||
|
|
||||||
|
/// Default max number of subscriptions per connection.
|
||||||
|
pub(crate) const RPC_DEFAULT_MAX_SUBS_PER_CONN: u32 = 1024;
|
||||||
|
/// Default max request size in MB.
|
||||||
|
pub(crate) const RPC_DEFAULT_MAX_REQUEST_SIZE_MB: u32 = 15;
|
||||||
|
/// Default max response size in MB.
|
||||||
|
pub(crate) const RPC_DEFAULT_MAX_RESPONSE_SIZE_MB: u32 = 25;
|
||||||
|
/// Default number of incoming connections.
|
||||||
|
pub(crate) const RPC_DEFAULT_MAX_CONNECTIONS: u32 = 100;
|
||||||
|
|
||||||
/// Parameters for configuring the rpc more granularity via CLI
|
/// Parameters for configuring the rpc more granularity via CLI
|
||||||
#[derive(Debug, Args, PartialEq, Default)]
|
#[derive(Debug, Args, PartialEq, Default)]
|
||||||
#[command(next_help_heading = "Rpc")]
|
#[command(next_help_heading = "Rpc")]
|
||||||
@ -90,10 +99,36 @@ pub struct RpcServerArgs {
|
|||||||
|
|
||||||
/// Path to a JWT secret to use for authenticated RPC endpoints
|
/// Path to a JWT secret to use for authenticated RPC endpoints
|
||||||
#[arg(long = "authrpc.jwtsecret", value_name = "PATH", global = true, required = false)]
|
#[arg(long = "authrpc.jwtsecret", value_name = "PATH", global = true, required = false)]
|
||||||
auth_jwtsecret: Option<PathBuf>,
|
pub auth_jwtsecret: Option<PathBuf>,
|
||||||
|
|
||||||
|
/// Set the maximum RPC request payload size for both HTTP and WS in megabytes.
|
||||||
|
#[arg(long, default_value_t = RPC_DEFAULT_MAX_REQUEST_SIZE_MB)]
|
||||||
|
pub rpc_max_request_size: u32,
|
||||||
|
|
||||||
|
/// Set the maximum RPC response payload size for both HTTP and WS in megabytes.
|
||||||
|
#[arg(long, default_value_t = RPC_DEFAULT_MAX_RESPONSE_SIZE_MB)]
|
||||||
|
pub rpc_max_response_size: u32,
|
||||||
|
|
||||||
|
/// Set the the maximum concurrent subscriptions per connection.
|
||||||
|
#[arg(long, default_value_t = RPC_DEFAULT_MAX_SUBS_PER_CONN)]
|
||||||
|
pub rpc_max_subscriptions_per_connection: u32,
|
||||||
|
|
||||||
|
/// Maximum number of RPC server connections.
|
||||||
|
#[arg(long, value_name = "COUNT", default_value_t = RPC_DEFAULT_MAX_CONNECTIONS)]
|
||||||
|
pub rpc_max_connections: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RpcServerArgs {
|
impl RpcServerArgs {
|
||||||
|
/// Returns the max request size in bytes.
|
||||||
|
pub fn rpc_max_request_size_bytes(&self) -> u32 {
|
||||||
|
self.rpc_max_request_size * 1024 * 1024
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the max response size in bytes.
|
||||||
|
pub fn rpc_max_response_size_bytes(&self) -> u32 {
|
||||||
|
self.rpc_max_response_size * 1024 * 1024
|
||||||
|
}
|
||||||
|
|
||||||
/// The execution layer and consensus layer clients SHOULD accept a configuration parameter:
|
/// The execution layer and consensus layer clients SHOULD accept a configuration parameter:
|
||||||
/// jwt-secret, which designates a file containing the hex-encoded 256 bit secret key to be used
|
/// jwt-secret, which designates a file containing the hex-encoded 256 bit secret key to be used
|
||||||
/// for verifying/generating JWT tokens.
|
/// for verifying/generating JWT tokens.
|
||||||
@ -273,6 +308,24 @@ impl RpcServerArgs {
|
|||||||
config
|
config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the default server builder for http/ws
|
||||||
|
fn http_ws_server_builder(&self) -> ServerBuilder {
|
||||||
|
ServerBuilder::new()
|
||||||
|
.max_connections(self.rpc_max_connections)
|
||||||
|
.max_request_body_size(self.rpc_max_request_size_bytes())
|
||||||
|
.max_response_body_size(self.rpc_max_response_size_bytes())
|
||||||
|
.max_subscriptions_per_connection(self.rpc_max_subscriptions_per_connection)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the default ipc server builder
|
||||||
|
fn ipc_server_builder(&self) -> IpcServerBuilder {
|
||||||
|
IpcServerBuilder::default()
|
||||||
|
.max_subscriptions_per_connection(self.rpc_max_subscriptions_per_connection)
|
||||||
|
.max_request_body_size(self.rpc_max_request_size_bytes())
|
||||||
|
.max_response_body_size(self.rpc_max_response_size_bytes())
|
||||||
|
.max_connections(self.rpc_max_connections)
|
||||||
|
}
|
||||||
|
|
||||||
/// Creates the [RpcServerConfig] from cli args.
|
/// Creates the [RpcServerConfig] from cli args.
|
||||||
fn rpc_server_config(&self) -> RpcServerConfig {
|
fn rpc_server_config(&self) -> RpcServerConfig {
|
||||||
let mut config = RpcServerConfig::default();
|
let mut config = RpcServerConfig::default();
|
||||||
@ -284,7 +337,7 @@ impl RpcServerArgs {
|
|||||||
);
|
);
|
||||||
config = config
|
config = config
|
||||||
.with_http_address(socket_address)
|
.with_http_address(socket_address)
|
||||||
.with_http(ServerBuilder::new())
|
.with_http(self.http_ws_server_builder())
|
||||||
.with_http_cors(self.http_corsdomain.clone())
|
.with_http_cors(self.http_corsdomain.clone())
|
||||||
.with_ws_cors(self.ws_allowed_origins.clone());
|
.with_ws_cors(self.ws_allowed_origins.clone());
|
||||||
}
|
}
|
||||||
@ -294,12 +347,11 @@ impl RpcServerArgs {
|
|||||||
self.ws_addr.unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED)),
|
self.ws_addr.unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED)),
|
||||||
self.ws_port.unwrap_or(constants::DEFAULT_WS_RPC_PORT),
|
self.ws_port.unwrap_or(constants::DEFAULT_WS_RPC_PORT),
|
||||||
);
|
);
|
||||||
config = config.with_ws_address(socket_address).with_ws(ServerBuilder::new());
|
config = config.with_ws_address(socket_address).with_ws(self.http_ws_server_builder());
|
||||||
}
|
}
|
||||||
|
|
||||||
if !self.ipcdisable {
|
if !self.ipcdisable {
|
||||||
let ipc_builder = IpcServerBuilder::default();
|
config = config.with_ipc(self.ipc_server_builder()).with_ipc_endpoint(
|
||||||
config = config.with_ipc(ipc_builder).with_ipc_endpoint(
|
|
||||||
self.ipcpath.as_ref().unwrap_or(&constants::DEFAULT_IPC_ENDPOINT.to_string()),
|
self.ipcpath.as_ref().unwrap_or(&constants::DEFAULT_IPC_ENDPOINT.to_string()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user