@@ -10464,7 +10464,7 @@ mod tests {
10464
10464
use bitcoin::amount::Amount;
10465
10465
use bitcoin::constants::ChainHash;
10466
10466
use bitcoin::script::{ScriptBuf, Builder};
10467
- use bitcoin::transaction::{Transaction, TxOut, Version};
10467
+ use bitcoin::transaction::{Transaction, TxIn, TxOut, Version};
10468
10468
use bitcoin::opcodes;
10469
10469
use bitcoin::network::Network;
10470
10470
use crate::ln::onion_utils::INVALID_ONION_BLINDING;
@@ -10486,7 +10486,7 @@ mod tests {
10486
10486
use crate::routing::router::{Path, RouteHop};
10487
10487
use crate::util::config::UserConfig;
10488
10488
use crate::util::errors::APIError;
10489
- use crate::util::ser::{ReadableArgs, Writeable};
10489
+ use crate::util::ser::{ReadableArgs, TransactionU16LenLimited, Writeable};
10490
10490
use crate::util::test_utils;
10491
10491
use crate::util::test_utils::{OnGetShutdownScriptpubkey, TestKeysInterface};
10492
10492
use bitcoin::secp256k1::{Secp256k1, ecdsa::Signature};
@@ -12236,4 +12236,64 @@ mod tests {
12236
12236
assert_eq!(node_a_chan.context.channel_state, ChannelState::AwaitingChannelReady(AwaitingChannelReadyFlags::THEIR_CHANNEL_READY));
12237
12237
assert!(node_a_chan.check_get_channel_ready(0, &&logger).is_some());
12238
12238
}
12239
+
12240
+ fn prepare_input(value: u64) -> (TxIn, TransactionU16LenLimited) {
12241
+ let input_1_prev_out = TxOut { value: Amount::from_sat(value), script_pubkey: ScriptBuf::default() };
12242
+ let input_1_prev_tx = Transaction {
12243
+ input: vec![], output: vec![input_1_prev_out],
12244
+ version: Version::TWO, lock_time: bitcoin::absolute::LockTime::ZERO,
12245
+ };
12246
+ let input_1_txin = TxIn {
12247
+ previous_output: bitcoin::OutPoint { txid: input_1_prev_tx.compute_txid(), vout: 0 },
12248
+ ..Default::default()
12249
+ };
12250
+ (input_1_txin, TransactionU16LenLimited::new(input_1_prev_tx).unwrap())
12251
+ }
12252
+
12253
+ #[test]
12254
+ fn test_calculate_our_funding_satoshis() {
12255
+ use crate::ln::channel::calculate_our_funding_satoshis;
12256
+ use bitcoin::Weight;
12257
+
12258
+ let inputs_1 = [
12259
+ prepare_input(20_000),
12260
+ ];
12261
+ let inputs_2 = [
12262
+ prepare_input(200_000),
12263
+ prepare_input(100_000),
12264
+ ];
12265
+ let witness_weight = Weight::from_wu(300);
12266
+
12267
+ // normal use case, output is less than the available inputs
12268
+ assert_eq!(
12269
+ calculate_our_funding_satoshis(true, &inputs_2, witness_weight, 2000, 1000)
12270
+ .unwrap(),
12271
+ 298972
12272
+ );
12273
+
12274
+ assert_eq!(
12275
+ calculate_our_funding_satoshis(true, &inputs_1, witness_weight, 2000, 1000)
12276
+ .unwrap(),
12277
+ 18972
12278
+ );
12279
+
12280
+ assert_eq!(
12281
+ calculate_our_funding_satoshis(true, &inputs_1, Weight::from_wu(0), 2000, 1000)
12282
+ .unwrap(),
12283
+ 19572
12284
+ );
12285
+
12286
+ assert_eq!(
12287
+ calculate_our_funding_satoshis(false, &inputs_1, Weight::from_wu(0), 2000, 1000)
12288
+ .unwrap(),
12289
+ 20000
12290
+ );
12291
+
12292
+ // below dust limit
12293
+ assert_eq!(
12294
+ calculate_our_funding_satoshis(true, &inputs_1, witness_weight, 2000, 20_000)
12295
+ .unwrap(),
12296
+ 0
12297
+ );
12298
+ }
12239
12299
}
0 commit comments