reth_rpc_server_types/constants.rs
1use std::cmp::max;
2
3/// The default port for the http server
4pub const DEFAULT_HTTP_RPC_PORT: u16 = 8545;
5
6/// The default port for the ws server
7pub const DEFAULT_WS_RPC_PORT: u16 = 8546;
8
9/// The default port for the auth server.
10pub const DEFAULT_AUTH_PORT: u16 = 8551;
11
12/// The default maximum block range allowed to filter
13pub const DEFAULT_MAX_BLOCKS_PER_FILTER: u64 = 100_000;
14
15/// The default maximum of logs in a single response.
16pub const DEFAULT_MAX_LOGS_PER_RESPONSE: usize = 20_000;
17
18/// The default maximum number of blocks for `trace_filter` requests.
19pub const DEFAULT_MAX_TRACE_FILTER_BLOCKS: u64 = 100;
20
21/// The default maximum number tracing requests we're allowing concurrently.
22/// Tracing is mostly CPU bound so we're limiting the number of concurrent requests to something
23/// lower that the number of cores, in order to minimize the impact on the rest of the system.
24pub fn default_max_tracing_requests() -> usize {
25 // We reserve 2 cores for the rest of the system
26 const RESERVED: usize = 2;
27
28 std::thread::available_parallelism()
29 .map_or(25, |cpus| max(cpus.get().saturating_sub(RESERVED), RESERVED))
30}
31
32/// The default number of getproof calls we are allowing to run concurrently.
33pub const DEFAULT_PROOF_PERMITS: usize = 25;
34
35/// The default IPC endpoint
36#[cfg(windows)]
37pub const DEFAULT_IPC_ENDPOINT: &str = r"\\.\pipe\reth.ipc";
38
39/// The default IPC endpoint
40#[cfg(not(windows))]
41pub const DEFAULT_IPC_ENDPOINT: &str = "/tmp/reth.ipc";
42
43/// The engine_api IPC endpoint
44#[cfg(windows)]
45pub const DEFAULT_ENGINE_API_IPC_ENDPOINT: &str = r"\\.\pipe\reth_engine_api.ipc";
46
47/// The `engine_api` IPC endpoint
48#[cfg(not(windows))]
49pub const DEFAULT_ENGINE_API_IPC_ENDPOINT: &str = "/tmp/reth_engine_api.ipc";
50
51/// The default limit for blocks count in `eth_simulateV1`.
52pub const DEFAULT_MAX_SIMULATE_BLOCKS: u64 = 256;
53
54/// The default eth historical proof window.
55pub const DEFAULT_ETH_PROOF_WINDOW: u64 = 0;
56
57/// The default eth tx fee cap is 1 ETH
58pub const DEFAULT_TX_FEE_CAP_WEI: u128 = 1_000_000_000_000_000_000u128;
59
60/// Maximum eth historical proof window. Equivalent to roughly 6 months of data on a 12
61/// second block time, and a month on a 2 second block time.
62pub const MAX_ETH_PROOF_WINDOW: u64 = 28 * 24 * 60 * 60 / 2;
63
64/// GPO specific constants
65pub mod gas_oracle {
66 use alloy_primitives::U256;
67
68 /// The number of transactions sampled in a block
69 pub const SAMPLE_NUMBER: usize = 3_usize;
70
71 /// The default maximum number of blocks to use for the gas price oracle.
72 pub const MAX_HEADER_HISTORY: u64 = 1024;
73
74 /// The default maximum number of allowed reward percentiles
75 pub const MAX_REWARD_PERCENTILE_COUNT: u64 = 100;
76
77 /// Number of recent blocks to check for gas price
78 pub const DEFAULT_GAS_PRICE_BLOCKS: u32 = 20;
79
80 /// The percentile of gas prices to use for the estimate
81 pub const DEFAULT_GAS_PRICE_PERCENTILE: u32 = 60;
82
83 /// Maximum transaction priority fee (or gas price before London Fork) to be recommended by the
84 /// gas price oracle
85 pub const DEFAULT_MAX_GAS_PRICE: U256 = U256::from_limbs([500_000_000_000u64, 0, 0, 0]);
86
87 /// The default minimum gas price, under which the sample will be ignored
88 pub const DEFAULT_IGNORE_GAS_PRICE: U256 = U256::from_limbs([2u64, 0, 0, 0]);
89
90 /// The default gas limit for `eth_call` and adjacent calls.
91 ///
92 /// This is different from the default to regular 30M block gas limit
93 /// `ETHEREUM_BLOCK_GAS_LIMIT_30M` to allow for more complex calls.
94 pub const RPC_DEFAULT_GAS_CAP: u64 = 50_000_000;
95
96 /// Allowed error ratio for gas estimation
97 /// Taken from Geth's implementation in order to pass the hive tests
98 /// <https://github.com/ethereum/go-ethereum/blob/a5a4fa7032bb248f5a7c40f4e8df2b131c4186a4/internal/ethapi/api.go#L56>
99 pub const ESTIMATE_GAS_ERROR_RATIO: f64 = 0.015;
100
101 /// Gas required at the beginning of a call.
102 pub const CALL_STIPEND_GAS: u64 = 2_300;
103}
104
105/// Cache specific constants
106pub mod cache {
107 // TODO: memory based limiter is currently disabled pending <https://github.com/paradigmxyz/reth/issues/3503>
108 /// Default cache size for the block cache: 500MB
109 ///
110 /// With an average block size of ~100kb this should be able to cache ~5000 blocks.
111 pub const DEFAULT_BLOCK_CACHE_SIZE_BYTES_MB: usize = 500;
112
113 /// Default cache size for the receipts cache: 500MB
114 pub const DEFAULT_RECEIPT_CACHE_SIZE_BYTES_MB: usize = 500;
115
116 /// Default cache size for the env cache: 1MB
117 pub const DEFAULT_ENV_CACHE_SIZE_BYTES_MB: usize = 1;
118
119 /// Default cache size for the block cache: 5000 blocks.
120 pub const DEFAULT_BLOCK_CACHE_MAX_LEN: u32 = 5000;
121
122 /// Default cache size for the receipts cache: 2000 receipts.
123 pub const DEFAULT_RECEIPT_CACHE_MAX_LEN: u32 = 2000;
124
125 /// Default cache size for the header cache: 1000 headers.
126 pub const DEFAULT_HEADER_CACHE_MAX_LEN: u32 = 1000;
127
128 /// Default number of concurrent database requests.
129 pub const DEFAULT_CONCURRENT_DB_REQUESTS: usize = 512;
130}