Skip to content

Add log for every tx broadcast #401

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lightning/src/ln/channelmanager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -768,6 +768,7 @@ impl ChannelManager {
self.fail_htlc_backwards_internal(self.channel_state.lock().unwrap(), htlc_source.0, &htlc_source.1, HTLCFailReason::Reason { failure_code: 0x4000 | 8, data: Vec::new() });
}
for tx in local_txn {
log_trace!(self, "Broadcast onchain {}", log_tx!(tx));
self.tx_broadcaster.broadcast_transaction(&tx);
}
}
Expand Down Expand Up @@ -2064,6 +2065,7 @@ impl ChannelManager {
}
};
if let Some(broadcast_tx) = tx {
log_trace!(self, "Broadcast onchain {}", log_tx!(broadcast_tx));
self.tx_broadcaster.broadcast_transaction(&broadcast_tx);
}
if let Some(chan) = chan_option {
Expand Down
4 changes: 4 additions & 0 deletions lightning/src/ln/channelmonitor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2170,6 +2170,7 @@ impl ChannelMonitor {
}
}
for tx in txn.iter() {
log_trace!(self, "Broadcast onchain {}", log_tx!(tx));
broadcaster.broadcast_transaction(tx);
}
}
Expand Down Expand Up @@ -2205,6 +2206,7 @@ impl ChannelMonitor {
let mut pending_claims = Vec::new();
if let Some(ref cur_local_tx) = self.current_local_signed_commitment_tx {
if self.would_broadcast_at_height(height) {
log_trace!(self, "Broadcast onchain {}", log_tx!(cur_local_tx.tx));
broadcaster.broadcast_transaction(&cur_local_tx.tx);
match self.key_storage {
Storage::Local { ref delayed_payment_base_key, ref latest_per_commitment_point, .. } => {
Expand All @@ -2215,6 +2217,7 @@ impl ChannelMonitor {
watch_outputs.push((cur_local_tx.txid.clone(), new_outputs));
}
for tx in txs {
log_trace!(self, "Broadcast onchain {}", log_tx!(tx));
broadcaster.broadcast_transaction(&tx);
}
},
Expand All @@ -2226,6 +2229,7 @@ impl ChannelMonitor {
watch_outputs.push((cur_local_tx.txid.clone(), new_outputs));
}
for tx in txs {
log_trace!(self, "Broadcast onchain {}", log_tx!(tx));
broadcaster.broadcast_transaction(&tx);
}
}
Expand Down
24 changes: 24 additions & 0 deletions lightning/src/util/macro_logger.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use chain::transaction::OutPoint;

use bitcoin_hashes::sha256d::Hash as Sha256dHash;
use bitcoin::blockdata::transaction::Transaction;
use secp256k1::key::PublicKey;

use ln::router::Route;
Expand Down Expand Up @@ -89,6 +90,29 @@ macro_rules! log_route {
}
}

pub(crate) struct DebugTx<'a>(pub &'a Transaction);
impl<'a> std::fmt::Display for DebugTx<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
if self.0.input.len() == 1 && self.0.input[0].witness.last().unwrap().len() == 71 && (self.0.input[0].sequence >> 8*3) as u8 == 0x80 { write!(f, "commitment tx")?; }
else if self.0.input.len() == 1 && self.0.input[0].witness.last().unwrap().len() == 71 { write!(f, "closing tx")?; }
else if self.0.input.len() == 1 && self.0.input[0].witness.last().unwrap().len() == 133 && self.0.input[0].witness.len() == 5 { write!(f, "HTLC-timeout tx")?; }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't these vary by +/- a few bytes?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact that the line under, corrected to be right on both mainnet/testnet.

That's a basic logger, in case of aggregated inputs, it will only log first one

else if self.0.input.len() == 1 && (self.0.input[0].witness.last().unwrap().len() == 138 || self.0.input[0].witness.last().unwrap().len() == 139) && self.0.input[0].witness.len() == 5 { write!(f, "HTLC-success tx")?; }
else {
for inp in &self.0.input {
if inp.witness.last().unwrap().len() == 133 { write!(f, "preimage tx")?; break }
else if inp.witness.last().unwrap().len() == 138 { write!(f, "timeout tx")?; break }
}
}
Ok(())
}
}

macro_rules! log_tx {
($obj: expr) => {
::util::macro_logger::DebugTx(&$obj)
}
}

macro_rules! log_internal {
($self: ident, $lvl:expr, $($arg:tt)+) => (
&$self.logger.log(&::util::logger::Record::new($lvl, format_args!($($arg)+), module_path!(), file!(), line!()));
Expand Down