/* * @project: TERA * @version: Development (beta) * @license: MIT (not for evil) * @copyright: Yuriy Ivanov (Vtools) 2017-2019 [progr76@gmail.com] * Web: https://terafoundation.org * Twitter: https://twitter.com/terafoundation * Telegram: https://t.me/terafoundation */ global.PROCESS_NAME = "POW"; global.POWPROCESS = 1; import "../core/library" import "../core/crypto-library" import { CreatePOWVersionX } from "../core/terahashmining" var PROCESS = process; if (process.send && !global.DEBUGPROCESS) { process.send({ cmd: "online", message: "OK" }); } else { PROCESS = global.DEBUGPROCESS; } var LastAlive = Date.now(); setInterval(CheckAlive, 1000); var idInterval = undefined; var Block: any = {}; import { powClient } from '../rpc/client' powClient.on('message', (msg) => { LastAlive = Date.now(); switch (msg.cmd) { case "FastCalcBlock": FastCalcBlock(msg); break; case "Alive": break; case "Exit": PROCESS.exit(0); } }) powClient.connect() function FastCalcBlock(msg) { var FastBlock = msg; StartHashPump(FastBlock); FastBlock.RunCount = 0; try { if (CreatePOWVersionX(FastBlock)) { powClient.send({ cmd: "POW", BlockNum: FastBlock.BlockNum, SeqHash: FastBlock.SeqHash, Hash: FastBlock.Hash, PowHash: FastBlock.PowHash, AddrHash: FastBlock.AddrHash, Num: FastBlock.Num }); } } catch (e) { powClient.emit('web', `FastCalcBlock Error ${e}...`) global.ToError(e); } } PROCESS.on('message', function(msg) { LastAlive = Date.now(); switch (msg.cmd) { case "Alive": break; case "Exit": PROCESS.exit(0); } }) // PROCESS.on('message', function(msg) { // LastAlive = Date.now(); // if (msg.cmd === "FastCalcBlock") { // var FastBlock = msg; // StartHashPump(FastBlock); // FastBlock.RunCount = 0; // try { // if (CreatePOWVersionX(FastBlock)) // process.send({ // cmd: "POW", // BlockNum: FastBlock.BlockNum, // SeqHash: FastBlock.SeqHash, // Hash: FastBlock.Hash, // PowHash: FastBlock.PowHash, // AddrHash: FastBlock.AddrHash, // Num: FastBlock.Num // }); // } catch (e) { // global.ToError(e); // } // } else { // if (msg.cmd === "SetBlock") { // var StartNonce = 1000000 * (1 + msg.Num); // if (Block.HashCount) { // process.send({ cmd: "HASHRATE", CountNonce: Block.HashCount, Hash: Block.Hash }); // } // Block.HashCount = 0; // Block = msg; // Block.Time = Date.now(); // Block.LastNonce = StartNonce; // Block.Period = global.CONSENSUS_PERIOD_TIME * Block.Percent / 100; // if (Block.Period > 0 && Block.RunPeriod > 0) { // CalcPOWHash(); // if (idInterval !== undefined) { // clearInterval(idInterval); // } // idInterval = setInterval(CalcPOWHash, Block.RunPeriod); // } // } else // if (msg.cmd === "Alive") { // } else // if (msg.cmd === "Exit") { // PROCESS.exit(0); // } // } // }); function CheckAlive() { if (global.NOALIVE) return; var Delta = Date.now() - LastAlive; if (Math.abs(Delta) > global.CHECK_STOP_CHILD_PROCESS) { PROCESS.exit(0); return; } }; // function CalcPOWHash() { // if (!Block.SeqHash) // return; // if ((new Date() as any) - Block.Time > Block.Period) { // clearInterval(idInterval); // idInterval = undefined; // return; // } // try { // if (CreatePOWVersionX(Block)) { // let msg = { // cmd: "POW", // BlockNum: Block.BlockNum, // SeqHash: Block.SeqHash, // Hash: Block.Hash, // PowHash: Block.PowHash, // AddrHash: Block.AddrHash, // Num: Block.Num // } // powClient.send(msg) // //process.send(msg); // } // } catch (e) { // global.ToError(e); // } // }; global.BlockPump = undefined; var idIntervalPump = undefined; function StartHashPump(SetBlock) { if (!global.BlockPump || global.BlockPump.BlockNum < SetBlock.BlockNum || global.BlockPump.MinerID !== SetBlock.MinerID || global.BlockPump.Percent !== SetBlock.Percent) { global.BlockPump = { BlockNum: SetBlock.BlockNum, RunCount: SetBlock.RunCount, MinerID: SetBlock.MinerID, Percent: SetBlock.Percent, LastNonce: 0, Num: SetBlock.Num, }; } if (!idIntervalPump) { idIntervalPump = setInterval(PumpHash, global.POWRunPeriod); } }; var StartTime = 1; var EndTime = 0; function PumpHash() { if (!global.BlockPump) return; var CurTime = Date.now(); if (StartTime > EndTime) { var Delta = CurTime - StartTime; var PeriodPercent = 100 * Delta / global.CONSENSUS_PERIOD_TIME; if (PeriodPercent >= global.BlockPump.Percent) { EndTime = CurTime; return; } if (global.BlockPump.RunCount) { setTimeout(() => { powClient.send({ cmd: "HASHRATE", CountNonce: global.BlockPump.RunCount }); }, 1) } global.BlockPump.LastNonce = global.BlockPump.LastNonce + global.BlockPump.Num * 100000 CreatePOWVersionX(global.BlockPump, 1); } else { var Delta = CurTime - EndTime; var PeriodPercent = 100 * Delta / global.CONSENSUS_PERIOD_TIME; if (PeriodPercent > 100 - global.BlockPump.Percent) { StartTime = CurTime; } } };