Skip to content

Commit fe9b7eb

Browse files
author
Antoine Riard
committed
Add const ACCEPTED_HTLC_SCRIPT_WEIGHT and OFFERED_HTLC_SCRIPT_WEIGHT to
ease readability Conditionnal compilation for weight of second one to handle test special cltv values
1 parent 8b2d14e commit fe9b7eb

File tree

3 files changed

+33
-25
lines changed

3 files changed

+33
-25
lines changed

src/ln/channel.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,12 @@ const B_OUTPUT_PLUS_SPENDING_INPUT_WEIGHT: u64 = 104; // prevout: 40, nSequence:
363363
/// it's 2^24.
364364
pub const MAX_FUNDING_SATOSHIS: u64 = (1 << 24);
365365

366+
#[cfg(test)]
367+
pub const ACCEPTED_HTLC_SCRIPT_WEIGHT: usize = 138; //Here we have a diff due to HTLC CLTV expiry being < 2^15 in test
368+
#[cfg(not(test))]
369+
pub const ACCEPTED_HTLC_SCRIPT_WEIGHT: usize = 139;
370+
pub const OFFERED_HTLC_SCRIPT_WEIGHT: usize = 133;
371+
366372
/// Used to return a simple Error back to ChannelManager. Will get converted to a
367373
/// msgs::ErrorAction::SendErrorMessage or msgs::ErrorAction::IgnoreError as appropriate with our
368374
/// channel_id in ChannelManager.

src/ln/channelmanager.rs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3251,6 +3251,7 @@ mod tests {
32513251
use chain::keysinterface;
32523252
use ln::channelmanager::{ChannelManager,ChannelManagerReadArgs,OnionKeys,PaymentFailReason,RAACommitmentOrder};
32533253
use ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, CLTV_CLAIM_BUFFER, HTLC_FAIL_TIMEOUT_BLOCKS, ManyChannelMonitor};
3254+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
32543255
use ln::router::{Route, RouteHop, Router};
32553256
use ln::msgs;
32563257
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
@@ -5763,7 +5764,7 @@ mod tests {
57635764
assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to 0 are present
57645765
assert_eq!(revoked_local_txn[1].input.len(), 1);
57655766
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5766-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5767+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
57675768
// Revoke the old state
57685769
claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3);
57695770

@@ -5882,7 +5883,7 @@ mod tests {
58825883
assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
58835884
assert_eq!(revoked_local_txn[1].input.len(), 1);
58845885
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5885-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5886+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
58865887
check_spends!(revoked_local_txn[1], revoked_local_txn[0].clone());
58875888

58885889
//Revoke the old state
@@ -5908,16 +5909,16 @@ mod tests {
59085909
witness_lens.insert(node_txn[0].input[2].witness.last().unwrap().len());
59095910
assert_eq!(witness_lens.len(), 3);
59105911
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
5911-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
5912-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
5912+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
5913+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
59135914

59145915
// Next nodes[1] broadcasts its current local tx state:
59155916
assert_eq!(node_txn[1].input.len(), 1);
59165917
assert_eq!(node_txn[1].input[0].previous_output.txid, chan_1.3.txid()); //Spending funding tx unique txouput, tx broadcasted by ChannelManager
59175918

59185919
assert_eq!(node_txn[2].input.len(), 1);
59195920
let witness_script = node_txn[2].clone().input[0].witness.pop().unwrap();
5920-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
5921+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
59215922
assert_eq!(node_txn[2].input[0].previous_output.txid, node_txn[1].txid());
59225923
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
59235924
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[1].previous_output.txid);
@@ -5980,15 +5981,15 @@ mod tests {
59805981
witness_lens.insert(node_txn[2].input[0].witness.last().unwrap().len());
59815982
assert_eq!(witness_lens.len(), 3);
59825983
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
5983-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
5984-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
5984+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
5985+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
59855986

59865987
assert_eq!(node_txn[3].input.len(), 1);
59875988
check_spends!(node_txn[3], chan_1.3.clone());
59885989

59895990
assert_eq!(node_txn[4].input.len(), 1);
59905991
let witness_script = node_txn[4].input[0].witness.last().unwrap();
5991-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
5992+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
59925993
assert_eq!(node_txn[4].input[0].previous_output.txid, node_txn[3].txid());
59935994
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
59945995
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[1].input[0].previous_output.txid);
@@ -6053,11 +6054,11 @@ mod tests {
60536054
let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Success tx), ChannelMonitor : 1 (HTLC-Success tx)
60546055
assert_eq!(node_txn.len(), 3);
60556056
check_spends!(node_txn[0], commitment_tx[0].clone());
6056-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6057+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
60576058
check_spends!(node_txn[1], chan_2.3.clone());
60586059
check_spends!(node_txn[2], node_txn[1].clone());
60596060
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6060-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 138);
6061+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
60616062

60626063
// Verify that B's ChannelManager is able to extract preimage from HTLC Success tx and pass it backward
60636064
nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: node_txn}, 1);
@@ -6088,12 +6089,12 @@ mod tests {
60886089
assert_eq!(node_txn[0], node_txn[3]);
60896090
check_spends!(node_txn[0], commitment_tx[0].clone());
60906091
check_spends!(node_txn[3], commitment_tx[0].clone());
6091-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6092-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6092+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6093+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
60936094
check_spends!(node_txn[1], chan_2.3.clone());
60946095
check_spends!(node_txn[2], node_txn[1].clone());
60956096
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6096-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6097+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
60976098
node_txn.clear()
60986099
}
60996100

@@ -6112,9 +6113,9 @@ mod tests {
61126113
assert_eq!(node_txn.len(), 3);
61136114
assert_eq!(node_txn[0], node_txn[2]);
61146115
check_spends!(node_txn[0], commitment_tx[0].clone());
6115-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 133);
6116+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61166117
check_spends!(node_txn[2], commitment_tx[0].clone());
6117-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6118+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61186119
check_spends!(node_txn[1], chan_1.3.clone());
61196120
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
61206121
let commitment_tx = node_txn[1].clone();
@@ -6132,12 +6133,12 @@ mod tests {
61326133
assert_eq!(node_txn[0], node_txn[3]);
61336134
check_spends!(node_txn[0], commitment_tx.clone());
61346135
check_spends!(node_txn[3], commitment_tx.clone());
6135-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6136-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6136+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6137+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61376138
check_spends!(node_txn[1], chan_1.3.clone());
61386139
check_spends!(node_txn[2], node_txn[1].clone());
61396140
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6140-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6141+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61416142
}
61426143

61436144
#[test]
@@ -6207,15 +6208,15 @@ mod tests {
62076208
assert_eq!(node_txn[1], node_txn[6]);
62086209
assert_eq!(node_txn[2], node_txn[7]);
62096210
check_spends!(node_txn[0], commitment_tx[0].clone());
6210-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6211+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62116212
check_spends!(node_txn[1], chan_2.3.clone());
62126213
check_spends!(node_txn[2], node_txn[1].clone());
62136214
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6214-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6215+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62156216
check_spends!(node_txn[3], chan_2.3.clone());
62166217
check_spends!(node_txn[4], node_txn[3].clone());
62176218
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 71);
6218-
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), 133);
6219+
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62196220
timeout_tx = node_txn[0].clone();
62206221
node_txn.clear();
62216222
}
@@ -6260,11 +6261,11 @@ mod tests {
62606261
assert_eq!(node_txn.len(), 4);
62616262
assert_eq!(node_txn[0], node_txn[3]);
62626263
check_spends!(node_txn[0], commitment_tx[0].clone());
6263-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6264+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62646265
check_spends!(node_txn[1], chan_1.3.clone());
62656266
check_spends!(node_txn[2], node_txn[1].clone());
62666267
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6267-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6268+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62686269
}
62696270

62706271
#[test]

src/ln/channelmonitor.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use secp256k1;
2828
use ln::msgs::{DecodeError, HandleError};
2929
use ln::chan_utils;
3030
use ln::chan_utils::HTLCOutputInCommitment;
31+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
3132
use chain::chaininterface::{ChainListener, ChainWatchInterface, BroadcasterInterface};
3233
use chain::transaction::OutPoint;
3334
use chain::keysinterface::SpendableOutputDescriptor;
@@ -1541,13 +1542,13 @@ impl ChannelMonitor {
15411542
}
15421543
}
15431544
if payment_data.1.is_some() {
1544-
if input.witness.len() == 5 && input.witness[4].len() == 138 {
1545+
if input.witness.len() == 5 && input.witness[4].len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
15451546
let mut payment_preimage = [0; 32];
15461547
for (arr, vec) in payment_preimage.iter_mut().zip(tx.input[0].witness[3].iter()) {
15471548
*arr = *vec;
15481549
}
15491550
payment_data = (Some(payment_preimage), payment_data.1);
1550-
} else if input.witness.len() == 3 && input.witness[2].len() == 133 {
1551+
} else if input.witness.len() == 3 && input.witness[2].len() == OFFERED_HTLC_SCRIPT_WEIGHT {
15511552
let mut payment_preimage = [0; 32];
15521553
for (arr, vec) in payment_preimage.iter_mut().zip(tx.input[0].witness[1].iter()) {
15531554
*arr = *vec;

0 commit comments

Comments
 (0)