diff --git a/README.md b/README.md index 5c78789f..8b55df42 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,9 @@ Check that the proxy is working: ``` curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","id":1}' 127.0.0.1:8544 ``` +``` +curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x0000000000000000000000000000000000000000", "latest"],"id":1}' 127.0.0.1:8544 +``` Check that the websocket is working: diff --git a/latency/src/peak_ewma/mod.rs b/latency/src/peak_ewma/mod.rs index 059ba06e..a795c383 100644 --- a/latency/src/peak_ewma/mod.rs +++ b/latency/src/peak_ewma/mod.rs @@ -2,7 +2,7 @@ mod rtt_estimate; use std::sync::Arc; -use log::{error, info}; +use log::{error, trace}; use tokio::sync::mpsc; use tokio::sync::mpsc::error::TrySendError; use tokio::task::JoinHandle; diff --git a/web3_proxy/src/app/mod.rs b/web3_proxy/src/app/mod.rs index 0a1c188a..7876f2ed 100644 --- a/web3_proxy/src/app/mod.rs +++ b/web3_proxy/src/app/mod.rs @@ -648,6 +648,7 @@ impl Web3ProxyApp { top_config.app.max_block_lag, top_config.app.min_synced_rpcs, top_config.app.min_sum_soft_limit, + "balanced".to_string(), pending_transactions.clone(), Some(pending_tx_sender.clone()), Some(watch_consensus_head_sender), @@ -675,6 +676,7 @@ impl Web3ProxyApp { None, 0, 0, + "protected".to_string(), pending_transactions.clone(), // TODO: subscribe to pending transactions on the private rpcs? they seem to have low rate limits, but they should have None, @@ -708,6 +710,7 @@ impl Web3ProxyApp { None, 0, 0, + "eip4337".to_string(), pending_transactions.clone(), None, None, diff --git a/web3_proxy/src/rpcs/many.rs b/web3_proxy/src/rpcs/many.rs index 35dd5d2e..e48d485b 100644 --- a/web3_proxy/src/rpcs/many.rs +++ b/web3_proxy/src/rpcs/many.rs @@ -33,7 +33,7 @@ use serde_json::value::RawValue; use std::borrow::Cow; use std::cmp::{min_by_key, Reverse}; use std::collections::BTreeMap; -use std::fmt; +use std::fmt::{self, Display}; use std::sync::atomic::Ordering; use std::sync::Arc; use thread_fast_rng::rand::seq::SliceRandom; @@ -43,6 +43,7 @@ use tokio::time::{interval, sleep, sleep_until, Duration, Instant, MissedTickBeh /// A collection of web3 connections. Sends requests either the current best server or all servers. #[derive(From)] pub struct Web3Rpcs { + pub(crate) name: String, /// if watch_consensus_head_sender is some, Web3Rpc inside self will send blocks here when they get them pub(crate) block_sender: flume::Sender<(Option, Arc)>, /// any requests will be forwarded to one (or more) of these connections @@ -87,6 +88,7 @@ impl Web3Rpcs { max_block_lag: Option, min_head_rpcs: usize, min_sum_soft_limit: u32, + name: String, pending_transaction_cache: Cache, pending_tx_sender: Option>, watch_consensus_head_sender: Option>>, @@ -184,19 +186,20 @@ impl Web3Rpcs { let connections = Arc::new(Self { block_sender, - by_name, - http_interval_sender, - watch_consensus_rpcs_sender, - watch_consensus_head_sender, - pending_transaction_cache, - pending_tx_id_sender, - pending_tx_id_receiver, blocks_by_hash, blocks_by_number, - min_sum_soft_limit, - min_head_rpcs, + by_name, + http_interval_sender, max_block_age, max_block_lag, + min_head_rpcs, + min_sum_soft_limit, + name, + pending_transaction_cache, + pending_tx_id_receiver, + pending_tx_id_sender, + watch_consensus_head_sender, + watch_consensus_rpcs_sender, }); let authorization = Arc::new(Authorization::internal(db_conn)?); @@ -629,7 +632,10 @@ impl Web3Rpcs { match earliest_retry_at { None => { // none of the servers gave us a time to retry at - debug!("no servers on {:?} gave a retry time. {:?}", self, skip); + debug!( + "{:?} - no servers on {:?} gave a retry time! Skipped {:?}", + request_ulid, self, skip + ); // TODO: bring this back? need to think about how to do this with `allow_backups` // we could return an error here, but maybe waiting a second will fix the problem @@ -647,9 +653,10 @@ impl Web3Rpcs { // TODO: log the server that retry_at came from // TODO: `self` doesn't log well. get a pretty name for this group of servers warn!( - "{:?} - no servers on {:?}! retry in {:?}s", + "{:?} - no servers in {} ready! Skipped {:?}. Retry in {:?}s", request_ulid, self, + skip, earliest_retry_at .duration_since(Instant::now()) .as_secs_f32() @@ -1156,6 +1163,12 @@ impl Web3Rpcs { } } +impl Display for Web3Rpcs { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(&self.name) + } +} + impl fmt::Debug for Web3Rpcs { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { // TODO: the default formatter takes forever to write. this is too quiet though @@ -1413,6 +1426,7 @@ mod tests { block_sender: block_sender.clone(), by_name: ArcSwap::from_pointee(rpcs_by_name), http_interval_sender: None, + name: "test".to_string(), watch_consensus_head_sender: Some(watch_consensus_head_sender), watch_consensus_rpcs_sender, pending_transaction_cache: Cache::builder() @@ -1664,6 +1678,7 @@ mod tests { block_sender, by_name: ArcSwap::from_pointee(rpcs_by_name), http_interval_sender: None, + name: "test".to_string(), watch_consensus_head_sender: Some(watch_consensus_head_sender), watch_consensus_rpcs_sender, pending_transaction_cache: Cache::builder() @@ -1828,6 +1843,7 @@ mod tests { block_sender, by_name: ArcSwap::from_pointee(rpcs_by_name), http_interval_sender: None, + name: "test".to_string(), watch_consensus_head_sender: Some(watch_consensus_head_sender), watch_consensus_rpcs_sender, pending_transaction_cache: Cache::builder()