Skip to content

Commit 63079a5

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 eb88d69 commit 63079a5

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
@@ -3223,6 +3223,7 @@ mod tests {
32233223
use chain::keysinterface;
32243224
use ln::channelmanager::{ChannelManager,ChannelManagerReadArgs,OnionKeys,PaymentFailReason,RAACommitmentOrder};
32253225
use ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, CLTV_CLAIM_BUFFER, HTLC_FAIL_TIMEOUT_BLOCKS, ManyChannelMonitor};
3226+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
32263227
use ln::router::{Route, RouteHop, Router};
32273228
use ln::msgs;
32283229
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
@@ -5735,7 +5736,7 @@ mod tests {
57355736
assert_eq!(revoked_local_txn[0].output.len(), 2); // Only HTLC and output back to 0 are present
57365737
assert_eq!(revoked_local_txn[1].input.len(), 1);
57375738
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5738-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5739+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
57395740
// Revoke the old state
57405741
claim_payment(&nodes[0], &vec!(&nodes[1])[..], payment_preimage_3);
57415742

@@ -5854,7 +5855,7 @@ mod tests {
58545855
assert_eq!(revoked_local_txn[0].input[0].previous_output.txid, chan_1.3.txid());
58555856
assert_eq!(revoked_local_txn[1].input.len(), 1);
58565857
assert_eq!(revoked_local_txn[1].input[0].previous_output.txid, revoked_local_txn[0].txid());
5857-
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), 133); // HTLC-Timeout
5858+
assert_eq!(revoked_local_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT); // HTLC-Timeout
58585859
check_spends!(revoked_local_txn[1], revoked_local_txn[0].clone());
58595860

58605861
//Revoke the old state
@@ -5880,16 +5881,16 @@ mod tests {
58805881
witness_lens.insert(node_txn[0].input[2].witness.last().unwrap().len());
58815882
assert_eq!(witness_lens.len(), 3);
58825883
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
5883-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
5884-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
5884+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
5885+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
58855886

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

58905891
assert_eq!(node_txn[2].input.len(), 1);
58915892
let witness_script = node_txn[2].clone().input[0].witness.pop().unwrap();
5892-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
5893+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
58935894
assert_eq!(node_txn[2].input[0].previous_output.txid, node_txn[1].txid());
58945895
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
58955896
assert_ne!(node_txn[2].input[0].previous_output.txid, node_txn[0].input[1].previous_output.txid);
@@ -5952,15 +5953,15 @@ mod tests {
59525953
witness_lens.insert(node_txn[2].input[0].witness.last().unwrap().len());
59535954
assert_eq!(witness_lens.len(), 3);
59545955
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
5955-
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), 133); // revoked offered HTLC
5956-
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), 138); // revoked received HTLC
5956+
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
5957+
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
59575958

59585959
assert_eq!(node_txn[3].input.len(), 1);
59595960
check_spends!(node_txn[3], chan_1.3.clone());
59605961

59615962
assert_eq!(node_txn[4].input.len(), 1);
59625963
let witness_script = node_txn[4].input[0].witness.last().unwrap();
5963-
assert_eq!(witness_script.len(), 133); //Spending an offered htlc output
5964+
assert_eq!(witness_script.len(), OFFERED_HTLC_SCRIPT_WEIGHT); //Spending an offered htlc output
59645965
assert_eq!(node_txn[4].input[0].previous_output.txid, node_txn[3].txid());
59655966
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[0].input[0].previous_output.txid);
59665967
assert_ne!(node_txn[4].input[0].previous_output.txid, node_txn[1].input[0].previous_output.txid);
@@ -6025,11 +6026,11 @@ mod tests {
60256026
let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelManager : 2 (commitment tx, HTLC-Success tx), ChannelMonitor : 1 (HTLC-Success tx)
60266027
assert_eq!(node_txn.len(), 3);
60276028
check_spends!(node_txn[0], commitment_tx[0].clone());
6028-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6029+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
60296030
check_spends!(node_txn[1], chan_2.3.clone());
60306031
check_spends!(node_txn[2], node_txn[1].clone());
60316032
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6032-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 138);
6033+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
60336034

60346035
// Verify that B's ChannelManager is able to extract preimage from HTLC Success tx and pass it backward
60356036
nodes[1].chain_monitor.block_connected_with_filtering(&Block { header, txdata: node_txn}, 1);
@@ -6060,12 +6061,12 @@ mod tests {
60606061
assert_eq!(node_txn[0], node_txn[3]);
60616062
check_spends!(node_txn[0], commitment_tx[0].clone());
60626063
check_spends!(node_txn[3], commitment_tx[0].clone());
6063-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6064-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6064+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6065+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
60656066
check_spends!(node_txn[1], chan_2.3.clone());
60666067
check_spends!(node_txn[2], node_txn[1].clone());
60676068
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6068-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6069+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
60696070
node_txn.clear()
60706071
}
60716072

@@ -6084,9 +6085,9 @@ mod tests {
60846085
assert_eq!(node_txn.len(), 3);
60856086
assert_eq!(node_txn[0], node_txn[2]);
60866087
check_spends!(node_txn[0], commitment_tx[0].clone());
6087-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 133);
6088+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
60886089
check_spends!(node_txn[2], commitment_tx[0].clone());
6089-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6090+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
60906091
check_spends!(node_txn[1], chan_1.3.clone());
60916092
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
60926093
let commitment_tx = node_txn[1].clone();
@@ -6104,12 +6105,12 @@ mod tests {
61046105
assert_eq!(node_txn[0], node_txn[3]);
61056106
check_spends!(node_txn[0], commitment_tx.clone());
61066107
check_spends!(node_txn[3], commitment_tx.clone());
6107-
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), 138);
6108-
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 138);
6108+
assert_eq!(node_txn[0].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
6109+
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61096110
check_spends!(node_txn[1], chan_1.3.clone());
61106111
check_spends!(node_txn[2], node_txn[1].clone());
61116112
assert_eq!(node_txn[1].input[0].witness.clone().last().unwrap().len(), 71);
6112-
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), 133);
6113+
assert_eq!(node_txn[2].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61136114
}
61146115

61156116
#[test]
@@ -6179,15 +6180,15 @@ mod tests {
61796180
assert_eq!(node_txn[1], node_txn[6]);
61806181
assert_eq!(node_txn[2], node_txn[7]);
61816182
check_spends!(node_txn[0], commitment_tx[0].clone());
6182-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6183+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
61836184
check_spends!(node_txn[1], chan_2.3.clone());
61846185
check_spends!(node_txn[2], node_txn[1].clone());
61856186
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6186-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6187+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61876188
check_spends!(node_txn[3], chan_2.3.clone());
61886189
check_spends!(node_txn[4], node_txn[3].clone());
61896190
assert_eq!(node_txn[3].input[0].witness.clone().last().unwrap().len(), 71);
6190-
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), 133);
6191+
assert_eq!(node_txn[4].input[0].witness.clone().last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
61916192
timeout_tx = node_txn[0].clone();
61926193
node_txn.clear();
61936194
}
@@ -6232,11 +6233,11 @@ mod tests {
62326233
assert_eq!(node_txn.len(), 4);
62336234
assert_eq!(node_txn[0], node_txn[3]);
62346235
check_spends!(node_txn[0], commitment_tx[0].clone());
6235-
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), 138);
6236+
assert_eq!(node_txn[0].clone().input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
62366237
check_spends!(node_txn[1], chan_1.3.clone());
62376238
check_spends!(node_txn[2], node_txn[1].clone());
62386239
assert_eq!(node_txn[1].clone().input[0].witness.last().unwrap().len(), 71);
6239-
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), 133);
6240+
assert_eq!(node_txn[2].clone().input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
62406241
}
62416242

62426243
#[test]

src/ln/channelmonitor.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use ln::msgs::{DecodeError, HandleError};
2929
use ln::chan_utils;
3030
use ln::chan_utils::HTLCOutputInCommitment;
3131
use ln::channelmanager::{HTLCSource, HTLCPreviousHopData};
32+
use ln::channel::{ACCEPTED_HTLC_SCRIPT_WEIGHT, OFFERED_HTLC_SCRIPT_WEIGHT};
3233
use chain::chaininterface::{ChainListener, ChainWatchInterface, BroadcasterInterface};
3334
use chain::transaction::OutPoint;
3435
use chain::keysinterface::SpendableOutputDescriptor;
@@ -1599,13 +1600,13 @@ impl ChannelMonitor {
15991600
}
16001601
}
16011602
if payment_data.1.is_some() {
1602-
if input.witness.len() == 5 && input.witness[4].len() == 138 {
1603+
if input.witness.len() == 5 && input.witness[4].len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
16031604
let mut payment_preimage = [0; 32];
16041605
for (arr, vec) in payment_preimage.iter_mut().zip(tx.input[0].witness[3].iter()) {
16051606
*arr = *vec;
16061607
}
16071608
payment_data = (Some(payment_preimage), payment_data.1);
1608-
} else if input.witness.len() == 3 && input.witness[2].len() == 133 {
1609+
} else if input.witness.len() == 3 && input.witness[2].len() == OFFERED_HTLC_SCRIPT_WEIGHT {
16091610
let mut payment_preimage = [0; 32];
16101611
for (arr, vec) in payment_preimage.iter_mut().zip(tx.input[0].witness[1].iter()) {
16111612
*arr = *vec;

0 commit comments

Comments
 (0)