mirror of
https://github.com/mempool/mempool.git
synced 2025-02-24 06:47:52 +01:00
Adding previous difficulty retarget to the difficulty adjustment api. (#652)
refs #640
This commit is contained in:
parent
775323de3e
commit
037d6a75ea
4 changed files with 24 additions and 7 deletions
|
@ -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…
Add table
Reference in a new issue