From de1fc2a6770ae9dca393b03aaf72e023b6096523 Mon Sep 17 00:00:00 2001 From: codeShark149 Date: Thu, 1 Jul 2021 14:11:26 +0530 Subject: [PATCH] Update compact_filters module Compact filters module is updated to include the new Address Manager. The new PeerError structure is added into CompactFiltersError to have compatibility with existing APIs. Minor cargo fmt nit fixes --- .../compact_filters/address_manager.rs | 2 +- src/blockchain/compact_filters/mod.rs | 34 ++++++++++++++----- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/blockchain/compact_filters/address_manager.rs b/src/blockchain/compact_filters/address_manager.rs index e496805b..9d127ada 100644 --- a/src/blockchain/compact_filters/address_manager.rs +++ b/src/blockchain/compact_filters/address_manager.rs @@ -1,6 +1,6 @@ // Bitcoin Dev Kit // Written in 2021 by Rajarshi Maitra -// John Cantrell +// John Cantrell // // Copyright (c) 2020-2021 Bitcoin Dev Kit Developers // diff --git a/src/blockchain/compact_filters/mod.rs b/src/blockchain/compact_filters/mod.rs index e057d162..e4200b25 100644 --- a/src/blockchain/compact_filters/mod.rs +++ b/src/blockchain/compact_filters/mod.rs @@ -63,6 +63,7 @@ use bitcoin::{Network, OutPoint, Transaction, Txid}; use rocksdb::{Options, SliceTransform, DB}; +mod address_manager; mod peer; mod store; mod sync; @@ -77,8 +78,11 @@ use peer::*; use store::*; use sync::*; +// Only added to avoid unused warnings in addrsmngr module +pub use address_manager::{ + AddressManager, DiscoveryProgress, LogDiscoveryProgress, NoDiscoveryProgress, +}; pub use peer::{Mempool, Peer}; - const SYNC_HEADERS_COST: f32 = 1.0; const SYNC_FILTERS_COST: f32 = 11.6 * 1_000.0; const PROCESS_BLOCKS_COST: f32 = 20_000.0; @@ -371,10 +375,10 @@ impl Blockchain for CompactFiltersBlockchain { database.commit_batch(updates)?; match first_peer.ask_for_mempool() { - Err(CompactFiltersError::PeerBloomDisabled) => { + Err(PeerError::PeerBloomDisabled(_)) => { log::warn!("Peer has BLOOM disabled, we can't ask for the mempool") } - e => e?, + e => e.map_err(CompactFiltersError::from)?, }; let mut internal_max_deriv = None; @@ -392,7 +396,12 @@ impl Blockchain for CompactFiltersBlockchain { )?; } } - for tx in first_peer.get_mempool().iter_txs().iter() { + for tx in first_peer + .get_mempool() + .iter_txs() + .map_err(CompactFiltersError::from)? + .iter() + { self.process_tx( database, tx, @@ -435,11 +444,14 @@ impl Blockchain for CompactFiltersBlockchain { fn get_tx(&self, txid: &Txid) -> Result, Error> { Ok(self.peers[0] .get_mempool() - .get_tx(&Inventory::Transaction(*txid))) + .get_tx(&Inventory::Transaction(*txid)) + .map_err(CompactFiltersError::from)?) } fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { - self.peers[0].broadcast_tx(tx.clone())?; + self.peers[0] + .broadcast_tx(tx.clone()) + .map_err(CompactFiltersError::from)?; Ok(()) } @@ -487,7 +499,8 @@ impl ConfigurableBlockchain for CompactFiltersBlockchain { .peers .iter() .map(|peer_conf| match &peer_conf.socks5 { - None => Peer::connect(&peer_conf.address, Arc::clone(&mempool), config.network), + None => Peer::connect(&peer_conf.address, Arc::clone(&mempool), config.network) + .map_err(CompactFiltersError::from), Some(proxy) => Peer::connect_proxy( peer_conf.address.as_str(), proxy, @@ -497,7 +510,8 @@ impl ConfigurableBlockchain for CompactFiltersBlockchain { .map(|(a, b)| (a.as_str(), b.as_str())), Arc::clone(&mempool), config.network, - ), + ) + .map_err(CompactFiltersError::from), }) .collect::>()?; @@ -546,6 +560,9 @@ pub enum CompactFiltersError { /// Wrapper for [`crate::error::Error`] Global(Box), + + /// Internal Peer Error + Peer(PeerError), } impl fmt::Display for CompactFiltersError { @@ -560,6 +577,7 @@ impl_error!(rocksdb::Error, Db, CompactFiltersError); impl_error!(std::io::Error, Io, CompactFiltersError); impl_error!(bitcoin::util::bip158::Error, Bip158, CompactFiltersError); impl_error!(std::time::SystemTimeError, Time, CompactFiltersError); +impl_error!(PeerError, Peer, CompactFiltersError); impl From for CompactFiltersError { fn from(err: crate::error::Error) -> Self {