mirror of
https://github.com/mempool/mempool.git
synced 2025-10-10 23:03:07 +02:00
support sub 1 sat rates in stats chart
This commit is contained in:
@@ -7,7 +7,7 @@ import cpfpRepository from '../repositories/CpfpRepository';
|
|||||||
import { RowDataPacket } from 'mysql2';
|
import { RowDataPacket } from 'mysql2';
|
||||||
|
|
||||||
class DatabaseMigration {
|
class DatabaseMigration {
|
||||||
private static currentVersion = 98;
|
private static currentVersion = 99;
|
||||||
private queryTimeout = 3600_000;
|
private queryTimeout = 3600_000;
|
||||||
private statisticsAddedIndexed = false;
|
private statisticsAddedIndexed = false;
|
||||||
private uniqueLogs: string[] = [];
|
private uniqueLogs: string[] = [];
|
||||||
@@ -1154,6 +1154,12 @@ class DatabaseMigration {
|
|||||||
await this.$executeQuery('UPDATE blocks_summaries SET version = 0 WHERE height >= 896070;');
|
await this.$executeQuery('UPDATE blocks_summaries SET version = 0 WHERE height >= 896070;');
|
||||||
await this.updateToSchemaVersion(98);
|
await this.updateToSchemaVersion(98);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add vsize_0 to statistics table
|
||||||
|
if (databaseSchemaVersion < 99) {
|
||||||
|
await this.$executeQuery('ALTER TABLE statistics ADD COLUMN vsize_0 int(11) NOT NULL DEFAULT 0');
|
||||||
|
await this.updateToSchemaVersion(99);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -16,6 +16,7 @@ class StatisticsApi {
|
|||||||
fee_data,
|
fee_data,
|
||||||
total_fee,
|
total_fee,
|
||||||
min_fee,
|
min_fee,
|
||||||
|
vsize_0,
|
||||||
vsize_1,
|
vsize_1,
|
||||||
vsize_2,
|
vsize_2,
|
||||||
vsize_3,
|
vsize_3,
|
||||||
@@ -55,7 +56,7 @@ class StatisticsApi {
|
|||||||
vsize_1800,
|
vsize_1800,
|
||||||
vsize_2000
|
vsize_2000
|
||||||
)
|
)
|
||||||
VALUES (NOW(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
VALUES (NOW(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)`;
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)`;
|
||||||
const [result]: any = await DB.query(query);
|
const [result]: any = await DB.query(query);
|
||||||
return result.insertId;
|
return result.insertId;
|
||||||
@@ -75,6 +76,7 @@ class StatisticsApi {
|
|||||||
fee_data,
|
fee_data,
|
||||||
total_fee,
|
total_fee,
|
||||||
min_fee,
|
min_fee,
|
||||||
|
vsize_0,
|
||||||
vsize_1,
|
vsize_1,
|
||||||
vsize_2,
|
vsize_2,
|
||||||
vsize_3,
|
vsize_3,
|
||||||
@@ -115,7 +117,7 @@ class StatisticsApi {
|
|||||||
vsize_2000
|
vsize_2000
|
||||||
)
|
)
|
||||||
VALUES (${convertToDatetime ? `FROM_UNIXTIME(${statistics.added})` : statistics.added}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
VALUES (${convertToDatetime ? `FROM_UNIXTIME(${statistics.added})` : statistics.added}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
||||||
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
|
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`;
|
||||||
|
|
||||||
const params: (string | number)[] = [
|
const params: (string | number)[] = [
|
||||||
statistics.unconfirmed_transactions,
|
statistics.unconfirmed_transactions,
|
||||||
@@ -125,6 +127,7 @@ class StatisticsApi {
|
|||||||
statistics.fee_data,
|
statistics.fee_data,
|
||||||
statistics.total_fee,
|
statistics.total_fee,
|
||||||
statistics.min_fee,
|
statistics.min_fee,
|
||||||
|
statistics.vsize_0,
|
||||||
statistics.vsize_1,
|
statistics.vsize_1,
|
||||||
statistics.vsize_2,
|
statistics.vsize_2,
|
||||||
statistics.vsize_3,
|
statistics.vsize_3,
|
||||||
@@ -177,6 +180,7 @@ class StatisticsApi {
|
|||||||
CAST(avg(unconfirmed_transactions) as DOUBLE) as unconfirmed_transactions,
|
CAST(avg(unconfirmed_transactions) as DOUBLE) as unconfirmed_transactions,
|
||||||
CAST(avg(vbytes_per_second) as DOUBLE) as vbytes_per_second,
|
CAST(avg(vbytes_per_second) as DOUBLE) as vbytes_per_second,
|
||||||
CAST(avg(min_fee) as DOUBLE) as min_fee,
|
CAST(avg(min_fee) as DOUBLE) as min_fee,
|
||||||
|
CAST(avg(vsize_0) as DOUBLE) as vsize_0,
|
||||||
CAST(avg(vsize_1) as DOUBLE) as vsize_1,
|
CAST(avg(vsize_1) as DOUBLE) as vsize_1,
|
||||||
CAST(avg(vsize_2) as DOUBLE) as vsize_2,
|
CAST(avg(vsize_2) as DOUBLE) as vsize_2,
|
||||||
CAST(avg(vsize_3) as DOUBLE) as vsize_3,
|
CAST(avg(vsize_3) as DOUBLE) as vsize_3,
|
||||||
@@ -227,6 +231,7 @@ class StatisticsApi {
|
|||||||
CAST(avg(unconfirmed_transactions) as DOUBLE) as unconfirmed_transactions,
|
CAST(avg(unconfirmed_transactions) as DOUBLE) as unconfirmed_transactions,
|
||||||
CAST(avg(vbytes_per_second) as DOUBLE) as vbytes_per_second,
|
CAST(avg(vbytes_per_second) as DOUBLE) as vbytes_per_second,
|
||||||
CAST(avg(min_fee) as DOUBLE) as min_fee,
|
CAST(avg(min_fee) as DOUBLE) as min_fee,
|
||||||
|
vsize_0,
|
||||||
vsize_1,
|
vsize_1,
|
||||||
vsize_2,
|
vsize_2,
|
||||||
vsize_3,
|
vsize_3,
|
||||||
@@ -414,6 +419,7 @@ class StatisticsApi {
|
|||||||
total_fee: s.total_fee,
|
total_fee: s.total_fee,
|
||||||
min_fee: s.min_fee,
|
min_fee: s.min_fee,
|
||||||
vsizes: [
|
vsizes: [
|
||||||
|
s.vsize_0,
|
||||||
s.vsize_1,
|
s.vsize_1,
|
||||||
s.vsize_2,
|
s.vsize_2,
|
||||||
s.vsize_3,
|
s.vsize_3,
|
||||||
@@ -468,44 +474,45 @@ class StatisticsApi {
|
|||||||
total_fee: s.total_fee || 0,
|
total_fee: s.total_fee || 0,
|
||||||
min_fee: s.min_fee,
|
min_fee: s.min_fee,
|
||||||
fee_data: '',
|
fee_data: '',
|
||||||
vsize_1: s.vsizes[0],
|
vsize_0: s.vsizes[0],
|
||||||
vsize_2: s.vsizes[1],
|
vsize_1: s.vsizes[1],
|
||||||
vsize_3: s.vsizes[2],
|
vsize_2: s.vsizes[2],
|
||||||
vsize_4: s.vsizes[3],
|
vsize_3: s.vsizes[3],
|
||||||
vsize_5: s.vsizes[4],
|
vsize_4: s.vsizes[4],
|
||||||
vsize_6: s.vsizes[5],
|
vsize_5: s.vsizes[5],
|
||||||
vsize_8: s.vsizes[6],
|
vsize_6: s.vsizes[6],
|
||||||
vsize_10: s.vsizes[7],
|
vsize_8: s.vsizes[7],
|
||||||
vsize_12: s.vsizes[8],
|
vsize_10: s.vsizes[8],
|
||||||
vsize_15: s.vsizes[9],
|
vsize_12: s.vsizes[9],
|
||||||
vsize_20: s.vsizes[10],
|
vsize_15: s.vsizes[10],
|
||||||
vsize_30: s.vsizes[11],
|
vsize_20: s.vsizes[11],
|
||||||
vsize_40: s.vsizes[12],
|
vsize_30: s.vsizes[12],
|
||||||
vsize_50: s.vsizes[13],
|
vsize_40: s.vsizes[13],
|
||||||
vsize_60: s.vsizes[14],
|
vsize_50: s.vsizes[14],
|
||||||
vsize_70: s.vsizes[15],
|
vsize_60: s.vsizes[15],
|
||||||
vsize_80: s.vsizes[16],
|
vsize_70: s.vsizes[16],
|
||||||
vsize_90: s.vsizes[17],
|
vsize_80: s.vsizes[17],
|
||||||
vsize_100: s.vsizes[18],
|
vsize_90: s.vsizes[18],
|
||||||
vsize_125: s.vsizes[19],
|
vsize_100: s.vsizes[19],
|
||||||
vsize_150: s.vsizes[20],
|
vsize_125: s.vsizes[20],
|
||||||
vsize_175: s.vsizes[21],
|
vsize_150: s.vsizes[21],
|
||||||
vsize_200: s.vsizes[22],
|
vsize_175: s.vsizes[22],
|
||||||
vsize_250: s.vsizes[23],
|
vsize_200: s.vsizes[23],
|
||||||
vsize_300: s.vsizes[24],
|
vsize_250: s.vsizes[24],
|
||||||
vsize_350: s.vsizes[25],
|
vsize_300: s.vsizes[25],
|
||||||
vsize_400: s.vsizes[26],
|
vsize_350: s.vsizes[26],
|
||||||
vsize_500: s.vsizes[27],
|
vsize_400: s.vsizes[27],
|
||||||
vsize_600: s.vsizes[28],
|
vsize_500: s.vsizes[28],
|
||||||
vsize_700: s.vsizes[29],
|
vsize_600: s.vsizes[29],
|
||||||
vsize_800: s.vsizes[30],
|
vsize_700: s.vsizes[30],
|
||||||
vsize_900: s.vsizes[31],
|
vsize_800: s.vsizes[31],
|
||||||
vsize_1000: s.vsizes[32],
|
vsize_900: s.vsizes[32],
|
||||||
vsize_1200: s.vsizes[33],
|
vsize_1000: s.vsizes[33],
|
||||||
vsize_1400: s.vsizes[34],
|
vsize_1200: s.vsizes[34],
|
||||||
vsize_1600: s.vsizes[35],
|
vsize_1400: s.vsizes[35],
|
||||||
vsize_1800: s.vsizes[36],
|
vsize_1600: s.vsizes[36],
|
||||||
vsize_2000: s.vsizes[37],
|
vsize_1800: s.vsizes[37],
|
||||||
|
vsize_2000: s.vsizes[38],
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -73,7 +73,7 @@ class Statistics {
|
|||||||
const totalWeight = memPoolArray.map((tx) => tx.vsize).reduce((acc, curr) => acc + curr) * 4;
|
const totalWeight = memPoolArray.map((tx) => tx.vsize).reduce((acc, curr) => acc + curr) * 4;
|
||||||
const totalFee = memPoolArray.map((tx) => tx.fee).reduce((acc, curr) => acc + curr);
|
const totalFee = memPoolArray.map((tx) => tx.fee).reduce((acc, curr) => acc + curr);
|
||||||
|
|
||||||
const logFees = [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200,
|
const logFees = [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200,
|
||||||
250, 300, 350, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000];
|
250, 300, 350, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000];
|
||||||
|
|
||||||
const weightVsizeFees: { [feePerWU: number]: number } = {};
|
const weightVsizeFees: { [feePerWU: number]: number } = {};
|
||||||
@@ -109,6 +109,7 @@ class Statistics {
|
|||||||
total_fee: totalFee,
|
total_fee: totalFee,
|
||||||
fee_data: '',
|
fee_data: '',
|
||||||
min_fee: minFee,
|
min_fee: minFee,
|
||||||
|
vsize_0: weightVsizeFees['0'] || 0,
|
||||||
vsize_1: weightVsizeFees['1'] || 0,
|
vsize_1: weightVsizeFees['1'] || 0,
|
||||||
vsize_2: weightVsizeFees['2'] || 0,
|
vsize_2: weightVsizeFees['2'] || 0,
|
||||||
vsize_3: weightVsizeFees['3'] || 0,
|
vsize_3: weightVsizeFees['3'] || 0,
|
||||||
|
@@ -406,6 +406,7 @@ export interface Statistic {
|
|||||||
fee_data: string;
|
fee_data: string;
|
||||||
min_fee: number;
|
min_fee: number;
|
||||||
|
|
||||||
|
vsize_0: number;
|
||||||
vsize_1: number;
|
vsize_1: number;
|
||||||
vsize_2: number;
|
vsize_2: number;
|
||||||
vsize_3: number;
|
vsize_3: number;
|
||||||
|
@@ -83,7 +83,7 @@ export const contrastMempoolFeeColors = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export const chartColors = [
|
export const chartColors = [
|
||||||
"#D81B60",
|
"#A81524",
|
||||||
"#D81B60",
|
"#D81B60",
|
||||||
"#8E24AA",
|
"#8E24AA",
|
||||||
"#5E35B1",
|
"#5E35B1",
|
||||||
|
@@ -117,7 +117,7 @@ export class MempoolGraphComponent implements OnInit, OnChanges {
|
|||||||
let feesArray: number[][] = [];
|
let feesArray: number[][] = [];
|
||||||
|
|
||||||
let maxTier = 0;
|
let maxTier = 0;
|
||||||
for (let index = 37; index > -1; index--) {
|
for (let index = 38; index > -1; index--) {
|
||||||
feesArray = [];
|
feesArray = [];
|
||||||
mempoolStats.forEach((stats) => {
|
mempoolStats.forEach((stats) => {
|
||||||
if (stats.vsizes[index] >= this.filterSize) {
|
if (stats.vsizes[index] >= this.filterSize) {
|
||||||
|
@@ -30,7 +30,7 @@ export class StatisticsComponent implements OnInit {
|
|||||||
feeLevels = feeLevels;
|
feeLevels = feeLevels;
|
||||||
chartColors = chartColors;
|
chartColors = chartColors;
|
||||||
filterSize = 100000;
|
filterSize = 100000;
|
||||||
filterFeeIndex = 1;
|
filterFeeIndex = 0;
|
||||||
showCount = false;
|
showCount = false;
|
||||||
maxFeeIndex: number;
|
maxFeeIndex: number;
|
||||||
dropDownOpen = false;
|
dropDownOpen = false;
|
||||||
@@ -146,7 +146,7 @@ export class StatisticsComponent implements OnInit {
|
|||||||
const labels = mempoolStats.map(stats => stats.added);
|
const labels = mempoolStats.map(stats => stats.added);
|
||||||
|
|
||||||
let maxTier = 0;
|
let maxTier = 0;
|
||||||
for (let index = 37; index > -1; index--) {
|
for (let index = 38; index > -1; index--) {
|
||||||
mempoolStats.forEach((stats) => {
|
mempoolStats.forEach((stats) => {
|
||||||
if (stats.vsizes[index] >= this.filterSize) {
|
if (stats.vsizes[index] >= this.filterSize) {
|
||||||
maxTier = Math.max(maxTier, index);
|
maxTier = Math.max(maxTier, index);
|
||||||
|
Reference in New Issue
Block a user