/* * @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 require("../core/library") require("../core/crypto-library") require("../core/terahashmining"); var PROCESS = process; process.send && !global.DEBUGPROCESS ? process.send({ cmd: "online", message: "OK" }) : PROCESS = global.DEBUGPROCESS; var LastAlive = Date.now(); setInterval(CheckAlive, 1e3); var idInterval = void 0, Block: any = {}; function CheckAlive() { if (!global.NOALIVE) { var e = Date.now() - LastAlive; Math.abs(e) > global.CHECK_STOP_CHILD_PROCESS && PROCESS.exit(0); } }; function CalcPOWHash() { if (Block.SeqHash) { if ((new Date as any) - Block.Time > Block.Period) return clearInterval(idInterval), void (idInterval = void 0); try { global.CreatePOWVersionX(Block) && process.send({ cmd: "POW", BlockNum: Block.BlockNum, SeqHash: Block.SeqHash, Hash: Block.Hash, PowHash: Block.PowHash, AddrHash: Block.AddrHash, Num: Block.Num }); } catch (e) { global.ToError(e); } } }; PROCESS.on("message", function(e) { if (LastAlive = Date.now(), "FastCalcBlock" === e.cmd) { var o = e; StartHashPump(o), o.RunCount = 0; try { global.CreatePOWVersionX(o) && process.send({ cmd: "POW", BlockNum: o.BlockNum, SeqHash: o.SeqHash, Hash: o.Hash, PowHash: o.PowHash, AddrHash: o.AddrHash, Num: o.Num }); } catch (e) { global.ToError(e); } } else { if ("SetBlock" === e.cmd) { var a = 1e6 * (1 + e.Num); Block.HashCount && process.send({ cmd: "HASHRATE", CountNonce: Block.HashCount, Hash: Block.Hash }), Block.HashCount = 0, (Block = e).Time = Date.now(), Block.LastNonce = a, Block.Period = global.CONSENSUS_PERIOD_TIME * Block.Percent / 100, 0 < Block.Period && 0 < Block.RunPeriod && (CalcPOWHash(), void 0 !== idInterval && clearInterval(idInterval), idInterval = setInterval(CalcPOWHash, Block.RunPeriod)); } else { "Alive" === e.cmd || "Exit" === e.cmd && PROCESS.exit(0); } } }); var idIntervalPump = global.BlockPump = void 0; function StartHashPump(e) { (!global.BlockPump || global.BlockPump.BlockNum < e.BlockNum || global.BlockPump.MinerID !== e.MinerID || global.BlockPump.Percent !== e.Percent) && (global.BlockPump = { BlockNum: e.BlockNum, RunCount: e.RunCount, MinerID: e.MinerID, Percent: e.Percent, LastNonce: 0 }), idIntervalPump = idIntervalPump || setInterval(PumpHash, global.POWRunPeriod); }; var StartTime = 1, EndTime = 0; function PumpHash() { if (global.BlockPump) { var e = Date.now(); if (EndTime < StartTime) { if (100 * (e - StartTime) / global.CONSENSUS_PERIOD_TIME >= global.BlockPump.Percent) return void (EndTime = e); global.CreatePOWVersionX(global.BlockPump, 1); } else { 100 * (e - EndTime) / global.CONSENSUS_PERIOD_TIME > 100 - global.BlockPump.Percent && (StartTime = e); } } };