mirror of
https://github.com/mempool/mempool.git
synced 2025-01-01 03:04:27 +01:00
52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import config from '../config';
|
|
import { MempoolBlock } from '../mempool.interfaces';
|
|
import { Common } from './common';
|
|
import mempool from './mempool';
|
|
import projectedBlocks from './mempool-blocks';
|
|
|
|
class FeeApi {
|
|
constructor() { }
|
|
|
|
defaultFee = Common.isLiquid() ? 0.1 : 1;
|
|
|
|
public getRecommendedFee() {
|
|
const pBlocks = projectedBlocks.getMempoolBlocks();
|
|
const mPool = mempool.getMempoolInfo();
|
|
const minimumFee = Math.ceil(mPool.mempoolminfee * 100000);
|
|
|
|
if (!pBlocks.length) {
|
|
return {
|
|
'fastestFee': this.defaultFee,
|
|
'halfHourFee': this.defaultFee,
|
|
'hourFee': this.defaultFee,
|
|
'minimumFee': minimumFee,
|
|
};
|
|
}
|
|
|
|
const firstMedianFee = this.optimizeMedianFee(pBlocks[0], pBlocks[1]);
|
|
const secondMedianFee = pBlocks[1] ? this.optimizeMedianFee(pBlocks[1], pBlocks[2], firstMedianFee) : this.defaultFee;
|
|
const thirdMedianFee = pBlocks[2] ? this.optimizeMedianFee(pBlocks[2], pBlocks[3], secondMedianFee) : this.defaultFee;
|
|
|
|
return {
|
|
'fastestFee': firstMedianFee,
|
|
'halfHourFee': secondMedianFee,
|
|
'hourFee': thirdMedianFee,
|
|
'minimumFee': minimumFee,
|
|
};
|
|
}
|
|
|
|
private optimizeMedianFee(pBlock: MempoolBlock, nextBlock: MempoolBlock | undefined, previousFee?: number): number {
|
|
const useFee = previousFee ? (pBlock.medianFee + previousFee) / 2 : pBlock.medianFee;
|
|
if (pBlock.blockVSize <= 500000) {
|
|
return this.defaultFee;
|
|
}
|
|
if (pBlock.blockVSize <= 950000 && !nextBlock) {
|
|
const multiplier = (pBlock.blockVSize - 500000) / 500000;
|
|
return Math.max(Math.round(useFee * multiplier), this.defaultFee);
|
|
}
|
|
return Math.ceil(useFee);
|
|
}
|
|
}
|
|
|
|
export default new FeeApi();
|