@@ -1149,6 +1149,24 @@ pub fn update_nodes_with_chan_announce<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, '
1149
1149
}
1150
1150
}
1151
1151
1152
+ pub fn do_check_spends < F : Fn ( & bitcoin:: blockdata:: transaction:: OutPoint ) -> Option < TxOut > > ( tx : & Transaction , get_output : F ) {
1153
+ for outp in tx. output . iter ( ) {
1154
+ assert ! ( outp. value >= outp. script_pubkey. dust_value( ) . to_sat( ) , "Spending tx output didn't meet dust limit" ) ;
1155
+ }
1156
+ let mut total_value_in = 0 ;
1157
+ for input in tx. input . iter ( ) {
1158
+ total_value_in += get_output ( & input. previous_output ) . unwrap ( ) . value ;
1159
+ }
1160
+ let mut total_value_out = 0 ;
1161
+ for output in tx. output . iter ( ) {
1162
+ total_value_out += output. value ;
1163
+ }
1164
+ let min_fee = ( tx. weight ( ) as u64 + 3 ) / 4 ; // One sat per vbyte (ie per weight/4, rounded up)
1165
+ // Input amount - output amount = fee, so check that out + min_fee is smaller than input
1166
+ assert ! ( total_value_out + min_fee <= total_value_in) ;
1167
+ tx. verify ( get_output) . unwrap ( ) ;
1168
+ }
1169
+
1152
1170
#[ macro_export]
1153
1171
macro_rules! check_spends {
1154
1172
( $tx: expr, $( $spends_txn: expr) ,* ) => {
@@ -1158,9 +1176,6 @@ macro_rules! check_spends {
1158
1176
assert!( outp. value >= outp. script_pubkey. dust_value( ) . to_sat( ) , "Input tx output didn't meet dust limit" ) ;
1159
1177
}
1160
1178
) *
1161
- for outp in $tx. output. iter( ) {
1162
- assert!( outp. value >= outp. script_pubkey. dust_value( ) . to_sat( ) , "Spending tx output didn't meet dust limit" ) ;
1163
- }
1164
1179
let get_output = |out_point: & bitcoin:: blockdata:: transaction:: OutPoint | {
1165
1180
$(
1166
1181
if out_point. txid == $spends_txn. txid( ) {
@@ -1169,18 +1184,7 @@ macro_rules! check_spends {
1169
1184
) *
1170
1185
None
1171
1186
} ;
1172
- let mut total_value_in = 0 ;
1173
- for input in $tx. input. iter( ) {
1174
- total_value_in += get_output( & input. previous_output) . unwrap( ) . value;
1175
- }
1176
- let mut total_value_out = 0 ;
1177
- for output in $tx. output. iter( ) {
1178
- total_value_out += output. value;
1179
- }
1180
- let min_fee = ( $tx. weight( ) as u64 + 3 ) / 4 ; // One sat per vbyte (ie per weight/4, rounded up)
1181
- // Input amount - output amount = fee, so check that out + min_fee is smaller than input
1182
- assert!( total_value_out + min_fee <= total_value_in) ;
1183
- $tx. verify( get_output) . unwrap( ) ;
1187
+ $crate:: ln:: functional_test_utils:: do_check_spends( & $tx, get_output) ;
1184
1188
}
1185
1189
}
1186
1190
}
0 commit comments