@@ -31,7 +31,7 @@ use crate::ln::types::ChannelId;
31
31
use crate::types::payment::{PaymentPreimage, PaymentHash};
32
32
use crate::types::features::{ChannelTypeFeatures, InitFeatures};
33
33
use crate::ln::interactivetxs::{
34
- estimate_input_weight, get_output_weight , HandleTxCompleteValue, HandleTxCompleteResult, InteractiveTxConstructor,
34
+ get_output_weight, need_to_add_funding_change_output , HandleTxCompleteValue, HandleTxCompleteResult, InteractiveTxConstructor,
35
35
InteractiveTxConstructorArgs, InteractiveTxMessageSend, InteractiveTxSigningSession, InteractiveTxMessageSendResult,
36
36
OutputOwned, SharedOwnedOutput, TX_COMMON_FIELDS_WEIGHT,
37
37
};
@@ -4252,42 +4252,6 @@ fn get_v2_channel_reserve_satoshis(channel_value_satoshis: u64, dust_limit_satos
4252
4252
cmp::min(channel_value_satoshis, cmp::max(q, dust_limit_satoshis))
4253
4253
}
4254
4254
4255
- /// Determine whether with our given inputs, outputs, and intended contribution
4256
- /// a change output should be added or not, and if so, of waht size
4257
- #[allow(dead_code)] // TODO(dual_funding): Remove once begin_interactive_funding_tx_construction() is used
4258
- fn need_to_add_funding_change_output(is_initiator: bool,
4259
- our_contribution: u64,
4260
- funding_inputs_prev_outputs: &Vec<TxOut>, funding_outputs: &Vec<OutputOwned>,
4261
- funding_feerate_sat_per_1000_weight: u32, holder_dust_limit_satoshis: u64,
4262
- ) -> Option<u64> {
4263
- let our_funding_inputs_weight = funding_inputs_prev_outputs.iter().fold(0u64, |weight, prev_output| {
4264
- weight.saturating_add(estimate_input_weight(prev_output).to_wu())
4265
- });
4266
- let our_funding_outputs_weight = funding_outputs.iter().fold(0u64, |weight, out| {
4267
- weight.saturating_add(get_output_weight(&out.tx_out().script_pubkey).to_wu())
4268
- });
4269
- let our_contributed_weight = our_funding_outputs_weight.saturating_add(our_funding_inputs_weight);
4270
- let mut fees_sats = fee_for_weight(funding_feerate_sat_per_1000_weight, our_contributed_weight);
4271
-
4272
- // If we are the initiator, we must pay for weight of all common fields in the funding transaction.
4273
- if is_initiator {
4274
- let common_fees = fee_for_weight(funding_feerate_sat_per_1000_weight, TX_COMMON_FIELDS_WEIGHT);
4275
- fees_sats = fees_sats.saturating_add(common_fees);
4276
- }
4277
-
4278
- let total_input_satoshis: u64 = funding_inputs_prev_outputs.iter().map(|out| out.value.to_sat()).sum();
4279
-
4280
- let remaining_value = total_input_satoshis
4281
- .saturating_sub(our_contribution)
4282
- .saturating_sub(fees_sats);
4283
-
4284
- if remaining_value <= holder_dust_limit_satoshis {
4285
- None
4286
- } else {
4287
- Some(remaining_value)
4288
- }
4289
- }
4290
-
4291
4255
#[allow(dead_code)] // TODO(dual_funding): Remove once begin_interactive_funding_tx_construction() is used
4292
4256
fn maybe_add_funding_change_output<SP: Deref>(signer_provider: &SP, is_initiator: bool,
4293
4257
our_funding_satoshis: u64, funding_inputs_prev_outputs: &Vec<TxOut>,
@@ -10329,9 +10293,8 @@ mod tests {
10329
10293
use crate::ln::channel_keys::{RevocationKey, RevocationBasepoint};
10330
10294
use crate::ln::channelmanager::{self, HTLCSource, PaymentId};
10331
10295
use crate::ln::channel::InitFeatures;
10332
- use crate::ln::channel::{AwaitingChannelReadyFlags, Channel, ChannelState, InboundHTLCOutput, OutboundV1Channel, InboundV1Channel, OutboundHTLCOutput, InboundHTLCState, OutboundHTLCState, HTLCCandidate, HTLCInitiator, HTLCUpdateAwaitingACK, commit_tx_fee_sat, need_to_add_funding_change_output };
10296
+ use crate::ln::channel::{AwaitingChannelReadyFlags, Channel, ChannelState, InboundHTLCOutput, OutboundV1Channel, InboundV1Channel, OutboundHTLCOutput, InboundHTLCState, OutboundHTLCState, HTLCCandidate, HTLCInitiator, HTLCUpdateAwaitingACK, commit_tx_fee_sat};
10333
10297
use crate::ln::channel::{MAX_FUNDING_SATOSHIS_NO_WUMBO, TOTAL_BITCOIN_SUPPLY_SATOSHIS, MIN_THEIR_CHAN_RESERVE_SATOSHIS};
10334
- use crate::ln::interactivetxs::{OutputOwned, SharedOwnedOutput};
10335
10298
use crate::types::features::{ChannelFeatures, ChannelTypeFeatures, NodeFeatures};
10336
10299
use crate::ln::msgs;
10337
10300
use crate::ln::msgs::{ChannelUpdate, DecodeError, UnsignedChannelUpdate, MAX_VALUE_MSAT};
@@ -12094,83 +12057,4 @@ mod tests {
12094
12057
assert_eq!(node_a_chan.context.channel_state, ChannelState::AwaitingChannelReady(AwaitingChannelReadyFlags::THEIR_CHANNEL_READY));
12095
12058
assert!(node_a_chan.check_get_channel_ready(0, &&logger).is_some());
12096
12059
}
12097
-
12098
- #[test]
12099
- fn test_need_to_add_funding_change_output_open() {
12100
- let input_prevouts = vec![
12101
- TxOut { value: Amount::from_sat(70_000), script_pubkey: ScriptBuf::new()},
12102
- TxOut { value: Amount::from_sat(60_000), script_pubkey: ScriptBuf::new()},
12103
- ];
12104
- let our_contributed = 110_000;
12105
- let txout = TxOut { value: Amount::from_sat(128_000), script_pubkey: ScriptBuf::new()};
12106
- let outputs = vec![OutputOwned::SharedControlFullyOwned(txout)];
12107
- let funding_feerate_sat_per_1000_weight = 3000;
12108
-
12109
- let total_inputs: u64 = input_prevouts.iter().map(|o| o.value.to_sat()).sum();
12110
- let gross_change = total_inputs - our_contributed;
12111
- let fees = 1746;
12112
- let common_fees = 126;
12113
- {
12114
- // There is leftover for change
12115
- let res = need_to_add_funding_change_output(true, our_contributed, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 300);
12116
- assert_eq!(res.unwrap(), gross_change - fees - common_fees);
12117
- }
12118
- {
12119
- // There is leftover for change, without common fees
12120
- let res = need_to_add_funding_change_output(false, our_contributed, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 300);
12121
- assert_eq!(res.unwrap(), gross_change - fees);
12122
- }
12123
- {
12124
- // Larger fee, smaller change
12125
- let res = need_to_add_funding_change_output(true, our_contributed, &input_prevouts, &outputs, 9000, 300);
12126
- assert_eq!(res.unwrap(), 14384);
12127
- }
12128
- {
12129
- // Insufficient inputs, no leftover
12130
- let res = need_to_add_funding_change_output(false, 130_000, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 300);
12131
- assert!(res.is_none());
12132
- }
12133
- {
12134
- // Very small leftover
12135
- let res = need_to_add_funding_change_output(false, 128_100, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 300);
12136
- assert!(res.is_none());
12137
- }
12138
- {
12139
- // Small leftover, but not dust
12140
- let res = need_to_add_funding_change_output(false, 128_100, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 100);
12141
- assert_eq!(res.unwrap(), 154);
12142
- }
12143
- }
12144
-
12145
- #[test]
12146
- fn test_need_to_add_funding_change_output_splice() {
12147
- let input_prevouts = vec![
12148
- TxOut { value: Amount::from_sat(70_000), script_pubkey: ScriptBuf::new()},
12149
- TxOut { value: Amount::from_sat(60_000), script_pubkey: ScriptBuf::new()},
12150
- ];
12151
- let our_contributed = 110_000;
12152
- let txout = TxOut { value: Amount::from_sat(148_000), script_pubkey: ScriptBuf::new()};
12153
- let outputs = vec![OutputOwned::Shared(SharedOwnedOutput::new(txout, our_contributed))];
12154
- let funding_feerate_sat_per_1000_weight = 3000;
12155
-
12156
- let total_inputs: u64 = input_prevouts.iter().map(|o| o.value.to_sat()).sum();
12157
- let gross_change = total_inputs - our_contributed;
12158
- let fees = 1746;
12159
- let common_fees = 126;
12160
- {
12161
- // There is leftover for change
12162
- let res = need_to_add_funding_change_output(true, our_contributed, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 300);
12163
- assert_eq!(res.unwrap(), gross_change - fees - common_fees);
12164
- }
12165
- {
12166
- // Very small leftover
12167
- let res = need_to_add_funding_change_output(false, 128_100, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 300);
12168
- assert!(res.is_none());
12169
- }
12170
- {
12171
- // Small leftover, but not dust
12172
- let res = need_to_add_funding_change_output(false, 128_100, &input_prevouts, &outputs, funding_feerate_sat_per_1000_weight, 100);
12173
- assert_eq!(res.unwrap(), 154);
12174
- }
12175
- }
12176
12060
}
0 commit comments