2019-07-10 04:01:15 +00:00
|
|
|
/*
|
|
|
|
* @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
|
|
|
|
*/
|
|
|
|
|
2019-07-13 06:10:12 +00:00
|
|
|
global.PROCESS_NAME = "POW";
|
|
|
|
global.POWPROCESS = 1;
|
|
|
|
import "../core/library"
|
|
|
|
import "../core/crypto-library"
|
2019-07-14 10:27:58 +00:00
|
|
|
import { CreatePOWVersionX } from "../core/terahashmining"
|
2019-07-10 04:01:15 +00:00
|
|
|
var PROCESS = process;
|
2019-07-13 06:10:12 +00:00
|
|
|
if (process.send && !global.DEBUGPROCESS) {
|
|
|
|
process.send({ cmd: "online", message: "OK" });
|
|
|
|
} else {
|
|
|
|
PROCESS = global.DEBUGPROCESS;
|
|
|
|
}
|
2019-07-10 04:01:15 +00:00
|
|
|
var LastAlive = Date.now();
|
2019-07-13 06:10:12 +00:00
|
|
|
setInterval(CheckAlive, 1000);
|
|
|
|
var idInterval = undefined;
|
|
|
|
var Block: any = {};
|
2019-07-16 16:13:22 +00:00
|
|
|
|
|
|
|
import { powClient } from '../rpc/client'
|
|
|
|
|
|
|
|
powClient.on('message', (msg) => {
|
2019-07-13 06:10:12 +00:00
|
|
|
LastAlive = Date.now();
|
2019-07-16 16:13:22 +00:00
|
|
|
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
|
|
|
|
});
|
2019-07-13 06:10:12 +00:00
|
|
|
}
|
2019-07-16 16:13:22 +00:00
|
|
|
} 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);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// });
|
2019-07-10 04:01:15 +00:00
|
|
|
|
|
|
|
function CheckAlive() {
|
2019-07-13 06:10:12 +00:00
|
|
|
if (global.NOALIVE)
|
|
|
|
return;
|
|
|
|
var Delta = Date.now() - LastAlive;
|
|
|
|
if (Math.abs(Delta) > global.CHECK_STOP_CHILD_PROCESS) {
|
|
|
|
PROCESS.exit(0);
|
|
|
|
return;
|
2019-07-10 04:01:15 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2019-07-16 16:13:22 +00:00
|
|
|
// 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);
|
|
|
|
// }
|
|
|
|
// };
|
2019-07-13 06:10:12 +00:00
|
|
|
global.BlockPump = undefined;
|
|
|
|
var idIntervalPump = undefined;
|
2019-07-11 07:52:17 +00:00
|
|
|
|
2019-07-13 06:10:12 +00:00
|
|
|
function StartHashPump(SetBlock) {
|
2019-07-15 09:12:55 +00:00
|
|
|
if (!global.BlockPump
|
|
|
|
|| global.BlockPump.BlockNum < SetBlock.BlockNum
|
|
|
|
|| global.BlockPump.MinerID !== SetBlock.MinerID
|
|
|
|
|| global.BlockPump.Percent !== SetBlock.Percent) {
|
2019-07-13 06:10:12 +00:00
|
|
|
global.BlockPump = {
|
|
|
|
BlockNum: SetBlock.BlockNum,
|
|
|
|
RunCount: SetBlock.RunCount,
|
|
|
|
MinerID: SetBlock.MinerID,
|
|
|
|
Percent: SetBlock.Percent,
|
|
|
|
LastNonce: 0,
|
2019-07-16 16:13:22 +00:00
|
|
|
Num: SetBlock.Num,
|
2019-07-13 06:10:12 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
if (!idIntervalPump) {
|
|
|
|
idIntervalPump = setInterval(PumpHash, global.POWRunPeriod);
|
|
|
|
}
|
2019-07-10 04:01:15 +00:00
|
|
|
};
|
2019-07-13 06:10:12 +00:00
|
|
|
var StartTime = 1;
|
|
|
|
var EndTime = 0;
|
2019-07-10 04:01:15 +00:00
|
|
|
|
|
|
|
function PumpHash() {
|
2019-07-13 06:10:12 +00:00
|
|
|
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;
|
|
|
|
}
|
2019-07-16 16:13:22 +00:00
|
|
|
if (global.BlockPump.RunCount) {
|
|
|
|
setTimeout(() => {
|
|
|
|
powClient.send({ cmd: "HASHRATE", CountNonce: global.BlockPump.RunCount });
|
|
|
|
}, 1)
|
|
|
|
}
|
|
|
|
global.BlockPump.LastNonce = global.BlockPump.LastNonce + global.BlockPump.Num * 100000
|
2019-07-14 10:27:58 +00:00
|
|
|
CreatePOWVersionX(global.BlockPump, 1);
|
2019-07-13 06:10:12 +00:00
|
|
|
} else {
|
|
|
|
var Delta = CurTime - EndTime;
|
|
|
|
var PeriodPercent = 100 * Delta / global.CONSENSUS_PERIOD_TIME;
|
|
|
|
if (PeriodPercent > 100 - global.BlockPump.Percent) {
|
|
|
|
StartTime = CurTime;
|
2019-07-10 04:01:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|