Merge pull request #4328 from mempool/mononaut/purging-min-fee
Enforce purging rate minimum on recommended fees
This commit is contained in:
		
						commit
						450bda7d04
					
				@ -3,21 +3,30 @@ import { Common } from './common';
 | 
			
		||||
import mempool from './mempool';
 | 
			
		||||
import projectedBlocks from './mempool-blocks';
 | 
			
		||||
 | 
			
		||||
interface RecommendedFees {
 | 
			
		||||
  fastestFee: number,
 | 
			
		||||
  halfHourFee: number,
 | 
			
		||||
  hourFee: number,
 | 
			
		||||
  economyFee: number,
 | 
			
		||||
  minimumFee: number,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class FeeApi {
 | 
			
		||||
  constructor() { }
 | 
			
		||||
 | 
			
		||||
  defaultFee = Common.isLiquid() ? 0.1 : 1;
 | 
			
		||||
 | 
			
		||||
  public getRecommendedFee() {
 | 
			
		||||
  public getRecommendedFee(): RecommendedFees {
 | 
			
		||||
    const pBlocks = projectedBlocks.getMempoolBlocks();
 | 
			
		||||
    const mPool = mempool.getMempoolInfo();
 | 
			
		||||
    const minimumFee = Math.ceil(mPool.mempoolminfee * 100000);
 | 
			
		||||
    const defaultMinFee = Math.max(minimumFee, this.defaultFee);
 | 
			
		||||
 | 
			
		||||
    if (!pBlocks.length) {
 | 
			
		||||
      return {
 | 
			
		||||
        'fastestFee': this.defaultFee,
 | 
			
		||||
        'halfHourFee': this.defaultFee,
 | 
			
		||||
        'hourFee': this.defaultFee,
 | 
			
		||||
        'fastestFee': defaultMinFee,
 | 
			
		||||
        'halfHourFee': defaultMinFee,
 | 
			
		||||
        'hourFee': defaultMinFee,
 | 
			
		||||
        'economyFee': minimumFee,
 | 
			
		||||
        'minimumFee': minimumFee,
 | 
			
		||||
      };
 | 
			
		||||
@ -27,11 +36,15 @@ class FeeApi {
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
    // explicitly enforce a minimum of ceil(mempoolminfee) on all recommendations.
 | 
			
		||||
    // simply rounding up recommended rates is insufficient, as the purging rate
 | 
			
		||||
    // can exceed the median rate of projected blocks in some extreme scenarios
 | 
			
		||||
    // (see https://bitcoin.stackexchange.com/a/120024)
 | 
			
		||||
    return {
 | 
			
		||||
      'fastestFee': firstMedianFee,
 | 
			
		||||
      'halfHourFee': secondMedianFee,
 | 
			
		||||
      'hourFee': thirdMedianFee,
 | 
			
		||||
      'economyFee': Math.min(2 * minimumFee, thirdMedianFee),
 | 
			
		||||
      'fastestFee': Math.max(minimumFee, firstMedianFee),
 | 
			
		||||
      'halfHourFee': Math.max(minimumFee, secondMedianFee),
 | 
			
		||||
      'hourFee': Math.max(minimumFee, thirdMedianFee),
 | 
			
		||||
      'economyFee': Math.max(minimumFee, Math.min(2 * minimumFee, thirdMedianFee)),
 | 
			
		||||
      'minimumFee': minimumFee,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user