X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fchain%2Fpackage.rs;h=786451ee50c834923f79e34bae478e7800f12c2b;hb=0f933efc58e3bd9e0dce15146671a171433199f1;hp=2ab37484148e48402674c68a8b2503961dcebe12;hpb=2ac09711d3e2c329d96e0bd60938ba83ff382b37;p=rust-lightning diff --git a/lightning/src/chain/package.rs b/lightning/src/chain/package.rs index 2ab37484..786451ee 100644 --- a/lightning/src/chain/package.rs +++ b/lightning/src/chain/package.rs @@ -434,7 +434,6 @@ impl PackageSolvingData { let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint); let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, onchain_handler.opt_anchors(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key); - bumped_tx.lock_time = PackedLockTime(outp.htlc.cltv_expiry); // Right now we don't aggregate time-locked transaction, if we do we should set lock_time before to avoid breaking hash computation if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(&bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) { let mut ser_sig = sig.serialize_der().to_vec(); ser_sig.push(EcdsaSighashType::All as u8); @@ -539,7 +538,7 @@ pub struct PackageTemplate { feerate_previous: u64, // Cache of next height at which fee-bumping and rebroadcast will be attempted. In // the future, we might abstract it to an observed mempool fluctuation. - height_timer: Option, + height_timer: u32, // Confirmation height of the claimed outputs set transaction. In case of reorg reaching // it, we wipe out and forget the package. height_original: u32, @@ -558,13 +557,10 @@ impl PackageTemplate { pub(crate) fn set_feerate(&mut self, new_feerate: u64) { self.feerate_previous = new_feerate; } - pub(crate) fn timer(&self) -> Option { - if let Some(ref timer) = self.height_timer { - return Some(*timer); - } - None + pub(crate) fn timer(&self) -> u32 { + self.height_timer } - pub(crate) fn set_timer(&mut self, new_timer: Option) { + pub(crate) fn set_timer(&mut self, new_timer: u32) { self.height_timer = new_timer; } pub(crate) fn outpoints(&self) -> Vec<&BitcoinOutPoint> { @@ -708,12 +704,13 @@ impl PackageTemplate { htlcs } pub(crate) fn finalize_malleable_package( - &self, onchain_handler: &mut OnchainTxHandler, value: u64, destination_script: Script, logger: &L + &self, current_height: u32, onchain_handler: &mut OnchainTxHandler, value: u64, + destination_script: Script, logger: &L ) -> Option where L::Target: Logger { debug_assert!(self.is_malleable()); let mut bumped_tx = Transaction { version: 2, - lock_time: PackedLockTime::ZERO, + lock_time: PackedLockTime(self.package_locktime(current_height)), input: vec![], output: vec![TxOut { script_pubkey: destination_script, @@ -837,7 +834,7 @@ impl PackageTemplate { soonest_conf_deadline, aggregable, feerate_previous: 0, - height_timer: None, + height_timer: height_original, height_original, } } @@ -854,7 +851,7 @@ impl Writeable for PackageTemplate { (0, self.soonest_conf_deadline, required), (2, self.feerate_previous, required), (4, self.height_original, required), - (6, self.height_timer, option) + (6, self.height_timer, required) }); Ok(()) } @@ -893,13 +890,16 @@ impl Readable for PackageTemplate { (4, height_original, required), (6, height_timer, option), }); + if height_timer.is_none() { + height_timer = Some(height_original); + } Ok(PackageTemplate { inputs, malleability, soonest_conf_deadline, aggregable, feerate_previous, - height_timer, + height_timer: height_timer.unwrap(), height_original, }) } @@ -1177,12 +1177,9 @@ mod tests { let revk_outp = dumb_revk_output!(secp_ctx); let mut package = PackageTemplate::build_package(txid, 0, revk_outp, 1000, true, 100); - let timer_none = package.timer(); - assert!(timer_none.is_none()); - package.set_timer(Some(100)); - if let Some(timer_some) = package.timer() { - assert_eq!(timer_some, 100); - } else { panic!() } + assert_eq!(package.timer(), 100); + package.set_timer(101); + assert_eq!(package.timer(), 101); } #[test]