]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Test that txn pay at least a minimum relay fee in functional tests
authorMatt Corallo <git@bluematt.me>
Mon, 2 Mar 2020 16:44:11 +0000 (11:44 -0500)
committerMatt Corallo <git@bluematt.me>
Mon, 25 May 2020 19:36:58 +0000 (15:36 -0400)
lightning/src/ln/functional_test_utils.rs

index a8c4d279763950e8dda2b5d326c7587c4e089214..d21dc792185b0eeb2f1899b3e35fb95e3b98476c 100644 (file)
@@ -475,14 +475,25 @@ pub fn create_announced_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(nodes: &'a
 macro_rules! check_spends {
        ($tx: expr, $($spends_txn: expr),*) => {
                {
-                       $tx.verify(|out_point| {
+                       let get_output = |out_point: &bitcoin::blockdata::transaction::OutPoint| {
                                $(
                                        if out_point.txid == $spends_txn.txid() {
                                                return $spends_txn.output.get(out_point.vout as usize).cloned()
                                        }
                                )*
                                None
-                       }).unwrap();
+                       };
+                       let mut total_value_in = 0;
+                       for input in $tx.input.iter() {
+                               total_value_in += get_output(&input.previous_output).unwrap().value;
+                       }
+                       let mut total_value_out = 0;
+                       for output in $tx.output.iter() {
+                               total_value_out += output.value;
+                       }
+                       let min_fee = $tx.get_weight() as u64 / 4; // One sat per vbyte
+                       assert!(total_value_out + min_fee <= total_value_in); // Must not be equal as there must be a fee!
+                       $tx.verify(get_output).unwrap();
                }
        }
 }