Skip to content

Commit 781a0de

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 aabc31c commit 781a0de

File tree

3 files changed

+38
-30
lines changed

3 files changed

+38
-30
lines changed

src/ln/channel.rs

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

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

src/ln/channelmanager.rs

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3282,6 +3282,7 @@ mod tests {
32823282
use ln::channel::{COMMITMENT_TX_BASE_WEIGHT, COMMITMENT_TX_WEIGHT_PER_HTLC};
32833283
use ln::channelmanager::{ChannelManager,ChannelManagerReadArgs,OnionKeys,PaymentFailReason,RAACommitmentOrder};
32843284
use ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, CLTV_CLAIM_BUFFER, HTLC_FAIL_TIMEOUT_BLOCKS, ManyChannelMonitor};
3285+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
32853286
use ln::router::{Route, RouteHop, Router};
32863287
use ln::msgs;
32873288
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
@@ -5838,7 +5839,7 @@ mod tests {
58385839
assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to 0 are present
58395840
assert_eq!(revoked_local_txn[1].input.len(), 1);
58405841
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5841-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5842+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
58425843
// Revoke the old state
58435844
claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3);
58445845

@@ -5957,7 +5958,7 @@ mod tests {
59575958
assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
59585959
assert_eq!(revoked_local_txn[1].input.len(), 1);
59595960
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5960-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5961+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
59615962
check_spends!(revoked_local_txn[1], revoked_local_txn[0].clone());
59625963

59635964
//Revoke the old state
@@ -5983,16 +5984,16 @@ mod tests {
59835984
witness_lens.insert(node_txn[0].input[2].witness.last().unwrap().len());
59845985
assert_eq!(witness_lens.len(), 3);
59855986
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
5986-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
5987-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
5987+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
5988+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
59885989

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

59935994
assert_eq!(node_txn[2].input.len(), 1);
59945995
let witness_script = node_txn[2].clone().input[0].witness.pop().unwrap();
5995-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
5996+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
59965997
assert_eq!(node_txn[2].input[0].previous_output.txid, node_txn[1].txid());
59975998
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
59985999
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[1].previous_output.txid);
@@ -6055,15 +6056,15 @@ mod tests {
60556056
witness_lens.insert(node_txn[2].input[0].witness.last().unwrap().len());
60566057
assert_eq!(witness_lens.len(), 3);
60576058
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
6058-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
6059-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
6059+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
6060+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
60606061

60616062
assert_eq!(node_txn[3].input.len(), 1);
60626063
check_spends!(node_txn[3], chan_1.3.clone());
60636064

60646065
assert_eq!(node_txn[4].input.len(), 1);
60656066
let witness_script = node_txn[4].input[0].witness.last().unwrap();
6066-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
6067+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
60676068
assert_eq!(node_txn[4].input[0].previous_output.txid, node_txn[3].txid());
60686069
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
60696070
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[1].input[0].previous_output.txid);
@@ -6128,11 +6129,11 @@ mod tests {
61286129
let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Success tx), ChannelMonitor : 1 (HTLC-Success tx)
61296130
assert_eq!(node_txn.len(), 3);
61306131
check_spends!(node_txn[0], commitment_tx[0].clone());
6131-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6132+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61326133
check_spends!(node_txn[1], chan_2.3.clone());
61336134
check_spends!(node_txn[2], node_txn[1].clone());
61346135
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6135-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 138);
6136+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61366137

61376138
// Verify that B's ChannelManager is able to extract preimage from HTLC Success tx and pass it backward
61386139
nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: node_txn}, 1);
@@ -6163,12 +6164,12 @@ mod tests {
61636164
assert_eq!(node_txn[0], node_txn[3]);
61646165
check_spends!(node_txn[0], commitment_tx[0].clone());
61656166
check_spends!(node_txn[3], commitment_tx[0].clone());
6166-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6167-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6167+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6168+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61686169
check_spends!(node_txn[1], chan_2.3.clone());
61696170
check_spends!(node_txn[2], node_txn[1].clone());
61706171
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6171-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6172+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61726173
node_txn.clear()
61736174
}
61746175

@@ -6187,9 +6188,9 @@ mod tests {
61876188
assert_eq!(node_txn.len(), 3);
61886189
assert_eq!(node_txn[0], node_txn[2]);
61896190
check_spends!(node_txn[0], commitment_tx[0].clone());
6190-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 133);
6191+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61916192
check_spends!(node_txn[2], commitment_tx[0].clone());
6192-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6193+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61936194
check_spends!(node_txn[1], chan_1.3.clone());
61946195
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
61956196
let commitment_tx = node_txn[1].clone();
@@ -6207,12 +6208,12 @@ mod tests {
62076208
assert_eq!(node_txn[0], node_txn[3]);
62086209
check_spends!(node_txn[0], commitment_tx.clone());
62096210
check_spends!(node_txn[3], commitment_tx.clone());
6210-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6211-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6211+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6212+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62126213
check_spends!(node_txn[1], chan_1.3.clone());
62136214
check_spends!(node_txn[2], node_txn[1].clone());
62146215
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6215-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6216+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62166217
}
62176218

62186219
#[test]
@@ -6282,15 +6283,15 @@ mod tests {
62826283
assert_eq!(node_txn[1], node_txn[6]);
62836284
assert_eq!(node_txn[2], node_txn[7]);
62846285
check_spends!(node_txn[0], commitment_tx[0].clone());
6285-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6286+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62866287
check_spends!(node_txn[1], chan_2.3.clone());
62876288
check_spends!(node_txn[2], node_txn[1].clone());
62886289
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6289-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6290+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62906291
check_spends!(node_txn[3], chan_2.3.clone());
62916292
check_spends!(node_txn[4], node_txn[3].clone());
62926293
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 71);
6293-
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), 133);
6294+
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62946295
timeout_tx = node_txn[0].clone();
62956296
node_txn.clear();
62966297
}
@@ -6335,11 +6336,11 @@ mod tests {
63356336
assert_eq!(node_txn.len(), 4);
63366337
assert_eq!(node_txn[0], node_txn[3]);
63376338
check_spends!(node_txn[0], commitment_tx[0].clone());
6338-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6339+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
63396340
check_spends!(node_txn[1], chan_1.3.clone());
63406341
check_spends!(node_txn[2], node_txn[1].clone());
63416342
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6342-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6343+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
63436344
}
63446345

63456346
#[test]
@@ -8201,7 +8202,7 @@ mod tests {
82018202
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap(); // ChannelManager : 1 (local commitment tx), ChannelMonitor: 2 (1 preimage tx) * 2 (block-rescan)
82028203
check_spends!(node_txn[0], commitment_tx[0].clone());
82038204
assert_eq!(node_txn[0], node_txn[2]);
8204-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 133);
8205+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
82058206
check_spends!(node_txn[1], chan_1.3.clone());
82068207

82078208
let spend_txn = check_spendable_outputs!(nodes[1], 1); // , 0, 0, 1, 1);
@@ -8269,7 +8270,7 @@ mod tests {
82698270
assert_eq!(revoked_htlc_txn.len(), 3);
82708271
assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
82718272
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
8272-
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), 133);
8273+
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
82738274
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
82748275
check_spends!(revoked_htlc_txn[1], chan_1.3.clone());
82758276

@@ -8321,7 +8322,7 @@ mod tests {
83218322
assert_eq!(revoked_htlc_txn.len(), 3);
83228323
assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
83238324
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
8324-
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), 138);
8325+
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
83258326
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
83268327

83278328
// A will generate justice tx from B's revoked commitment/HTLC tx
@@ -8375,7 +8376,7 @@ mod tests {
83758376
}
83768377
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
83778378
assert_eq!(node_txn[0].input.len(), 1);
8378-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 138);
8379+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
83798380
check_spends!(node_txn[0], local_txn[0].clone());
83808381

83818382
// Verify that B is able to spend its own HTLC-Success tx thanks to spendable output event given back by its ChannelMonitor
@@ -8407,7 +8408,7 @@ mod tests {
84078408
}
84088409
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
84098410
assert_eq!(node_txn[0].input.len(), 1);
8410-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 133);
8411+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
84118412
check_spends!(node_txn[0], local_txn[0].clone());
84128413

84138414
// Verify that A is able to spend its own HTLC-Timeout tx thanks to spendable output event given back by its ChannelMonitor

src/ln/channelmonitor.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use ln::chan_utils;
3131
use ln::chan_utils::HTLCOutputInCommitment;
3232
use ln::channelmanager::{HTLCSource, HTLCPreviousHopData};
3333
use ln::router::{Route, RouteHop};
34+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
3435
use chain::chaininterface::{ChainListener, ChainWatchInterface, BroadcasterInterface};
3536
use chain::transaction::OutPoint;
3637
use chain::keysinterface::SpendableOutputDescriptor;
@@ -1915,12 +1916,12 @@ impl ChannelMonitor {
19151916
if payment_data.0.is_some() && payment_data.2.is_some() {
19161917
let mut payment_preimage = [0; 32];
19171918
let mut preimage = None;
1918-
if input.witness.len() == 5 && input.witness[4].len() == 138 {
1919+
if input.witness.len() == 5 && input.witness[4].len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
19191920
for (arr, vec) in payment_preimage.iter_mut().zip(tx.input[0].witness[3].iter()) {
19201921
*arr = *vec;
19211922
}
19221923
preimage = Some(payment_preimage);
1923-
} else if input.witness.len() == 3 && input.witness[2].len() == 133 {
1924+
} else if input.witness.len() == 3 && input.witness[2].len() == OFFERED_HTLC_SCRIPT_WEIGHT {
19241925
for (arr, vec) in payment_preimage.iter_mut().zip(tx.input[0].witness[1].iter()) {
19251926
*arr = *vec;
19261927
}

0 commit comments

Comments
 (0)