@@ -192,27 +192,37 @@ pub fn input_signature_size_from_destination(
192
192
}
193
193
}
194
194
195
- /// Return the encoded size for a SignedTransaction with specified outputs and empty inputs and
196
- /// signatures
197
- pub fn tx_size_with_outputs ( outputs : & [ TxOutput ] , num_inputs : usize ) -> usize {
195
+ /// Return the encoded size for a SignedTransaction also accounting for the compact encoding of the
196
+ /// vectors for the specified number of inputs and outputs
197
+ pub fn tx_size_with_num_inputs_and_outputs ( num_outputs : usize , num_inputs : usize ) -> usize {
198
198
#[ derive( Encode ) ]
199
199
struct CompactSize {
200
200
#[ codec( compact) ]
201
201
value : u64 ,
202
202
}
203
203
204
204
let tx = SignedTransaction :: new (
205
- Transaction :: new ( 1 , vec ! [ ] , outputs . into ( ) ) . expect ( "should not fail" ) ,
205
+ Transaction :: new ( 1 , vec ! [ ] , vec ! [ ] ) . expect ( "should not fail" ) ,
206
206
vec ! [ ] ,
207
207
)
208
208
. expect ( "should not fail" ) ;
209
209
let size = serialization:: Encode :: encoded_size ( & tx) ;
210
210
211
- let compact_size_diff = serialization:: Encode :: encoded_size ( & CompactSize {
212
- value : num_inputs as u64 ,
213
- } ) - serialization:: Encode :: encoded_size ( & CompactSize { value : 0 } ) ;
211
+ let input_compact_size_diff =
212
+ serialization:: Encode :: encoded_size ( & CompactSize {
213
+ value : num_inputs as u64 ,
214
+ } ) - serialization:: Encode :: encoded_size ( & CompactSize { value : 0 } ) ;
214
215
215
- size + ( compact_size_diff * 2 ) // 2 for number of inputs and number of input signatures
216
+ let output_compact_size_diff =
217
+ serialization:: Encode :: encoded_size ( & CompactSize {
218
+ value : num_outputs as u64 ,
219
+ } ) - serialization:: Encode :: encoded_size ( & CompactSize { value : 0 } ) ;
220
+
221
+ size + output_compact_size_diff + ( input_compact_size_diff * 2 ) // 2 for number of inputs and number of input signatures
222
+ }
223
+
224
+ pub fn outputs_encoded_size ( outputs : & [ TxOutput ] ) -> usize {
225
+ outputs. iter ( ) . map ( serialization:: Encode :: encoded_size) . sum ( )
216
226
}
217
227
218
228
fn get_tx_output_destination ( txo : & TxOutput ) -> Option < & Destination > {
0 commit comments