Skip to main content

reth_rpc_server_types/
constants.rs

1use std::{cmp::max, time::Duration};
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/// Setting for how many concurrent (heavier) _blocking_ IO requests are allowed.
22///
23/// What is considered a blocking IO request can depend on the RPC method. In general anything that
24/// requires IO is considered blocking and should be spawned as blocking. This setting is however,
25/// primarily intended for heavier blocking requests that require evm execution for example,
26/// `eth_call` and alike. This is intended to be used with a semaphore that must be acquired before
27/// a new task is spawned to avoid unnecessary pooling if the number of inflight requests exceeds
28/// the available threads in the pool.
29///
30/// tokio's blocking pool, has a default of 512 and could grow unbounded, since requests like
31/// `eth_call` also require a lot of cpu which will occupy the thread, we can set this to a lower
32/// value.
33pub const DEFAULT_MAX_BLOCKING_IO_REQUEST: usize = 256;
34
35/// The default maximum number tracing requests we're allowing concurrently.
36/// Tracing is mostly CPU bound so we're limiting the number of concurrent requests to something
37/// lower that the number of cores, in order to minimize the impact on the rest of the system.
38pub fn default_max_tracing_requests() -> usize {
39    // We reserve 2 cores for the rest of the system
40    const RESERVED: usize = 2;
41
42    std::thread::available_parallelism()
43        .map_or(25, |cpus| max(cpus.get().saturating_sub(RESERVED), RESERVED))
44}
45
46/// The default number of getproof calls we are allowing to run concurrently.
47pub const DEFAULT_PROOF_PERMITS: usize = 25;
48
49/// The default IPC endpoint
50pub const DEFAULT_IPC_ENDPOINT: &str = "/tmp/reth.ipc";
51
52/// The `engine_api` IPC endpoint
53pub const DEFAULT_ENGINE_API_IPC_ENDPOINT: &str = "/tmp/reth_engine_api.ipc";
54
55/// The default limit for blocks count in `eth_simulateV1`.
56pub const DEFAULT_MAX_SIMULATE_BLOCKS: u64 = 256;
57
58/// The default maximum number of calls in a single `eth_callMany`, `trace_callMany` or
59/// `debug_traceCallMany` request.
60pub const DEFAULT_MAX_CALL_MANY_CALLS: usize = 1024;
61
62/// The default timeout of an `eth_callMany`, `trace_callMany` or `debug_traceCallMany` request,
63/// matching geth's `eth_call` timeout. It starts with the request's first call, and no call
64/// starts after it expires.
65pub const DEFAULT_CALL_MANY_TIMEOUT: Duration = Duration::from_secs(5);
66
67/// The default maximum number of total storage slots for `eth_getStorageValues`.
68pub const DEFAULT_MAX_STORAGE_VALUES_SLOTS: usize = 1024;
69
70/// The default maximum number of storage slots (and, for multi-proofs, targets) accepted by a
71/// single `eth_getProof` or multi-proof request.
72///
73/// Bounds the work a request holds a proof permit for, since proof node selection scales with
74/// the number of requested slots.
75pub const DEFAULT_MAX_PROOF_SLOTS: usize = 1024;
76
77/// The default eth historical proof window.
78pub const DEFAULT_ETH_PROOF_WINDOW: u64 = 0;
79
80/// The default eth tx fee cap is 1 ETH
81pub const DEFAULT_TX_FEE_CAP_WEI: u128 = 1_000_000_000_000_000_000u128;
82
83/// Maximum eth historical proof window. Equivalent to roughly 6 months of data on a 12
84/// second block time, and a month on a 2 second block time.
85pub const MAX_ETH_PROOF_WINDOW: u64 = 28 * 24 * 60 * 60 / 2;
86
87/// Default timeout for send raw transaction sync in seconds.
88pub const RPC_DEFAULT_SEND_RAW_TX_SYNC_TIMEOUT_SECS: Duration = Duration::from_secs(30);
89
90/// GPO specific constants
91pub mod gas_oracle {
92    use alloy_primitives::U256;
93
94    /// The number of transactions sampled in a block
95    pub const SAMPLE_NUMBER: usize = 3_usize;
96
97    /// The default maximum number of blocks to use for the gas price oracle.
98    pub const MAX_HEADER_HISTORY: u64 = 1024;
99
100    /// The default maximum number of allowed reward percentiles
101    pub const MAX_REWARD_PERCENTILE_COUNT: u64 = 100;
102
103    /// Number of recent blocks to check for gas price
104    pub const DEFAULT_GAS_PRICE_BLOCKS: u32 = 20;
105
106    /// The percentile of gas prices to use for the estimate
107    pub const DEFAULT_GAS_PRICE_PERCENTILE: u32 = 60;
108
109    /// Maximum transaction priority fee (or gas price before London Fork) to be recommended by the
110    /// gas price oracle
111    pub const DEFAULT_MAX_GAS_PRICE: U256 = U256::from_limbs([500_000_000_000u64, 0, 0, 0]);
112
113    /// The default minimum gas price, under which the sample will be ignored
114    pub const DEFAULT_IGNORE_GAS_PRICE: U256 = U256::from_limbs([2, 0, 0, 0]);
115
116    /// The default gas limit for `eth_call` and adjacent calls.
117    ///
118    /// This is different from the default to regular 30M block gas limit
119    /// `ETHEREUM_BLOCK_GAS_LIMIT_30M` to allow for more complex calls.
120    pub const RPC_DEFAULT_GAS_CAP: u64 = 50_000_000;
121
122    /// Allowed error ratio for gas estimation
123    /// Taken from Geth's implementation in order to pass the hive tests
124    /// <https://github.com/ethereum/go-ethereum/blob/a5a4fa7032bb248f5a7c40f4e8df2b131c4186a4/internal/ethapi/api.go#L56>
125    pub const ESTIMATE_GAS_ERROR_RATIO: f64 = 0.015;
126
127    /// Gas required at the beginning of a call.
128    pub const CALL_STIPEND_GAS: u64 = 2_300;
129}
130
131/// Cache specific constants
132pub mod cache {
133    use std::time::Duration;
134
135    /// Default estimated block payload limit: 2 GiB.
136    pub const DEFAULT_BLOCK_CACHE_MAX_BYTES: usize = 2 * 1024 * 1024 * 1024;
137
138    /// Default estimated receipts payload limit: 1 GiB.
139    pub const DEFAULT_RECEIPT_CACHE_MAX_BYTES: usize = 1024 * 1024 * 1024;
140
141    /// Default estimated block access list payload limit: 500 MiB.
142    pub const DEFAULT_BAL_CACHE_MAX_BYTES: usize = 500 * 1024 * 1024;
143
144    /// Default idle timeout for cached blocks, receipts, and block access lists.
145    pub const DEFAULT_CACHE_IDLE_TIMEOUT: Duration = Duration::from_secs(60 * 60);
146
147    /// Default cache size for the block cache: 1000 blocks.
148    pub const DEFAULT_BLOCK_CACHE_MAX_LEN: u32 = 1000;
149
150    /// Default cache size for the receipts cache: 500 blocks' receipts.
151    pub const DEFAULT_RECEIPT_CACHE_MAX_LEN: u32 = 500;
152
153    /// Default cache size for the EVM BAL cache: 1000 block access lists.
154    pub const DEFAULT_BAL_CACHE_MAX_LEN: u32 = 1000;
155
156    /// Default number of concurrent database requests.
157    pub const DEFAULT_CONCURRENT_DB_REQUESTS: usize = 512;
158
159    /// Default maximum number of transaction hashes to cache for lookups.
160    pub const DEFAULT_MAX_CACHED_TX_HASHES: u32 = 100_000;
161}