X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-transaction-sync%2Fsrc%2Fcommon.rs;h=be49fbe96ff017aa73d0c8e87265bb442b50fffc;hb=037954b3131e0c5a5ef642048998db122349d5d7;hp=45f18afb99bb07632c9590c1bc4e97c686dcab90;hpb=ec928d55b480254f2ce3457a5c219ed115fdf9ef;p=rust-lightning diff --git a/lightning-transaction-sync/src/common.rs b/lightning-transaction-sync/src/common.rs index 45f18afb..be49fbe9 100644 --- a/lightning-transaction-sync/src/common.rs +++ b/lightning-transaction-sync/src/common.rs @@ -1,6 +1,6 @@ -use lightning::chain::WatchedOutput; +use lightning::chain::{Confirm, WatchedOutput}; use bitcoin::{Txid, BlockHash, Transaction, OutPoint}; -use bitcoin::blockdata::block::Header; +use bitcoin::block::Header; use std::collections::{HashSet, HashMap}; @@ -28,6 +28,39 @@ impl SyncState { pending_sync: false, } } + pub fn sync_unconfirmed_transactions( + &mut self, confirmables: &Vec<&(dyn Confirm + Sync + Send)>, + unconfirmed_txs: Vec, + ) { + for txid in unconfirmed_txs { + for c in confirmables { + c.transaction_unconfirmed(&txid); + } + + self.watched_transactions.insert(txid); + } + } + + pub fn sync_confirmed_transactions( + &mut self, confirmables: &Vec<&(dyn Confirm + Sync + Send)>, + confirmed_txs: Vec + ) { + for ctx in confirmed_txs { + for c in confirmables { + c.transactions_confirmed( + &ctx.block_header, + &[(ctx.pos, &ctx.tx)], + ctx.block_height, + ); + } + + self.watched_transactions.remove(&ctx.tx.txid()); + + for input in &ctx.tx.input { + self.watched_outputs.remove(&input.previous_output); + } + } + } } @@ -68,6 +101,7 @@ impl FilterQueue { } } +#[derive(Debug)] pub(crate) struct ConfirmedTx { pub tx: Transaction, pub block_header: Header,