Add previous adjustment retarget. (#655)

* Add previous adjustment retarget.

* Fix green color.
Add + symbol to difficulty change.

* Add previousRetarget to websocket.

* Add previous retarget.
This commit is contained in:
Miguel Medeiros 2021-07-24 19:26:48 -03:00 committed by GitHub
parent f6a889298c
commit cd8e308870
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 29 additions and 15 deletions

View File

@ -215,8 +215,8 @@
</div>
<div class="item">
<h5 class="card-title" i18n="difficulty-box.estimate">Estimate</h5>
<div class="card-text" [ngStyle]="{'color': epochData.colorAdjustments}">{{ epochData.change | number: '1.2-2' }} <span class="symbol">%</span></div>
<div class="symbol" i18n="difficulty-box.mins-per-block">~{{ epochData.timeAvg }} mins per block</div>
<div class="card-text" [ngStyle]="{'color': epochData.colorAdjustments}">{{epochData.change > 0 ? '+' : ''}}{{ epochData.change | number: '1.2-2' }} <span class="symbol">%</span></div>
<div class="symbol"><span i18n="difficulty-box.previous">Previous</span>: {{epochData.previousRetarget > 0 ? '+' : ''}}{{ epochData.previousRetarget | number: '1.2-2' }} %</div>
</div>
<div class="item">
<h5 class="card-title" i18n="difficulty-box.current-period">Current Period</h5>

View File

@ -19,8 +19,6 @@ interface MempoolBlocksData {
interface EpochProgress {
base: string;
green: string;
red: string;
change: number;
progress: string;
remainingBlocks: number;
@ -28,6 +26,7 @@ interface EpochProgress {
colorAdjustments: string;
timeAvg: string;
remainingTime: number;
previousRetarget: number;
}
interface MempoolInfoData {
@ -118,9 +117,10 @@ export class DashboardComponent implements OnInit {
.pipe(
switchMap(() => combineLatest([
this.stateService.blocks$.pipe(map(([block]) => block)),
this.stateService.lastDifficultyAdjustment$
this.stateService.lastDifficultyAdjustment$,
this.stateService.previousRetarget$
])),
map(([block, DATime]) => {
map(([block, DATime, previousRetarget]) => {
const now = new Date().getTime() / 1000;
const diff = now - DATime;
const blocksInEpoch = block.height % 2016;
@ -131,15 +131,11 @@ export class DashboardComponent implements OnInit {
}
let base = 0;
let green = 0;
let red = 0;
if (blocksInEpoch >= estimatedBlocks) {
base = estimatedBlocks / 2016 * 100;
green = (blocksInEpoch - estimatedBlocks) / 2016 * 100;
} else {
base = blocksInEpoch / 2016 * 100;
red = Math.min((estimatedBlocks - blocksInEpoch) / 2016 * 100, 100 - base);
}
let colorAdjustments = '#dc3545';
@ -162,8 +158,6 @@ export class DashboardComponent implements OnInit {
return {
base: base + '%',
green: green + '%',
red: red + '%',
change: difficultyChange,
progress: base.toFixed(2),
remainingBlocks,
@ -171,11 +165,13 @@ export class DashboardComponent implements OnInit {
colorAdjustments,
blocksInEpoch,
newDifficultyHeight: block.height + remainingBlocks,
remainingTime: remainingBlocsMilliseconds + nowMilliseconds
remainingTime: remainingBlocsMilliseconds + nowMilliseconds,
previousRetarget
};
})
);
this.mempoolBlocksData$ = this.stateService.mempoolBlocks$
.pipe(
map((mempoolBlocks) => {

View File

@ -25,3 +25,12 @@ export interface CpfpInfo {
ancestors: Ancestor[];
bestDescendant: BestDescendant | null;
}
export interface DifficultyAdjustment {
difficultyChange: number;
estimatedRetargetDate: number;
previousRetarget: number;
progressPercent: number;
remainingBlocks: number;
remainingTime: number;
}

View File

@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { CpfpInfo, OptimizedMempoolStats } from '../interfaces/node-api.interface';
import { CpfpInfo, OptimizedMempoolStats, DifficultyAdjustment } from '../interfaces/node-api.interface';
import { Observable } from 'rxjs';
import { StateService } from './state.service';
import { WebsocketResponse } from '../interfaces/websocket.interface';
@ -92,4 +92,8 @@ export class ApiService {
getCpfpinfo$(txid: string): Observable<CpfpInfo> {
return this.httpClient.get<CpfpInfo>(this.apiBaseUrl + this.apiBasePath + '/api/v1/cpfp/' + txid);
}
getDifficultyAdjustment$(): Observable<DifficultyAdjustment> {
return this.httpClient.get<DifficultyAdjustment>(this.apiBaseUrl + this.apiBasePath + '/api/v1/difficulty-adjustment');
}
}

View File

@ -71,6 +71,7 @@ export class StateService {
isLoadingWebSocket$ = new ReplaySubject<boolean>(1);
vbytesPerSecond$ = new ReplaySubject<number>(1);
lastDifficultyAdjustment$ = new ReplaySubject<number>(1);
previousRetarget$ = new ReplaySubject<number>(1);
backendInfo$ = new ReplaySubject<IBackendInfo>(1);
loadingIndicators$ = new ReplaySubject<ILoadingIndicators>(1);

View File

@ -47,7 +47,7 @@ export class WebsocketService {
this.network = this.stateService.network === 'bisq' && !this.stateService.env.BISQ_SEPARATE_BACKEND ? '' : this.stateService.network;
this.websocketSubject = webSocket<WebsocketResponse>(this.webSocketUrl.replace('{network}', this.network ? '/' + this.network : ''));
const theInitData = this.transferState.get(initData, null);
const theInitData = this.transferState.get<any>(initData, null);
if (theInitData) {
this.handleResponse(theInitData.body);
this.startSubscription(false, true);
@ -290,6 +290,10 @@ export class WebsocketService {
this.stateService.lastDifficultyAdjustment$.next(response.lastDifficultyAdjustment);
}
if (response.previousRetarget !== undefined) {
this.stateService.previousRetarget$.next(response.previousRetarget);
}
if (response['git-commit']) {
this.stateService.backendInfo$.next(response['git-commit']);
}