Fix for fee estimate not being correct when block is almost full with more projected blocks in queue.
fixes #278
This commit is contained in:
		
							parent
							
								
									667d4901d1
								
							
						
					
					
						commit
						c9f2a871fc
					
				@ -18,9 +18,9 @@ class FeeApi {
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const firstMedianFee = this.optimizeMedianFee(pBlocks[0]);
 | 
			
		||||
    const secondMedianFee = pBlocks[1] ? this.optimizeMedianFee(pBlocks[1], firstMedianFee) : this.defaultFee;
 | 
			
		||||
    const thirdMedianFee = pBlocks[2] ? this.optimizeMedianFee(pBlocks[2], secondMedianFee) : this.defaultFee;
 | 
			
		||||
    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,
 | 
			
		||||
@ -29,12 +29,12 @@ class FeeApi {
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private optimizeMedianFee(pBlock: MempoolBlock, previousFee?: number): number {
 | 
			
		||||
  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) {
 | 
			
		||||
    if (pBlock.blockVSize <= 950000 && nextBlock) {
 | 
			
		||||
      const multiplier = (pBlock.blockVSize - 500000) / 500000;
 | 
			
		||||
      return Math.max(Math.round(useFee * multiplier), this.defaultFee);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -40,9 +40,9 @@ export class FeesBoxComponent implements OnInit {
 | 
			
		||||
            };
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          const firstMedianFee = this.optimizeMedianFee(pBlocks[0]);
 | 
			
		||||
          const secondMedianFee = pBlocks[1] ? this.optimizeMedianFee(pBlocks[1], firstMedianFee) : this.defaultFee;
 | 
			
		||||
          const thirdMedianFee = pBlocks[2] ? this.optimizeMedianFee(pBlocks[2], secondMedianFee) : this.defaultFee;
 | 
			
		||||
          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,
 | 
			
		||||
@ -53,12 +53,12 @@ export class FeesBoxComponent implements OnInit {
 | 
			
		||||
      );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  optimizeMedianFee(pBlock: MempoolBlock, previousFee?: number): number {
 | 
			
		||||
  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) {
 | 
			
		||||
    if (pBlock.blockVSize <= 950000 && nextBlock) {
 | 
			
		||||
      const multiplier = (pBlock.blockVSize - 500000) / 500000;
 | 
			
		||||
      return Math.max(Math.round(useFee * multiplier), this.defaultFee);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user