Skip to content

Commit 1b98d5e

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 6110401 commit 1b98d5e

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
@@ -3286,6 +3286,7 @@ mod tests {
32863286
use ln::channel::{COMMITMENT_TX_BASE_WEIGHT, COMMITMENT_TX_WEIGHT_PER_HTLC};
32873287
use ln::channelmanager::{ChannelManager,ChannelManagerReadArgs,OnionKeys,PaymentFailReason,RAACommitmentOrder};
32883288
use ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, CLTV_CLAIM_BUFFER, HTLC_FAIL_TIMEOUT_BLOCKS, ManyChannelMonitor};
3289+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
32893290
use ln::router::{Route, RouteHop, Router};
32903291
use ln::msgs;
32913292
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
@@ -5842,7 +5843,7 @@ mod tests {
58425843
assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to 0 are present
58435844
assert_eq!(revoked_local_txn[1].input.len(), 1);
58445845
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5845-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5846+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
58465847
// Revoke the old state
58475848
claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3);
58485849

@@ -5961,7 +5962,7 @@ mod tests {
59615962
assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
59625963
assert_eq!(revoked_local_txn[1].input.len(), 1);
59635964
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5964-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5965+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
59655966
check_spends!(revoked_local_txn[1], revoked_local_txn[0].clone());
59665967

59675968
//Revoke the old state
@@ -5987,16 +5988,16 @@ mod tests {
59875988
witness_lens.insert(node_txn[0].input[2].witness.last().unwrap().len());
59885989
assert_eq!(witness_lens.len(), 3);
59895990
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
5990-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
5991-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
5991+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
5992+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
59925993

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

59975998
assert_eq!(node_txn[2].input.len(), 1);
59985999
let witness_script = node_txn[2].clone().input[0].witness.pop().unwrap();
5999-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
6000+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
60006001
assert_eq!(node_txn[2].input[0].previous_output.txid, node_txn[1].txid());
60016002
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
60026003
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[1].previous_output.txid);
@@ -6059,15 +6060,15 @@ mod tests {
60596060
witness_lens.insert(node_txn[2].input[0].witness.last().unwrap().len());
60606061
assert_eq!(witness_lens.len(), 3);
60616062
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
6062-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
6063-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
6063+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
6064+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
60646065

60656066
assert_eq!(node_txn[3].input.len(), 1);
60666067
check_spends!(node_txn[3], chan_1.3.clone());
60676068

60686069
assert_eq!(node_txn[4].input.len(), 1);
60696070
let witness_script = node_txn[4].input[0].witness.last().unwrap();
6070-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
6071+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
60716072
assert_eq!(node_txn[4].input[0].previous_output.txid, node_txn[3].txid());
60726073
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
60736074
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[1].input[0].previous_output.txid);
@@ -6132,11 +6133,11 @@ mod tests {
61326133
let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Success tx), ChannelMonitor : 1 (HTLC-Success tx)
61336134
assert_eq!(node_txn.len(), 3);
61346135
check_spends!(node_txn[0], commitment_tx[0].clone());
6135-
assert_eq!(node_txn[0].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);
61366137
check_spends!(node_txn[1], chan_2.3.clone());
61376138
check_spends!(node_txn[2], node_txn[1].clone());
61386139
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6139-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 138);
6140+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61406141

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

@@ -6191,9 +6192,9 @@ mod tests {
61916192
assert_eq!(node_txn.len(), 3);
61926193
assert_eq!(node_txn[0], node_txn[2]);
61936194
check_spends!(node_txn[0], commitment_tx[0].clone());
6194-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 133);
6195+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61956196
check_spends!(node_txn[2], commitment_tx[0].clone());
6196-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6197+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61976198
check_spends!(node_txn[1], chan_1.3.clone());
61986199
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
61996200
let commitment_tx = node_txn[1].clone();
@@ -6211,12 +6212,12 @@ mod tests {
62116212
assert_eq!(node_txn[0], node_txn[3]);
62126213
check_spends!(node_txn[0], commitment_tx.clone());
62136214
check_spends!(node_txn[3], commitment_tx.clone());
6214-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6215-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6215+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6216+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62166217
check_spends!(node_txn[1], chan_1.3.clone());
62176218
check_spends!(node_txn[2], node_txn[1].clone());
62186219
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6219-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6220+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62206221
}
62216222

62226223
#[test]
@@ -6286,15 +6287,15 @@ mod tests {
62866287
assert_eq!(node_txn[1], node_txn[6]);
62876288
assert_eq!(node_txn[2], node_txn[7]);
62886289
check_spends!(node_txn[0], commitment_tx[0].clone());
6289-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6290+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62906291
check_spends!(node_txn[1], chan_2.3.clone());
62916292
check_spends!(node_txn[2], node_txn[1].clone());
62926293
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6293-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6294+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62946295
check_spends!(node_txn[3], chan_2.3.clone());
62956296
check_spends!(node_txn[4], node_txn[3].clone());
62966297
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 71);
6297-
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), 133);
6298+
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62986299
timeout_tx = node_txn[0].clone();
62996300
node_txn.clear();
63006301
}
@@ -6339,11 +6340,11 @@ mod tests {
63396340
assert_eq!(node_txn.len(), 4);
63406341
assert_eq!(node_txn[0], node_txn[3]);
63416342
check_spends!(node_txn[0], commitment_tx[0].clone());
6342-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6343+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
63436344
check_spends!(node_txn[1], chan_1.3.clone());
63446345
check_spends!(node_txn[2], node_txn[1].clone());
63456346
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6346-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6347+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
63476348
}
63486349

63496350
#[test]
@@ -8205,7 +8206,7 @@ mod tests {
82058206
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap(); // ChannelManager : 1 (local commitment tx), ChannelMonitor: 2 (1 preimage tx) * 2 (block-rescan)
82068207
check_spends!(node_txn[0], commitment_tx[0].clone());
82078208
assert_eq!(node_txn[0], node_txn[2]);
8208-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 133);
8209+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
82098210
check_spends!(node_txn[1], chan_1.3.clone());
82108211

82118212
let spend_txn = check_spendable_outputs!(nodes[1], 1); // , 0, 0, 1, 1);
@@ -8273,7 +8274,7 @@ mod tests {
82738274
assert_eq!(revoked_htlc_txn.len(), 3);
82748275
assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
82758276
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
8276-
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), 133);
8277+
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
82778278
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
82788279
check_spends!(revoked_htlc_txn[1], chan_1.3.clone());
82798280

@@ -8325,7 +8326,7 @@ mod tests {
83258326
assert_eq!(revoked_htlc_txn.len(), 3);
83268327
assert_eq!(revoked_htlc_txn[0], revoked_htlc_txn[2]);
83278328
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
8328-
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), 138);
8329+
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
83298330
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0].clone());
83308331

83318332
// A will generate justice tx from B's revoked commitment/HTLC tx
@@ -8379,7 +8380,7 @@ mod tests {
83798380
}
83808381
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
83818382
assert_eq!(node_txn[0].input.len(), 1);
8382-
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), 138);
8383+
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
83838384
check_spends!(node_txn[0], local_txn[0].clone());
83848385

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

84178418
// 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)