+ /// Generate a spendable output event when closing_transaction get registered onchain.
+ fn check_spend_closing_transaction(&self, tx: &Transaction) -> Option<SpendableOutputDescriptor> {
+ if tx.input[0].sequence == 0xFFFFFFFF && tx.input[0].witness.last().unwrap().len() == 71 {
+ match self.key_storage {
+ KeyStorage::PrivMode { ref shutdown_pubkey, .. } => {
+ let our_channel_close_key_hash = Hash160::from_data(&shutdown_pubkey.serialize());
+ let shutdown_script = Builder::new().push_opcode(opcodes::All::OP_PUSHBYTES_0).push_slice(&our_channel_close_key_hash[..]).into_script();
+ for (idx, output) in tx.output.iter().enumerate() {
+ if shutdown_script == output.script_pubkey {
+ return Some(SpendableOutputDescriptor::StaticOutput {
+ outpoint: BitcoinOutPoint { txid: tx.txid(), vout: idx as u32 },
+ output: output.clone(),
+ });
+ }
+ }
+ }
+ KeyStorage::SigsMode { .. } => {
+ //TODO: we need to ensure an offline client will generate the event when it
+ // cames back online after only the watchtower saw the transaction
+ }
+ }
+ }
+ None
+ }
+