From 93e2c516bf83b52dc5a9251e83586022ea461ba1 Mon Sep 17 00:00:00 2001 From: Luis Herasme Date: Fri, 19 Jul 2024 19:40:48 -0400 Subject: [PATCH] chore: Use Address instead of String and adds ".address()" to the handler --- ghost-crab-macros/src/lib.rs | 14 ++++++++++++++ ghost-crab/src/handler.rs | 3 ++- ghost-crab/src/indexer.rs | 6 ++++-- ghost-crab/src/prelude.rs | 1 + ghost-crab/src/process_logs.rs | 3 --- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ghost-crab-macros/src/lib.rs b/ghost-crab-macros/src/lib.rs index 6f37e61..4613832 100644 --- a/ghost-crab-macros/src/lib.rs +++ b/ghost-crab-macros/src/lib.rs @@ -142,6 +142,7 @@ fn create_handler(metadata: TokenStream, input: TokenStream, is_template: bool) let abi; let network; let execution_mode; + let address; if is_template { let source = config.templates.get(&name).expect("Source not found."); @@ -149,12 +150,21 @@ fn create_handler(metadata: TokenStream, input: TokenStream, is_template: bool) abi = source.abi.clone(); network = source.network.clone(); execution_mode = source.execution_mode.clone().unwrap_or(ExecutionMode::Parallel); + address = quote! { + Address::ZERO + } } else { let source = config.data_sources.get(&name).expect("Source not found."); abi = source.abi.clone(); network = source.network.clone(); execution_mode = source.execution_mode.clone().unwrap_or(ExecutionMode::Parallel); + + let address_literal = Literal::string(&source.address); + + address = quote! { + address!(#address_literal) + } }; let rpc_url = config.networks.get(&network).expect("RPC url not found for network"); @@ -217,6 +227,10 @@ fn create_handler(metadata: TokenStream, input: TokenStream, is_template: bool) #is_template } + fn address(&self) -> Address { + #address + } + fn network(&self) - String { String::from(#network) } diff --git a/ghost-crab/src/handler.rs b/ghost-crab/src/handler.rs index 626acf3..867d425 100644 --- a/ghost-crab/src/handler.rs +++ b/ghost-crab/src/handler.rs @@ -21,6 +21,7 @@ pub trait Handler { async fn handle(&self, params: Context); fn get_source(&self) -> String; fn is_template(&self) -> bool; + fn address(&self) -> Address; fn network(&self) -> String; fn rpc_url(&self) -> String; fn execution_mode(&self) -> ExecutionMode; @@ -31,7 +32,7 @@ pub trait Handler { pub struct HandlerConfig { pub start_block: u64, pub step: u64, - pub address: String, + pub address: Address, pub handler: HandleInstance, pub templates: TemplateManager, } diff --git a/ghost-crab/src/indexer.rs b/ghost-crab/src/indexer.rs index 6ea33a7..2f41ddc 100644 --- a/ghost-crab/src/indexer.rs +++ b/ghost-crab/src/indexer.rs @@ -3,6 +3,7 @@ use crate::config; use crate::handler::{HandleInstance, HandlerConfig}; use crate::process_logs::process_logs; use crate::server::Server; +use alloy::primitives::Address; use tokio::sync::mpsc::error::SendError; use tokio::sync::mpsc::{self, Receiver, Sender}; @@ -13,7 +14,7 @@ pub struct TemplateManager { pub struct Template { pub start_block: u64, - pub address: String, + pub address: Address, pub handler: HandleInstance, } @@ -70,10 +71,11 @@ impl Indexer { } let source = self.config.data_sources.get(&handler.get_source()).unwrap(); + let address = handler.address(); self.handlers.push(HandlerConfig { start_block: source.start_block, - address: source.address.clone(), + address, step: 10_000, handler, templates: self.templates.clone(), diff --git a/ghost-crab/src/prelude.rs b/ghost-crab/src/prelude.rs index f5c758e..bb571c5 100644 --- a/ghost-crab/src/prelude.rs +++ b/ghost-crab/src/prelude.rs @@ -19,4 +19,5 @@ pub use crate::indexer; pub use crate::indexer::Template; pub use crate::process_logs; pub use alloy::primitives::Address; +pub use alloy::primitives::address; pub use alloy::providers::Provider; diff --git a/ghost-crab/src/process_logs.rs b/ghost-crab/src/process_logs.rs index 0fd314d..536323f 100644 --- a/ghost-crab/src/process_logs.rs +++ b/ghost-crab/src/process_logs.rs @@ -1,7 +1,6 @@ use crate::cache::manager::RPC_MANAGER; use crate::handler::{Context, HandlerConfig}; use crate::latest_block_manager::LatestBlockManager; -use alloy::primitives::Address; use alloy::providers::Provider; use alloy::rpc::types::eth::Filter; use alloy::transports::TransportError; @@ -18,8 +17,6 @@ pub async fn process_logs( let provider = RPC_MANAGER.lock().await.get_or_create(network, rpc_url).await; let mut current_block = start_block; - let address = address.parse::
().unwrap(); - let mut latest_block_manager = LatestBlockManager::new(provider.clone(), Duration::from_secs(10));