Skip to content

Commit 5af7bfc

Browse files
committed
Fix make_fee_histogram()
Based on romanz/electrs@c88a0dc Plus some minor refactoring
1 parent 8fffe57 commit 5af7bfc

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/util/mod.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,41 +21,41 @@ lazy_static! {
2121

2222
const 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
2525
pub 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

Comments
 (0)