@@ -21,41 +21,41 @@ lazy_static! {
2121
2222const VSIZE_BIN_WIDTH : u32 = 50_000 ; // vbytes
2323
24- // Make the fee histogram our of a list of `getrawmempool true` entries
24+ // Make the fee histogram out of a list of `getrawmempool true` entries
2525pub fn make_fee_histogram ( mempool_entries : HashMap < Txid , Value > ) -> Vec < ( f32 , u32 ) > {
26- let mut entries: Vec < ( u32 , f32 ) > = mempool_entries
27- . values ( )
28- . map ( |entry| {
29- let size = entry[ "vsize" ]
26+ let mut entries: Vec < _ > = mempool_entries
27+ . into_iter ( )
28+ . map ( |( _ , entry) | {
29+ let vsize = entry[ "vsize" ]
3030 . as_u64 ( )
3131 . or_else ( || entry[ "size" ] . as_u64 ( ) )
3232 . unwrap ( ) ; // bitcoind is borked if this fails
3333 let fee = entry[ "fee" ] . as_f64 ( ) . unwrap ( ) ;
34- let feerate = fee as f32 / size as f32 * 100_000_000f32 ;
35- ( size as u32 , feerate)
34+ let feerate = fee as f32 / vsize as f32 * 100_000_000f32 ;
35+ ( vsize as u32 , feerate)
3636 } )
3737 . collect ( ) ;
3838
39- // XXX we should take unconfirmed parents feerates into account
39+ // XXX should take unconfirmed parents feerates into account
4040
4141 entries. sort_unstable_by ( |a, b| a. 1 . partial_cmp ( & b. 1 ) . unwrap ( ) ) ;
4242
4343 let mut histogram = vec ! [ ] ;
4444 let mut bin_size = 0 ;
45- let mut last_feerate = None ;
45+ let mut last_feerate = 0.0 ;
4646
47- for ( size, feerate) in entries. into_iter ( ) . rev ( ) {
48- bin_size += size;
49- if bin_size > VSIZE_BIN_WIDTH && last_feerate. map_or ( true , |last| feerate > last) {
50- // vsize of transactions paying >= e.fee_per_vbyte()
51- histogram. push ( ( feerate, bin_size) ) ;
47+ for ( vsize, feerate) in entries. into_iter ( ) . rev ( ) {
48+ if bin_size > VSIZE_BIN_WIDTH && last_feerate != feerate {
49+ // vsize of transactions paying >= last_feerate
50+ histogram. push ( ( last_feerate, bin_size) ) ;
5251 bin_size = 0 ;
5352 }
54- last_feerate = Some ( feerate) ;
53+ bin_size += vsize;
54+ last_feerate = feerate;
5555 }
5656
57- if let Some ( feerate ) = last_feerate {
58- histogram. push ( ( feerate , bin_size) ) ;
57+ if bin_size > 0 {
58+ histogram. push ( ( last_feerate , bin_size) ) ;
5959 }
6060
6161 histogram
0 commit comments