forked from circlecloud/tera
		
	@@ -14,6 +14,7 @@ import fs = require('fs');
 | 
			
		||||
import os = require('os');
 | 
			
		||||
// import path = require('path')
 | 
			
		||||
import * as crypto from 'crypto';
 | 
			
		||||
import { secp256k1 } from '../core/library'
 | 
			
		||||
 | 
			
		||||
global.START_SERVER = 1;
 | 
			
		||||
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
 | 
			
		||||
@@ -37,18 +38,25 @@ global.glCurNumFindArr = 0;
 | 
			
		||||
global.ArrReconnect = [];
 | 
			
		||||
global.ArrConnect = [];
 | 
			
		||||
var FindList = [
 | 
			
		||||
    { "ip": "91.235.136.81", "port": 30005 },
 | 
			
		||||
    { "ip": "149.154.70.158", "port": 30000 },
 | 
			
		||||
    { "ip": "185.240.243.182", "port": 30000 },
 | 
			
		||||
    { "ip": "212.109.197.205", "port": 30000 },
 | 
			
		||||
    { "ip": "212.109.197.209", "port": 30000 },
 | 
			
		||||
    { "ip": "80.87.192.24", "port": 30000 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30000 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30001 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30002 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30003 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30004 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30005 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30006 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30007 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30008 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30009 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30010 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30011 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30012 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30013 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30014 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30015 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30016 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30017 },
 | 
			
		||||
    { "ip": "60.12.241.181", "port": 30018 },
 | 
			
		||||
];
 | 
			
		||||
if (global.LOCAL_RUN) {
 | 
			
		||||
    FindList = [{ "ip": "127.0.0.1", "port": 50001 }, { "ip": "127.0.0.1", "port": 50002 }];
 | 
			
		||||
@@ -369,23 +377,22 @@ var StartCheckMining = 0;
 | 
			
		||||
global.MiningPaused = 0;
 | 
			
		||||
var ProcessMemorySize = 0;
 | 
			
		||||
global.ArrMiningWrk = [];
 | 
			
		||||
// var BlockMining;
 | 
			
		||||
var BlockMining;
 | 
			
		||||
if (global.ADDRLIST_MODE) {
 | 
			
		||||
    // @ts-ignore
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
let ArrMiningWrk = global.ArrMiningWrk
 | 
			
		||||
function AllAlive() {
 | 
			
		||||
    for (var i = 0; i < ArrMiningWrk.length; i++) {
 | 
			
		||||
        ArrMiningWrk[i].send({ cmd: "Alive" });
 | 
			
		||||
    for (var i = 0; i < global.ArrMiningWrk.length; i++) {
 | 
			
		||||
        global.ArrMiningWrk[i].send({ cmd: "Alive" });
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function ClearArrMining() {
 | 
			
		||||
    for (var i = 0; i < ArrMiningWrk.length; i++) {
 | 
			
		||||
        ArrMiningWrk[i].send({ cmd: "Exit" });
 | 
			
		||||
    for (var i = 0; i < global.ArrMiningWrk.length; i++) {
 | 
			
		||||
        global.ArrMiningWrk[i].send({ cmd: "Exit" });
 | 
			
		||||
    }
 | 
			
		||||
    ArrMiningWrk = [];
 | 
			
		||||
    global.ArrMiningWrk = [];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function RunStopPOWProcess(Mode) {
 | 
			
		||||
@@ -415,13 +422,13 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
                global.MiningPaused = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (ArrMiningWrk.length && global.MiningPaused) {
 | 
			
		||||
        if (global.ArrMiningWrk.length && global.MiningPaused) {
 | 
			
		||||
            global.ToLog("------------ MINING MUST STOP ON TIME");
 | 
			
		||||
            ClearArrMining();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
            if (!ArrMiningWrk.length && !global.MiningPaused) {
 | 
			
		||||
            if (!global.ArrMiningWrk.length && !global.MiningPaused) {
 | 
			
		||||
                global.ToLog("*********** MINING MUST START ON TIME");
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
@@ -435,7 +442,7 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
        ClearArrMining();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    if (global.USE_MINING && ArrMiningWrk.length)
 | 
			
		||||
    if (global.USE_MINING && global.ArrMiningWrk.length)
 | 
			
		||||
        return;
 | 
			
		||||
    if (global.SERVER.LoadHistoryMode)
 | 
			
		||||
        return;
 | 
			
		||||
@@ -444,7 +451,7 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
    var PathMiner = global.GetCodePath("../miner.js");
 | 
			
		||||
    if (!fs.existsSync(PathMiner))
 | 
			
		||||
        PathMiner = "./process/pow-process.js";
 | 
			
		||||
    if (ArrMiningWrk.length >= global.GetCountMiningCPU())
 | 
			
		||||
    if (global.ArrMiningWrk.length >= global.GetCountMiningCPU())
 | 
			
		||||
        return;
 | 
			
		||||
    if (global.GrayConnect()) {
 | 
			
		||||
        global.ToLog("CANNOT START MINER IN NOT DIRECT IP MODE");
 | 
			
		||||
@@ -464,8 +471,8 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
    global.ToLog("START MINER PROCESS COUNT: " + global.GetCountMiningCPU() + " Memory: " + ProcessMemorySize / 1024 / 1024 + " Mb for each process");
 | 
			
		||||
    for (var R = 0; R < global.GetCountMiningCPU(); R++) {
 | 
			
		||||
        let Worker = Fork(PathMiner);
 | 
			
		||||
        ArrMiningWrk.push(Worker);
 | 
			
		||||
        Worker.Num = ArrMiningWrk.length;
 | 
			
		||||
        global.ArrMiningWrk.push(Worker);
 | 
			
		||||
        Worker.Num = global.ArrMiningWrk.length;
 | 
			
		||||
        Worker.on('message', function(msg) {
 | 
			
		||||
            if (msg.cmd === "log") {
 | 
			
		||||
                global.ToLog(msg.message);
 | 
			
		||||
@@ -485,16 +492,16 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
                        }
 | 
			
		||||
        });
 | 
			
		||||
        Worker.on('error', function(err) {
 | 
			
		||||
            if (!ArrMiningWrk.length)
 | 
			
		||||
            if (!global.ArrMiningWrk.length)
 | 
			
		||||
                return;
 | 
			
		||||
            global.ToError('ERROR IN PROCESS: ' + err);
 | 
			
		||||
        });
 | 
			
		||||
        Worker.on('close', function(code) {
 | 
			
		||||
            global.ToLog("STOP PROCESS: " + Worker.Num + " pid:" + Worker.pid);
 | 
			
		||||
            for (var i = 0; i < ArrMiningWrk.length; i++) {
 | 
			
		||||
                if (ArrMiningWrk[i].pid === Worker.pid) {
 | 
			
		||||
            for (var i = 0; i < global.ArrMiningWrk.length; i++) {
 | 
			
		||||
                if (global.ArrMiningWrk[i].pid === Worker.pid) {
 | 
			
		||||
                    global.ToLog("Delete wrk from arr - pid:" + Worker.pid);
 | 
			
		||||
                    ArrMiningWrk.splice(i, 1);
 | 
			
		||||
                    global.ArrMiningWrk.splice(i, 1);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
@@ -504,11 +511,11 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
function SetCalcPOW(Block, cmd) {
 | 
			
		||||
    if (!global.USE_MINING)
 | 
			
		||||
        return;
 | 
			
		||||
    if (ArrMiningWrk.length !== global.GetCountMiningCPU())
 | 
			
		||||
    if (global.ArrMiningWrk.length !== global.GetCountMiningCPU())
 | 
			
		||||
        return;
 | 
			
		||||
    // BlockMining = Block;
 | 
			
		||||
    for (var i = 0; i < ArrMiningWrk.length; i++) {
 | 
			
		||||
        var CurWorker = ArrMiningWrk[i];
 | 
			
		||||
    BlockMining = Block;
 | 
			
		||||
    for (var i = 0; i < global.ArrMiningWrk.length; i++) {
 | 
			
		||||
        var CurWorker = global.ArrMiningWrk[i];
 | 
			
		||||
        if (!CurWorker.bOnline)
 | 
			
		||||
            continue;
 | 
			
		||||
        CurWorker.send({
 | 
			
		||||
@@ -650,7 +657,7 @@ function RunOnce() {
 | 
			
		||||
        }, 10000);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
// var glPortDebug = 49800;
 | 
			
		||||
var glPortDebug = 49800;
 | 
			
		||||
 | 
			
		||||
function Fork(Path, ArrArgs?) {
 | 
			
		||||
    const child_process = require('child_process');
 | 
			
		||||
@@ -670,7 +677,7 @@ function Fork(Path, ArrArgs?) {
 | 
			
		||||
        ArrArgs.push("NOALIVE");
 | 
			
		||||
    if (global.DEV_MODE)
 | 
			
		||||
        ArrArgs.push("DEV_MODE");
 | 
			
		||||
    // glPortDebug++;
 | 
			
		||||
    glPortDebug++;
 | 
			
		||||
    var execArgv = [];
 | 
			
		||||
    var Worker = child_process.fork(Path, ArrArgs, { execArgv: execArgv });
 | 
			
		||||
    return Worker;
 | 
			
		||||
@@ -687,7 +694,7 @@ function TestSignLib(MaxTime) {
 | 
			
		||||
    var startTime = process.hrtime();
 | 
			
		||||
    var deltaTime = 1;
 | 
			
		||||
    for (var Num = 0; Num < 1000; Num++) {
 | 
			
		||||
        var Result = global.secp256k1.verify(hash, Sign, PubKey);
 | 
			
		||||
        var Result = secp256k1.verify(hash, Sign, PubKey);
 | 
			
		||||
        if (!Result) {
 | 
			
		||||
            global.ToError("Error test sign");
 | 
			
		||||
            process.exit(0);
 | 
			
		||||
 
 | 
			
		||||
@@ -50,20 +50,20 @@ PROCESS.on("message", function(e) {
 | 
			
		||||
                cmd: "POW", BlockNum: o.BlockNum, SeqHash: o.SeqHash, Hash: o.Hash, PowHash: o.PowHash, AddrHash: o.AddrHash,
 | 
			
		||||
                Num: o.Num
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        catch (e) {
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
            global.ToError(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    } 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
 | 
			
		||||
        } else {
 | 
			
		||||
            "Alive" === e.cmd || "Exit" === e.cmd && PROCESS.exit(0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
var idIntervalPump = global.BlockPump = void 0;
 | 
			
		||||
 | 
			
		||||
@@ -83,8 +83,7 @@ function PumpHash() {
 | 
			
		||||
            if (100 * (e - StartTime) / global.CONSENSUS_PERIOD_TIME >= global.BlockPump.Percent)
 | 
			
		||||
                return void (EndTime = e);
 | 
			
		||||
            global.CreatePOWVersionX(global.BlockPump, 1);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
        } else {
 | 
			
		||||
            100 * (e - EndTime) / global.CONSENSUS_PERIOD_TIME > 100 - global.BlockPump.Percent && (StartTime = e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +111,7 @@ function GETBLOCKHEADER100(msg) {
 | 
			
		||||
        return;
 | 
			
		||||
    var EndNum100 = BlockNum / 100;
 | 
			
		||||
    var LoadHash100 = Data.Hash;
 | 
			
		||||
    // var Hash100;
 | 
			
		||||
    var Hash100;
 | 
			
		||||
    var Count = Data.Count;
 | 
			
		||||
    if (!Count || Count < 0 || !EndNum100)
 | 
			
		||||
        return;
 | 
			
		||||
@@ -151,8 +151,7 @@ function GETBLOCKHEADER(msg) {
 | 
			
		||||
            if (BlockNum > global.SERVER.GetMaxNumBlockDB())
 | 
			
		||||
                BlockNum = global.SERVER.GetMaxNumBlockDB();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
    } else {
 | 
			
		||||
        BlockNum = Data.BlockNum;
 | 
			
		||||
        var IsSum = Data.IsSum;
 | 
			
		||||
        var Count = Data.Count;
 | 
			
		||||
@@ -228,8 +227,8 @@ function GETREST(msg) {
 | 
			
		||||
    var ProofArrR = [];
 | 
			
		||||
    var ArrRest = [];
 | 
			
		||||
    if (nResult) {
 | 
			
		||||
        // var WorkStruct = {};
 | 
			
		||||
        // var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW;
 | 
			
		||||
        var WorkStruct = {};
 | 
			
		||||
        var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW;
 | 
			
		||||
        var WorkFormatLength = global.DApps.Accounts.SIZE_ACCOUNT_ROW;
 | 
			
		||||
        var Max = global.DApps.Accounts.DBState.GetMaxNum();
 | 
			
		||||
        var LengthAccount = Data.Count;
 | 
			
		||||
 
 | 
			
		||||
@@ -121,7 +121,7 @@ function DoTXProcess() {
 | 
			
		||||
    var StartTime = Date.now();
 | 
			
		||||
    if (global.bShowDetail)
 | 
			
		||||
        global.ToLog("BlockMin: " + BlockMin.BlockNum + "  LastBlockNum=" + LastBlockNum);
 | 
			
		||||
    // var CountTX = 0;
 | 
			
		||||
    var CountTX = 0;
 | 
			
		||||
    for (var Num = BlockMin.BlockNum; Num < BlockMin.BlockNum + 200; Num++) {
 | 
			
		||||
        var EndTime = Date.now();
 | 
			
		||||
        var Delta = EndTime - StartTime;
 | 
			
		||||
@@ -154,7 +154,7 @@ function DoTXProcess() {
 | 
			
		||||
        global.SERVER.BlockProcessTX(Block);
 | 
			
		||||
        if (Num % 100000 === 0)
 | 
			
		||||
            global.ToLog("CALC: " + Num);
 | 
			
		||||
        // CountTX++;
 | 
			
		||||
        CountTX++;
 | 
			
		||||
        if (global.bShowDetail)
 | 
			
		||||
            global.ToLog("    CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
 | 
			
		||||
        BlockTree.SaveValue(Block.BlockNum, { BlockNum: Block.BlockNum, SumHash: Block.SumHash });
 | 
			
		||||
@@ -331,8 +331,7 @@ function TXWriteAccHash() {
 | 
			
		||||
        var Item = global.DApps.Smart.DBSmart.Read(num);
 | 
			
		||||
        if (!Item)
 | 
			
		||||
            break;
 | 
			
		||||
        // var Body = 
 | 
			
		||||
        global.BufLib.GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, {});
 | 
			
		||||
        var Body = global.BufLib.GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, {});
 | 
			
		||||
        global.DApps.Smart.DBSmartWrite(Item);
 | 
			
		||||
    }
 | 
			
		||||
    global.DApps.Accounts.CalcMerkleTree(1);
 | 
			
		||||
 
 | 
			
		||||
@@ -447,9 +447,19 @@ function DoCommandNew(response, Type, Path, Params) {
 | 
			
		||||
HostingCaller.GetCurrentInfo = function(Params) {
 | 
			
		||||
    var MaxNumBlockDB = global.SERVER.GetMaxNumBlockDB();
 | 
			
		||||
    var Ret: any = {
 | 
			
		||||
        result: 1, VersionNum: global.UPDATE_CODE_VERSION_NUM, NETWORK: global.NETWORK, MaxNumBlockDB: MaxNumBlockDB, CurBlockNum: global.GetCurrentBlockNumByTime(),
 | 
			
		||||
        MaxAccID: global.DApps.Accounts.GetMaxAccount(), MaxDappsID: global.DApps.Smart.GetMaxNum(), CurTime: Date.now(), DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME,
 | 
			
		||||
        MIN_POWER_POW_TR: global.MIN_POWER_POW_TR, FIRST_TIME_BLOCK: global.FIRST_TIME_BLOCK, CONSENSUS_PERIOD_TIME: global.CONSENSUS_PERIOD_TIME, NEW_SIGN_TIME: global.NEW_SIGN_TIME,
 | 
			
		||||
        result: 1,
 | 
			
		||||
        VersionNum: global.UPDATE_CODE_VERSION_NUM,
 | 
			
		||||
        NETWORK: global.NETWORK,
 | 
			
		||||
        MaxNumBlockDB: MaxNumBlockDB,
 | 
			
		||||
        CurBlockNum: global.GetCurrentBlockNumByTime(),
 | 
			
		||||
        MaxAccID: global.DApps.Accounts.GetMaxAccount(),
 | 
			
		||||
        MaxDappsID: global.DApps.Smart.GetMaxNum(),
 | 
			
		||||
        CurTime: Date.now(),
 | 
			
		||||
        DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME,
 | 
			
		||||
        MIN_POWER_POW_TR: global.MIN_POWER_POW_TR,
 | 
			
		||||
        FIRST_TIME_BLOCK: global.FIRST_TIME_BLOCK,
 | 
			
		||||
        CONSENSUS_PERIOD_TIME: global.CONSENSUS_PERIOD_TIME,
 | 
			
		||||
        NEW_SIGN_TIME: global.NEW_SIGN_TIME,
 | 
			
		||||
        PRICE_DAO: global.PRICE_DAO(MaxNumBlockDB),
 | 
			
		||||
    };
 | 
			
		||||
    if (typeof Params === "object" && Params.Diagram == 1) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user