/* * @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)) { if (Block.HashCount) { powClient.send({ cmd: "HASHRATE", CountNonce: Block.HashCount, Hash: Block.Hash }); } powClient.send({ cmd: "POW", BlockNum: FastBlock.BlockNum, SeqHash: FastBlock.SeqHash, Hash: FastBlock.Hash, PowHash: FastBlock.PowHash, AddrHash: FastBlock.AddrHash, Num: FastBlock.NodeNum }); } } 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); } }) function CheckAlive() { if (global.NOALIVE) return; var Delta = Date.now() - LastAlive; if (Math.abs(Delta) > global.CHECK_STOP_CHILD_PROCESS) { PROCESS.exit(0); return; } }; 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, NodeNum: SetBlock.NodeNum, }; } 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; } global.BlockPump.LastNonce = global.BlockPump.LastNonce + global.BlockPump.Num * 100000 global.BlockPump.LastNonce0 = global.BlockPump.LastNonce0 + 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; } } };