2019-08-07 12:50:34 +00:00
import { getConnection } from "typeorm" ;
const moment = require ( "moment" ) ;
export async function universalGetLatestBlockDetails ( socket ) {
2019-08-07 13:49:33 +00:00
2019-08-07 12:50:34 +00:00
let block_height = "" ,
letest_block = "" ,
letest_block_num = "" ,
letest_block_duration = "" ;
const BlockchainLatestBlockQuery = await getConnection ( ) . query (
2019-08-08 06:20:39 +00:00
"SELECT bb.timestamp,bb.proof,bb.height,bb.edge_bits,bb.hash,bb.secondary_scaling, bb.previous_id, bb.total_difficulty_cuckaroo, bb.total_difficulty_cuckatoo, bb.total_difficulty_progpow, bb.total_difficulty_randomx, COUNT(DISTINCT(bi.block_id)) AS input_count, COUNT(DISTINCT(bk.block_id)) AS kernel_count, COUNT(DISTINCT(bo.block_id)) AS output_count FROM blockchain_block bb LEFT JOIN blockchain_input bi ON bi.block_id = bb.hash LEFT JOIN blockchain_kernel bk ON bk.block_id = bb.hash LEFT JOIN blockchain_output bo ON bo.block_id = bb.hash group by bb.hash, bb.timestamp ORDER BY bb.timestamp DESC LIMIT 1" ) ;
2019-08-07 12:50:34 +00:00
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 ;
}
2019-08-08 06:20:39 +00:00
if ( BlockchainLatestBlockQuery [ 0 ] . proof == "RandomX" ) {
var Difficulty = targetdifficultyrandomx ;
} else if ( BlockchainLatestBlockQuery [ 0 ] . proof == "ProgPow" ) {
var Difficulty = targetdifficultyprogpow ;
} else if ( BlockchainLatestBlockQuery [ 0 ] . proof == "Cuckoo" ) {
var Difficulty = targetdifficultycuckatoo ;
}
2019-08-07 12:50:34 +00:00
block_height = BlockchainLatestBlockQuery [ 0 ] . height ;
2019-08-08 06:20:39 +00:00
var current_date = new Date ( ) ;
// var current_date = new Date("Sat Apr 2 2018 15:04:00 GMT+0530 (IST)");
var enddaydif =
Math . abs (
BlockchainLatestBlockQuery [ 0 ] . timestamp . getTime ( ) -
current_date . getTime ( ) ,
) /
( 1000 * 60 * 60 * 24 ) ;
var enddayrnd = Math . round ( enddaydif ) ;
// if(enddayrnd < 1) {
var millseconds = Math . abs (
BlockchainLatestBlockQuery [ 0 ] . timestamp . getTime ( ) -
current_date . getTime ( ) ,
) ;
var seconds = Math . floor ( millseconds / 1000 ) ;
var days = Math . floor ( seconds / 86400 ) ;
var hours = Math . floor ( ( seconds % 86400 ) / 3600 ) ;
var minutes = Math . floor ( ( ( seconds % 86400 ) % 3600 ) / 60 ) ;
seconds = seconds % 60 ;
var dateTimeDurationString = '' ;
if ( days > 0 && ( hours === 0 && minutes === 0 ) )
dateTimeDurationString += days > 1 ? days + 'd ' : days + 'd ' ;
if ( days > 0 && ( hours > 0 || minutes > 0 ) )
dateTimeDurationString += days > 1 ? days + 'd ' : days + 'd ' ;
if ( hours > 0 && minutes > 0 )
dateTimeDurationString += hours > 1 ? hours + 'h ' : hours + 'h ' ;
if ( hours > 0 && minutes === 0 )
dateTimeDurationString += hours > 1 ? hours + 'h ' : hours + 'h ' ;
if ( minutes > 0 )
dateTimeDurationString += minutes > 1 ? minutes + 'm ' : minutes + 'm ' ;
if ( seconds > 0 )
dateTimeDurationString += seconds > 1 ? seconds + 's ' : seconds + 's ' ;
2019-08-07 12:50:34 +00:00
var TotalCuckoo =
parseInt ( BlockchainLatestBlockQuery [ 0 ] . total_difficulty_cuckatoo ) +
parseInt ( BlockchainLatestBlockQuery [ 0 ] . total_difficulty_cuckaroo ) ;
2019-08-08 06:20:39 +00:00
let balance = BlockchainLatestBlockQuery [ 0 ] . hash . substring ( 2 , 62 ) ;
let arr = balance . match ( /.{1,6}/g ) ;
var hasharray = arr . map ( i = > '#' + i ) ;
2019-08-07 12:50:34 +00:00
socket . emit ( "latestblockdetail" , {
block_height ,
letest_block ,
letest_block_num ,
letest_block_duration ,
coin_existence ,
difficulty ,
targetdifficultycuckaroo ,
targetdifficultycuckatoo ,
targetdifficultyprogpow ,
targetdifficultyrandomx ,
TotalCuckoo ,
2019-08-08 06:20:39 +00:00
age : dateTimeDurationString ,
input_count : BlockchainLatestBlockQuery [ 0 ] . input_count ,
kernal_count : BlockchainLatestBlockQuery [ 0 ] . kernal_count ,
output_count : BlockchainLatestBlockQuery [ 0 ] . output_count ,
proof : BlockchainLatestBlockQuery [ 0 ] . proof ,
hasharray : hasharray ,
Difficulty : Difficulty ,
hashstart :BlockchainLatestBlockQuery [ 0 ] . hash . slice ( 0 , 2 ) ,
hashend :BlockchainLatestBlockQuery [ 0 ] . hash . slice ( 62 , 64 ) ,
2019-08-07 12:50:34 +00:00
TotalDifficultyCuckaroo :
BlockchainLatestBlockQuery [ 0 ] . total_difficulty_cuckaroo ,
TotalDifficultyCuckatoo :
BlockchainLatestBlockQuery [ 0 ] . total_difficulty_cuckatoo ,
TotalDifficultyProgpow :
BlockchainLatestBlockQuery [ 0 ] . total_difficulty_progpow ,
TotalDifficultyRandomx :
BlockchainLatestBlockQuery [ 0 ] . total_difficulty_randomx
} ) ;
}