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
This commit is contained in:
codeShark149 2021-07-01 14:11:26 +05:30 committed by rajarshimaitra
parent 671d90e57c
commit de1fc2a677
No known key found for this signature in database
GPG Key ID: 558ACE7DBB4377C8
2 changed files with 27 additions and 9 deletions

View File

@ -1,6 +1,6 @@
// Bitcoin Dev Kit // Bitcoin Dev Kit
// Written in 2021 by Rajarshi Maitra <rajarshi149@gmail.com> // Written in 2021 by Rajarshi Maitra <rajarshi149@gmail.com>
// John Cantrell <johncantrell97@protonmail.com> // John Cantrell <johncantrell97@protonmail.com>
// //
// Copyright (c) 2020-2021 Bitcoin Dev Kit Developers // Copyright (c) 2020-2021 Bitcoin Dev Kit Developers
// //

View File

@ -63,6 +63,7 @@ use bitcoin::{Network, OutPoint, Transaction, Txid};
use rocksdb::{Options, SliceTransform, DB}; use rocksdb::{Options, SliceTransform, DB};
mod address_manager;
mod peer; mod peer;
mod store; mod store;
mod sync; mod sync;
@ -77,8 +78,11 @@ use peer::*;
use store::*; use store::*;
use sync::*; use sync::*;
// Only added to avoid unused warnings in addrsmngr module
pub use address_manager::{
AddressManager, DiscoveryProgress, LogDiscoveryProgress, NoDiscoveryProgress,
};
pub use peer::{Mempool, Peer}; pub use peer::{Mempool, Peer};
const SYNC_HEADERS_COST: f32 = 1.0; const SYNC_HEADERS_COST: f32 = 1.0;
const SYNC_FILTERS_COST: f32 = 11.6 * 1_000.0; const SYNC_FILTERS_COST: f32 = 11.6 * 1_000.0;
const PROCESS_BLOCKS_COST: f32 = 20_000.0; const PROCESS_BLOCKS_COST: f32 = 20_000.0;
@ -371,10 +375,10 @@ impl Blockchain for CompactFiltersBlockchain {
database.commit_batch(updates)?; database.commit_batch(updates)?;
match first_peer.ask_for_mempool() { 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") 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; 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( self.process_tx(
database, database,
tx, tx,
@ -435,11 +444,14 @@ impl Blockchain for CompactFiltersBlockchain {
fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> { fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
Ok(self.peers[0] Ok(self.peers[0]
.get_mempool() .get_mempool()
.get_tx(&Inventory::Transaction(*txid))) .get_tx(&Inventory::Transaction(*txid))
.map_err(CompactFiltersError::from)?)
} }
fn broadcast(&self, tx: &Transaction) -> Result<(), Error> { 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(()) Ok(())
} }
@ -487,7 +499,8 @@ impl ConfigurableBlockchain for CompactFiltersBlockchain {
.peers .peers
.iter() .iter()
.map(|peer_conf| match &peer_conf.socks5 { .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( Some(proxy) => Peer::connect_proxy(
peer_conf.address.as_str(), peer_conf.address.as_str(),
proxy, proxy,
@ -497,7 +510,8 @@ impl ConfigurableBlockchain for CompactFiltersBlockchain {
.map(|(a, b)| (a.as_str(), b.as_str())), .map(|(a, b)| (a.as_str(), b.as_str())),
Arc::clone(&mempool), Arc::clone(&mempool),
config.network, config.network,
), )
.map_err(CompactFiltersError::from),
}) })
.collect::<Result<_, _>>()?; .collect::<Result<_, _>>()?;
@ -546,6 +560,9 @@ pub enum CompactFiltersError {
/// Wrapper for [`crate::error::Error`] /// Wrapper for [`crate::error::Error`]
Global(Box<crate::error::Error>), Global(Box<crate::error::Error>),
/// Internal Peer Error
Peer(PeerError),
} }
impl fmt::Display for CompactFiltersError { impl fmt::Display for CompactFiltersError {
@ -560,6 +577,7 @@ impl_error!(rocksdb::Error, Db, CompactFiltersError);
impl_error!(std::io::Error, Io, CompactFiltersError); impl_error!(std::io::Error, Io, CompactFiltersError);
impl_error!(bitcoin::util::bip158::Error, Bip158, CompactFiltersError); impl_error!(bitcoin::util::bip158::Error, Bip158, CompactFiltersError);
impl_error!(std::time::SystemTimeError, Time, CompactFiltersError); impl_error!(std::time::SystemTimeError, Time, CompactFiltersError);
impl_error!(PeerError, Peer, CompactFiltersError);
impl From<crate::error::Error> for CompactFiltersError { impl From<crate::error::Error> for CompactFiltersError {
fn from(err: crate::error::Error) -> Self { fn from(err: crate::error::Error) -> Self {