X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning-transaction-sync%2Fsrc%2Fcommon.rs;h=be49fbe96ff017aa73d0c8e87265bb442b50fffc;hb=4532fb52f0d8665642d055e7c86e824f96a2d48b;hp=a6ee61e90f268f620caab6c059b2badee58e69d9;hpb=fa77f343278e228427557395a04960e71905a526;p=rust-lightning diff --git a/lightning-transaction-sync/src/common.rs b/lightning-transaction-sync/src/common.rs index a6ee61e9..be49fbe9 100644 --- a/lightning-transaction-sync/src/common.rs +++ b/lightning-transaction-sync/src/common.rs @@ -1,5 +1,6 @@ -use lightning::chain::WatchedOutput; -use bitcoin::{Txid, BlockHash, Transaction, BlockHeader, OutPoint}; +use lightning::chain::{Confirm, WatchedOutput}; +use bitcoin::{Txid, BlockHash, Transaction, OutPoint}; +use bitcoin::block::Header; use std::collections::{HashSet, HashMap}; @@ -27,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); + } + } + } } @@ -67,9 +101,10 @@ impl FilterQueue { } } +#[derive(Debug)] pub(crate) struct ConfirmedTx { pub tx: Transaction, - pub block_header: BlockHeader, + pub block_header: Header, pub block_height: u32, pub pos: usize, }