Adding previous difficulty retarget to the difficulty adjustment api. (#652)
refs #640
This commit is contained in:
		
							parent
							
								
									775323de3e
								
							
						
					
					
						commit
						037d6a75ea
					
				@ -11,7 +11,9 @@ class Blocks {
 | 
			
		||||
  private static INITIAL_BLOCK_AMOUNT = 8;
 | 
			
		||||
  private blocks: BlockExtended[] = [];
 | 
			
		||||
  private currentBlockHeight = 0;
 | 
			
		||||
  private currentDifficulty = 0;
 | 
			
		||||
  private lastDifficultyAdjustmentTime = 0;
 | 
			
		||||
  private previousDifficultyRetarget = 0;
 | 
			
		||||
  private newBlockCallbacks: ((block: BlockExtended, txIds: string[], transactions: TransactionExtended[]) => void)[] = [];
 | 
			
		||||
 | 
			
		||||
  constructor() { }
 | 
			
		||||
@ -47,6 +49,11 @@ class Blocks {
 | 
			
		||||
      const blockHash = await bitcoinApi.$getBlockHash(blockHeightTip - heightDiff);
 | 
			
		||||
      const block = await bitcoinApi.$getBlock(blockHash);
 | 
			
		||||
      this.lastDifficultyAdjustmentTime = block.timestamp;
 | 
			
		||||
      this.currentDifficulty = block.difficulty;
 | 
			
		||||
 | 
			
		||||
      const previousPeriodBlockHash = await bitcoinApi.$getBlockHash(blockHeightTip - heightDiff - 2016);
 | 
			
		||||
      const previousPeriodBlock = await bitcoinApi.$getBlock(previousPeriodBlockHash);
 | 
			
		||||
      this.previousDifficultyRetarget = (block.difficulty - previousPeriodBlock.difficulty) / previousPeriodBlock.difficulty * 100;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while (this.currentBlockHeight < blockHeightTip) {
 | 
			
		||||
@ -101,7 +108,9 @@ class Blocks {
 | 
			
		||||
      blockExtended.feeRange = transactions.length > 1 ? Common.getFeesInRange(transactions, 8) : [0, 0];
 | 
			
		||||
 | 
			
		||||
      if (block.height % 2016 === 0) {
 | 
			
		||||
        this.previousDifficultyRetarget = (block.difficulty - this.currentDifficulty) / this.currentDifficulty * 100;
 | 
			
		||||
        this.lastDifficultyAdjustmentTime = block.timestamp;
 | 
			
		||||
        this.currentDifficulty = block.difficulty;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      this.blocks.push(blockExtended);
 | 
			
		||||
@ -122,6 +131,10 @@ class Blocks {
 | 
			
		||||
    return this.lastDifficultyAdjustmentTime;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public getPreviousDifficultyRetarget(): number {
 | 
			
		||||
    return this.previousDifficultyRetarget;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public getCurrentBlockHeight(): number {
 | 
			
		||||
    return this.currentBlockHeight;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -172,6 +172,7 @@ class WebsocketHandler {
 | 
			
		||||
      'mempoolInfo': memPool.getMempoolInfo(),
 | 
			
		||||
      'vBytesPerSecond': memPool.getVBytesPerSecond(),
 | 
			
		||||
      'lastDifficultyAdjustment': blocks.getLastDifficultyAdjustmentTime(),
 | 
			
		||||
      'previousRetarget': blocks.getPreviousDifficultyRetarget(),
 | 
			
		||||
      'blocks': _blocks,
 | 
			
		||||
      'conversions': fiatConversion.getConversionRates(),
 | 
			
		||||
      'mempool-blocks': mempoolBlocks.getMempoolBlocks(),
 | 
			
		||||
@ -384,6 +385,7 @@ class WebsocketHandler {
 | 
			
		||||
        'block': block,
 | 
			
		||||
        'mempoolInfo': memPool.getMempoolInfo(),
 | 
			
		||||
        'lastDifficultyAdjustment': blocks.getLastDifficultyAdjustmentTime(),
 | 
			
		||||
        'previousRetarget': blocks.getPreviousDifficultyRetarget(),
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      if (mBlocks && client['want-mempool-blocks']) {
 | 
			
		||||
 | 
			
		||||
@ -680,12 +680,12 @@ class Routes {
 | 
			
		||||
  public getDifficultyChange(req: Request, res: Response) {
 | 
			
		||||
    try {
 | 
			
		||||
      const now = new Date().getTime() / 1000;
 | 
			
		||||
      const DATime=blocks.getLastDifficultyAdjustmentTime();
 | 
			
		||||
      const DATime = blocks.getLastDifficultyAdjustmentTime();
 | 
			
		||||
      const previousRetarget = blocks.getPreviousDifficultyRetarget();
 | 
			
		||||
      const diff = now - DATime;
 | 
			
		||||
      const blockHeight=blocks.getCurrentBlockHeight();
 | 
			
		||||
      const blockHeight = blocks.getCurrentBlockHeight();
 | 
			
		||||
      const blocksInEpoch = blockHeight % 2016;
 | 
			
		||||
      const estimatedBlocks = Math.round(diff / 60 / 10);
 | 
			
		||||
      const difficultyChange = (600 / (diff / blocksInEpoch ) - 1) * 100;
 | 
			
		||||
      const difficultyChange = (600 / (diff / blocksInEpoch) - 1) * 100;
 | 
			
		||||
 | 
			
		||||
      const timeAvgDiff = difficultyChange * 0.1;
 | 
			
		||||
 | 
			
		||||
@ -699,9 +699,9 @@ class Routes {
 | 
			
		||||
      const remainingBlocks = 2016 - blocksInEpoch;
 | 
			
		||||
      const timeAvgSeconds = timeAvgMins * 60;
 | 
			
		||||
      const remainingTime = remainingBlocks * timeAvgSeconds;
 | 
			
		||||
      const estimatedRetargetDate=(remainingTime + now);
 | 
			
		||||
      const totalTime=estimatedRetargetDate-DATime;
 | 
			
		||||
      const progressPercent=100-((remainingTime*100)/totalTime);
 | 
			
		||||
      const estimatedRetargetDate = (remainingTime + now);
 | 
			
		||||
      const totalTime = estimatedRetargetDate-DATime;
 | 
			
		||||
      const progressPercent = 100 - ((remainingTime * 100) / totalTime);
 | 
			
		||||
 | 
			
		||||
      const result={
 | 
			
		||||
        progressPercent,
 | 
			
		||||
@ -709,6 +709,7 @@ class Routes {
 | 
			
		||||
        estimatedRetargetDate,
 | 
			
		||||
        remainingBlocks,
 | 
			
		||||
        remainingTime,
 | 
			
		||||
        previousRetarget,
 | 
			
		||||
      }
 | 
			
		||||
      res.json(result);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ export interface WebsocketResponse {
 | 
			
		||||
  mempoolInfo?: MempoolInfo;
 | 
			
		||||
  vBytesPerSecond?: number;
 | 
			
		||||
  lastDifficultyAdjustment?: number;
 | 
			
		||||
  previousRetarget?: number;
 | 
			
		||||
  action?: string;
 | 
			
		||||
  data?: string[];
 | 
			
		||||
  tx?: Transaction;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user