@@ -10438,7 +10438,7 @@ mod tests {
10438
10438
use bitcoin::amount::Amount;
10439
10439
use bitcoin::constants::ChainHash;
10440
10440
use bitcoin::script::{ScriptBuf, Builder};
10441
- use bitcoin::transaction::{Transaction, TxOut, Version};
10441
+ use bitcoin::transaction::{Transaction, TxIn, TxOut, Version};
10442
10442
use bitcoin::opcodes;
10443
10443
use bitcoin::network::Network;
10444
10444
use crate::ln::onion_utils::INVALID_ONION_BLINDING;
@@ -10460,7 +10460,7 @@ mod tests {
10460
10460
use crate::routing::router::{Path, RouteHop};
10461
10461
use crate::util::config::UserConfig;
10462
10462
use crate::util::errors::APIError;
10463
- use crate::util::ser::{ReadableArgs, Writeable};
10463
+ use crate::util::ser::{ReadableArgs, TransactionU16LenLimited, Writeable};
10464
10464
use crate::util::test_utils;
10465
10465
use crate::util::test_utils::{OnGetShutdownScriptpubkey, TestKeysInterface};
10466
10466
use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature};
@@ -12210,4 +12210,64 @@ mod tests {
12210
12210
assert_eq!(node_a_chan.context.channel_state, ChannelState::AwaitingChannelReady(AwaitingChannelReadyFlags::THEIR_CHANNEL_READY));
12211
12211
assert!(node_a_chan.check_get_channel_ready(0, &&logger).is_some());
12212
12212
}
12213
+
12214
+ fn prepare_input(value: u64) -> (TxIn, TransactionU16LenLimited) {
12215
+ let input_1_prev_out = TxOut { value: Amount::from_sat(value), script_pubkey: ScriptBuf::default() };
12216
+ let input_1_prev_tx = Transaction {
12217
+ input: vec![], output: vec![input_1_prev_out],
12218
+ version: Version::TWO, lock_time: bitcoin::absolute::LockTime::ZERO,
12219
+ };
12220
+ let input_1_txin = TxIn {
12221
+ previous_output: bitcoin::OutPoint { txid: input_1_prev_tx.compute_txid(), vout: 0 },
12222
+ ..Default::default()
12223
+ };
12224
+ (input_1_txin, TransactionU16LenLimited::new(input_1_prev_tx).unwrap())
12225
+ }
12226
+
12227
+ #[test]
12228
+ fn test_calculate_our_funding_satoshis() {
12229
+ use crate::ln::channel::calculate_our_funding_satoshis;
12230
+ use bitcoin::Weight;
12231
+
12232
+ let inputs_1 = [
12233
+ prepare_input(20_000),
12234
+ ];
12235
+ let inputs_2 = [
12236
+ prepare_input(200_000),
12237
+ prepare_input(100_000),
12238
+ ];
12239
+ let witness_weight = Weight::from_wu(300);
12240
+
12241
+ // normal use case, output is less than the available inputs
12242
+ assert_eq!(
12243
+ calculate_our_funding_satoshis(true, &inputs_2, witness_weight, 2000, 1000)
12244
+ .unwrap(),
12245
+ 298972
12246
+ );
12247
+
12248
+ assert_eq!(
12249
+ calculate_our_funding_satoshis(true, &inputs_1, witness_weight, 2000, 1000)
12250
+ .unwrap(),
12251
+ 18972
12252
+ );
12253
+
12254
+ assert_eq!(
12255
+ calculate_our_funding_satoshis(true, &inputs_1, Weight::from_wu(0), 2000, 1000)
12256
+ .unwrap(),
12257
+ 19572
12258
+ );
12259
+
12260
+ assert_eq!(
12261
+ calculate_our_funding_satoshis(false, &inputs_1, Weight::from_wu(0), 2000, 1000)
12262
+ .unwrap(),
12263
+ 20000
12264
+ );
12265
+
12266
+ // below dust limit
12267
+ assert_eq!(
12268
+ calculate_our_funding_satoshis(true, &inputs_1, witness_weight, 2000, 20_000)
12269
+ .unwrap(),
12270
+ 0
12271
+ );
12272
+ }
12213
12273
}
0 commit comments