forked from circlecloud/tera
		
	@@ -26,7 +26,7 @@ WebApi2.CreateAccount = function(Params, response) {
 | 
			
		||||
        Body = Body.slice(0, Body.len + 12);
 | 
			
		||||
        SendTransaction(Body, TR as any, Params.Wait, function(result, text) {
 | 
			
		||||
            var Result = {
 | 
			
		||||
                result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
 | 
			
		||||
                result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
 | 
			
		||||
                Meta: Params.Meta,
 | 
			
		||||
            };
 | 
			
		||||
            var Str = JSON.stringify(Result);
 | 
			
		||||
@@ -42,10 +42,10 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    var Coin;
 | 
			
		||||
    if (typeof Params.Amount === "number")
 | 
			
		||||
        Coin = COIN_FROM_FLOAT(Params.Amount);
 | 
			
		||||
        Coin = global.COIN_FROM_FLOAT(Params.Amount);
 | 
			
		||||
    else
 | 
			
		||||
        Coin = Params.Amount;
 | 
			
		||||
    var FromNum = ParseNum(Params.FromID);
 | 
			
		||||
    var FromNum = global.ParseNum(Params.FromID);
 | 
			
		||||
    if (!Coin)
 | 
			
		||||
        return { result: 0, Meta: Params.Meta, text: "Params.Amount required" };
 | 
			
		||||
    if (!FromNum)
 | 
			
		||||
@@ -57,7 +57,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
 | 
			
		||||
    if (typeof Params.ToID === "string" && Params.ToID.length === 66)
 | 
			
		||||
        ToPubKeyArr = global.GetArrFromHex(Params.ToID);
 | 
			
		||||
    else
 | 
			
		||||
        ToID = ParseNum(Params.ToID);
 | 
			
		||||
        ToID = global.ParseNum(Params.ToID);
 | 
			
		||||
    var DataFrom = global.DApps.Accounts.ReadState(FromNum);
 | 
			
		||||
    if (!DataFrom)
 | 
			
		||||
        return { result: 0, Meta: Params.Meta, text: "Error read account: " + FromNum };
 | 
			
		||||
@@ -68,14 +68,14 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        OperationID = MapSendID[FromNum].OperationID;
 | 
			
		||||
        if ((new Date() - MapSendID[FromNum].Date) > 8 * 1000) {
 | 
			
		||||
        if (((new Date() as any) - MapSendID[FromNum].Date) > 8 * 1000) {
 | 
			
		||||
            OperationID += 20;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    OperationID++;
 | 
			
		||||
    MapSendID[FromNum].OperationID = OperationID;
 | 
			
		||||
    MapSendID[FromNum].Date = Date.now();
 | 
			
		||||
    var TR = {
 | 
			
		||||
    var TR: any = {
 | 
			
		||||
        Type: 111, Version: 3, Reserve: 0, FromID: FromNum, OperationID: OperationID, To: [{
 | 
			
		||||
            PubKey: ToPubKeyArr, ID: ToID, SumCOIN: Coin.SumCOIN,
 | 
			
		||||
            SumCENT: Coin.SumCENT
 | 
			
		||||
@@ -86,11 +86,11 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
 | 
			
		||||
    if (!Params.FromPrivKey)
 | 
			
		||||
        return { result: 0, Meta: Params.Meta, text: "Params.FromPrivKey required" };
 | 
			
		||||
    TR.Sign = global.DApps.Accounts.GetSignTransferTx(TR, global.GetArrFromHex(Params.FromPrivKey));
 | 
			
		||||
    var Body = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
 | 
			
		||||
    var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER3, global.MAX_TRANSACTION_SIZE, {}, 1);
 | 
			
		||||
    Body = Body.slice(0, Body.len + 12);
 | 
			
		||||
    SendTransaction(Body, TR, Params.Wait, function(result, text) {
 | 
			
		||||
        var Result = {
 | 
			
		||||
            result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
 | 
			
		||||
            result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
 | 
			
		||||
            Meta: Params.Meta,
 | 
			
		||||
        };
 | 
			
		||||
        var Str = JSON.stringify(Result);
 | 
			
		||||
@@ -100,7 +100,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
 | 
			
		||||
};
 | 
			
		||||
WebApi2.GetBalance = function(Params, response) {
 | 
			
		||||
    if (typeof Params === "object") {
 | 
			
		||||
        var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.AccountID), 1);
 | 
			
		||||
        var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.AccountID), 1);
 | 
			
		||||
        if (arr.length) {
 | 
			
		||||
            var Account = arr[0];
 | 
			
		||||
            var Value = Account.Value;
 | 
			
		||||
@@ -116,7 +116,7 @@ WebApi2.GetBalance = function(Params, response) {
 | 
			
		||||
WebApi2.GetTransaction = function(Params) {
 | 
			
		||||
    if (typeof Params === "object" && Params.TxID) {
 | 
			
		||||
        var Arr = global.GetArrFromHex(Params.TxID);
 | 
			
		||||
        var BlockNum = ReadUintFromArr(Arr, TR_TICKET_HASH_LENGTH);
 | 
			
		||||
        var BlockNum = global.ReadUintFromArr(Arr, global.TR_TICKET_HASH_LENGTH);
 | 
			
		||||
        var Block = global.SERVER.ReadBlockDB(BlockNum);
 | 
			
		||||
        if (Block && Block.arrContent) {
 | 
			
		||||
            for (var i = 0; i < Block.arrContent.length; i++) {
 | 
			
		||||
@@ -209,11 +209,11 @@ WebApi2.SendRawTransaction = function(Params, response) {
 | 
			
		||||
            return { result: 0, Meta: Params.Meta, text: "Params.Tx.Sign required" };
 | 
			
		||||
        var TR = Params.Tx;
 | 
			
		||||
        TxHexToArr(TR);
 | 
			
		||||
        var Body = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
 | 
			
		||||
        var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER3, global.MAX_TRANSACTION_SIZE, {}, 1);
 | 
			
		||||
        Body = Body.slice(0, Body.len + 12);
 | 
			
		||||
        SendTransaction(Body, TR, Params.Wait, function(result, text) {
 | 
			
		||||
            var Result = {
 | 
			
		||||
                result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
 | 
			
		||||
                result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
 | 
			
		||||
                Meta: Params.Meta,
 | 
			
		||||
            };
 | 
			
		||||
            var Str = JSON.stringify(Result);
 | 
			
		||||
@@ -252,9 +252,9 @@ function TxHexToArr(TR) {
 | 
			
		||||
var DELTA_FOR_TIME_TX = 1;
 | 
			
		||||
 | 
			
		||||
function GetTxID(BlockNum, Body) {
 | 
			
		||||
    var Nonce = ReadUintFromArr(Body, Body.length - 6);
 | 
			
		||||
    var Nonce = global.ReadUintFromArr(Body, Body.length - 6);
 | 
			
		||||
    var Arr2 = CreateTxID(Body, BlockNum, Nonce);
 | 
			
		||||
    return Arr2.slice(0, TR_TICKET_HASH_LENGTH + 6);
 | 
			
		||||
    return Arr2.slice(0, global.TR_TICKET_HASH_LENGTH + 6);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function CreateTxID(body, BlockNum, Nonce) {
 | 
			
		||||
@@ -262,14 +262,14 @@ function CreateTxID(body, BlockNum, Nonce) {
 | 
			
		||||
    body.writeUIntLE(Nonce, body.length - 6, 6);
 | 
			
		||||
    var HASH = global.sha3(body);
 | 
			
		||||
    var FullHashTicket = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
 | 
			
		||||
    for (var i = 0; i < TR_TICKET_HASH_LENGTH; i++)
 | 
			
		||||
    for (var i = 0; i < global.TR_TICKET_HASH_LENGTH; i++)
 | 
			
		||||
        FullHashTicket[i] = HASH[i];
 | 
			
		||||
    WriteUintToArrOnPos(FullHashTicket, BlockNum, TR_TICKET_HASH_LENGTH);
 | 
			
		||||
    global.WriteUintToArrOnPos(FullHashTicket, BlockNum, global.TR_TICKET_HASH_LENGTH);
 | 
			
		||||
    return FullHashTicket;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function GetBlockNumTr(arr) {
 | 
			
		||||
    var BlockNum = DELTA_FOR_TIME_TX + GetCurrentBlockNumByTime();
 | 
			
		||||
    var BlockNum = DELTA_FOR_TIME_TX + global.GetCurrentBlockNumByTime();
 | 
			
		||||
    if (arr[0] === global.TYPE_TRANSACTION_CREATE) {
 | 
			
		||||
        var BlockNum2 = Math.floor(BlockNum / 10) * 10;
 | 
			
		||||
        if (BlockNum2 < BlockNum)
 | 
			
		||||
@@ -282,12 +282,12 @@ function GetBlockNumTr(arr) {
 | 
			
		||||
function CreateHashBodyPOWInnerMinPower(TR, arr, MinPow, startnonce) {
 | 
			
		||||
    var BlockNum = GetBlockNumTr(arr);
 | 
			
		||||
    if (MinPow === undefined) {
 | 
			
		||||
        MinPow = MIN_POWER_POW_TR + Math.log2(arr.length / 128);
 | 
			
		||||
        MinPow = global.MIN_POWER_POW_TR + Math.log2(arr.length / 128);
 | 
			
		||||
    }
 | 
			
		||||
    var nonce = startnonce;
 | 
			
		||||
    while (1) {
 | 
			
		||||
        var TxID = CreateTxID(arr, BlockNum, nonce);
 | 
			
		||||
        var power = GetPowPower(sha3(TxID));
 | 
			
		||||
        var power = global.GetPowPower(global.sha3(TxID));
 | 
			
		||||
        if (power >= MinPow) {
 | 
			
		||||
            TR._TxID = TxID;
 | 
			
		||||
            TR._BlockNum = BlockNum;
 | 
			
		||||
@@ -349,7 +349,7 @@ function SendTransaction(Body, TR, Wait, F) {
 | 
			
		||||
function GetTransactionFromBody(Params, Block, TrNum, Body) {
 | 
			
		||||
    var TR = global.DApps.Accounts.GetObjectTransaction(Body);
 | 
			
		||||
    if (TR) {
 | 
			
		||||
        ConvertBufferToStr(TR);
 | 
			
		||||
        global.ConvertBufferToStr(TR);
 | 
			
		||||
        TR.result = 1;
 | 
			
		||||
        TR.Meta = Params.Meta;
 | 
			
		||||
        if (Block.VersionBody === 1 && Block.arrContentResult) {
 | 
			
		||||
 
 | 
			
		||||
@@ -14,16 +14,9 @@ const fs = require('fs');
 | 
			
		||||
const os = require('os');
 | 
			
		||||
import * as crypto from 'crypto';
 | 
			
		||||
 | 
			
		||||
let {
 | 
			
		||||
    GetNormalPathString,
 | 
			
		||||
    sha3,
 | 
			
		||||
    AddTrMap,
 | 
			
		||||
    ADD_HASH_RATE
 | 
			
		||||
} = global
 | 
			
		||||
 | 
			
		||||
global.START_SERVER = 1;
 | 
			
		||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
 | 
			
		||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
 | 
			
		||||
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
 | 
			
		||||
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
 | 
			
		||||
console.log("DATA DIR: " + global.DATA_PATH);
 | 
			
		||||
console.log("PROGRAM DIR: " + global.CODE_PATH);
 | 
			
		||||
require("../core/library");
 | 
			
		||||
@@ -31,7 +24,7 @@ global.ToLog(os.platform() + " (" + os.arch() + ") " + os.release());
 | 
			
		||||
var VerArr = process.versions.node.split('.');
 | 
			
		||||
global.ToLog("nodejs: " + process.versions.node);
 | 
			
		||||
if ((VerArr[0] as any as number) < 8) {
 | 
			
		||||
    global.global.ToError("Error version of NodeJS=" + VerArr[0] + "  Pls, download new version from www.nodejs.org and update it. The minimum version must be 8");
 | 
			
		||||
    global.ToError("Error version of NodeJS=" + VerArr[0] + "  Pls, download new version from www.nodejs.org and update it. The minimum version must be 8");
 | 
			
		||||
    process.exit();
 | 
			
		||||
}
 | 
			
		||||
var CServer = require("../core/server");
 | 
			
		||||
@@ -62,7 +55,7 @@ process.on('uncaughtException' as any, function(err: TeraError) {
 | 
			
		||||
    if (global.PROCESS_NAME !== "MAIN") {
 | 
			
		||||
        process.send({ cmd: "log", message: err });
 | 
			
		||||
    }
 | 
			
		||||
    global.global.ToError(err.stack);
 | 
			
		||||
    global.ToError(err.stack);
 | 
			
		||||
    global.ToLog(err.stack);
 | 
			
		||||
    if (err.code === "ENOTFOUND" || err.code === "ECONNRESET" || err.code === "EPIPE") {
 | 
			
		||||
    }
 | 
			
		||||
@@ -73,7 +66,7 @@ process.on('uncaughtException' as any, function(err: TeraError) {
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
process.on('error' as any, function(err: TeraError) {
 | 
			
		||||
    global.global.ToError(err.stack);
 | 
			
		||||
    global.ToError(err.stack);
 | 
			
		||||
    global.ToLog(err.stack);
 | 
			
		||||
});
 | 
			
		||||
var ArrChildProcess = [];
 | 
			
		||||
@@ -134,15 +127,15 @@ function OnMessageWeb(msg) {
 | 
			
		||||
function AddTransactionFromWeb(Params) {
 | 
			
		||||
    var body = global.GetArrFromHex(Params.HexValue);
 | 
			
		||||
    if (global.TX_PROCESS && global.TX_PROCESS.Worker) {
 | 
			
		||||
        var StrHex = global.GetHexFromArr(sha3(body));
 | 
			
		||||
        var StrHex = global.GetHexFromArr(global.sha3(body));
 | 
			
		||||
        global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex, Web: 1, WebID: Params.WebID });
 | 
			
		||||
    }
 | 
			
		||||
    var Res = global.SERVER.AddTransaction({ body: body }, 1);
 | 
			
		||||
    var text = AddTrMap[Res];
 | 
			
		||||
    var text = global.AddTrMap[Res];
 | 
			
		||||
    var final = false;
 | 
			
		||||
    if (Res <= 0 && Res !== - 3)
 | 
			
		||||
        final = true;
 | 
			
		||||
    global.ToLogClient("Send: " + text, global.GetHexFromArr(sha3(body)), final);
 | 
			
		||||
    global.ToLogClient("Send: " + text, global.GetHexFromArr(global.sha3(body)), final);
 | 
			
		||||
    return text;
 | 
			
		||||
};
 | 
			
		||||
global.AddTransactionFromWeb = AddTransactionFromWeb;
 | 
			
		||||
@@ -311,7 +304,7 @@ function StartChildProcess(Item) {
 | 
			
		||||
                ITEM.Worker.on('error', function(err) {
 | 
			
		||||
                });
 | 
			
		||||
                ITEM.Worker.on('close', function(code) {
 | 
			
		||||
                    global.global.ToError("CLOSE " + ITEM.Name);
 | 
			
		||||
                    global.ToError("CLOSE " + ITEM.Name);
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -454,7 +447,7 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
        return;
 | 
			
		||||
    if (GENERATE_BLOCK_ACCOUNT < 8)
 | 
			
		||||
        return;
 | 
			
		||||
    var PathMiner = GetCodePath("../miner.js");
 | 
			
		||||
    var PathMiner = global.GetCodePath("../miner.js");
 | 
			
		||||
    if (!fs.existsSync(PathMiner))
 | 
			
		||||
        PathMiner = "./process/pow-process.js";
 | 
			
		||||
    if (ArrMiningWrk.length >= GetCountMiningCPU())
 | 
			
		||||
@@ -494,13 +487,13 @@ function RunStopPOWProcess(Mode) {
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                        if (msg.cmd === "HASHRATE") {
 | 
			
		||||
                            ADD_HASH_RATE(msg.CountNonce);
 | 
			
		||||
                            global.ADD_HASH_RATE(msg.CountNonce);
 | 
			
		||||
                        }
 | 
			
		||||
        });
 | 
			
		||||
        Worker.on('error', function(err) {
 | 
			
		||||
            if (!ArrMiningWrk.length)
 | 
			
		||||
                return;
 | 
			
		||||
            global.global.ToError('ERROR IN PROCESS: ' + err);
 | 
			
		||||
            global.ToError('ERROR IN PROCESS: ' + err);
 | 
			
		||||
        });
 | 
			
		||||
        Worker.on('close', function(code) {
 | 
			
		||||
            global.ToLog("STOP PROCESS: " + Worker.Num + " pid:" + Worker.pid);
 | 
			
		||||
@@ -533,9 +526,7 @@ function SetCalcPOW(Block, cmd) {
 | 
			
		||||
};
 | 
			
		||||
global.SetCalcPOW = SetCalcPOW;
 | 
			
		||||
global.RunStopPOWProcess = RunStopPOWProcess;
 | 
			
		||||
let {
 | 
			
		||||
    glCurNumFindArr
 | 
			
		||||
} = global
 | 
			
		||||
 | 
			
		||||
function DoGetNodes() {
 | 
			
		||||
    if (!SERVER)
 | 
			
		||||
        return;
 | 
			
		||||
@@ -543,11 +534,11 @@ function DoGetNodes() {
 | 
			
		||||
        return;
 | 
			
		||||
    if (!SERVER.NodesArrUnSort || !SERVER.NodesArrUnSort.length)
 | 
			
		||||
        return;
 | 
			
		||||
    var Num = glCurNumFindArr % global.SERVER.NodesArrUnSort.length;
 | 
			
		||||
    var Num = global.glCurNumFindArr % global.SERVER.NodesArrUnSort.length;
 | 
			
		||||
    var Node = global.SERVER.NodesArrUnSort[Num];
 | 
			
		||||
    if (Num === 0)
 | 
			
		||||
        glCurNumFindArr = 0;
 | 
			
		||||
    glCurNumFindArr++;
 | 
			
		||||
        global.glCurNumFindArr = 0;
 | 
			
		||||
    global.glCurNumFindArr++;
 | 
			
		||||
    if (Node.Delete)
 | 
			
		||||
        return;
 | 
			
		||||
    if (SERVER.NodeInBan(Node))
 | 
			
		||||
@@ -565,7 +556,7 @@ function DoConnectToNodes(Arr, Mode) {
 | 
			
		||||
    if (!GrayConnect() && global.SERVER.CanSend < 2) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    if (GrayConnect() && global.SERVER.ActualNodes.size > GetGrayServerConnections())
 | 
			
		||||
    if (GrayConnect() && global.SERVER.ActualNodes.size > global.GetGrayServerConnections())
 | 
			
		||||
        return;
 | 
			
		||||
    if (Arr.length) {
 | 
			
		||||
        var MinProcessCount = global.SERVER.BusyLevel - 1;
 | 
			
		||||
@@ -592,16 +583,14 @@ var idRunOnce;
 | 
			
		||||
function RunServer() {
 | 
			
		||||
    let {
 | 
			
		||||
        GetNetworkName,
 | 
			
		||||
        DEF_VERSION,
 | 
			
		||||
        NET_WORK_MODE,
 | 
			
		||||
        SAVE_CONST,
 | 
			
		||||
        ToLog,
 | 
			
		||||
        START_IP,
 | 
			
		||||
        START_PORT_NUMBER
 | 
			
		||||
    } = global
 | 
			
		||||
    idRunOnce = setInterval(RunOnce, 1000);
 | 
			
		||||
    global.ToLog("NETWORK: " + GetNetworkName());
 | 
			
		||||
    global.ToLog("VERSION: " + DEF_VERSION);
 | 
			
		||||
    global.ToLog("VERSION: " + global.DEF_VERSION);
 | 
			
		||||
    if (global.NET_WORK_MODE) {
 | 
			
		||||
        global.START_IP = NET_WORK_MODE.ip;
 | 
			
		||||
        global.START_PORT_NUMBER = NET_WORK_MODE.port;
 | 
			
		||||
@@ -666,7 +655,7 @@ function RunOnce() {
 | 
			
		||||
            var Period = (global.random(600) + global.RESTART_PERIOD_SEC);
 | 
			
		||||
            global.ToLog("SET RESTART NODE AFTER: " + Period + " sec");
 | 
			
		||||
            setInterval(function() {
 | 
			
		||||
                RestartNode();
 | 
			
		||||
                global.RestartNode();
 | 
			
		||||
            }, Period * 1000);
 | 
			
		||||
        }
 | 
			
		||||
        setTimeout(function() {
 | 
			
		||||
@@ -713,7 +702,7 @@ function TestSignLib(MaxTime) {
 | 
			
		||||
    for (var Num = 0; Num < 1000; Num++) {
 | 
			
		||||
        var Result = global.secp256k1.verify(hash, Sign, PubKey);
 | 
			
		||||
        if (!Result) {
 | 
			
		||||
            global.global.ToError("Error test sign");
 | 
			
		||||
            global.ToError("Error test sign");
 | 
			
		||||
            process.exit(0);
 | 
			
		||||
        }
 | 
			
		||||
        var Time = process.hrtime(startTime);
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ function CalcPOWHash() {
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        catch (e) {
 | 
			
		||||
            global.global.ToError(e);
 | 
			
		||||
            global.ToError(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
@@ -52,7 +52,7 @@ PROCESS.on("message", function(e) {
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        catch (e) {
 | 
			
		||||
            global.global.ToError(e);
 | 
			
		||||
            global.ToError(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
@@ -80,12 +80,12 @@ function PumpHash() {
 | 
			
		||||
    if (global.BlockPump) {
 | 
			
		||||
        var e = Date.now();
 | 
			
		||||
        if (EndTime < StartTime) {
 | 
			
		||||
            if (100 * (e - StartTime) / CONSENSUS_PERIOD_TIME >= BlockPump.Percent)
 | 
			
		||||
            if (100 * (e - StartTime) / global.CONSENSUS_PERIOD_TIME >= global.BlockPump.Percent)
 | 
			
		||||
                return void (EndTime = e);
 | 
			
		||||
            CreatePOWVersionX(BlockPump, 1);
 | 
			
		||||
            global.CreatePOWVersionX(global.BlockPump, 1);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            100 * (e - EndTime) / CONSENSUS_PERIOD_TIME > 100 - BlockPump.Percent && (StartTime = e);
 | 
			
		||||
            100 * (e - EndTime) / global.CONSENSUS_PERIOD_TIME > 100 - global.BlockPump.Percent && (StartTime = e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -10,15 +10,15 @@
 | 
			
		||||
 | 
			
		||||
global.PROCESS_NAME = "STATIC";
 | 
			
		||||
import * as crypto from 'crypto';
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
require("../core/constant");
 | 
			
		||||
require('../core/block-loader-const');
 | 
			
		||||
require('../core/rest_tables.js');
 | 
			
		||||
require('../system/accounts.js');
 | 
			
		||||
require('../system/smart.js');
 | 
			
		||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
 | 
			
		||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
 | 
			
		||||
require("../core/library");
 | 
			
		||||
import * as fs from 'fs'
 | 
			
		||||
import "../core/constant"
 | 
			
		||||
import '../core/block-loader-const'
 | 
			
		||||
import '../core/rest_tables'
 | 
			
		||||
import '../system/accounts'
 | 
			
		||||
import '../system/smart'
 | 
			
		||||
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
 | 
			
		||||
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
 | 
			
		||||
import "../core/library"
 | 
			
		||||
global.READ_ONLY_DB = 1;
 | 
			
		||||
var LastAlive = Date.now();
 | 
			
		||||
setTimeout(function() {
 | 
			
		||||
@@ -74,7 +74,7 @@ function CheckAlive() {
 | 
			
		||||
    if (global.NOALIVE)
 | 
			
		||||
        return;
 | 
			
		||||
    var Delta = Date.now() - LastAlive;
 | 
			
		||||
    if (Delta > CHECK_STOP_CHILD_PROCESS) {
 | 
			
		||||
    if (Delta > global.CHECK_STOP_CHILD_PROCESS) {
 | 
			
		||||
        global.ToLog("STATIC-DB: ALIVE TIMEOUT Stop and exit: " + Delta + "/" + global.CHECK_STOP_CHILD_PROCESS);
 | 
			
		||||
        process.exit(0);
 | 
			
		||||
        return;
 | 
			
		||||
@@ -83,11 +83,11 @@ function CheckAlive() {
 | 
			
		||||
process.on('uncaughtException', function(err) {
 | 
			
		||||
    global.ToError(err.stack);
 | 
			
		||||
    global.ToLog(err.stack);
 | 
			
		||||
    TO_ERROR_LOG("STATIC-DB", 777, err);
 | 
			
		||||
    global.TO_ERROR_LOG("STATIC-DB", 777, err);
 | 
			
		||||
    global.ToLog("-----------------STATIC-DB EXIT------------------");
 | 
			
		||||
    process.exit();
 | 
			
		||||
});
 | 
			
		||||
process.on('error', function(err) {
 | 
			
		||||
process.on('error' as any, function(err: TeraError) {
 | 
			
		||||
    global.ToError("STATIC-DB:\n" + err.stack);
 | 
			
		||||
    global.ToLog(err.stack);
 | 
			
		||||
});
 | 
			
		||||
@@ -98,7 +98,7 @@ KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 7
 | 
			
		||||
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
 | 
			
		||||
global.HTTP_PORT_NUMBER = 0;
 | 
			
		||||
setInterval(function() {
 | 
			
		||||
    if (SERVER)
 | 
			
		||||
    if (global.SERVER)
 | 
			
		||||
        global.SERVER.Close();
 | 
			
		||||
    global.DApps.Accounts.Close();
 | 
			
		||||
    global.DApps.Smart.DBSmart.Close();
 | 
			
		||||
@@ -116,8 +116,8 @@ function GETBLOCKHEADER100(msg) {
 | 
			
		||||
    var Count = Data.Count;
 | 
			
		||||
    if (!Count || Count < 0 || !EndNum100)
 | 
			
		||||
        return;
 | 
			
		||||
    if (Count > COUNT_BLOCKS_FOR_LOAD)
 | 
			
		||||
        Count = COUNT_BLOCKS_FOR_LOAD;
 | 
			
		||||
    if (Count > global.COUNT_BLOCKS_FOR_LOAD)
 | 
			
		||||
        Count = global.COUNT_BLOCKS_FOR_LOAD;
 | 
			
		||||
    var Arr = [];
 | 
			
		||||
    var Data100 = global.SERVER.DBHeader100.Read(EndNum100);
 | 
			
		||||
    if (Data100 && global.CompareArr(Data100.Hash100, LoadHash100) === 0) {
 | 
			
		||||
@@ -131,7 +131,7 @@ function GETBLOCKHEADER100(msg) {
 | 
			
		||||
            Arr.push(Data100.Hash);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    var BufWrite = global.BufLib.GetBufferFromObject(Arr, "[hash]", MAX_PACKET_LENGTH, {});
 | 
			
		||||
    var BufWrite = global.BufLib.GetBufferFromObject(Arr, "[hash]", global.MAX_PACKET_LENGTH, {});
 | 
			
		||||
    global.ToLog("GETBLOCKHEADER100 Send Arr=" + Arr.length + " - " + BlockNum);
 | 
			
		||||
    process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETBLOCKHEADER100", Context: msg.Context, Data: BufWrite });
 | 
			
		||||
};
 | 
			
		||||
@@ -144,11 +144,11 @@ function GETBLOCKHEADER(msg) {
 | 
			
		||||
    var Foward = Data.Foward;
 | 
			
		||||
    if (Foward) {
 | 
			
		||||
        var BlockDB = global.SERVER.ReadBlockHeaderDB(Data.BlockNum);
 | 
			
		||||
        if (BlockDB && BlockDB.SumHash && (global.CompareArr(BlockDB.SumHash, LoadHash) === 0 || IsZeroArr(LoadHash))) {
 | 
			
		||||
        if (BlockDB && BlockDB.SumHash && (global.CompareArr(BlockDB.SumHash, LoadHash) === 0 || global.IsZeroArr(LoadHash))) {
 | 
			
		||||
            StartNum = Data.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
 | 
			
		||||
            if (StartNum < 0)
 | 
			
		||||
                StartNum = 0;
 | 
			
		||||
            BlockNum = StartNum + COUNT_BLOCKS_FOR_LOAD + global.BLOCK_PROCESSING_LENGTH2;
 | 
			
		||||
            BlockNum = StartNum + global.COUNT_BLOCKS_FOR_LOAD + global.BLOCK_PROCESSING_LENGTH2;
 | 
			
		||||
            if (BlockNum > global.SERVER.GetMaxNumBlockDB())
 | 
			
		||||
                BlockNum = global.SERVER.GetMaxNumBlockDB();
 | 
			
		||||
        }
 | 
			
		||||
@@ -159,8 +159,8 @@ function GETBLOCKHEADER(msg) {
 | 
			
		||||
        var Count = Data.Count;
 | 
			
		||||
        if (!Count || Count < 0 || BlockNum < 0)
 | 
			
		||||
            return;
 | 
			
		||||
        if (Count > COUNT_BLOCKS_FOR_LOAD)
 | 
			
		||||
            Count = COUNT_BLOCKS_FOR_LOAD;
 | 
			
		||||
        if (Count > global.COUNT_BLOCKS_FOR_LOAD)
 | 
			
		||||
            Count = global.COUNT_BLOCKS_FOR_LOAD;
 | 
			
		||||
        Count += global.BLOCK_PROCESSING_LENGTH2;
 | 
			
		||||
        var BlockDB = global.SERVER.ReadBlockHeaderDB(BlockNum);
 | 
			
		||||
        if (BlockDB && (BlockDB.Prepared && (!IsSum) && BlockDB.Hash && global.CompareArr(BlockDB.Hash, LoadHash) === 0 || BlockDB.bSave && IsSum && BlockDB.SumHash && global.CompareArr(BlockDB.SumHash,
 | 
			
		||||
@@ -184,8 +184,8 @@ function GETBLOCK(msg) {
 | 
			
		||||
    var BufWrite;
 | 
			
		||||
    var BlockDB = global.SERVER.ReadBlockDB(BlockNum);
 | 
			
		||||
    var StrSend;
 | 
			
		||||
    if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || IsZeroArr(TreeHash))) {
 | 
			
		||||
        var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, FORMAT_BLOCK_TRANSFER, MAX_PACKET_LENGTH, WRK_BLOCK_TRANSFER);
 | 
			
		||||
    if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || global.IsZeroArr(TreeHash))) {
 | 
			
		||||
        var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, global.FORMAT_BLOCK_TRANSFER, global.MAX_PACKET_LENGTH, global.WRK_BLOCK_TRANSFER);
 | 
			
		||||
        StrSend = "OK";
 | 
			
		||||
    }
 | 
			
		||||
    if (StrSend === "OK") {
 | 
			
		||||
@@ -211,7 +211,7 @@ function GETREST(msg) {
 | 
			
		||||
    var Data = msg.Data;
 | 
			
		||||
    if (!Data.BlockNum)
 | 
			
		||||
        return;
 | 
			
		||||
    if (IsZeroArr(Data.AccHash)) {
 | 
			
		||||
    if (global.IsZeroArr(Data.AccHash)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    var BlockNumRest = Data.BlockNum;
 | 
			
		||||
@@ -234,8 +234,8 @@ function GETREST(msg) {
 | 
			
		||||
        var WorkFormatLength = global.DApps.Accounts.SIZE_ACCOUNT_ROW;
 | 
			
		||||
        var Max = global.DApps.Accounts.DBState.GetMaxNum();
 | 
			
		||||
        var LengthAccount = Data.Count;
 | 
			
		||||
        if (LengthAccount > MAX_ACCOUNTS_TRANSFER)
 | 
			
		||||
            LengthAccount = MAX_ACCOUNTS_TRANSFER;
 | 
			
		||||
        if (LengthAccount > global.MAX_ACCOUNTS_TRANSFER)
 | 
			
		||||
            LengthAccount = global.MAX_ACCOUNTS_TRANSFER;
 | 
			
		||||
        var StartAccount = Data.AccNum;
 | 
			
		||||
        var EndAccount = StartAccount + LengthAccount - 1;
 | 
			
		||||
        if (EndAccount > Max)
 | 
			
		||||
@@ -249,7 +249,7 @@ function GETREST(msg) {
 | 
			
		||||
        else {
 | 
			
		||||
            ArrRest = GetArrRest(BlockNumRest, StartAccount, EndAccount);
 | 
			
		||||
            ProofHash = Tree.Root;
 | 
			
		||||
            var RetProof = GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
 | 
			
		||||
            var RetProof = global.GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
 | 
			
		||||
            ProofArrL = RetProof.ArrL;
 | 
			
		||||
            ProofArrR = RetProof.ArrR;
 | 
			
		||||
            BufLength = 1000 + ArrRest.length * WorkFormatLength;
 | 
			
		||||
@@ -257,7 +257,7 @@ function GETREST(msg) {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    var Data2 = { Result: nResult, Arr: ArrRest, Version: 1, ProofHash: ProofHash, ProofArrL: ProofArrL, ProofArrR: ProofArrR };
 | 
			
		||||
    var BufWrite = global.BufLib.GetBufferFromObject(Data2, FORMAT_REST_TRANSFER, BufLength, {});
 | 
			
		||||
    var BufWrite = global.BufLib.GetBufferFromObject(Data2, global.FORMAT_REST_TRANSFER, BufLength, {});
 | 
			
		||||
    process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETREST", Context: msg.Context, Data: BufWrite });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -279,12 +279,12 @@ function GETSMART(msg) {
 | 
			
		||||
        Arr.push(BufSmart);
 | 
			
		||||
    }
 | 
			
		||||
    var Data2 = { Result: Arr.length ? 1 : 0, Arr: Arr };
 | 
			
		||||
    var BufWrite = global.BufLib.GetBufferFromObject(Data2, FORMAT_SMART_TRANSFER, BufLength, {});
 | 
			
		||||
    var BufWrite = global.BufLib.GetBufferFromObject(Data2, global.FORMAT_SMART_TRANSFER, BufLength, {});
 | 
			
		||||
    process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETSMART", Context: msg.Context, Data: BufWrite });
 | 
			
		||||
};
 | 
			
		||||
var glMapForHash = {};
 | 
			
		||||
 | 
			
		||||
function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly) {
 | 
			
		||||
function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly?) {
 | 
			
		||||
    var ArrRest = [];
 | 
			
		||||
    var WorkStruct = {};
 | 
			
		||||
    var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW;
 | 
			
		||||
@@ -352,7 +352,7 @@ function GetRestMerkleTree(BlockNumRest, RestIndexArr) {
 | 
			
		||||
        for (var Num = 0; Num < ArrHash.length; Num++) {
 | 
			
		||||
            MerkleCalc[Num] = 1;
 | 
			
		||||
        }
 | 
			
		||||
        UpdateMerklTree(MerkleTree, MerkleCalc, 0);
 | 
			
		||||
        global.UpdateMerklTree(MerkleTree, MerkleCalc, 0);
 | 
			
		||||
        glMapRest[BlockNumRest] = MerkleTree;
 | 
			
		||||
        var Time2 = process.hrtime(startTime);
 | 
			
		||||
        var deltaTime1 = (Time1[0] * 1000 + Time1[1] / 1e6) / 1000;
 | 
			
		||||
 
 | 
			
		||||
@@ -12,15 +12,15 @@ global.PROCESS_NAME = "TX";
 | 
			
		||||
import * as crypto from 'crypto';
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
require("../core/constant");
 | 
			
		||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
 | 
			
		||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
 | 
			
		||||
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
 | 
			
		||||
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
 | 
			
		||||
require("../core/library");
 | 
			
		||||
global.READ_ONLY_DB = 0;
 | 
			
		||||
var LastAlive = Date.now();
 | 
			
		||||
setTimeout(function() {
 | 
			
		||||
    setInterval(CheckAlive, 1000);
 | 
			
		||||
}, 20000);
 | 
			
		||||
setInterval(PrepareStatEverySecond, 1000);
 | 
			
		||||
setInterval(global.PrepareStatEverySecond, 1000);
 | 
			
		||||
if (process.send) {
 | 
			
		||||
    setInterval(function() {
 | 
			
		||||
        process.send({ cmd: "Alive" });
 | 
			
		||||
@@ -58,7 +58,7 @@ process.on('message', function(msg) {
 | 
			
		||||
            global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
 | 
			
		||||
            break;
 | 
			
		||||
        case "Eval":
 | 
			
		||||
            EvalCode(msg.Code);
 | 
			
		||||
            global.EvalCode(msg.Code);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
@@ -82,11 +82,11 @@ function CheckAlive() {
 | 
			
		||||
process.on('uncaughtException', function(err) {
 | 
			
		||||
    global.ToError(err.stack);
 | 
			
		||||
    global.ToLog(err.stack);
 | 
			
		||||
    TO_ERROR_LOG("TX-PROCESS", 777, err);
 | 
			
		||||
    global.TO_ERROR_LOG("TX-PROCESS", 777, err);
 | 
			
		||||
    global.ToLog("-----------------TX-PROCESS EXIT------------------");
 | 
			
		||||
    process.exit();
 | 
			
		||||
});
 | 
			
		||||
process.on('error', function(err) {
 | 
			
		||||
process.on('error' as any, function(err: TeraError) {
 | 
			
		||||
    global.ToError("TX-PROCESS:\n" + err.stack);
 | 
			
		||||
    global.ToLog(err.stack);
 | 
			
		||||
});
 | 
			
		||||
@@ -96,14 +96,14 @@ var KeyPair = crypto.createECDH('secp256k1');
 | 
			
		||||
KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
 | 
			
		||||
    77, 77, 77, 77, 77, 77, 77, 77, 77, 77]));
 | 
			
		||||
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
 | 
			
		||||
global.TreeFindTX = new STreeBuffer(30 * 1000, CompareItemHashSimple, "string");
 | 
			
		||||
global.TreeFindTX = new STreeBuffer(30 * 1000, global.CompareItemHashSimple, "string");
 | 
			
		||||
setInterval(function() {
 | 
			
		||||
    if (SERVER) {
 | 
			
		||||
    if (global.SERVER) {
 | 
			
		||||
        global.SERVER.Close();
 | 
			
		||||
    }
 | 
			
		||||
    DoTXProcess();
 | 
			
		||||
}, 10);
 | 
			
		||||
var BlockTree = new STreeBuffer(30 * 1000, CompareItemHashSimple, "number");
 | 
			
		||||
var BlockTree = new STreeBuffer(30 * 1000, global.CompareItemHashSimple, "number");
 | 
			
		||||
global.bShowDetail = 0;
 | 
			
		||||
var StopTxProcess = 0;
 | 
			
		||||
var MinimalValidBlock = 0;
 | 
			
		||||
@@ -116,12 +116,12 @@ function DoTXProcess() {
 | 
			
		||||
        InitTXProcess();
 | 
			
		||||
    var BlockMin = FindMinimal();
 | 
			
		||||
    if (!BlockMin) {
 | 
			
		||||
        if (bShowDetail)
 | 
			
		||||
        if (global.bShowDetail)
 | 
			
		||||
            global.ToLog("!BlockMin");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    var StartTime = Date.now();
 | 
			
		||||
    if (bShowDetail)
 | 
			
		||||
    if (global.bShowDetail)
 | 
			
		||||
        global.ToLog("BlockMin: " + BlockMin.BlockNum + "  LastBlockNum=" + LastBlockNum);
 | 
			
		||||
    var CountTX = 0;
 | 
			
		||||
    for (var Num = BlockMin.BlockNum; Num < BlockMin.BlockNum + 200; Num++) {
 | 
			
		||||
@@ -131,7 +131,7 @@ function DoTXProcess() {
 | 
			
		||||
            break;
 | 
			
		||||
        var Block = global.SERVER.ReadBlockDB(Num);
 | 
			
		||||
        if (!Block) {
 | 
			
		||||
            if (bShowDetail)
 | 
			
		||||
            if (global.bShowDetail)
 | 
			
		||||
                global.ToLog("!Block");
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@@ -140,7 +140,7 @@ function DoTXProcess() {
 | 
			
		||||
        }
 | 
			
		||||
        var Item = BlockTree.LoadValue(Block.BlockNum, 1);
 | 
			
		||||
        if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0) {
 | 
			
		||||
            if (bShowDetail)
 | 
			
		||||
            if (global.bShowDetail)
 | 
			
		||||
                global.ToLog("WAS CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
@@ -157,7 +157,7 @@ function DoTXProcess() {
 | 
			
		||||
        if (Num % 100000 === 0)
 | 
			
		||||
            global.ToLog("CALC: " + Num);
 | 
			
		||||
        CountTX++;
 | 
			
		||||
        if (bShowDetail)
 | 
			
		||||
        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 });
 | 
			
		||||
        LastBlockNum = Block.BlockNum;
 | 
			
		||||
@@ -167,14 +167,14 @@ function DoTXProcess() {
 | 
			
		||||
function FindMinimal() {
 | 
			
		||||
    var MaxNumBlockDB = global.SERVER.GetMaxNumBlockDB();
 | 
			
		||||
    if (MaxNumBlockDB && MaxNumBlockDB < LastBlockNum) {
 | 
			
		||||
        if (bShowDetail)
 | 
			
		||||
        if (global.bShowDetail)
 | 
			
		||||
            global.ToLog("MaxNumBlockDB<LastBlockNum: " + MaxNumBlockDB + "<" + LastBlockNum);
 | 
			
		||||
        LastBlockNum = MaxNumBlockDB - 1;
 | 
			
		||||
        BlockTree.Clear();
 | 
			
		||||
    }
 | 
			
		||||
    if (LastBlockNum < MinimalValidBlock)
 | 
			
		||||
        LastBlockNum = MinimalValidBlock;
 | 
			
		||||
    if (bShowDetail)
 | 
			
		||||
    if (global.bShowDetail)
 | 
			
		||||
        global.ToLog("FindMinimal from LastBlockNum=" + LastBlockNum);
 | 
			
		||||
    for (var Num = LastBlockNum; Num--; Num >= 0) {
 | 
			
		||||
        if (Num < MinimalValidBlock)
 | 
			
		||||
@@ -186,7 +186,7 @@ function FindMinimal() {
 | 
			
		||||
        if (!IsValidSumHash(Block)) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (Block.BlockNum % PERIOD_ACCOUNT_HASH === 0) {
 | 
			
		||||
        if (Block.BlockNum % global.PERIOD_ACCOUNT_HASH === 0) {
 | 
			
		||||
            var Item = global.DApps.Accounts.GetAccountHashItem(Block.BlockNum);
 | 
			
		||||
            if (Item) {
 | 
			
		||||
                BlockTree.SaveValue(Block.BlockNum, Item);
 | 
			
		||||
@@ -195,10 +195,10 @@ function FindMinimal() {
 | 
			
		||||
        var Item = BlockTree.LoadValue(Block.BlockNum, 1);
 | 
			
		||||
        if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0)
 | 
			
		||||
            return Block;
 | 
			
		||||
        if (bShowDetail)
 | 
			
		||||
        if (global.bShowDetail)
 | 
			
		||||
            global.ToLog("" + Num + "  " + Block.BlockNum + ". Item=" + JSON.stringify(Item) + "  MinimalValidBlock=" + MinimalValidBlock);
 | 
			
		||||
    }
 | 
			
		||||
    if (bShowDetail)
 | 
			
		||||
    if (global.bShowDetail)
 | 
			
		||||
        global.ToLog("MinimalValidBlock:" + MinimalValidBlock);
 | 
			
		||||
    if (MinimalValidBlock === 0 && LastBlockNum > 0) {
 | 
			
		||||
        RewriteAllTransactions();
 | 
			
		||||
@@ -212,12 +212,12 @@ function IsValidSumHash(Block) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    if (Block.BlockNum < 16)
 | 
			
		||||
        return 1;
 | 
			
		||||
    if (IsZeroArr(Block.SumHash))
 | 
			
		||||
    if (global.IsZeroArr(Block.SumHash))
 | 
			
		||||
        return 0;
 | 
			
		||||
    var PrevBlock = global.SERVER.ReadBlockHeaderDB(Block.BlockNum - 1);
 | 
			
		||||
    if (!PrevBlock)
 | 
			
		||||
        return 0;
 | 
			
		||||
    var SumHash2 = shaarr2(PrevBlock.SumHash, Block.Hash);
 | 
			
		||||
    var SumHash2 = global.shaarr2(PrevBlock.SumHash, Block.Hash);
 | 
			
		||||
    if (global.CompareArr(SumHash2, Block.SumHash) === 0)
 | 
			
		||||
        return 1;
 | 
			
		||||
    return 0;
 | 
			
		||||
@@ -240,7 +240,7 @@ function InitTXProcess() {
 | 
			
		||||
    StateTX = global.DApps.Accounts.DBStateTX.Read(0);
 | 
			
		||||
    LastBlockNum = StateTX.BlockNum;
 | 
			
		||||
    MinimalValidBlock = StateTX.BlockNumMin;
 | 
			
		||||
    LastBlockNum = PERIOD_ACCOUNT_HASH * Math.trunc(LastBlockNum / PERIOD_ACCOUNT_HASH);
 | 
			
		||||
    LastBlockNum = global.PERIOD_ACCOUNT_HASH * Math.trunc(LastBlockNum / global.PERIOD_ACCOUNT_HASH);
 | 
			
		||||
    if (LastBlockNum > 100) {
 | 
			
		||||
        LastBlockNum = 1 + LastBlockNum - 100;
 | 
			
		||||
    }
 | 
			
		||||
@@ -254,8 +254,8 @@ global.ClearDataBase = ClearDataBase;
 | 
			
		||||
 | 
			
		||||
function ClearDataBase() {
 | 
			
		||||
    MinimalValidBlock = 0;
 | 
			
		||||
    for (var key in DApps) {
 | 
			
		||||
        DApps[key].ClearDataBase();
 | 
			
		||||
    for (var key in global.DApps) {
 | 
			
		||||
        global.DApps[key].ClearDataBase();
 | 
			
		||||
    }
 | 
			
		||||
    LastBlockNum = 0;
 | 
			
		||||
    BlockTree.Clear();
 | 
			
		||||
@@ -268,8 +268,8 @@ function RewriteAllTransactions() {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    global.ToLog("*************RewriteAllTransactions");
 | 
			
		||||
    for (var key in DApps) {
 | 
			
		||||
        DApps[key].ClearDataBase();
 | 
			
		||||
    for (var key in global.DApps) {
 | 
			
		||||
        global.DApps[key].ClearDataBase();
 | 
			
		||||
    }
 | 
			
		||||
    LastBlockNum = 0;
 | 
			
		||||
    BlockTree.Clear();
 | 
			
		||||
@@ -291,8 +291,8 @@ function TXPrepareLoadRest(BlockNum) {
 | 
			
		||||
    StopTxProcess = 1;
 | 
			
		||||
    MinimalValidBlock = BlockNum;
 | 
			
		||||
    global.ToLog("*************TXPrepareLoadRest:" + BlockNum, 2);
 | 
			
		||||
    for (var key in DApps) {
 | 
			
		||||
        DApps[key].ClearDataBase();
 | 
			
		||||
    for (var key in global.DApps) {
 | 
			
		||||
        global.DApps[key].ClearDataBase();
 | 
			
		||||
    }
 | 
			
		||||
    LastBlockNum = BlockNum;
 | 
			
		||||
    BlockTree.Clear();
 | 
			
		||||
@@ -345,7 +345,7 @@ global.EvalCode = function(Code) {
 | 
			
		||||
    var Result;
 | 
			
		||||
    try {
 | 
			
		||||
        var ret = eval(Code);
 | 
			
		||||
        Result = JSON.stringify(ret, "", 4);
 | 
			
		||||
        Result = JSON.stringify(ret, undefined, 4);
 | 
			
		||||
    }
 | 
			
		||||
    catch (e) {
 | 
			
		||||
        Result = "" + e;
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@ process.on('message', function(msg) {
 | 
			
		||||
            break;
 | 
			
		||||
        case "DappEvent":
 | 
			
		||||
            {
 | 
			
		||||
                AddDappEventToGlobalMap(msg.Data);
 | 
			
		||||
                global.AddDappEventToGlobalMap(msg.Data);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        case "ToLogClient":
 | 
			
		||||
@@ -215,7 +215,7 @@ function MainHTTPFunction(request, response) {
 | 
			
		||||
        return;
 | 
			
		||||
    if (!request.socket || !request.socket.remoteAddress)
 | 
			
		||||
        return;
 | 
			
		||||
    SetSafeResponce(response);
 | 
			
		||||
    global.SetSafeResponce(response);
 | 
			
		||||
    var DataURL = url.parse(request.url);
 | 
			
		||||
    var Params = querystring.parse(DataURL.query);
 | 
			
		||||
    var Path = querystring.unescape(DataURL.pathname);
 | 
			
		||||
@@ -350,7 +350,7 @@ function DoCommandNew(response, Type, Path, Params) {
 | 
			
		||||
                response.end(JSON.stringify({ result: 0, text: "You must set const USE_HARD_API_V2:1" }));
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            Caller = WebApi2;
 | 
			
		||||
            Caller = global.WebApi2;
 | 
			
		||||
        }
 | 
			
		||||
        Method = ArrPath[2];
 | 
			
		||||
    }
 | 
			
		||||
@@ -390,16 +390,16 @@ function DoCommandNew(response, Type, Path, Params) {
 | 
			
		||||
            response.writeHead(301, { "Location": '/' });
 | 
			
		||||
            return response.end();
 | 
			
		||||
        case "file":
 | 
			
		||||
            SendBlockFile(response, ArrPath[1], ArrPath[2]);
 | 
			
		||||
            global.SendBlockFile(response, ArrPath[1], ArrPath[2]);
 | 
			
		||||
            break;
 | 
			
		||||
        case "DappTemplateFile":
 | 
			
		||||
            DappTemplateFile(response, ArrPath[1]);
 | 
			
		||||
            global.DappTemplateFile(response, ArrPath[1]);
 | 
			
		||||
            break;
 | 
			
		||||
        case "smart":
 | 
			
		||||
            DappSmartCodeFile(response, ArrPath[1]);
 | 
			
		||||
            global.DappSmartCodeFile(response, ArrPath[1]);
 | 
			
		||||
            break;
 | 
			
		||||
        case "client":
 | 
			
		||||
            DappClientCodeFile(response, ArrPath[1]);
 | 
			
		||||
            global.DappClientCodeFile(response, ArrPath[1]);
 | 
			
		||||
        default:
 | 
			
		||||
            {
 | 
			
		||||
                var Name = ArrPath[ArrPath.length - 1];
 | 
			
		||||
@@ -466,7 +466,7 @@ function DoCommandNew(response, Type, Path, Params) {
 | 
			
		||||
                        Name = PrefixPath + "/" + Name;
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
                SendWebFile(response, Name, "", 1);
 | 
			
		||||
                global.SendWebFile(response, Name, "", 1);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
@@ -506,24 +506,24 @@ HostingCaller.GetAccountList = function(Params) {
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    if (!Params.CountNum)
 | 
			
		||||
        Params.CountNum = 1;
 | 
			
		||||
    var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.StartNum), ParseNum(Params.CountNum));
 | 
			
		||||
    var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum));
 | 
			
		||||
    return { result: 1, arr: arr };
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.GetAccount = function(id) {
 | 
			
		||||
    id = ParseNum(id);
 | 
			
		||||
    id = global.ParseNum(id);
 | 
			
		||||
    var arr = global.DApps.Accounts.GetRowsAccounts(id, 1);
 | 
			
		||||
    return { Item: arr[0], result: 1 };
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.GetBlockList = function(Params, response) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    Params.StartNum = ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = ParseNum(Params.CountNum);
 | 
			
		||||
    Params.StartNum = global.ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = global.ParseNum(Params.CountNum);
 | 
			
		||||
    if (Params.CountNum > MaxCountViewRows)
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    if (!Params.CountNum)
 | 
			
		||||
        Params.CountNum = 1;
 | 
			
		||||
    return HTTPCaller.GetBlockList(Params, response);
 | 
			
		||||
    return global.HTTPCaller.GetBlockList(Params, response);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.GetTransactionList = function(Params, response) {
 | 
			
		||||
    Params.Param3 = Params.BlockNum;
 | 
			
		||||
@@ -532,12 +532,12 @@ HostingCaller.GetTransactionList = function(Params, response) {
 | 
			
		||||
HostingCaller.GetTransactionAll = function(Params, response) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    Params.Param3 = ParseNum(Params.Param3);
 | 
			
		||||
    Params.StartNum = ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = ParseNum(Params.CountNum);
 | 
			
		||||
    Params.Param3 = global.ParseNum(Params.Param3);
 | 
			
		||||
    Params.StartNum = global.ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = global.ParseNum(Params.CountNum);
 | 
			
		||||
    if (Params.CountNum > MaxCountViewRows)
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    return HTTPCaller.GetTransactionAll(Params, response);
 | 
			
		||||
    return global.HTTPCaller.GetTransactionAll(Params, response);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.GetDappList = function(Params) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
@@ -546,7 +546,7 @@ HostingCaller.GetDappList = function(Params) {
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    if (!Params.CountNum)
 | 
			
		||||
        Params.CountNum = 1;
 | 
			
		||||
    var arr = global.DApps.Smart.GetRows(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, Params.Filter, 1);
 | 
			
		||||
    var arr = global.DApps.Smart.GetRows(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, Params.Filter, 1);
 | 
			
		||||
    return { result: 1, arr: arr };
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.GetNodeList = function(Params) {
 | 
			
		||||
@@ -640,7 +640,7 @@ HostingCaller.GetAccountListByKey = function(Params, ppp, bRet) {
 | 
			
		||||
    var Ret = { result: 1, arr: arr };
 | 
			
		||||
    if (bRet)
 | 
			
		||||
        return Ret;
 | 
			
		||||
    var Context = GetUserContext(Params);
 | 
			
		||||
    var Context = global.GetUserContext(Params);
 | 
			
		||||
    var StrInfo = JSON.stringify(Ret);
 | 
			
		||||
    if (!Params.AllData && Context.PrevAccountList === StrInfo) {
 | 
			
		||||
        return { result: 0, cache: 1 };
 | 
			
		||||
@@ -692,20 +692,20 @@ HostingCaller.SendTransactionHex = function(Params, response) {
 | 
			
		||||
HostingCaller.DappSmartHTMLFile = function(Params) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    return HTTPCaller.DappSmartHTMLFile(Params);
 | 
			
		||||
    return global.HTTPCaller.DappSmartHTMLFile(Params);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.DappBlockFile = function(Params, responce) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    return HTTPCaller.DappBlockFile(Params, responce);
 | 
			
		||||
    return global.HTTPCaller.DappBlockFile(Params, responce);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.DappInfo = function(Params) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    var SmartNum = ParseNum(Params.Smart);
 | 
			
		||||
    var SmartNum = global.ParseNum(Params.Smart);
 | 
			
		||||
    process.send({ cmd: "SetSmartEvent", Smart: SmartNum });
 | 
			
		||||
    var Context = GetUserContext(Params);
 | 
			
		||||
    var Ret = HTTPCaller.DappInfo(Params, undefined, 1);
 | 
			
		||||
    var Context = global.GetUserContext(Params);
 | 
			
		||||
    var Ret = global.HTTPCaller.DappInfo(Params, undefined, 1);
 | 
			
		||||
    Ret.PubKey = undefined;
 | 
			
		||||
    var StrInfo = JSON.stringify(Ret);
 | 
			
		||||
    if (!Params.AllData && Context.PrevDappInfo === StrInfo) {
 | 
			
		||||
@@ -726,7 +726,7 @@ HostingCaller.DappWalletList = function(Params) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    var Ret = HostingCaller.GetAccountListByKey(Params, undefined, 1);
 | 
			
		||||
    var Smart = ParseNum(Params.Smart);
 | 
			
		||||
    var Smart = global.ParseNum(Params.Smart);
 | 
			
		||||
    var arr = [];
 | 
			
		||||
    for (var i = 0; i < Ret.arr.length; i++) {
 | 
			
		||||
        if (Params.AllAccounts || Ret.arr[i].Value.Smart === Smart) {
 | 
			
		||||
@@ -736,7 +736,7 @@ HostingCaller.DappWalletList = function(Params) {
 | 
			
		||||
    Ret.arr = arr;
 | 
			
		||||
    return Ret;
 | 
			
		||||
};
 | 
			
		||||
HTTPCaller.DappWalletList = HostingCaller.DappWalletList;
 | 
			
		||||
global.HTTPCaller.DappWalletList = HostingCaller.DappWalletList;
 | 
			
		||||
HostingCaller.DappAccountList = function(Params) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
@@ -744,7 +744,7 @@ HostingCaller.DappAccountList = function(Params) {
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    if (!Params.CountNum)
 | 
			
		||||
        Params.CountNum = 1;
 | 
			
		||||
    var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, 1);
 | 
			
		||||
    var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, 1);
 | 
			
		||||
    return { arr: arr, result: 1 };
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.DappSmartList = function(Params) {
 | 
			
		||||
@@ -754,42 +754,42 @@ HostingCaller.DappSmartList = function(Params) {
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    if (!Params.CountNum)
 | 
			
		||||
        Params.CountNum = 1;
 | 
			
		||||
    var arr = global.DApps.Smart.GetRows(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, undefined, Params.GetAllData,
 | 
			
		||||
    var arr = global.DApps.Smart.GetRows(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, undefined, Params.GetAllData,
 | 
			
		||||
        Params.TokenGenerate);
 | 
			
		||||
    return { arr: arr, result: 1 };
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.DappBlockList = function(Params, response) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    Params.StartNum = ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = ParseNum(Params.CountNum);
 | 
			
		||||
    Params.StartNum = global.ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = global.ParseNum(Params.CountNum);
 | 
			
		||||
    if (Params.CountNum > MaxCountViewRows)
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    if (!Params.CountNum)
 | 
			
		||||
        Params.CountNum = 1;
 | 
			
		||||
    return HTTPCaller.DappBlockList(Params, response);
 | 
			
		||||
    return global.HTTPCaller.DappBlockList(Params, response);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.DappTransactionList = function(Params, response) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    Params.BlockNum = ParseNum(Params.BlockNum);
 | 
			
		||||
    Params.StartNum = ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = ParseNum(Params.CountNum);
 | 
			
		||||
    Params.BlockNum = global.ParseNum(Params.BlockNum);
 | 
			
		||||
    Params.StartNum = global.ParseNum(Params.StartNum);
 | 
			
		||||
    Params.CountNum = global.ParseNum(Params.CountNum);
 | 
			
		||||
    if (Params.CountNum > MaxCountViewRows)
 | 
			
		||||
        Params.CountNum = MaxCountViewRows;
 | 
			
		||||
    if (!Params.CountNum)
 | 
			
		||||
        Params.CountNum = 1;
 | 
			
		||||
    return HTTPCaller.DappTransactionList(Params, response);
 | 
			
		||||
    return global.HTTPCaller.DappTransactionList(Params, response);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.DappStaticCall = function(Params, response) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    return HTTPCaller.DappStaticCall(Params, response);
 | 
			
		||||
    return global.HTTPCaller.DappStaticCall(Params, response);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.GetHistoryTransactions = function(Params) {
 | 
			
		||||
    if (typeof Params !== "object")
 | 
			
		||||
        return { result: 0 };
 | 
			
		||||
    return HTTPCaller.GetHistoryTransactions(Params);
 | 
			
		||||
    return global.HTTPCaller.GetHistoryTransactions(Params);
 | 
			
		||||
};
 | 
			
		||||
HostingCaller.GetSupply = function(Params) {
 | 
			
		||||
    var Data = global.DApps.Accounts.ReadState(0);
 | 
			
		||||
@@ -843,7 +843,7 @@ setInterval(function() {
 | 
			
		||||
        var AvgPow = SumPow / Count;
 | 
			
		||||
        ADD_TO_STAT("MAX:HASH_RATE_B", AvgPow);
 | 
			
		||||
    }
 | 
			
		||||
    var Count = COUNT_BLOCK_PROOF + 16 - 1;
 | 
			
		||||
    var Count = global.COUNT_BLOCK_PROOF + 16 - 1;
 | 
			
		||||
    if (MaxNumBlockDB > Count) {
 | 
			
		||||
        var StartNum = MaxNumBlockDB - Count;
 | 
			
		||||
        NodeBlockChain = global.SERVER.BlockChainToBuf(StartNum, StartNum, MaxNumBlockDB);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user