- /// 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.is_empty() && tx.input[0].witness.last().unwrap().len() == 71 {
- match self.key_storage {
- Storage::Local { ref shutdown_pubkey, .. } => {
- let our_channel_close_key_hash = Hash160::hash(&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(),
- });
- }
- }
- }
- Storage::Watchtower { .. } => {
- //TODO: we need to ensure an offline client will generate the event when it
- // comes back online after only the watchtower saw the transaction
- }
- }
- }
- None
- }
-