@@ -36,6 +36,8 @@ pub fn sort_outputs<T, C : Fn(&T, &T) -> Ordering>(outputs: &mut Vec<(TxOut, T)>
36
36
pub ( crate ) fn maybe_add_change_output ( tx : & mut Transaction , input_value : u64 , witness_max_weight : usize , feerate_sat_per_1000_weight : u32 , change_destination_script : Script ) -> Result < usize , ( ) > {
37
37
if input_value > MAX_VALUE_MSAT / 1000 { return Err ( ( ) ) ; }
38
38
39
+ const WITNESS_FLAG_BYTES : i64 = 2 ;
40
+
39
41
let mut output_value = 0 ;
40
42
for output in tx. output . iter ( ) {
41
43
output_value += output. value ;
@@ -48,7 +50,7 @@ pub(crate) fn maybe_add_change_output(tx: &mut Transaction, input_value: u64, wi
48
50
value : 0 ,
49
51
} ;
50
52
let change_len = change_output. consensus_encode ( & mut sink ( ) ) . unwrap ( ) ;
51
- let mut weight_with_change: i64 = tx. get_weight ( ) as i64 + 2 + witness_max_weight as i64 + change_len as i64 * 4 ;
53
+ let mut weight_with_change: i64 = tx. get_weight ( ) as i64 + WITNESS_FLAG_BYTES + witness_max_weight as i64 + change_len as i64 * 4 ;
52
54
// Include any extra bytes required to push an extra output.
53
55
weight_with_change += ( VarInt ( tx. output . len ( ) as u64 + 1 ) . len ( ) - VarInt ( tx. output . len ( ) as u64 ) . len ( ) ) as i64 * 4 ;
54
56
// When calculating weight, add two for the flag bytes
@@ -60,7 +62,7 @@ pub(crate) fn maybe_add_change_output(tx: &mut Transaction, input_value: u64, wi
60
62
} else if ( input_value - output_value) as i64 - ( tx. get_weight ( ) as i64 + 2 + witness_max_weight as i64 ) * feerate_sat_per_1000_weight as i64 / 1000 < 0 {
61
63
Err ( ( ) )
62
64
} else {
63
- Ok ( tx. get_weight ( ) + 2 + witness_max_weight)
65
+ Ok ( tx. get_weight ( ) + WITNESS_FLAG_BYTES as usize + witness_max_weight)
64
66
}
65
67
}
66
68
0 commit comments