diff --git a/backend/src/routes.ts b/backend/src/routes.ts index cf4caeec8..e6bd416bf 100644 --- a/backend/src/routes.ts +++ b/backend/src/routes.ts @@ -693,37 +693,50 @@ class Routes { public getDifficultyChange(req: Request, res: Response) { try { - const now = new Date().getTime() / 1000; const DATime = blocks.getLastDifficultyAdjustmentTime(); const previousRetarget = blocks.getPreviousDifficultyRetarget(); - const diff = now - DATime; const blockHeight = blocks.getCurrentBlockHeight(); + + const now = new Date().getTime() / 1000; + const diff = now - DATime; const blocksInEpoch = blockHeight % 2016; - const difficultyChange = (600 / (diff / blocksInEpoch) - 1) * 100; + const progressPercent = (blocksInEpoch >= 0) ? blocksInEpoch / 2016 * 100 : 100; + const remainingBlocks = 2016 - blocksInEpoch; + const nextRetargetHeight = blockHeight + remainingBlocks; + + let difficultyChange = 0; + if (blocksInEpoch > 0) { + difficultyChange = (600 / (diff / blocksInEpoch ) - 1) * 100; + } + if (difficultyChange > 300) { + difficultyChange = 300; + } + if (difficultyChange < -75) { + difficultyChange = -75; + } const timeAvgDiff = difficultyChange * 0.1; let timeAvgMins = 10; - if (timeAvgDiff > 0 ){ + if (timeAvgDiff > 0) { timeAvgMins -= Math.abs(timeAvgDiff); } else { timeAvgMins += Math.abs(timeAvgDiff); } - 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 result={ + const timeAvg = timeAvgMins * 60; + const remainingTime = remainingBlocks * timeAvg; + const estimatedRetargetDate = remainingTime + now; + + const result = { progressPercent, difficultyChange, estimatedRetargetDate, remainingBlocks, remainingTime, previousRetarget, + nextRetargetHeight, + timeAvg, } res.json(result); diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index ea606add7..38a7eaa85 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -116,7 +116,7 @@ export class DashboardComponent implements OnInit { }; }) ); - + this.difficultyEpoch$ = timer(0, 1000) .pipe( switchMap(() => combineLatest([ @@ -128,72 +128,65 @@ export class DashboardComponent implements OnInit { const now = new Date().getTime() / 1000; const diff = now - DATime; const blocksInEpoch = block.height % 2016; - const estimatedBlocks = Math.round(diff / 60 / 10); - let difficultyChange = 0; + const progress = (blocksInEpoch >= 0) ? (blocksInEpoch / 2016 * 100).toFixed(2) : `100`; + const remainingBlocks = 2016 - blocksInEpoch; + const newDifficultyHeight = block.height + remainingBlocks; + + let change = 0; if (blocksInEpoch > 0) { - difficultyChange = (600 / (diff / blocksInEpoch ) - 1) * 100; + change = (600 / (diff / blocksInEpoch ) - 1) * 100; + } + if (change > 300) { + change = 300; + } + if (change < -75) { + change = -75; } - let base = 0; + const timeAvgDiff = change * 0.1; - if (blocksInEpoch >= estimatedBlocks) { - base = estimatedBlocks / 2016 * 100; + let timeAvgMins = 10; + if (timeAvgDiff > 0) { + timeAvgMins -= Math.abs(timeAvgDiff); } else { - base = blocksInEpoch / 2016 * 100; + timeAvgMins += Math.abs(timeAvgDiff); } - let colorAdjustments = '#dc3545'; - if (difficultyChange >= 0) { + const timeAvg = timeAvgMins.toFixed(0); + const remainingTime = (remainingBlocks * timeAvgMins * 60 * 1000) + (now * 1000); + + let colorAdjustments = '#ffffff66'; + if (change > 0) { colorAdjustments = '#3bcc49'; } + if (change < 0) { + colorAdjustments = '#dc3545'; + } let colorPreviousAdjustments = '#dc3545'; - if(previousRetarget){ + if (previousRetarget){ if (previousRetarget >= 0) { colorPreviousAdjustments = '#3bcc49'; } if (previousRetarget === 0) { colorPreviousAdjustments = '#ffffff66'; } - }else{ + } else { colorPreviousAdjustments = '#ffffff66'; } - - const timeAvgDiff = difficultyChange * 0.1; - - let timeAvgMins = 10; - if(timeAvgDiff > timeAvgDiff){ - if (timeAvgDiff > 0){ - timeAvgMins -= Math.abs(timeAvgDiff); - } else { - timeAvgMins += Math.abs(timeAvgDiff); - } - } - const remainingBlocks = 2016 - blocksInEpoch; - const nowMilliseconds = now * 1000; - const timeAvgMilliseconds = timeAvgMins * 60 * 1000; - const remainingBlocsMilliseconds = remainingBlocks * timeAvgMilliseconds; - - if(difficultyChange > 300) { - difficultyChange = 300; - } - if(difficultyChange < -75){ - difficultyChange = -75; - } - return { - base: base + '%', - change: difficultyChange, - progress: base.toFixed(2), + base: `${progress}%`, + change, + progress, remainingBlocks, - timeAvg: timeAvgMins.toFixed(0), + timeAvg, colorAdjustments, colorPreviousAdjustments, blocksInEpoch, - newDifficultyHeight: block.height + remainingBlocks, - remainingTime: remainingBlocsMilliseconds + nowMilliseconds, - previousRetarget: previousRetarget ? previousRetarget : 0 + newDifficultyHeight, + remainingTime, + previousRetarget, }; }) );