@@ -2253,14 +2253,10 @@ impl FundingScope {
22532253 debug_assert!(post_value_to_self_msat_signed >= 0);
22542254 let post_value_to_self_msat = post_value_to_self_msat_signed as u64;
22552255
2256+ // Rotate the pubkeys using the prev_funding_txid as a tweak
22562257 let prev_funding_txid = prev_funding.get_funding_txid();
2257- // Update the splicing 'tweak', this will rotate the keys in the signer
2258- let holder_pubkeys = match &context.holder_signer {
2259- ChannelSignerType::Ecdsa(ecdsa) => ecdsa.pubkeys(prev_funding_txid, &context.secp_ctx),
2260- // TODO (taproot|arik)
2261- #[cfg(taproot)]
2262- _ => todo!(),
2263- };
2258+ let holder_pubkeys = context.holder_pubkeys(prev_funding_txid);
2259+
22642260 let channel_parameters = &prev_funding.channel_transaction_parameters;
22652261 let mut post_channel_transaction_parameters = ChannelTransactionParameters {
22662262 holder_pubkeys,
@@ -2280,7 +2276,7 @@ impl FundingScope {
22802276 .pubkeys
22812277 .funding_pubkey = counterparty_funding_pubkey;
22822278
2283- // New reserve values are based on the new channel value, and v2-specific
2279+ // New reserve values are based on the new channel value and are v2-specific
22842280 let counterparty_selected_channel_reserve_satoshis = Some(get_v2_channel_reserve_satoshis(
22852281 post_channel_value,
22862282 context.counterparty_dust_limit_satoshis,
@@ -3759,6 +3755,17 @@ where
37593755 return &mut self.holder_signer;
37603756 }
37613757
3758+ /// Returns holder pubkeys to use for the channel.
3759+ #[cfg(splicing)]
3760+ fn holder_pubkeys(&self, prev_funding_txid: Option<Txid>) -> ChannelPublicKeys {
3761+ match &self.holder_signer {
3762+ ChannelSignerType::Ecdsa(ecdsa) => ecdsa.pubkeys(prev_funding_txid, &self.secp_ctx),
3763+ // TODO (taproot|arik)
3764+ #[cfg(taproot)]
3765+ _ => todo!(),
3766+ }
3767+ }
3768+
37623769 /// Only allowed immediately after deserialization if get_outbound_scid_alias returns 0,
37633770 /// indicating we were written by LDK prior to 0.0.106 which did not set outbound SCID aliases
37643771 /// or prior to any channel actions during `Channel` initialization.
@@ -10405,9 +10412,10 @@ where
1040510412 fn get_splice_init(
1040610413 &self, our_funding_contribution_satoshis: i64, funding_feerate_per_kw: u32, locktime: u32,
1040710414 ) -> msgs::SpliceInit {
10408- // TODO(splicing): The exisiting pubkey is reused, but a new one should be generated. See #3542.
10409- // Note that channel_keys_id is supposed NOT to change
10410- let funding_pubkey = self.funding.get_holder_pubkeys().funding_pubkey.clone();
10415+ // Rotate the pubkeys using the prev_funding_txid as a tweak
10416+ let prev_funding_txid = self.funding.get_funding_txid();
10417+ let funding_pubkey = self.context.holder_pubkeys(prev_funding_txid).funding_pubkey;
10418+
1041110419 msgs::SpliceInit {
1041210420 channel_id: self.context.channel_id,
1041310421 funding_contribution_satoshis: our_funding_contribution_satoshis,
@@ -10539,6 +10547,8 @@ where
1053910547 // FIXME: Propagate message
1054010548 let _msg = interactive_tx_constructor.take_initiator_first_message();
1054110549
10550+ let funding_pubkey = splice_funding.get_holder_pubkeys().funding_pubkey;
10551+
1054210552 self.pending_splice = Some(PendingSplice {
1054310553 funding_negotiation: Some(FundingNegotiation::Pending(
1054410554 splice_funding,
@@ -10548,22 +10558,12 @@ where
1054810558 sent_funding_txid: None,
1054910559 });
1055010560
10551- Ok(splice_ack_msg)
10552- }
10553-
10554- /// Get the splice_ack message that can be sent in response to splice initiation.
10555- #[cfg(splicing)]
10556- pub fn get_splice_ack(&self, our_funding_contribution_satoshis: i64) -> msgs::SpliceAck {
10557- // TODO(splicing): The exisiting pubkey is reused, but a new one should be generated. See #3542.
10558- // Note that channel_keys_id is supposed NOT to change
10559- let splice_ack_msg = msgs::SpliceAck {
10561+ Ok(msgs::SpliceAck {
1056010562 channel_id: self.context.channel_id,
1056110563 funding_contribution_satoshis: our_funding_contribution_satoshis,
10562- funding_pubkey: self.funding.get_holder_pubkeys().funding_pubkey ,
10564+ funding_pubkey,
1056310565 require_confirmed_inputs: None,
10564- };
10565- // TODO(splicing): start interactive funding negotiation
10566- splice_ack_msg
10566+ })
1056710567 }
1056810568
1056910569 /// Handle splice_ack
0 commit comments