diff --git a/server.ts b/server.ts index e382636..7c4ebd1 100644 --- a/server.ts +++ b/server.ts @@ -56,7 +56,7 @@ BlockchainOutput import { universalGetLatestBlockDetails } from "./server/socket"; import { dbConfig } from "./server/ormconfig"; import { config } from "dotenv"; -import {latestBlockDetails, Details, GetBlocktime, averageblockdifficulty} from './server/utils'; +import {latestBlockDetails, Details, GetBlocktime, averageblockdifficulty, network_hashrate} from './server/utils'; config({ path: resolve(__dirname, "../.env") }); // const connectionManager = getConnectionManager(); @@ -147,6 +147,21 @@ try { let data = await averageblockdifficulty(); result = Number(data); } + else if(option == "network-hashrate-cuckoo") + { + let data = await network_hashrate(blockDetails.block_height,31,blockDetails.targetdifficultycuckatoo); + result = data; + } + else if(option == "network-hashrate-progpow") + { + let data = await network_hashrate(blockDetails.block_height,16,blockDetails.targetdifficultyprogpow); + result = data; + } + else if(option == "network-hashrate-randomx") + { + let data = await network_hashrate(blockDetails.block_height,16,blockDetails.targetdifficultyrandomx); + result = data; + } else if(option == "getblockhash") { let height = req.query.height; diff --git a/server/utils/common.ts b/server/utils/common.ts index 32c9c16..f6c7d25 100644 --- a/server/utils/common.ts +++ b/server/utils/common.ts @@ -1,4 +1,4 @@ -import { getConnection } from "typeorm"; +import { getConnection, AdvancedConsoleLogger } from "typeorm"; import { Global } from "../global"; import { async } from '@angular/core/testing'; @@ -362,7 +362,45 @@ const averageblockdifficulty = async() => { return BlockchainBlockPerSecondQuery[0]['period']; } - + + + + +async function network_hashrate(height, edge_bits, difficulty) { + let graph_wight = await graph_weight(height, edge_bits) + return (42.0 * (difficulty / graph_wight) / 60.0); + } + + + + + async function graph_weight(height, edge_bits) { + let xpr_edge_bits = edge_bits; + + let min_edge_bits = 19; + if(min_edge_bits == 19) { + min_edge_bits += 12; + } + + let bits_over_min =Math.max(0, (edge_bits - min_edge_bits)); + let expiry_height = (1 << bits_over_min) * 524160; + + if(height >= expiry_height) { + xpr_edge_bits = Math.max(0,(xpr_edge_bits-(1 + (height - expiry_height) / 10080))); + } + + let final_val; + if(edge_bits > 24) { + final_val = edge_bits - 24; + } else { + final_val = 24 - edge_bits; + } + + return (2 << final_val) * xpr_edge_bits; +} + + +export {network_hashrate}; export {averageblockdifficulty}; export {latestBlockDetails}; export {GetBlocktime};