diff --git a/src/main.rs b/src/main.rs index bf1307b..ef6ab5e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -267,7 +267,7 @@ fn create_new_tx_message(transaction: Vec) -> Result { )) } -async fn handle_zmq(zmq_url: String, electrum_url: String) { +async fn handle_zmq(zmq_url: String, blindbit_url: String) { debug!("Starting listening on Core"); let mut socket = zeromq::SubSocket::new(); socket.connect(&zmq_url).await.unwrap(); @@ -297,7 +297,7 @@ async fn handle_zmq(zmq_url: String, electrum_url: String) { continue; } }, - Ok("hashblock") => match scan_blocks(0, &electrum_url) { + Ok("hashblock") => match scan_blocks(0, &blindbit_url).await { Ok(_) => continue, Err(e) => { error!("{}", e); @@ -472,14 +472,14 @@ async fn main() -> Result<()> { if last_scan < current_tip { log::info!("Scanning for our outputs"); - scan_blocks(current_tip - last_scan, &config.electrum_url)?; + scan_blocks(current_tip - last_scan, &config.blindbit_url)?; } - Set CHAIN_TIP + // Set CHAIN_TIP CHAIN_TIP.store(current_tip as u64, std::sync::atomic::Ordering::SeqCst); // Subscribe to Bitcoin Core - tokio::spawn(handle_zmq(config.zmq_url, config.electrum_url)); + tokio::spawn(handle_zmq(config.zmq_url, config.blindbit_url)); // Create the event loop and TCP listener we'll accept connections on. let try_socket = TcpListener::bind(config.ws_url).await; diff --git a/src/scan.rs b/src/scan.rs index 76bc0da..c11bb16 100644 --- a/src/scan.rs +++ b/src/scan.rs @@ -3,10 +3,8 @@ use std::str::FromStr; use std::sync::MutexGuard; use anyhow::{Error, Result}; -use bitcoincore_rpc::bitcoin::absolute::Height; -use bitcoincore_rpc::bitcoin::hashes::Hash; -use electrum_client::ElectrumApi; -use sdk_common::silentpayments::SpWallet; +use bitcoincore_rpc::bitcoin::absolute::{Amount, Height}; +use sdk_common::silentpayments::{SpWallet, StateUpdater}; use sdk_common::sp_client::bitcoin::bip158::BlockFilter; use sdk_common::sp_client::bitcoin::hex::DisplayHex; use sdk_common::sp_client::bitcoin::secp256k1::{All, PublicKey, Scalar, Secp256k1, SecretKey}; @@ -15,10 +13,10 @@ use sdk_common::sp_client::silentpayments::receiving::Receiver; use sdk_common::sp_client::silentpayments::utils::receiving::{ calculate_tweak_data, get_pubkey_from_input, }; -use sdk_common::sp_client::{OutputSpendStatus, OwnedOutput}; +use sdk_common::sp_client::{OutputSpendStatus, OwnedOutput, SpScanner}; use tokio::time::Instant; -use crate::{electrumclient, MutexExt, DAEMON, STORAGE, WALLET}; +use crate::{MutexExt, DAEMON, STORAGE, WALLET}; pub fn compute_partial_tweak_to_transaction(tx: &Transaction) -> Result { let daemon = DAEMON.get().ok_or(Error::msg("DAEMON not initialized"))?; @@ -236,9 +234,9 @@ fn scan_block_inputs( Ok(found) } -pub fn scan_blocks(mut n_blocks_to_scan: u32, electrum_url: &str) -> anyhow::Result<()> { +pub async fn scan_blocks(mut n_blocks_to_scan: u32, blindbit_url: &str) -> anyhow::Result<()> { log::info!("Starting a rescan"); - let electrum_client = electrumclient::create_electrum_client(electrum_url)?; + let blindbit_client = sdk_common::sp_client::BlindbitClient::new(blindbit_url.to_owned())?; let mut sp_wallet = WALLET .get() @@ -269,14 +267,23 @@ pub fn scan_blocks(mut n_blocks_to_scan: u32, electrum_url: &str) -> anyhow::Res if start > end { return Ok(()); } + + let updater = StateUpdater::new(); log::info!("start: {} end: {}", start, end); + SpScanner::new( + sp_wallet.get_sp_client().clone(), + Box::new(updater), + backend, + owned_outpoints, + keep_scanning + ); let mut filters: Vec<(u32, BlockHash, BlockFilter)> = vec![]; for blkheight in start..=end { filters.push(core.get_filters(blkheight)?); } - let mut tweak_data_map = electrum_client.sp_tweaks(start as usize)?; + let mut tweak_data_map = blindbit_client.tweaks(Height::from_consensus(start)?, Amount::from_sat(550)).await?; let scan_sk = sp_wallet.get_sp_client().get_scan_key();