X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fchain%2Fmod.rs;fp=lightning%2Fsrc%2Fchain%2Fmod.rs;h=18c7fd55d7b6643bbbc140a5208df42e39e42ea3;hb=02b85fabcdeb4c2128ca86e15f653c44dbef5df2;hp=67ae5b347f9d94b029f93333fbb68dc6e23f9518;hpb=d70fdd3a5c7bb2f240ef9de0fa075494b3923fe5;p=rust-lightning diff --git a/lightning/src/chain/mod.rs b/lightning/src/chain/mod.rs index 67ae5b34..18c7fd55 100644 --- a/lightning/src/chain/mod.rs +++ b/lightning/src/chain/mod.rs @@ -129,12 +129,38 @@ pub trait Filter: Send + Sync { /// a spending condition. fn register_tx(&self, txid: &Txid, script_pubkey: &Script); - /// Registers interest in spends of a transaction output identified by `outpoint` having - /// `script_pubkey` as the spending condition. + /// Registers interest in spends of a transaction output. /// - /// Optionally, returns any transaction dependent on the output. This is useful for Electrum - /// clients to facilitate registering in-block descendants. - fn register_output(&self, outpoint: &OutPoint, script_pubkey: &Script) -> Option<(usize, Transaction)>; + /// Optionally, when `output.block_hash` is set, should return any transaction spending the + /// output that is found in the corresponding block along with its index. + /// + /// This return value is useful for Electrum clients in order to supply in-block descendant + /// transactions which otherwise were not included. This is not necessary for other clients if + /// such descendant transactions were already included (e.g., when a BIP 157 client provides the + /// full block). + fn register_output(&self, output: WatchedOutput) -> Option<(usize, Transaction)>; +} + +/// A transaction output watched by a [`ChannelMonitor`] for spends on-chain. +/// +/// Used to convey to a [`Filter`] such an output with a given spending condition. Any transaction +/// spending the output must be given to [`ChannelMonitor::block_connected`] either directly or via +/// the return value of [`Filter::register_output`]. +/// +/// If `block_hash` is `Some`, this indicates the output was created in the corresponding block and +/// may have been spent there. See [`Filter::register_output`] for details. +/// +/// [`ChannelMonitor`]: channelmonitor::ChannelMonitor +/// [`ChannelMonitor::block_connected`]: channelmonitor::ChannelMonitor::block_connected +pub struct WatchedOutput { + /// First block where the transaction output may have been spent. + pub block_hash: Option, + + /// Outpoint identifying the transaction output. + pub outpoint: OutPoint, + + /// Spending condition of the transaction output. + pub script_pubkey: Script, } impl Listen for std::ops::Deref {