Skip to content

Commit 6c1b48f

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 09487d3 commit 6c1b48f

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
@@ -3280,6 +3280,7 @@ mod tests {
32803280
use ln::channel::{COMMITMENT_TX_BASE_WEIGHT, COMMITMENT_TX_WEIGHT_PER_HTLC};
32813281
use ln::channelmanager::{ChannelManager,ChannelManagerReadArgs,OnionKeys,PaymentFailReason,RAACommitmentOrder};
32823282
use ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, CLTV_CLAIM_BUFFER, HTLC_FAIL_TIMEOUT_BLOCKS, ManyChannelMonitor};
3283+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
32833284
use ln::router::{Route, RouteHop, Router};
32843285
use ln::msgs;
32853286
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
@@ -5836,7 +5837,7 @@ mod tests {
58365837
assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to 0 are present
58375838
assert_eq!(revoked_local_txn[1].input.len(), 1);
58385839
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5839-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5840+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
58405841
// Revoke the old state
58415842
claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3);
58425843

@@ -5955,7 +5956,7 @@ mod tests {
59555956
assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
59565957
assert_eq!(revoked_local_txn[1].input.len(), 1);
59575958
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5958-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5959+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
59595960
check_spends!(revoked_local_txn[1], revoked_local_txn[0].clone());
59605961

59615962
//Revoke the old state
@@ -5981,16 +5982,16 @@ mod tests {
59815982
witness_lens.insert(node_txn[0].input[2].witness.last().unwrap().len());
59825983
assert_eq!(witness_lens.len(), 3);
59835984
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
5984-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
5985-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
5985+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
5986+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
59865987

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

59915992
assert_eq!(node_txn[2].input.len(), 1);
59925993
let witness_script = node_txn[2].clone().input[0].witness.pop().unwrap();
5993-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
5994+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
59945995
assert_eq!(node_txn[2].input[0].previous_output.txid, node_txn[1].txid());
59955996
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
59965997
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[1].previous_output.txid);
@@ -6053,15 +6054,15 @@ mod tests {
60536054
witness_lens.insert(node_txn[2].input[0].witness.last().unwrap().len());
60546055
assert_eq!(witness_lens.len(), 3);
60556056
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
6056-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
6057-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
6057+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
6058+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
60586059

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

60626063
assert_eq!(node_txn[4].input.len(), 1);
60636064
let witness_script = node_txn[4].input[0].witness.last().unwrap();
6064-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
6065+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
60656066
assert_eq!(node_txn[4].input[0].previous_output.txid, node_txn[3].txid());
60666067
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
60676068
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[1].input[0].previous_output.txid);
@@ -6126,11 +6127,11 @@ mod tests {
61266127
let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Success tx), ChannelMonitor : 1 (HTLC-Success tx)
61276128
assert_eq!(node_txn.len(), 3);
61286129
check_spends!(node_txn[0], commitment_tx[0].clone());
6129-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6130+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61306131
check_spends!(node_txn[1], chan_2.3.clone());
61316132
check_spends!(node_txn[2], node_txn[1].clone());
61326133
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6133-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 138);
6134+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61346135

61356136
// Verify that B's ChannelManager is able to extract preimage from HTLC Success tx and pass it backward
61366137
nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: node_txn}, 1);
@@ -6161,12 +6162,12 @@ mod tests {
61616162
assert_eq!(node_txn[0], node_txn[3]);
61626163
check_spends!(node_txn[0], commitment_tx[0].clone());
61636164
check_spends!(node_txn[3], commitment_tx[0].clone());
6164-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6165-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6165+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6166+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61666167
check_spends!(node_txn[1], chan_2.3.clone());
61676168
check_spends!(node_txn[2], node_txn[1].clone());
61686169
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6169-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6170+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61706171
node_txn.clear()
61716172
}
61726173

@@ -6185,9 +6186,9 @@ mod tests {
61856186
assert_eq!(node_txn.len(), 3);
61866187
assert_eq!(node_txn[0], node_txn[2]);
61876188
check_spends!(node_txn[0], commitment_tx[0].clone());
6188-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 133);
6189+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61896190
check_spends!(node_txn[2], commitment_tx[0].clone());
6190-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6191+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61916192
check_spends!(node_txn[1], chan_1.3.clone());
61926193
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
61936194
let commitment_tx = node_txn[1].clone();
@@ -6205,12 +6206,12 @@ mod tests {
62056206
assert_eq!(node_txn[0], node_txn[3]);
62066207
check_spends!(node_txn[0], commitment_tx.clone());
62076208
check_spends!(node_txn[3], commitment_tx.clone());
6208-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6209-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6209+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6210+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62106211
check_spends!(node_txn[1], chan_1.3.clone());
62116212
check_spends!(node_txn[2], node_txn[1].clone());
62126213
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6213-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6214+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62146215
}
62156216

62166217
#[test]
@@ -6280,15 +6281,15 @@ mod tests {
62806281
assert_eq!(node_txn[1], node_txn[6]);
62816282
assert_eq!(node_txn[2], node_txn[7]);
62826283
check_spends!(node_txn[0], commitment_tx[0].clone());
6283-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6284+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62846285
check_spends!(node_txn[1], chan_2.3.clone());
62856286
check_spends!(node_txn[2], node_txn[1].clone());
62866287
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6287-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6288+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62886289
check_spends!(node_txn[3], chan_2.3.clone());
62896290
check_spends!(node_txn[4], node_txn[3].clone());
62906291
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 71);
6291-
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), 133);
6292+
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62926293
timeout_tx = node_txn[0].clone();
62936294
node_txn.clear();
62946295
}
@@ -6333,11 +6334,11 @@ mod tests {
63336334
assert_eq!(node_txn.len(), 4);
63346335
assert_eq!(node_txn[0], node_txn[3]);
63356336
check_spends!(node_txn[0], commitment_tx[0].clone());
6336-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6337+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
63376338
check_spends!(node_txn[1], chan_1.3.clone());
63386339
check_spends!(node_txn[2], node_txn[1].clone());
63396340
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6340-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6341+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
63416342
}
63426343

63436344
#[test]
@@ -8224,7 +8225,7 @@ mod tests {
82248225
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap(); // ChannelManager : 1 (local commitment tx), ChannelMonitor: 2 (1 preimage tx) * 2 (block-rescan)
82258226
check_spends!(node_txn[0], commitment_tx[0].clone());
82268227
assert_eq!(node_txn[0], node_txn[2]);
8227-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 133);
8228+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
82288229
check_spends!(node_txn[1], chan_1.3.clone());
82298230

82308231
let spend_txn = check_spendable_outputs!(nodes[1], 1); // , 0, 0, 1, 1);
@@ -8292,7 +8293,7 @@ mod tests {
82928293
assert_eq!(revoked_htlc_txn.len(), 3);
82938294
assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
82948295
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
8295-
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), 133);
8296+
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
82968297
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
82978298
check_spends!(revoked_htlc_txn[1], chan_1.3.clone());
82988299

@@ -8344,7 +8345,7 @@ mod tests {
83448345
assert_eq!(revoked_htlc_txn.len(), 3);
83458346
assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
83468347
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
8347-
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), 138);
8348+
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
83488349
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
83498350

83508351
// A will generate justice tx from B's revoked commitment/HTLC tx
@@ -8398,7 +8399,7 @@ mod tests {
83988399
}
83998400
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
84008401
assert_eq!(node_txn[0].input.len(), 1);
8401-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 138);
8402+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
84028403
check_spends!(node_txn[0], local_txn[0].clone());
84038404

84048405
// Verify that B is able to spend its own HTLC-Success tx thanks to spendable output event given back by its ChannelMonitor
@@ -8430,7 +8431,7 @@ mod tests {
84308431
}
84318432
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
84328433
assert_eq!(node_txn[0].input.len(), 1);
8433-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 133);
8434+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
84348435
check_spends!(node_txn[0], local_txn[0].clone());
84358436

84368437
// 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
@@ -30,6 +30,7 @@ use ln::msgs::DecodeError;
3030
use ln::chan_utils;
3131
use ln::chan_utils::HTLCOutputInCommitment;
3232
use ln::channelmanager::HTLCSource;
33+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
3334
use chain::chaininterface::{ChainListener, ChainWatchInterface, BroadcasterInterface};
3435
use chain::transaction::OutPoint;
3536
use chain::keysinterface::SpendableOutputDescriptor;
@@ -1769,10 +1770,10 @@ impl ChannelMonitor {
17691770
// to broadcast solving backward
17701771
if payment_data.0.is_some() && payment_data.1.is_some() {
17711772
let mut payment_preimage = [0; 32];
1772-
if input.witness.len() == 5 && input.witness[4].len() == 138 {
1773+
if input.witness.len() == 5 && input.witness[4].len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
17731774
payment_preimage.copy_from_slice(&tx.input[0].witness[3]);
17741775
htlc_updated.push((payment_data.0.unwrap(), Some(payment_preimage), payment_data.1.unwrap()));
1775-
} else if input.witness.len() == 3 && input.witness[2].len() == 133 {
1776+
} else if input.witness.len() == 3 && input.witness[2].len() == OFFERED_HTLC_SCRIPT_WEIGHT {
17761777
payment_preimage.copy_from_slice(&tx.input[0].witness[1]);
17771778
htlc_updated.push((payment_data.0.unwrap(), Some(payment_preimage), payment_data.1.unwrap()));
17781779
} else {

0 commit comments

Comments
 (0)