diff --git a/src/backend.rs b/src/backend.rs index 5d0d68a..2048598 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -7,7 +7,7 @@ use crate::{ use alloy_primitives::{keccak256, Address, Bytes, B256, U256}; use alloy_provider::{ network::{AnyNetwork, AnyRpcBlock, AnyRpcTransaction}, - Provider, + DynProvider, Provider, }; use alloy_rpc_types::BlockId; use eyre::WrapErr; @@ -155,8 +155,8 @@ enum BackendRequest { /// This handler will remain active as long as it is reachable (request channel still open) and /// requests are in progress. #[must_use = "futures do nothing unless polled"] -pub struct BackendHandler

{ - provider: P, +pub struct BackendHandler { + provider: DynProvider, /// Stores all the data. db: BlockchainDb, /// Requests currently in progress @@ -178,12 +178,9 @@ pub struct BackendHandler

{ account_fetch_mode: Arc, } -impl

BackendHandler

-where - P: Provider + Clone + Unpin + 'static, -{ +impl BackendHandler { fn new( - provider: P, + provider: DynProvider, db: BlockchainDb, rx: UnboundedReceiver, block_id: Option, @@ -474,10 +471,7 @@ where } } -impl

Future for BackendHandler

-where - P: Provider + Clone + Unpin + 'static, -{ +impl Future for BackendHandler { type Output = (); fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { @@ -737,12 +731,11 @@ impl SharedBackend { /// /// The spawned `BackendHandler` finishes once the last `SharedBackend` connected to it is /// dropped. - /// - /// NOTE: this should be called with `Arc` - pub async fn spawn_backend

(provider: P, db: BlockchainDb, pin_block: Option) -> Self - where - P: Provider + Unpin + 'static + Clone, - { + pub async fn spawn_backend + 'static>( + provider: P, + db: BlockchainDb, + pin_block: Option, + ) -> Self { let (shared, handler) = Self::new(provider, db, pin_block); // spawn the provider handler to a task trace!(target: "backendhandler", "spawning Backendhandler task"); @@ -752,14 +745,11 @@ impl SharedBackend { /// Same as `Self::spawn_backend` but spawns the `BackendHandler` on a separate `std::thread` in /// its own `tokio::Runtime` - pub fn spawn_backend_thread

( + pub fn spawn_backend_thread + 'static>( provider: P, db: BlockchainDb, pin_block: Option, - ) -> Self - where - P: Provider + Unpin + 'static + Clone, - { + ) -> Self { let (shared, handler) = Self::new(provider, db, pin_block); // spawn a light-weight thread with a thread-local async runtime just for @@ -781,17 +771,14 @@ impl SharedBackend { } /// Returns a new `SharedBackend` and the `BackendHandler` - pub fn new

( + pub fn new + 'static>( provider: P, db: BlockchainDb, pin_block: Option, - ) -> (Self, BackendHandler

) - where - P: Provider + Unpin + 'static + Clone, - { + ) -> (Self, BackendHandler) { let (backend, backend_rx) = unbounded(); let cache = Arc::new(FlushJsonBlockCacheDB(Arc::clone(db.cache()))); - let handler = BackendHandler::new(provider, db, backend_rx, pin_block); + let handler = BackendHandler::new(provider.erased(), db, backend_rx, pin_block); (Self { backend, cache, blocking_mode: Default::default() }, handler) }