From a76a45f63a205edce1de800f1e29c8cddb54f4b3 Mon Sep 17 00:00:00 2001 From: Bryan Stitt Date: Tue, 31 Jan 2023 09:47:19 -0800 Subject: [PATCH] clone instead of take --- web3_proxy/src/block_number.rs | 29 ++++++++++++++--------------- web3_proxy/src/rpcs/connections.rs | 9 ++------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/web3_proxy/src/block_number.rs b/web3_proxy/src/block_number.rs index 50e21ee0..d00d1711 100644 --- a/web3_proxy/src/block_number.rs +++ b/web3_proxy/src/block_number.rs @@ -4,7 +4,7 @@ use ethers::{ prelude::{BlockNumber, U64}, types::H256, }; -use log::{trace, warn}; +use log::warn; use serde_json::json; use std::sync::Arc; @@ -56,7 +56,7 @@ pub async fn clean_block_number( None => { if params.len() == block_param_id { // add the latest block number to the end of the params - params.push(serde_json::to_value(latest_block)?); + params.push(json!(latest_block)); } else { // don't modify the request. only cache with current block // TODO: more useful log that include the @@ -67,8 +67,6 @@ pub async fn clean_block_number( Ok(latest_block) } Some(x) => { - let start = x.clone(); - // convert the json value to a BlockNumber let (block_num, change) = if let Some(obj) = x.as_object_mut() { // it might be a Map like `{"blockHash": String("0xa5626dc20d3a0a209b1de85521717a3e859698de8ce98bca1b16822b7501f74b")}` @@ -76,7 +74,10 @@ pub async fn clean_block_number( let block_hash: H256 = serde_json::from_value(block_hash).context("decoding blockHash")?; - let block = rpcs.block(authorization, &block_hash, None).await?; + let block = rpcs + .block(authorization, &block_hash, None) + .await + .context("fetching block number from hash")?; // TODO: set change to true? i think not we should probably use hashes for everything. ( @@ -91,19 +92,15 @@ pub async fn clean_block_number( } else { // it might be a string like "latest" or a block number // TODO: "BlockNumber" needs a better name - let block_number = serde_json::from_value::(x.take())?; + let block_number = serde_json::from_value::(x.take()) + .context("checking params for BlockNumber")?; block_num_to_U64(block_number, latest_block) }; // if we changed "latest" to a number, update the params to match if change { - *x = serde_json::to_value(block_num)?; - } - - // TODO: only do this if trace logging is enabled - if x.as_u64() != start.as_u64() { - trace!("changed {} to {}", start, x); + *x = json!(block_num); } Ok(block_num) @@ -147,7 +144,7 @@ pub async fn block_needed( }); }; - // get the index for the BlockNumber or return None to say no block is needed. + // get the index for the BlockNumber // The BlockNumber is usually the last element. // TODO: double check these. i think some of the getBlock stuff will never need archive let block_param_id = match method { @@ -185,7 +182,8 @@ pub async fn block_needed( 1 } else { let from_block_num = if let Some(x) = obj.get_mut("fromBlock") { - let block_num: BlockNumber = serde_json::from_value(x.take())?; + // TODO: use .take instead of clone + let block_num: BlockNumber = serde_json::from_value(x.clone())?; let (block_num, change) = block_num_to_U64(block_num, head_block_num); @@ -201,7 +199,8 @@ pub async fn block_needed( }; let to_block_num = if let Some(x) = obj.get_mut("toBlock") { - let block_num: BlockNumber = serde_json::from_value(x.take())?; + // TODO: use .take instead of clone + let block_num: BlockNumber = serde_json::from_value(x.clone())?; let (block_num, change) = block_num_to_U64(block_num, head_block_num); diff --git a/web3_proxy/src/rpcs/connections.rs b/web3_proxy/src/rpcs/connections.rs index 9ecf3fd9..5db5a432 100644 --- a/web3_proxy/src/rpcs/connections.rs +++ b/web3_proxy/src/rpcs/connections.rs @@ -760,13 +760,8 @@ impl Web3Connections { loop { let num_skipped = skip_rpcs.len(); - if num_skipped > 0 { - // trace!("skip_rpcs: {:?}", skip_rpcs); - - // TODO: is self.conns still right now that we split main and backup servers? - if num_skipped == self.conns.len() { - break; - } + if num_skipped == self.conns.len() { + break; } match self