This commit is contained in:
SuriyaR 2019-08-07 20:23:49 +05:30
commit aa9dfe2eba
8 changed files with 288 additions and 70 deletions

View File

@ -46,6 +46,7 @@
"pg-native": "^3.0.0", "pg-native": "^3.0.0",
"plotly.js": "^1.48.3", "plotly.js": "^1.48.3",
"rxjs": "~6.4.0", "rxjs": "~6.4.0",
"socket.io": "^2.2.0",
"socket.io-client": "^2.2.0", "socket.io-client": "^2.2.0",
"swagger-jsdoc": "^3.2.9", "swagger-jsdoc": "^3.2.9",
"tslib": "^1.9.0", "tslib": "^1.9.0",

View File

@ -45,6 +45,7 @@ import {
BlockchainKernelController, BlockchainKernelController,
BlockchainOutputController BlockchainOutputController
} from "./server/controllers"; } from "./server/controllers";
import { universalGetLatestBlockDetails } from "./server/socket";
import { dbConfig } from "./server/ormconfig"; import { dbConfig } from "./server/ormconfig";
import { config } from "dotenv"; import { config } from "dotenv";
@ -128,9 +129,15 @@ app.get("*", (req, res) => {
connection connection
.connect() .connect()
.then(() => { .then(() => {
app.listen(PORT, () => { const server = app.listen(PORT, () => {
console.log(`Node Express server listening on http://localhost:${PORT}`); console.log(`Node Express server listening on http://localhost:${PORT}`);
}); });
const io = require("socket.io").listen(server);
io.sockets.on("connection", socket => {
setInterval(function() {
universalGetLatestBlockDetails(socket);
},1000);
});
}) })
.catch(error => { .catch(error => {
console.log("connection failed..", error); console.log("connection failed..", error);

161
server/socket/block.ts Normal file
View File

@ -0,0 +1,161 @@
import { getConnection } from "typeorm";
const moment = require("moment");
export async function universalGetLatestBlockDetails(socket) {
let block_height = "",
letest_block = "",
letest_block_num = "",
letest_block_duration = "";
const BlockchainLatestBlockQuery = await getConnection().query(
"SELECT timestamp,height,edge_bits,hash,secondary_scaling, previous_id, total_difficulty_cuckaroo, total_difficulty_cuckatoo, total_difficulty_progpow, total_difficulty_randomx FROM blockchain_block ORDER BY timestamp DESC LIMIT 1"
);
const BlockchainPreviousBlockQuery = await getConnection().query(
"SELECT total_difficulty_cuckaroo, total_difficulty_cuckatoo, total_difficulty_progpow, total_difficulty_randomx FROM blockchain_block WHERE hash=" +
"'" +
BlockchainLatestBlockQuery[0].previous_id +
"'"
);
let height = BlockchainLatestBlockQuery[0].height;
if (height > 12960) {
var remain_block = height - 12960;
var coin_existence =
1440 * 200 +
1440 * 180 +
1440 * 160 +
1440 * 140 +
1440 * 120 +
1440 * 100 +
1440 * 80 +
1440 * 60 +
1440 * 50 +
25 * remain_block;
} else if (height > 11520) {
var remain_block = height - 11520;
var coin_existence =
1440 * 200 +
1440 * 180 +
1440 * 160 +
1440 * 140 +
1440 * 120 +
1440 * 100 +
1440 * 80 +
1440 * 60 +
remain_block * 50;
} else if (height > 10080) {
var remain_block = height - 10080;
var coin_existence =
1440 * 200 +
1440 * 180 +
1440 * 160 +
1440 * 140 +
1440 * 120 +
1440 * 100 +
1440 * 80 +
remain_block * 60;
} else if (height > 8640) {
var remain_block = height - 8640;
var coin_existence =
1440 * 200 +
1440 * 180 +
1440 * 160 +
1440 * 140 +
1440 * 120 +
1440 * 100 +
remain_block * 80;
} else if (height > 7200) {
var remain_block = height - 7200;
var coin_existence =
1440 * 200 +
1440 * 180 +
1440 * 160 +
1440 * 140 +
1440 * 120 +
remain_block * 100;
} else if (height > 5760) {
var remain_block = height - 5760;
var coin_existence =
1440 * 200 + 1440 * 180 + 1440 * 160 + 1440 * 140 + remain_block * 120;
} else if (height > 4320) {
var remain_block = height - 4320;
var coin_existence =
1440 * 200 + 1440 * 180 + 1440 * 160 + remain_block * 140;
} else if (height > 2880) {
var remain_block = height - 2880;
var coin_existence = 1440 * 200 + 1440 * 180 + remain_block * 160;
} else if (height > 1440) {
var remain_block = height - 1440;
var coin_existence = 1440 * 200 + remain_block * 180;
} else {
var coin_existence = height * 200;
}
letest_block = moment(BlockchainLatestBlockQuery[0].timestamp).fromNow();
letest_block_num = letest_block.substr(0, letest_block.indexOf(" ")); // "72"
letest_block_duration = letest_block.substr(letest_block.indexOf(" ") + 1); // "tocirah sneab"
const SECOND_POW_EDGE_BITS = 29;
const BASE_EDGE_BITS = 24;
if (BlockchainLatestBlockQuery[0].edge_bits == SECOND_POW_EDGE_BITS) {
var hashvalue = BlockchainLatestBlockQuery[0].hash;
var diff =
(BlockchainLatestBlockQuery[0].secondary_scaling * 2 ** 64) /
parseInt(hashvalue.substring(0, 16), 16);
var result = Math.min(diff, 0xffffffffffffffff);
var difficulty = Math.round(result);
} else {
var graph_weight =
2 *
2 ** (BlockchainLatestBlockQuery[0].edge_bits - BASE_EDGE_BITS) *
BlockchainLatestBlockQuery[0].edge_bits;
var hashvalue = BlockchainLatestBlockQuery[0].hash;
var diff =
(graph_weight * 2 ** 64) / parseInt(hashvalue.substring(0, 16), 16);
var result = Math.min(diff, 0xffffffffffffffff);
var difficulty = Math.round(result);
}
if (BlockchainLatestBlockQuery[0].previous_id) {
var targetdifficultycuckaroo =
BlockchainLatestBlockQuery[0].total_difficulty_cuckaroo -
BlockchainPreviousBlockQuery[0].total_difficulty_cuckaroo;
var targetdifficultycuckatoo =
BlockchainLatestBlockQuery[0].total_difficulty_cuckatoo -
BlockchainPreviousBlockQuery[0].total_difficulty_cuckatoo;
var targetdifficultyprogpow =
BlockchainLatestBlockQuery[0].total_difficulty_progpow -
BlockchainPreviousBlockQuery[0].total_difficulty_progpow;
var targetdifficultyrandomx =
BlockchainLatestBlockQuery[0].total_difficulty_randomx -
BlockchainPreviousBlockQuery[0].total_difficulty_randomx;
}
block_height = BlockchainLatestBlockQuery[0].height;
var TotalCuckoo =
parseInt(BlockchainLatestBlockQuery[0].total_difficulty_cuckatoo) +
parseInt(BlockchainLatestBlockQuery[0].total_difficulty_cuckaroo);
socket.emit("latestblockdetail", {
block_height,
letest_block,
letest_block_num,
letest_block_duration,
coin_existence,
difficulty,
targetdifficultycuckaroo,
targetdifficultycuckatoo,
targetdifficultyprogpow,
targetdifficultyrandomx,
TotalCuckoo,
TotalDifficultyCuckaroo:
BlockchainLatestBlockQuery[0].total_difficulty_cuckaroo,
TotalDifficultyCuckatoo:
BlockchainLatestBlockQuery[0].total_difficulty_cuckatoo,
TotalDifficultyProgpow:
BlockchainLatestBlockQuery[0].total_difficulty_progpow,
TotalDifficultyRandomx:
BlockchainLatestBlockQuery[0].total_difficulty_randomx
});
}

1
server/socket/index.ts Normal file
View File

@ -0,0 +1 @@
export * from "./block";

View File

@ -1,53 +1,56 @@
import { Injectable } from '@angular/core'; import { Injectable } from "@angular/core";
import { import {
HttpClient, HttpClient,
HttpErrorResponse, HttpErrorResponse,
HttpHeaders, HttpHeaders
} from '@angular/common/http'; } from "@angular/common/http";
import { environment } from '../../../environments/environment'; import { environment } from "../../../environments/environment";
import { throwError, Observable, BehaviorSubject } from 'rxjs'; import { throwError, Observable, BehaviorSubject } from "rxjs";
import { map, catchError } from 'rxjs/operators'; import { map, catchError } from "rxjs/operators";
// import * as io from 'socket.io-client'; import * as io from "socket.io-client";
@Injectable({ @Injectable({
providedIn: 'root', providedIn: "root"
}) })
export class ChartService { export class ChartService {
private server = environment.domain; private server = environment.domain;
private socket; private socket;
constructor(public http: HttpClient) {}
// public createSocketConnection() { constructor(public http: HttpClient) {
// this.socket = io.connect(this.server); this.socket = io.connect(this.server);
// this.socket.on('connect', function(socket) { }
// console.log('Connected!');
// }); // public createSocketConnection() {
// } // console.log("environment.domain",environment.domain);
// this.socket = io.connect(this.server);
// this.socket.on("connect", function(socket) {
// console.log("Connected!");
// });
// }
public apiGetRequest(request: any, reqUrl): Observable<any> { public apiGetRequest(request: any, reqUrl): Observable<any> {
return this.http return this.http
.get(`${environment.apiUrl}` + reqUrl, { .get(`${environment.apiUrl}` + reqUrl, {
params: request, params: request
}) })
.pipe( .pipe(
map(res => { map(res => {
return res; return res;
}), }),
catchError((error: HttpErrorResponse): any => throwError(error)), catchError((error: HttpErrorResponse): any => throwError(error))
); );
} }
public getLatestblockdetails() { public getLatestblockdetails() {
return Observable.create(observer => { return Observable.create(observer => {
this.socket.on('latestblockdetail', response => { this.socket.on("latestblockdetail", response => {
observer.next(response); observer.next(response);
}); });
}); });
} }
public GetTimer() { public GetTimer() {
var countDownDate = new Date('Aug 1, 2019 00:00:00').getTime(); var countDownDate = new Date("Aug 1, 2019 00:00:00").getTime();
// Get today's date and time // Get today's date and time
var now = new Date().getTime(); var now = new Date().getTime();
@ -58,7 +61,7 @@ private server = environment.domain;
// Time calculations for days, hours, minutes and seconds // Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor( var hours = Math.floor(
(distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60), (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
); );
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000); var seconds = Math.floor((distance % (1000 * 60)) / 1000);
@ -68,5 +71,4 @@ private server = environment.domain;
let timerarr = { d: days, h: hours, m: minutes, s: seconds }; let timerarr = { d: days, h: hours, m: minutes, s: seconds };
return timerarr; return timerarr;
} }
} }

View File

@ -26,36 +26,71 @@
</div> --> </div> -->
<div class="row" *ngIf="latestblockdetail"> <div class="row" *ngIf="latestblockdetail">
<div class="col-md-3"> <div class="col-md-3">
<div class="text-center detail_div" [ngStyle]="{'min-height.px': minHeight}"> <div
<p class="mb-0 desc">{{'home.BLOCKCHAIN_HEIGHT' | translate}}</p> class="text-center detail_div"
<p class="count mb-0">{{ latestblockdetail.block_height | number }}</p> [ngStyle]="{ 'min-height.px': minHeight }"
>
<p class="mb-0 desc">{{ "home.BLOCKCHAIN_HEIGHT" | translate }}</p>
<p
class="count mb-0"
[ngClass]="latestblockdetail.blink == true ? 'item-highlight' : ''"
>
{{ latestblockdetail.block_height | number }}
</p>
</div> </div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<div class="text-center detail_div" [ngStyle]="{'min-height.px': minHeight}"> <div
<p class="mb-0 desc">{{'home.LATEST_BLOCK' | translate}}</p> class="text-center detail_div"
<p class="count mb-0">{{latestblockdetail.letest_block_num}} <span class="">{{latestblockdetail.letest_block_duration}}</span></p> [ngStyle]="{ 'min-height.px': minHeight }"
>
<p class="mb-0 desc">{{ "home.LATEST_BLOCK" | translate }}</p>
<p
class="count mb-0"
[ngClass]="latestblockdetail.blink == true ? 'item-highlight' : ''"
>
{{ latestblockdetail.letest_block_num }}
<span class="">{{ latestblockdetail.letest_block_duration }}</span>
</p>
</div> </div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<div class="text-center detail_div" #minhgt> <div class="text-center detail_div" #minhgt>
<p class="mb-2 desc">{{'home.LATEST_BLOCK1' | translate}}</p> <p class="mb-2 desc">{{ "home.LATEST_BLOCK1" | translate }}</p>
<div class=" text-left d-inline-block" title="Target / Total Block Difficulty"> <div
class=" text-left d-inline-block"
title="Target / Total Block Difficulty"
[ngClass]="latestblockdetail.blink == true ? 'item-highlight' : ''"
>
<!-- <p class="difficulty_datas">Cuckaroo : {{latestblockdetail.targetdifficultycuckaroo | number}} / {{latestblockdetail.TotalDifficultyCuckatoo | number}}</p> --> <!-- <p class="difficulty_datas">Cuckaroo : {{latestblockdetail.targetdifficultycuckaroo | number}} / {{latestblockdetail.TotalDifficultyCuckatoo | number}}</p> -->
<p class="difficulty_datas">Cuckoo : {{latestblockdetail.targetdifficultycuckatoo | number}} / {{latestblockdetail.TotalDifficultyCuckatoo | number}}</p> <p class="difficulty_datas">
<p class="difficulty_datas">ProgPow : {{latestblockdetail.targetdifficultyprogpow | number}} / {{latestblockdetail.TotalDifficultyProgpow | number}}</p> Cuckoo : {{ latestblockdetail.targetdifficultycuckatoo | number }} /
<p class="difficulty_datas">RandomX : {{latestblockdetail.targetdifficultyrandomx | number}} / {{latestblockdetail.TotalDifficultyRandomx | number}}</p> {{ latestblockdetail.TotalDifficultyCuckatoo | number }}
</div> </p>
<p class="difficulty_datas">
ProgPow : {{ latestblockdetail.targetdifficultyprogpow | number }} /
{{ latestblockdetail.TotalDifficultyProgpow | number }}
</p>
<p class="difficulty_datas">
RandomX : {{ latestblockdetail.targetdifficultyrandomx | number }} /
{{ latestblockdetail.TotalDifficultyRandomx | number }}
</p>
</div>
</div> </div>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<div class="text-center detail_div" [ngStyle]="{'min-height.px': minHeight}"> <div
<p class="mb-0 desc">{{'home.COIN_IN' | translate}}</p> class="text-center detail_div"
<p class="count mb-0">{{latestblockdetail.coin_existence | number}} <span class="">Epic</span></p> [ngStyle]="{ 'min-height.px': minHeight }"
>
<p class="mb-0 desc">{{ "home.COIN_IN" | translate }}</p>
<p
class="count mb-0"
[ngClass]="latestblockdetail.blink == true ? 'item-highlight' : ''"
>
{{ latestblockdetail.coin_existence | number }}
<span class="">Epic</span>
</p>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,15 +1,15 @@
import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { Component, OnInit, ViewChild, ElementRef } from "@angular/core";
import { ChartService } from '../../../shared/services/chart.service'; import { ChartService } from "../../../shared/services/chart.service";
import { HttpParams } from '@angular/common/http'; import { HttpParams } from "@angular/common/http";
import * as io from 'socket.io-client'; import * as io from "socket.io-client";
import { environment } from '../../../../environments/environment'; import { environment } from "../../../../environments/environment";
import { BehaviorSubject, Observable, Subject } from 'rxjs'; import { BehaviorSubject, Observable, Subject } from "rxjs";
import { TransServiceService } from '../../../shared/services/trans-service.service'; import { TransServiceService } from "../../../shared/services/trans-service.service";
@Component({ @Component({
selector: 'app-block-detail-list', selector: "app-block-detail-list",
templateUrl: './block-detail-list.component.html', templateUrl: "./block-detail-list.component.html",
styleUrls: ['./block-detail-list.component.css'], styleUrls: ["./block-detail-list.component.css"]
}) })
export class BlockDetailListComponent implements OnInit { export class BlockDetailListComponent implements OnInit {
public latestblockdetail: any = []; public latestblockdetail: any = [];
@ -17,17 +17,21 @@ export class BlockDetailListComponent implements OnInit {
public latestblockdetailObservable: any; public latestblockdetailObservable: any;
private server = environment.domain; private server = environment.domain;
private socket; private socket;
@ViewChild('minhgt', {static: false}) elementView: ElementRef; @ViewChild("minhgt", { static: false }) elementView: ElementRef;
minHeight: number; minHeight: number;
constructor(private chartService: ChartService,public translate: TransServiceService) { constructor(
private chartService: ChartService,
public translate: TransServiceService
) {
// this.chartService.createSocketConnection(); // this.chartService.createSocketConnection();
} }
ngOnInit() { ngOnInit() {
this.gettinglatesthashList(); this.gettinglatesthashList();
this.getBlockDetails(); this.getBlockDetails();
console.log("Enter Nginit");
} }
@ -35,7 +39,7 @@ export class BlockDetailListComponent implements OnInit {
this.minHeight = this.elementView.nativeElement.offsetHeight; this.minHeight = this.elementView.nativeElement.offsetHeight;
} }
getBlockDetails() { getBlockDetails() {
this.latestblockdetailObservable = this.chartService this.latestblockdetailObservable = this.chartService
.getLatestblockdetails() .getLatestblockdetails()
.subscribe(response => { .subscribe(response => {
@ -45,28 +49,28 @@ getBlockDetails() {
this.prevouslatestblockdetails.block_height != this.prevouslatestblockdetails.block_height !=
this.latestblockdetail.block_height this.latestblockdetail.block_height
) { ) {
this.latestblockdetail['blink'] = true; this.latestblockdetail["blink"] = true;
} else { } else {
this.latestblockdetail['blink'] = false; this.latestblockdetail["blink"] = false;
} }
//console.log(this.latestblockdetail); //console.log(this.latestblockdetail);
}); });
} }
public gettinglatesthashList() { public gettinglatesthashList() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.chartService this.chartService
.apiGetRequest('', '/blockchain_block/latesblockdetails') .apiGetRequest("", "/blockchain_block/latesblockdetails")
.subscribe( .subscribe(
res => { res => {
if (res['status'] == 200) { if (res["status"] == 200) {
// var hasharray = res.response; // var hasharray = res.response;
this.latestblockdetail = res.response; this.latestblockdetail = res.response;
this.latestblockdetail['blink'] = false; this.latestblockdetail["blink"] = false;
resolve(); resolve();
} }
}, },
error => {}, error => {}
); );
}); });
} }

View File

@ -473,7 +473,7 @@ a[aria-expanded="true"] > .tab_hdng:after {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.timer{ .timer{
min-width: 140px; min-width: 140px;
margin-right: 10px; margin-right: 10px;
@ -644,4 +644,11 @@ body.dark_theme {
.dark_theme .tab_hdng{color: #ffffff;} .dark_theme .tab_hdng{color: #ffffff;}
.dark_theme .view_content table{border-color: #384566;} .dark_theme .view_content table{border-color: #384566;}
.dark_theme .card-body{background-color: #1c2437;} .dark_theme .card-body{background-color: #1c2437;}
.diff_margin{margin-bottom: -10px !important; margin-top: -10px !important;} .diff_margin{margin-bottom: -10px !important; margin-top: -10px !important;}
.item-highlight {
animation: yellowfade 5s ;
-moz-animation: yellowfade 5s ;
-webkit-animation: yellowfade 5s ;
-o-animation: yellowfade 5s ;
}