diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts
index dfb64c4bd..0dfc853cc 100644
--- a/frontend/src/app/app.module.ts
+++ b/frontend/src/app/app.module.ts
@@ -75,6 +75,7 @@ import { HashrateChartPoolsComponent } from './components/hashrates-chart-pools/
import { MiningStartComponent } from './components/mining-start/mining-start.component';
import { AmountShortenerPipe } from './shared/pipes/amount-shortener.pipe';
import { ShortenStringPipe } from './shared/pipes/shorten-string-pipe/shorten-string.pipe';
+import { DifficultyAdjustmentsTable } from './components/difficulty-adjustments-table/difficulty-adjustments-table.components';
@NgModule({
declarations: [
@@ -131,6 +132,7 @@ import { ShortenStringPipe } from './shared/pipes/shorten-string-pipe/shorten-st
HashrateChartPoolsComponent,
MiningStartComponent,
AmountShortenerPipe,
+ DifficultyAdjustmentsTable,
],
imports: [
BrowserModule.withServerTransition({ appId: 'serverApp' }),
diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html
new file mode 100644
index 000000000..a04c60f6a
--- /dev/null
+++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html
@@ -0,0 +1,33 @@
+
+
+
+
+ Height |
+ Adjusted |
+ Difficulty |
+ Change |
+
+
+
+
+ {{ diffChange.height
+ }} |
+
+
+ |
+ {{ diffChange.difficultyShorten }} |
+ = 0 ? 'color: #42B747' : 'color: #B74242'">
+ {{ diffChange.change >= 0 ? '+' : '' }}{{ formatNumber(diffChange.change, locale, '1.2-2') }}%
+ |
+
+
+
+
+ |
+ |
+ |
+ |
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.scss b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.scss
new file mode 100644
index 000000000..c4a81f804
--- /dev/null
+++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.scss
@@ -0,0 +1,40 @@
+.latest-transactions {
+ width: 100%;
+ text-align: left;
+ table-layout:fixed;
+ tr, td, th {
+ border: 0px;
+ }
+ td {
+ width: 25%;
+ }
+ .table-cell-satoshis {
+ display: none;
+ text-align: right;
+ @media (min-width: 576px) {
+ display: table-cell;
+ }
+ @media (min-width: 768px) {
+ display: none;
+ }
+ @media (min-width: 1100px) {
+ display: table-cell;
+ }
+ }
+ .table-cell-fiat {
+ display: none;
+ text-align: right;
+ @media (min-width: 485px) {
+ display: table-cell;
+ }
+ @media (min-width: 768px) {
+ display: none;
+ }
+ @media (min-width: 992px) {
+ display: table-cell;
+ }
+ }
+ .table-cell-fees {
+ text-align: right;
+ }
+}
diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts
new file mode 100644
index 000000000..24c44fe05
--- /dev/null
+++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts
@@ -0,0 +1,65 @@
+import { Component, Inject, LOCALE_ID, OnInit } from '@angular/core';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+import { ApiService } from 'src/app/services/api.service';
+import { formatNumber } from '@angular/common';
+import { selectPowerOfTen } from 'src/app/bitcoin.utils';
+
+@Component({
+ selector: 'app-difficulty-adjustments-table',
+ templateUrl: './difficulty-adjustments-table.component.html',
+ styleUrls: ['./difficulty-adjustments-table.component.scss'],
+ styles: [`
+ .loadingGraphs {
+ position: absolute;
+ top: 50%;
+ left: calc(50% - 15px);
+ z-index: 100;
+ }
+ `],
+})
+export class DifficultyAdjustmentsTable implements OnInit {
+ hashrateObservable$: Observable;
+ isLoading = true;
+ formatNumber = formatNumber;
+
+ constructor(
+ @Inject(LOCALE_ID) public locale: string,
+ private apiService: ApiService,
+ ) {
+ }
+
+ ngOnInit(): void {
+ this.hashrateObservable$ = this.apiService.getHistoricalHashrate$('1y')
+ .pipe(
+ map((data: any) => {
+ const availableTimespanDay = (
+ (new Date().getTime() / 1000) - (data.oldestIndexedBlockTimestamp)
+ ) / 3600 / 24;
+
+ const tableData = [];
+ for (let i = data.difficulty.length - 1; i > 0; --i) {
+ const selectedPowerOfTen: any = selectPowerOfTen(data.difficulty[i].difficulty);
+ const change = (data.difficulty[i].difficulty / data.difficulty[i - 1].difficulty - 1) * 100;
+
+ tableData.push(Object.assign(data.difficulty[i], {
+ change: change,
+ difficultyShorten: formatNumber(
+ data.difficulty[i].difficulty / selectedPowerOfTen.divider,
+ this.locale, '1.2-2') + selectedPowerOfTen.unit
+ }));
+ }
+ this.isLoading = false;
+
+ return {
+ availableTimespanDay: availableTimespanDay,
+ difficulty: tableData.slice(0, 5),
+ };
+ }),
+ );
+ }
+
+ isMobile() {
+ return (window.innerWidth <= 767.98);
+ }
+}
diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html
index b208d9c41..2ca0e8376 100644
--- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html
+++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html
@@ -1,6 +1,6 @@
-