Skip to content

Commit 36ba27a

Browse files
authored
Merge pull request #3604 from jkczyz/2025-02-channel-funding-pubkeys
Refactor `ChannelTransactionParameters` into `FundingScope`
2 parents 4f68130 + 0d127cf commit 36ba27a

22 files changed

+697
-942
lines changed

fuzz/src/chanmon_consistency.rs

+3-19
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ use lightning::ln::channelmanager::{
5252
};
5353
use lightning::ln::functional_test_utils::*;
5454
use lightning::ln::inbound_payment::ExpandedKey;
55-
use lightning::ln::msgs::{
56-
ChannelMessageHandler, CommitmentUpdate, DecodeError, Init, UpdateAddHTLC,
57-
};
55+
use lightning::ln::msgs::{ChannelMessageHandler, CommitmentUpdate, Init, UpdateAddHTLC};
5856
use lightning::ln::script::ShutdownScript;
5957
use lightning::ln::types::ChannelId;
6058
use lightning::offers::invoice::UnsignedBolt12Invoice;
@@ -356,16 +354,12 @@ impl SignerProvider for KeyProvider {
356354
#[cfg(taproot)]
357355
type TaprootSigner = TestChannelSigner;
358356

359-
fn generate_channel_keys_id(
360-
&self, _inbound: bool, _channel_value_satoshis: u64, _user_channel_id: u128,
361-
) -> [u8; 32] {
357+
fn generate_channel_keys_id(&self, _inbound: bool, _user_channel_id: u128) -> [u8; 32] {
362358
let id = self.rand_bytes_id.fetch_add(1, atomic::Ordering::Relaxed) as u8;
363359
[id; 32]
364360
}
365361

366-
fn derive_channel_signer(
367-
&self, channel_value_satoshis: u64, channel_keys_id: [u8; 32],
368-
) -> Self::EcdsaSigner {
362+
fn derive_channel_signer(&self, channel_keys_id: [u8; 32]) -> Self::EcdsaSigner {
369363
let secp_ctx = Secp256k1::signing_only();
370364
let id = channel_keys_id[0];
371365
#[rustfmt::skip]
@@ -377,23 +371,13 @@ impl SignerProvider for KeyProvider {
377371
SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, self.node_secret[31]]).unwrap(),
378372
SecretKey::from_slice(&[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, self.node_secret[31]]).unwrap(),
379373
[id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, self.node_secret[31]],
380-
channel_value_satoshis,
381374
channel_keys_id,
382375
channel_keys_id,
383376
);
384377
let revoked_commitment = self.make_enforcement_state_cell(keys.commitment_seed);
385378
TestChannelSigner::new_with_revoked(keys, revoked_commitment, false)
386379
}
387380

388-
fn read_chan_signer(&self, buffer: &[u8]) -> Result<Self::EcdsaSigner, DecodeError> {
389-
let mut reader = lightning::io::Cursor::new(buffer);
390-
391-
let inner: InMemorySigner = ReadableArgs::read(&mut reader, self)?;
392-
let state = self.make_enforcement_state_cell(inner.commitment_seed);
393-
394-
Ok(TestChannelSigner::new_with_revoked(inner, state, false))
395-
}
396-
397381
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
398382
let secp_ctx = Secp256k1::signing_only();
399383
#[rustfmt::skip]

fuzz/src/full_stack.rs

+3-17
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ use lightning::ln::channelmanager::{
4444
};
4545
use lightning::ln::functional_test_utils::*;
4646
use lightning::ln::inbound_payment::ExpandedKey;
47-
use lightning::ln::msgs::DecodeError;
4847
use lightning::ln::peer_handler::{
4948
IgnoringMessageHandler, MessageHandler, PeerManager, SocketDescriptor,
5049
};
@@ -63,7 +62,7 @@ use lightning::util::config::{ChannelConfig, UserConfig};
6362
use lightning::util::errors::APIError;
6463
use lightning::util::hash_tables::*;
6564
use lightning::util::logger::Logger;
66-
use lightning::util::ser::{Readable, ReadableArgs, Writeable};
65+
use lightning::util::ser::{Readable, Writeable};
6766
use lightning::util::test_channel_signer::{EnforcementState, TestChannelSigner};
6867

6968
use lightning_invoice::RawBolt11Invoice;
@@ -427,19 +426,15 @@ impl SignerProvider for KeyProvider {
427426
#[cfg(taproot)]
428427
type TaprootSigner = TestChannelSigner;
429428

430-
fn generate_channel_keys_id(
431-
&self, inbound: bool, _channel_value_satoshis: u64, _user_channel_id: u128,
432-
) -> [u8; 32] {
429+
fn generate_channel_keys_id(&self, inbound: bool, _user_channel_id: u128) -> [u8; 32] {
433430
let ctr = self.counter.fetch_add(1, Ordering::Relaxed) as u8;
434431
self.signer_state
435432
.borrow_mut()
436433
.insert(ctr, (inbound, Arc::new(Mutex::new(EnforcementState::new()))));
437434
[ctr; 32]
438435
}
439436

440-
fn derive_channel_signer(
441-
&self, channel_value_satoshis: u64, channel_keys_id: [u8; 32],
442-
) -> Self::EcdsaSigner {
437+
fn derive_channel_signer(&self, channel_keys_id: [u8; 32]) -> Self::EcdsaSigner {
443438
let secp_ctx = Secp256k1::signing_only();
444439
let ctr = channel_keys_id[0];
445440
let (inbound, state) = self.signer_state.borrow().get(&ctr).unwrap().clone();
@@ -476,7 +471,6 @@ impl SignerProvider for KeyProvider {
476471
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
477472
0, 0, 0, 0, 0, 6, ctr,
478473
],
479-
channel_value_satoshis,
480474
channel_keys_id,
481475
channel_keys_id,
482476
)
@@ -512,7 +506,6 @@ impl SignerProvider for KeyProvider {
512506
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
513507
0, 0, 0, 0, 0, 12, ctr,
514508
],
515-
channel_value_satoshis,
516509
channel_keys_id,
517510
channel_keys_id,
518511
)
@@ -522,13 +515,6 @@ impl SignerProvider for KeyProvider {
522515
)
523516
}
524517

525-
fn read_chan_signer(&self, mut data: &[u8]) -> Result<TestChannelSigner, DecodeError> {
526-
let inner: InMemorySigner = ReadableArgs::read(&mut data, self)?;
527-
let state = Arc::new(Mutex::new(EnforcementState::new()));
528-
529-
Ok(TestChannelSigner::new_with_revoked(inner, state, false))
530-
}
531-
532518
fn get_destination_script(&self, _channel_keys_id: [u8; 32]) -> Result<ScriptBuf, ()> {
533519
let secp_ctx = Secp256k1::signing_only();
534520
let channel_monitor_claim_key = SecretKey::from_slice(

fuzz/src/onion_message.rs

+3-11
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use lightning::blinded_path::message::{
1010
};
1111
use lightning::blinded_path::EmptyNodeIdLookUp;
1212
use lightning::ln::inbound_payment::ExpandedKey;
13-
use lightning::ln::msgs::{self, DecodeError, OnionMessageHandler};
13+
use lightning::ln::msgs::{self, OnionMessageHandler};
1414
use lightning::ln::peer_handler::IgnoringMessageHandler;
1515
use lightning::ln::script::ShutdownScript;
1616
use lightning::offers::invoice::UnsignedBolt12Invoice;
@@ -253,19 +253,11 @@ impl SignerProvider for KeyProvider {
253253
#[cfg(taproot)]
254254
type TaprootSigner = TestChannelSigner;
255255

256-
fn generate_channel_keys_id(
257-
&self, _inbound: bool, _channel_value_satoshis: u64, _user_channel_id: u128,
258-
) -> [u8; 32] {
256+
fn generate_channel_keys_id(&self, _inbound: bool, _user_channel_id: u128) -> [u8; 32] {
259257
unreachable!()
260258
}
261259

262-
fn derive_channel_signer(
263-
&self, _channel_value_satoshis: u64, _channel_keys_id: [u8; 32],
264-
) -> Self::EcdsaSigner {
265-
unreachable!()
266-
}
267-
268-
fn read_chan_signer(&self, _data: &[u8]) -> Result<TestChannelSigner, DecodeError> {
260+
fn derive_channel_signer(&self, _channel_keys_id: [u8; 32]) -> Self::EcdsaSigner {
269261
unreachable!()
270262
}
271263

lightning/src/chain/channelmonitor.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -3517,8 +3517,11 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
35173517
let revokeable_redeemscript = chan_utils::get_revokeable_redeemscript(&revocation_pubkey,
35183518
self.counterparty_commitment_params.on_counterparty_tx_csv, &delayed_key);
35193519

3520+
let channel_parameters = &self.onchain_tx_handler.channel_transaction_parameters;
35203521
let sig = self.onchain_tx_handler.signer.sign_justice_revoked_output(
3521-
&justice_tx, input_idx, value, &per_commitment_key, &self.onchain_tx_handler.secp_ctx)?;
3522+
&channel_parameters, &justice_tx, input_idx, value, &per_commitment_key,
3523+
&self.onchain_tx_handler.secp_ctx,
3524+
)?;
35223525
justice_tx.input[input_idx].witness.push_ecdsa_signature(&BitcoinSignature::sighash_all(sig));
35233526
justice_tx.input[input_idx].witness.push(&[1u8]);
35243527
justice_tx.input[input_idx].witness.push(revokeable_redeemscript.as_bytes());
@@ -5398,7 +5401,6 @@ mod tests {
53985401
SecretKey::from_slice(&[41; 32]).unwrap(),
53995402
SecretKey::from_slice(&[41; 32]).unwrap(),
54005403
[41; 32],
5401-
0,
54025404
[0; 32],
54035405
[0; 32],
54045406
);
@@ -5421,7 +5423,8 @@ mod tests {
54215423
selected_contest_delay: 67,
54225424
}),
54235425
funding_outpoint: Some(funding_outpoint),
5424-
channel_type_features: ChannelTypeFeatures::only_static_remote_key()
5426+
channel_type_features: ChannelTypeFeatures::only_static_remote_key(),
5427+
channel_value_satoshis: 0,
54255428
};
54265429
// Prune with one old state and a holder commitment tx holding a few overlaps with the
54275430
// old state.
@@ -5430,11 +5433,11 @@ mod tests {
54305433
let monitor = ChannelMonitor::new(Secp256k1::new(), keys,
54315434
Some(ShutdownScript::new_p2wpkh_from_pubkey(shutdown_pubkey).into_inner()), 0, &ScriptBuf::new(),
54325435
(OutPoint { txid: Txid::from_slice(&[43; 32]).unwrap(), index: 0 }, ScriptBuf::new()),
5433-
&channel_parameters, true, ScriptBuf::new(), 46, 0, HolderCommitmentTransaction::dummy(&mut Vec::new()),
5436+
&channel_parameters, true, ScriptBuf::new(), 46, 0, HolderCommitmentTransaction::dummy(0, &mut Vec::new()),
54345437
best_block, dummy_key, channel_id);
54355438

54365439
let mut htlcs = preimages_slice_to_htlcs!(preimages[0..10]);
5437-
let dummy_commitment_tx = HolderCommitmentTransaction::dummy(&mut htlcs);
5440+
let dummy_commitment_tx = HolderCommitmentTransaction::dummy(0, &mut htlcs);
54385441

54395442
monitor.provide_latest_holder_commitment_tx(dummy_commitment_tx.clone(),
54405443
htlcs.into_iter().map(|(htlc, _)| (htlc, Some(dummy_sig), None)).collect()).unwrap();
@@ -5473,7 +5476,7 @@ mod tests {
54735476
// Now update holder commitment tx info, pruning only element 18 as we still care about the
54745477
// previous commitment tx's preimages too
54755478
let mut htlcs = preimages_slice_to_htlcs!(preimages[0..5]);
5476-
let dummy_commitment_tx = HolderCommitmentTransaction::dummy(&mut htlcs);
5479+
let dummy_commitment_tx = HolderCommitmentTransaction::dummy(0, &mut htlcs);
54775480
monitor.provide_latest_holder_commitment_tx(dummy_commitment_tx.clone(),
54785481
htlcs.into_iter().map(|(htlc, _)| (htlc, Some(dummy_sig), None)).collect()).unwrap();
54795482
secret[0..32].clone_from_slice(&<Vec<u8>>::from_hex("2273e227a5b7449b6e70f1fb4652864038b1cbf9cd7c043a7d6456b7fc275ad8").unwrap());
@@ -5484,7 +5487,7 @@ mod tests {
54845487

54855488
// But if we do it again, we'll prune 5-10
54865489
let mut htlcs = preimages_slice_to_htlcs!(preimages[0..3]);
5487-
let dummy_commitment_tx = HolderCommitmentTransaction::dummy(&mut htlcs);
5490+
let dummy_commitment_tx = HolderCommitmentTransaction::dummy(0, &mut htlcs);
54885491
monitor.provide_latest_holder_commitment_tx(dummy_commitment_tx,
54895492
htlcs.into_iter().map(|(htlc, _)| (htlc, Some(dummy_sig), None)).collect()).unwrap();
54905493
secret[0..32].clone_from_slice(&<Vec<u8>>::from_hex("27cddaa5624534cb6cb9d7da077cf2b22ab21e9b506fd4998a51d54502e99116").unwrap());
@@ -5650,7 +5653,6 @@ mod tests {
56505653
SecretKey::from_slice(&[41; 32]).unwrap(),
56515654
SecretKey::from_slice(&[41; 32]).unwrap(),
56525655
[41; 32],
5653-
0,
56545656
[0; 32],
56555657
[0; 32],
56565658
);
@@ -5673,14 +5675,15 @@ mod tests {
56735675
selected_contest_delay: 67,
56745676
}),
56755677
funding_outpoint: Some(funding_outpoint),
5676-
channel_type_features: ChannelTypeFeatures::only_static_remote_key()
5678+
channel_type_features: ChannelTypeFeatures::only_static_remote_key(),
5679+
channel_value_satoshis: 0,
56775680
};
56785681
let shutdown_pubkey = PublicKey::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32]).unwrap());
56795682
let best_block = BestBlock::from_network(Network::Testnet);
56805683
let monitor = ChannelMonitor::new(Secp256k1::new(), keys,
56815684
Some(ShutdownScript::new_p2wpkh_from_pubkey(shutdown_pubkey).into_inner()), 0, &ScriptBuf::new(),
56825685
(OutPoint { txid: Txid::from_slice(&[43; 32]).unwrap(), index: 0 }, ScriptBuf::new()),
5683-
&channel_parameters, true, ScriptBuf::new(), 46, 0, HolderCommitmentTransaction::dummy(&mut Vec::new()),
5686+
&channel_parameters, true, ScriptBuf::new(), 46, 0, HolderCommitmentTransaction::dummy(0, &mut Vec::new()),
56845687
best_block, dummy_key, channel_id);
56855688

56865689
let chan_id = monitor.inner.lock().unwrap().channel_id();

lightning/src/chain/onchaintx.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature};
2525
use bitcoin::secp256k1;
2626

2727
use crate::chain::chaininterface::{ConfirmationTarget, compute_feerate_sat_per_1000_weight};
28-
use crate::sign::{ChannelDerivationParameters, HTLCDescriptor, ChannelSigner, EntropySource, SignerProvider, ecdsa::EcdsaChannelSigner};
28+
use crate::sign::{ChannelDerivationParameters, HTLCDescriptor, EntropySource, SignerProvider, ecdsa::EcdsaChannelSigner};
2929
use crate::ln::msgs::DecodeError;
3030
use crate::types::payment::PaymentPreimage;
3131
use crate::ln::chan_utils::{self, ChannelTransactionParameters, HTLCOutputInCommitment, HolderCommitmentTransaction};
@@ -368,7 +368,7 @@ impl<'a, 'b, ES: EntropySource, SP: SignerProvider> ReadableArgs<(&'a ES, &'b SP
368368
let prev_holder_commitment = Readable::read(reader)?;
369369
let _prev_holder_htlc_sigs: Option<Vec<Option<(usize, Signature)>>> = Readable::read(reader)?;
370370

371-
let channel_parameters = Readable::read(reader)?;
371+
let channel_parameters = ReadableArgs::<u64>::read(reader, channel_value_satoshis)?;
372372

373373
// Read the serialized signer bytes, but don't deserialize them, as we'll obtain our signer
374374
// by re-deriving the private key material.
@@ -383,8 +383,7 @@ impl<'a, 'b, ES: EntropySource, SP: SignerProvider> ReadableArgs<(&'a ES, &'b SP
383383
bytes_read += bytes_to_read;
384384
}
385385

386-
let mut signer = signer_provider.derive_channel_signer(channel_value_satoshis, channel_keys_id);
387-
signer.provide_channel_parameters(&channel_parameters);
386+
let signer = signer_provider.derive_channel_signer(channel_keys_id);
388387

389388
let pending_claim_requests_len: u64 = Readable::read(reader)?;
390389
let mut pending_claim_requests = hash_map_with_capacity(cmp::min(pending_claim_requests_len as usize, MAX_ALLOC_SIZE / 128));
@@ -1188,15 +1187,15 @@ impl<ChannelSigner: EcdsaChannelSigner> OnchainTxHandler<ChannelSigner> {
11881187
}
11891188

11901189
pub(crate) fn get_maybe_signed_holder_tx(&mut self, funding_redeemscript: &Script) -> MaybeSignedTransaction {
1191-
let tx = self.signer.sign_holder_commitment(&self.holder_commitment, &self.secp_ctx)
1190+
let tx = self.signer.sign_holder_commitment(&self.channel_transaction_parameters, &self.holder_commitment, &self.secp_ctx)
11921191
.map(|sig| self.holder_commitment.add_holder_sig(funding_redeemscript, sig))
11931192
.unwrap_or_else(|_| self.get_unsigned_holder_commitment_tx().clone());
11941193
MaybeSignedTransaction(tx)
11951194
}
11961195

11971196
#[cfg(any(test, feature="unsafe_revoked_tx_signing"))]
11981197
pub(crate) fn get_fully_signed_copy_holder_tx(&mut self, funding_redeemscript: &Script) -> Transaction {
1199-
let sig = self.signer.unsafe_sign_holder_commitment(&self.holder_commitment, &self.secp_ctx).expect("sign holder commitment");
1198+
let sig = self.signer.unsafe_sign_holder_commitment(&self.channel_transaction_parameters, &self.holder_commitment, &self.secp_ctx).expect("sign holder commitment");
12001199
self.holder_commitment.add_holder_sig(funding_redeemscript, sig)
12011200
}
12021201

@@ -1315,7 +1314,6 @@ mod tests {
13151314
SecretKey::from_slice(&[41; 32]).unwrap(),
13161315
SecretKey::from_slice(&[41; 32]).unwrap(),
13171316
[41; 32],
1318-
0,
13191317
[0; 32],
13201318
[0; 32],
13211319
);
@@ -1355,6 +1353,7 @@ mod tests {
13551353
}),
13561354
funding_outpoint: Some(funding_outpoint),
13571355
channel_type_features: ChannelTypeFeatures::only_static_remote_key(),
1356+
channel_value_satoshis: 0,
13581357
};
13591358

13601359
// Create an OnchainTxHandler for a commitment containing HTLCs with CLTV expiries of 0, 1,
@@ -1374,7 +1373,7 @@ mod tests {
13741373
(),
13751374
));
13761375
}
1377-
let holder_commit = HolderCommitmentTransaction::dummy(&mut htlcs);
1376+
let holder_commit = HolderCommitmentTransaction::dummy(1000000, &mut htlcs);
13781377
let mut tx_handler = OnchainTxHandler::new(
13791378
1000000,
13801379
[0; 32],

lightning/src/chain/package.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -602,12 +602,13 @@ impl PackageSolvingData {
602602
}
603603
}
604604
fn finalize_input<Signer: EcdsaChannelSigner>(&self, bumped_tx: &mut Transaction, i: usize, onchain_handler: &mut OnchainTxHandler<Signer>) -> bool {
605+
let channel_parameters = &onchain_handler.channel_transaction_parameters;
605606
match self {
606607
PackageSolvingData::RevokedOutput(ref outp) => {
607608
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
608609
let witness_script = chan_utils::get_revokeable_redeemscript(&chan_keys.revocation_key, outp.on_counterparty_tx_csv, &chan_keys.broadcaster_delayed_payment_key);
609610
//TODO: should we panic on signer failure ?
610-
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_output(&bumped_tx, i, outp.amount.to_sat(), &outp.per_commitment_key, &onchain_handler.secp_ctx) {
611+
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_output(channel_parameters, &bumped_tx, i, outp.amount.to_sat(), &outp.per_commitment_key, &onchain_handler.secp_ctx) {
611612
let mut ser_sig = sig.serialize_der().to_vec();
612613
ser_sig.push(EcdsaSighashType::All as u8);
613614
bumped_tx.input[i].witness.push(ser_sig);
@@ -619,7 +620,7 @@ impl PackageSolvingData {
619620
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
620621
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, &onchain_handler.channel_type_features(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
621622
//TODO: should we panic on signer failure ?
622-
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_htlc(&bumped_tx, i, outp.amount, &outp.per_commitment_key, &outp.htlc, &onchain_handler.secp_ctx) {
623+
if let Ok(sig) = onchain_handler.signer.sign_justice_revoked_htlc(channel_parameters, &bumped_tx, i, outp.amount, &outp.per_commitment_key, &outp.htlc, &onchain_handler.secp_ctx) {
623624
let mut ser_sig = sig.serialize_der().to_vec();
624625
ser_sig.push(EcdsaSighashType::All as u8);
625626
bumped_tx.input[i].witness.push(ser_sig);
@@ -631,7 +632,7 @@ impl PackageSolvingData {
631632
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
632633
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, &onchain_handler.channel_type_features(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
633634

634-
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(&bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
635+
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(channel_parameters, &bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
635636
let mut ser_sig = sig.serialize_der().to_vec();
636637
ser_sig.push(EcdsaSighashType::All as u8);
637638
bumped_tx.input[i].witness.push(ser_sig);
@@ -643,7 +644,7 @@ impl PackageSolvingData {
643644
let chan_keys = TxCreationKeys::derive_new(&onchain_handler.secp_ctx, &outp.per_commitment_point, &outp.counterparty_delayed_payment_base_key, &outp.counterparty_htlc_base_key, &onchain_handler.signer.pubkeys().revocation_basepoint, &onchain_handler.signer.pubkeys().htlc_basepoint);
644645
let witness_script = chan_utils::get_htlc_redeemscript_with_explicit_keys(&outp.htlc, &onchain_handler.channel_type_features(), &chan_keys.broadcaster_htlc_key, &chan_keys.countersignatory_htlc_key, &chan_keys.revocation_key);
645646

646-
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(&bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
647+
if let Ok(sig) = onchain_handler.signer.sign_counterparty_htlc_transaction(channel_parameters, &bumped_tx, i, &outp.htlc.amount_msat / 1000, &outp.per_commitment_point, &outp.htlc, &onchain_handler.secp_ctx) {
647648
let mut ser_sig = sig.serialize_der().to_vec();
648649
ser_sig.push(EcdsaSighashType::All as u8);
649650
bumped_tx.input[i].witness.push(ser_sig);

0 commit comments

Comments
 (0)