X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fchain%2Fonchaintx.rs;h=f66258c2c764d72d884b9670ab13ab511b2ce833;hb=e4e6e09b672dc929b4d8571975bd923a7a4486be;hp=6c29d147f02fb7239a7aaf86112b3c9cf2e7509f;hpb=e38dccaef49b4fd4c1858bc77ccb5d925f02561d;p=rust-lightning diff --git a/lightning/src/chain/onchaintx.rs b/lightning/src/chain/onchaintx.rs index 6c29d147..f66258c2 100644 --- a/lightning/src/chain/onchaintx.rs +++ b/lightning/src/chain/onchaintx.rs @@ -23,9 +23,9 @@ use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature}; use bitcoin::secp256k1; use crate::chain::chaininterface::compute_feerate_sat_per_1000_weight; -use crate::sign::{ChannelDerivationParameters, HTLCDescriptor, ChannelSigner, EntropySource, SignerProvider, ecdsa::WriteableEcdsaChannelSigner}; +use crate::sign::{ChannelDerivationParameters, HTLCDescriptor, ChannelSigner, EntropySource, SignerProvider, ecdsa::EcdsaChannelSigner}; use crate::ln::msgs::DecodeError; -use crate::ln::PaymentPreimage; +use crate::ln::types::PaymentPreimage; use crate::ln::chan_utils::{self, ChannelTransactionParameters, HTLCOutputInCommitment, HolderCommitmentTransaction}; use crate::chain::ClaimId; use crate::chain::chaininterface::{ConfirmationTarget, FeeEstimator, BroadcasterInterface, LowerBoundedFeeEstimator}; @@ -33,7 +33,7 @@ use crate::chain::channelmonitor::{ANTI_REORG_DELAY, CLTV_SHARED_CLAIM_BUFFER}; use crate::chain::package::{PackageSolvingData, PackageTemplate}; use crate::chain::transaction::MaybeSignedTransaction; use crate::util::logger::Logger; -use crate::util::ser::{Readable, ReadableArgs, MaybeReadable, UpgradableRequired, Writer, Writeable, VecWriter}; +use crate::util::ser::{Readable, ReadableArgs, MaybeReadable, UpgradableRequired, Writer, Writeable}; use crate::io; use crate::prelude::*; @@ -225,7 +225,7 @@ pub(crate) enum FeerateStrategy { /// OnchainTxHandler receives claiming requests, aggregates them if it's sound, broadcast and /// do RBF bumping if possible. #[derive(Clone)] -pub struct OnchainTxHandler { +pub struct OnchainTxHandler { channel_value_satoshis: u64, channel_keys_id: [u8; 32], destination_script: ScriptBuf, @@ -281,7 +281,7 @@ pub struct OnchainTxHandler { pub(super) secp_ctx: Secp256k1, } -impl PartialEq for OnchainTxHandler { +impl PartialEq for OnchainTxHandler { fn eq(&self, other: &Self) -> bool { // `signer`, `secp_ctx`, and `pending_claim_events` are excluded on purpose. self.channel_value_satoshis == other.channel_value_satoshis && @@ -300,7 +300,7 @@ impl PartialEq for OnchainTxHandler< const SERIALIZATION_VERSION: u8 = 1; const MIN_SERIALIZATION_VERSION: u8 = 1; -impl OnchainTxHandler { +impl OnchainTxHandler { pub(crate) fn write(&self, writer: &mut W) -> Result<(), io::Error> { write_ver_prefix!(writer, SERIALIZATION_VERSION, MIN_SERIALIZATION_VERSION); @@ -312,12 +312,9 @@ impl OnchainTxHandler self.channel_transaction_parameters.write(writer)?; - let mut key_data = VecWriter(Vec::new()); - self.signer.write(&mut key_data)?; - assert!(key_data.0.len() < core::usize::MAX); - assert!(key_data.0.len() < core::u32::MAX as usize); - (key_data.0.len() as u32).write(writer)?; - writer.write_all(&key_data.0[..])?; + // Write a zero-length signer. The data is no longer deserialized as of version 0.0.113 and + // downgrades before version 0.0.113 are no longer supported as of version 0.0.119. + 0u32.write(writer)?; writer.write_all(&(self.pending_claim_requests.len() as u64).to_be_bytes())?; for (ref ancestor_claim_txid, request) in self.pending_claim_requests.iter() { @@ -443,7 +440,7 @@ impl<'a, 'b, ES: EntropySource, SP: SignerProvider> ReadableArgs<(&'a ES, &'b SP } } -impl OnchainTxHandler { +impl OnchainTxHandler { pub(crate) fn new( channel_value_satoshis: u64, channel_keys_id: [u8; 32], destination_script: ScriptBuf, signer: ChannelSigner, channel_parameters: ChannelTransactionParameters, @@ -726,7 +723,10 @@ impl OnchainTxHandler B::Target: BroadcasterInterface, F::Target: FeeEstimator, { - log_debug!(logger, "Updating claims view at height {} with {} claim requests", cur_height, requests.len()); + if !requests.is_empty() { + log_debug!(logger, "Updating claims view at height {} with {} claim requests", cur_height, requests.len()); + } + let mut preprocessed_requests = Vec::with_capacity(requests.len()); let mut aggregated_request = None; @@ -772,6 +772,12 @@ impl OnchainTxHandler // Claim everything up to and including `cur_height` let remaining_locked_packages = self.locktimed_packages.split_off(&(cur_height + 1)); + if !self.locktimed_packages.is_empty() { + log_debug!(logger, + "Updating claims view at height {} with {} locked packages available for claim", + cur_height, + self.locktimed_packages.len()); + } for (pop_height, mut entry) in self.locktimed_packages.iter_mut() { log_trace!(logger, "Restoring delayed claim of package(s) at their timelock at {}.", pop_height); preprocessed_requests.append(&mut entry); @@ -852,8 +858,15 @@ impl OnchainTxHandler B::Target: BroadcasterInterface, F::Target: FeeEstimator, { - log_debug!(logger, "Updating claims view at height {} with {} matched transactions in block {}", cur_height, txn_matched.len(), conf_height); + let mut have_logged_intro = false; + let mut maybe_log_intro = || { + if !have_logged_intro { + log_debug!(logger, "Updating claims view at height {} with {} matched transactions in block {}", cur_height, txn_matched.len(), conf_height); + have_logged_intro = true; + } + }; let mut bump_candidates = new_hash_map(); + if !txn_matched.is_empty() { maybe_log_intro(); } for tx in txn_matched { // Scan all input to verify is one of the outpoint spent is of interest for us let mut claimed_outputs_material = Vec::new(); @@ -946,6 +959,7 @@ impl OnchainTxHandler self.onchain_events_awaiting_threshold_conf.drain(..).collect::>(); for entry in onchain_events_awaiting_threshold_conf { if entry.has_reached_confirmation_threshold(cur_height) { + maybe_log_intro(); match entry.event { OnchainEvent::Claim { claim_id } => { // We may remove a whole set of claim outpoints here, as these one may have @@ -983,7 +997,11 @@ impl OnchainTxHandler } // Build, bump and rebroadcast tx accordingly - log_trace!(logger, "Bumping {} candidates", bump_candidates.len()); + if !bump_candidates.is_empty() { + maybe_log_intro(); + log_trace!(logger, "Bumping {} candidates", bump_candidates.len()); + } + for (claim_id, request) in bump_candidates.iter() { if let Some((new_timer, new_feerate, bump_claim)) = self.generate_claim( cur_height, &request, &FeerateStrategy::ForceBump, &*fee_estimator, &*logger,