refactor: 0 error

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2019-07-10 15:59:04 +08:00
parent cbc0ed72c4
commit 4527e437fa
39 changed files with 1802 additions and 1695 deletions

View File

@@ -11,97 +11,82 @@
var MAX_SUM_TER = 1e9; var MAX_SUM_TER = 1e9;
var MAX_SUM_CENT = 1e9; var MAX_SUM_CENT = 1e9;
function ADD(Coin,Value2) function ADD(Coin, Value2) {
{
Coin.SumCOIN += Value2.SumCOIN; Coin.SumCOIN += Value2.SumCOIN;
Coin.SumCENT += Value2.SumCENT; Coin.SumCENT += Value2.SumCENT;
if(Coin.SumCENT >= MAX_SUM_CENT) if (Coin.SumCENT >= MAX_SUM_CENT) {
{
Coin.SumCENT -= MAX_SUM_CENT; Coin.SumCENT -= MAX_SUM_CENT;
Coin.SumCOIN++; Coin.SumCOIN++;
} }
return true; return true;
}; };
function SUB(Coin,Value2) function SUB(Coin, Value2) {
{
Coin.SumCOIN -= Value2.SumCOIN; Coin.SumCOIN -= Value2.SumCOIN;
if(Coin.SumCENT >= Value2.SumCENT) if (Coin.SumCENT >= Value2.SumCENT) {
{
Coin.SumCENT -= Value2.SumCENT; Coin.SumCENT -= Value2.SumCENT;
} }
else else {
{
Coin.SumCENT = MAX_SUM_CENT + Coin.SumCENT - Value2.SumCENT; Coin.SumCENT = MAX_SUM_CENT + Coin.SumCENT - Value2.SumCENT;
Coin.SumCOIN--; Coin.SumCOIN--;
} }
if(Coin.SumCOIN < 0) if (Coin.SumCOIN < 0) {
{
return false; return false;
} }
return true; return true;
}; };
function DIV(Coin,Value) function DIV(Coin, Value) {
{
Coin.SumCOIN = Coin.SumCOIN / Value; Coin.SumCOIN = Coin.SumCOIN / Value;
Coin.SumCENT = Math.floor(Coin.SumCENT / Value); Coin.SumCENT = Math.floor(Coin.SumCENT / Value);
var SumCOIN = Math.floor(Coin.SumCOIN); var SumCOIN = Math.floor(Coin.SumCOIN);
var SumCENT = Math.floor((Coin.SumCOIN - SumCOIN) * MAX_SUM_CENT); var SumCENT = Math.floor((Coin.SumCOIN - SumCOIN) * MAX_SUM_CENT);
Coin.SumCOIN = SumCOIN; Coin.SumCOIN = SumCOIN;
Coin.SumCENT = Coin.SumCENT + SumCENT; Coin.SumCENT = Coin.SumCENT + SumCENT;
if(Coin.SumCENT >= MAX_SUM_CENT) if (Coin.SumCENT >= MAX_SUM_CENT) {
{
Coin.SumCENT -= MAX_SUM_CENT; Coin.SumCENT -= MAX_SUM_CENT;
Coin.SumCOIN++; Coin.SumCOIN++;
} }
return true; return true;
}; };
function FLOAT_FROM_COIN(Coin) function FLOAT_FROM_COIN(Coin) {
{
var Sum = Coin.SumCOIN + Coin.SumCENT / MAX_SUM_CENT; var Sum = Coin.SumCOIN + Coin.SumCENT / MAX_SUM_CENT;
return Sum; return Sum;
}; };
function STRING_FROM_COIN(Coin) function STRING_FROM_COIN(Coin) {
{
var Sum = FLOAT_FROM_COIN(Coin); var Sum = FLOAT_FROM_COIN(Coin);
return Sum.toLocaleString(undefined, {useGrouping:true, style:'decimal', maximumFractionDigits:9}); return Sum.toLocaleString(undefined, { useGrouping: true, style: 'decimal', maximumFractionDigits: 9 });
}; };
function COIN_FROM_FLOAT(Sum) function COIN_FROM_FLOAT(Sum) {
{
var SumCOIN = Math.floor(Sum); var SumCOIN = Math.floor(Sum);
var SumCENT = Math.floor((Sum - SumCOIN) * MAX_SUM_CENT); var SumCENT = Math.floor((Sum - SumCOIN) * MAX_SUM_CENT);
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT}; var Coin = { SumCOIN: SumCOIN, SumCENT: SumCENT };
return Coin; return Coin;
}; };
function COIN_FROM_FLOAT2(Sum) function COIN_FROM_FLOAT2(Sum) {
{
var SumCOIN = Math.floor(Sum); var SumCOIN = Math.floor(Sum);
var SumCENT = Math.floor(Sum * MAX_SUM_CENT - SumCOIN * MAX_SUM_CENT); var SumCENT = Math.floor(Sum * MAX_SUM_CENT - SumCOIN * MAX_SUM_CENT);
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT}; var Coin = { SumCOIN: SumCOIN, SumCENT: SumCENT };
return Coin; return Coin;
}; };
if(typeof window === "object") if (typeof window === "object")
window.COIN_FROM_FLOAT = COIN_FROM_FLOAT2; window.COIN_FROM_FLOAT = COIN_FROM_FLOAT2;
function ISZERO(Coin) function ISZERO(Coin) {
{ if (Coin.SumCOIN === 0 && Coin.SumCENT === 0)
if(Coin.SumCOIN === 0 && Coin.SumCENT === 0)
return true; return true;
else else
return false; return false;
}; };
function COIN_FROM_STRING(Str) function COIN_FROM_STRING(Str) {
{
throw "TODO: COIN_FROM_STRING"; throw "TODO: COIN_FROM_STRING";
}; };
if(typeof global === "object") if (typeof global === "object") {
{
global.ADD = ADD; global.ADD = ADD;
global.SUB = SUB; global.SUB = SUB;
global.DIV = DIV; global.DIV = DIV;

View File

@@ -9,40 +9,34 @@
*/ */
function SavePrivateKey() function SavePrivateKey() {
{
var Select = document.getElementById("idTypeKey"); var Select = document.getElementById("idTypeKey");
if(Select.value === "brain") if (Select.value === "brain") {
{
ConvertToPrivateKey(); ConvertToPrivateKey();
return ; return;
} }
var Str = document.getElementById("idKeyNew").value; var Str = document.getElementById("idKeyNew").value;
Str = Str.trim(); Str = Str.trim();
if(Select.value === "private" && (Str.length !== 64 || !IsHexStr(Str))) if (Select.value === "private" && (Str.length !== 64 || !IsHexStr(Str))) {
{
SetError("Error: Length must 64 HEX chars. (Length=" + Str.length + ")"); SetError("Error: Length must 64 HEX chars. (Length=" + Str.length + ")");
return ; return;
} }
else else
if(Select.value !== "private" && (Str.length !== 66 || Str.substr(0, 1) !== "0" || !IsHexStr(Str))) if (Select.value !== "private" && (Str.length !== 66 || Str.substr(0, 1) !== "0" || !IsHexStr(Str))) {
{
SetError("Error: Length must 66 HEX chars. (Length=" + Str.length + ")"); SetError("Error: Length must 66 HEX chars. (Length=" + Str.length + ")");
return ; return;
} }
if(Select.value === "private" && PrivKeyStr !== Str) if (Select.value === "private" && PrivKeyStr !== Str)
SetStatus("Changed privat key"); SetStatus("Changed privat key");
else else
if(Select.value === "public" && PubKeyStr !== Str) if (Select.value === "public" && PubKeyStr !== Str)
SetStatus("Changed public key"); SetStatus("Changed public key");
GetData("SetWalletKey", Str, function (Data) GetData("SetWalletKey", Str, function(Data) {
{ if (Data && Data.result === 1) {
if(Data && Data.result === 1) if (Select.value === "private")
{
if(Select.value === "private")
SelectStyle("styleContrast1"); SelectStyle("styleContrast1");
else else
if(Select.value === "public") if (Select.value === "public")
SelectStyle("styleContrast2"); SelectStyle("styleContrast2");
SetVisibleEditKeys(0); SetVisibleEditKeys(0);
UpdatesData(); UpdatesData();
@@ -50,46 +44,36 @@ function SavePrivateKey()
}); });
}; };
function CreateCheckPoint() function CreateCheckPoint() {
{ if (!ServerBlockNumDB || ServerBlockNumDB < 16) {
if(!ServerBlockNumDB || ServerBlockNumDB < 16)
{
SetError("Not set ServerBlockNumDB"); SetError("Not set ServerBlockNumDB");
return ; return;
} }
var BlockNum = ServerBlockNumDB - 10; var BlockNum = ServerBlockNumDB - 10;
SetCheckPoint(BlockNum); SetCheckPoint(BlockNum);
}; };
function UseAutoCheckPoint() function UseAutoCheckPoint() {
{
var Set = $("idUseAutoCheckPoint").checked; var Set = $("idUseAutoCheckPoint").checked;
var Period = ParseNum($("idPeriodAutoCheckPoint").value); var Period = ParseNum($("idPeriodAutoCheckPoint").value);
GetData("SetAutoCheckPoint", {Set:Set, Period:Period}, function (Data) GetData("SetAutoCheckPoint", { Set: Set, Period: Period }, function(Data) {
{ if (Data) {
if(Data)
{
SetStatus(Data.text, !Data.result); SetStatus(Data.text, !Data.result);
} }
}); });
}; };
function UseAutoCorrTime() function UseAutoCorrTime() {
{ GetData("SetAutoCorrTime", document.getElementById("idUseAutoCorrTime").checked, function(Data) {
GetData("SetAutoCorrTime", document.getElementById("idUseAutoCorrTime").checked, function (Data) if (Data) {
{
if(Data)
{
SetStatus(Data.text, !Data.result); SetStatus(Data.text, !Data.result);
} }
}); });
}; };
function SetCodeVersionJSON() function SetCodeVersionJSON() {
{
var Data = JSON.parse(JSON.stringify(CONFIG_DATA.CODE_VERSION)); var Data = JSON.parse(JSON.stringify(CONFIG_DATA.CODE_VERSION));
if(!Data.BlockNum) if (!Data.BlockNum) {
{
Data.LevelUpdate = 160; Data.LevelUpdate = 160;
} }
Data.BlockNum = CONFIG_DATA.CurBlockNum; Data.BlockNum = CONFIG_DATA.CurBlockNum;
@@ -103,13 +87,11 @@ function SetCodeVersionJSON()
document.getElementById("idDevService").value = Str; document.getElementById("idDevService").value = Str;
}; };
function SetCorrTimeJSON() function SetCorrTimeJSON() {
{
var AutoDelta = parseInt(document.getElementById("idDevValue").value); var AutoDelta = parseInt(document.getElementById("idDevValue").value);
var Data = {Num:CONFIG_DATA.CurBlockNum, bUse:1, bAddTime:1}; var Data = { Num: CONFIG_DATA.CurBlockNum, bUse: 1, bAddTime: 1 };
if(AutoDelta < 0) if (AutoDelta < 0) {
{ AutoDelta = - AutoDelta;
AutoDelta = - AutoDelta;
Data.bAddTime = 0; Data.bAddTime = 0;
} }
Data.DeltaTime = 40; Data.DeltaTime = 40;
@@ -119,180 +101,140 @@ function SetCorrTimeJSON()
document.getElementById("idDevService").value = Str; document.getElementById("idDevService").value = Str;
}; };
function SetNetConstJSON() function SetNetConstJSON() {
{
var Str = JSON.stringify(Data, "", 2); var Str = JSON.stringify(Data, "", 2);
document.getElementById("idDevService").value = Str; document.getElementById("idDevService").value = Str;
var Data = {MaxTrasactionLimit:CONFIG_DATA.MAX_TRANSACTION_LIMIT}; var Data = { MaxTrasactionLimit: CONFIG_DATA.MAX_TRANSACTION_LIMIT };
var Str = JSON.stringify(Data, "", 2); var Str = JSON.stringify(Data, "", 2);
document.getElementById("idDevService").value = Str; document.getElementById("idDevService").value = Str;
}; };
function SetNewCodeVersion() function SetNewCodeVersion() {
{ try {
try
{
var Data = JSON.parse(document.getElementById("idDevService").value); var Data = JSON.parse(document.getElementById("idDevService").value);
} }
catch(e) catch (e) {
{
SetError("Error format setting data"); SetError("Error format setting data");
return ; return;
} }
Data.addrArr = GetArrFromHex(Data.addrArr); Data.addrArr = GetArrFromHex(Data.addrArr);
GetData("SetNewCodeVersion", Data, function (Data) GetData("SetNewCodeVersion", Data, function(Data) {
{ if (Data) {
if(Data)
{
SetStatus(Data.text, !Data.result); SetStatus(Data.text, !Data.result);
} }
}); });
}; };
function StartTimeCorrect() function StartTimeCorrect() {
{ try {
try
{
var Data = JSON.parse(document.getElementById("idDevService").value); var Data = JSON.parse(document.getElementById("idDevService").value);
} }
catch(e) catch (e) {
{
SetError("Error format setting data"); SetError("Error format setting data");
return ; return;
} }
GetData("SetCheckDeltaTime", Data, function (Data) GetData("SetCheckDeltaTime", Data, function(Data) {
{ if (Data) {
if(Data)
{
SetStatus(Data.text, !Data.result); SetStatus(Data.text, !Data.result);
} }
}); });
}; };
function StartNetConst() function StartNetConst() {
{ try {
try
{
var Data = JSON.parse(document.getElementById("idDevService").value); var Data = JSON.parse(document.getElementById("idDevService").value);
} }
catch(e) catch (e) {
{
SetError("Error format setting data"); SetError("Error format setting data");
return ; return;
} }
GetData("SetCheckNetConstant", Data, function (Data) GetData("SetCheckNetConstant", Data, function(Data) {
{ if (Data) {
if(Data)
{
SetStatus(Data.text, !Data.result); SetStatus(Data.text, !Data.result);
} }
}); });
}; };
function RestartNode() function RestartNode() {
{
GetData("RestartNode", {}); GetData("RestartNode", {});
DoRestartWallet(); DoRestartWallet();
}; };
function UseAutoUpdate() function UseAutoUpdate() {
{ var Data = { USE_AUTO_UPDATE: document.getElementById("idAutoUpdate").checked, DoMining: 1 };
var Data = {USE_AUTO_UPDATE:document.getElementById("idAutoUpdate").checked, DoMining:1}; GetData("SaveConstant", Data, function(Data) {
GetData("SaveConstant", Data, function (Data) if (Data && Data.result) {
{
if(Data && Data.result)
{
SetStatus("Save AutoUpdate: " + document.getElementById("idAutoUpdate").checked); SetStatus("Save AutoUpdate: " + document.getElementById("idAutoUpdate").checked);
} }
}); });
}; };
function UseMining() function UseMining() {
{ if (!MiningAccount) {
if(!MiningAccount)
{
SetError("Not set mining account"); SetError("Not set mining account");
return ; return;
} }
var Data = {USE_MINING:document.getElementById("idUseMining").checked, DoMining:1}; var Data = { USE_MINING: document.getElementById("idUseMining").checked, DoMining: 1 };
GetData("SaveConstant", Data, function (Data) GetData("SaveConstant", Data, function(Data) {
{ if (Data && Data.result) {
if(Data && Data.result)
{
SetStatus("Save Mining: " + document.getElementById("idUseMining").checked); SetStatus("Save Mining: " + document.getElementById("idUseMining").checked);
} }
}); });
}; };
function SetPercentMining() function SetPercentMining() {
{ var Data = { POW_MAX_PERCENT: document.getElementById("idPercentMining").value };
var Data = {POW_MAX_PERCENT:document.getElementById("idPercentMining").value}; GetData("SaveConstant", Data, function(Data) {
GetData("SaveConstant", Data, function (Data) if (Data && Data.result) {
{
if(Data && Data.result)
{
SetStatus("Save Mining percent: " + document.getElementById("idPercentMining").value + " %"); SetStatus("Save Mining percent: " + document.getElementById("idPercentMining").value + " %");
} }
}); });
}; };
function MiningSets() function MiningSets() {
{
var name = "edit_mining_set"; var name = "edit_mining_set";
if(IsVisibleBlock(name)) if (IsVisibleBlock(name)) {
{
SetVisibleBlock(name, false); SetVisibleBlock(name, false);
} }
else else {
{
SetVisibleBlock(name, true); SetVisibleBlock(name, true);
document.getElementById("idMiningAccount").value = MiningAccount; document.getElementById("idMiningAccount").value = MiningAccount;
document.getElementById("idMiningAccount").focus(); document.getElementById("idMiningAccount").focus();
} }
}; };
function SaveMiningSet(Value) function SaveMiningSet(Value) {
{
SetVisibleBlock("edit_mining_set", false); SetVisibleBlock("edit_mining_set", false);
if(Value) if (Value) {
{
MiningAccount = Value; MiningAccount = Value;
} }
else else {
{
MiningAccount = ParseNum(document.getElementById("idMiningAccount").value); MiningAccount = ParseNum(document.getElementById("idMiningAccount").value);
} }
GetData("SetMining", MiningAccount, function (Data) GetData("SetMining", MiningAccount, function(Data) {
{
}); });
}; };
function CancalMiningSet() function CancalMiningSet() {
{
var name = "edit_mining_set"; var name = "edit_mining_set";
SetVisibleBlock(name, false); SetVisibleBlock(name, false);
}; };
var WasHistoryMaxNum; var WasHistoryMaxNum;
var WasLastNumSound = 0; var WasLastNumSound = 0;
function CheckNewMoney() function CheckNewMoney() {
{ return;
return ; if (!$("idUseSoundHistory").checked)
if(!$("idUseSoundHistory").checked) return;
return ; if (WasHistoryMaxNum === HistoryMaxNum || !ServerBlockNumDB)
if(WasHistoryMaxNum === HistoryMaxNum || !ServerBlockNumDB) return;
return ;
WasHistoryMaxNum = HistoryMaxNum; WasHistoryMaxNum = HistoryMaxNum;
GetData("GetHistoryAct", {StartNum:HistoryMaxNum - 40, CountNum:40}, function (Data) GetData("GetHistoryAct", { StartNum: HistoryMaxNum - 40, CountNum: 40 }, function(Data) {
{ if (Data && Data.result) {
if(Data && Data.result)
{
var arr = Data.arr; var arr = Data.arr;
for(var i = 0; i < arr.length; i++) for (var i = 0; i < arr.length; i++) {
{
var Item = arr[i]; var Item = arr[i];
if(Item.Direct === "+" && Item.BlockNum > ServerBlockNumDB - 60 && Item.BlockNum < ServerBlockNumDB - 20 && Item.BlockNum > WasLastNumSound) if (Item.Direct === "+" && Item.BlockNum > ServerBlockNumDB - 60 && Item.BlockNum < ServerBlockNumDB - 20 && Item.BlockNum > WasLastNumSound) {
{
WasLastNumSound = Item.BlockNum; WasLastNumSound = Item.BlockNum;
$("sound_coin").play(); $("sound_coin").play();
} }
@@ -301,52 +243,41 @@ function CheckNewMoney()
}); });
}; };
function DoRestartWallet() function DoRestartWallet() {
{
SetStatus("<H1 align='center' style='color:blue'>Restarting program...</H1>"); SetStatus("<H1 align='center' style='color:blue'>Restarting program...</H1>");
if(!WasSetRestart) if (!WasSetRestart) {
{
WasSetRestart = 1; WasSetRestart = 1;
setTimeout(function () setTimeout(function() {
{
window.location.reload(); window.location.reload();
}, 10 * 1000); }, 10 * 1000);
} }
}; };
function SetArrLog(arr) function SetArrLog(arr) {
{
var Str = ""; var Str = "";
var bFindAccount = 0; var bFindAccount = 0;
for(var i = 0; i < arr.length; i++) for (var i = 0; i < arr.length; i++) {
{
var Item = arr[i]; var Item = arr[i];
var tr_text = GetTransactionText(MapSendTransaction[Item.key], Item.key.substr(0, 16)); var tr_text = GetTransactionText(MapSendTransaction[Item.key], Item.key.substr(0, 16));
var info = Item.text; var info = Item.text;
if(tr_text) if (tr_text)
info += " (" + tr_text + ")"; info += " (" + tr_text + ")";
if(Item.final) if (Item.final) {
{
var TR = MapSendTransaction[Item.key]; var TR = MapSendTransaction[Item.key];
if(TR) if (TR) {
{ if (Item.text.indexOf("Add to blockchain") >= 0) {
if(Item.text.indexOf("Add to blockchain") >= 0) if (TR.bFindAcc) {
{
if(TR.bFindAcc)
{
bFindAccount = 1; bFindAccount = 1;
TR.bFindAcc = 0; TR.bFindAcc = 0;
} }
if(TR.Run) if (TR.Run) {
{
TR.Run(TR); TR.Run(TR);
TR.Run = undefined; TR.Run = undefined;
} }
} }
} }
var Account = MapCheckTransaction[Item.key]; var Account = MapCheckTransaction[Item.key];
if(Account) if (Account) {
{
delete MapCheckTransaction[Item.key]; delete MapCheckTransaction[Item.key];
Account.NextSendTime = 0; Account.NextSendTime = 0;
} }
@@ -355,39 +286,31 @@ function SetArrLog(arr)
} }
SetStatusFromServer(Str); SetStatusFromServer(Str);
CheckSending(); CheckSending();
if(bFindAccount) if (bFindAccount) {
{
FindMyAccounts(); FindMyAccounts();
} }
}; };
function SetAutoMining() function SetAutoMining() {
{ setTimeout(function() {
setTimeout(function ()
{
var Select = $("idAccount"); var Select = $("idAccount");
if(Select.options.length) if (Select.options.length) {
{
SaveMiningSet(Select.options[Select.options.length - 1].value); SaveMiningSet(Select.options[Select.options.length - 1].value);
} }
}, 100); }, 100);
}; };
function ViewNetworkMode() function ViewNetworkMode() {
{ if (IsVisibleBlock('idNetworkView')) {
if(IsVisibleBlock('idNetworkView'))
{
SetVisibleBlock('idNetworkView', false); SetVisibleBlock('idNetworkView', false);
} }
else else {
{
SetVisibleBlock('idNetworkView', true); SetVisibleBlock('idNetworkView', true);
var Mode = CONFIG_DATA.CONSTANTS.NET_WORK_MODE; var Mode = CONFIG_DATA.CONSTANTS.NET_WORK_MODE;
if(!Mode) if (!Mode) {
{
Mode = {}; Mode = {};
Mode.UseDirectIP = true; Mode.UseDirectIP = true;
if(INTERNET_IP_FROM_STUN) if (INTERNET_IP_FROM_STUN)
Mode.ip = INTERNET_IP_FROM_STUN; Mode.ip = INTERNET_IP_FROM_STUN;
else else
Mode.ip = SERVER_IP; Mode.ip = SERVER_IP;
@@ -396,146 +319,120 @@ function ViewNetworkMode()
document.getElementById("idUseDirectIP").checked = Mode.UseDirectIP; document.getElementById("idUseDirectIP").checked = Mode.UseDirectIP;
document.getElementById("idIP").value = Mode.ip; document.getElementById("idIP").value = Mode.ip;
document.getElementById("idPort").value = Mode.port; document.getElementById("idPort").value = Mode.port;
if(!Mode.NodeWhiteList) if (!Mode.NodeWhiteList)
Mode.NodeWhiteList = ""; Mode.NodeWhiteList = "";
document.getElementById("idNodeWhiteList").value = Mode.NodeWhiteList; document.getElementById("idNodeWhiteList").value = Mode.NodeWhiteList;
} }
}; };
function SetNetworkParams(bRestart) function SetNetworkParams(bRestart) {
{
var Mode = {}; var Mode = {};
Mode.UseDirectIP = document.getElementById("idUseDirectIP").checked; Mode.UseDirectIP = document.getElementById("idUseDirectIP").checked;
Mode.ip = document.getElementById("idIP").value; Mode.ip = document.getElementById("idIP").value;
Mode.port = ParseNum(document.getElementById("idPort").value); Mode.port = ParseNum(document.getElementById("idPort").value);
Mode.NodeWhiteList = document.getElementById("idNodeWhiteList").value; Mode.NodeWhiteList = document.getElementById("idNodeWhiteList").value;
Mode.DoRestartNode = bRestart; Mode.DoRestartNode = bRestart;
GetData("SetNetMode", Mode, function (Data) GetData("SetNetMode", Mode, function(Data) {
{ if (Data && Data.result) {
if(Data && Data.result)
{
SetStatus("Set net work params OK"); SetStatus("Set net work params OK");
SetVisibleBlock('idNetworkView', false); SetVisibleBlock('idNetworkView', false);
} }
}); });
if(bRestart) if (bRestart)
DoRestartWallet(); DoRestartWallet();
}; };
function ViewConstant() function ViewConstant() {
{ if (IsVisibleBlock('idConstantView')) {
if(IsVisibleBlock('idConstantView'))
{
SetVisibleBlock('idConstantView', false); SetVisibleBlock('idConstantView', false);
} }
else else {
{
SetVisibleBlock('idConstantView', true); SetVisibleBlock('idConstantView', true);
document.getElementById("idConstant").value = JSON.stringify(CONFIG_DATA.CONSTANTS, "", 2); document.getElementById("idConstant").value = JSON.stringify(CONFIG_DATA.CONSTANTS, "", 2);
} }
}; };
function SaveConstant(bRestart) function SaveConstant(bRestart) {
{ try {
try
{
var Data = JSON.parse(document.getElementById("idConstant").value); var Data = JSON.parse(document.getElementById("idConstant").value);
} }
catch(e) catch (e) {
{
SetError("Error JSON format setting constant"); SetError("Error JSON format setting constant");
return ; return;
} }
Data.DoRestartNode = bRestart; Data.DoRestartNode = bRestart;
GetData("SaveConstant", Data, function (Data) GetData("SaveConstant", Data, function(Data) {
{ if (Data && Data.result) {
if(Data && Data.result)
{
SetStatus("Save Constant OK"); SetStatus("Save Constant OK");
SetVisibleBlock('idConstantView', false); SetVisibleBlock('idConstantView', false);
} }
}); });
if(bRestart) if (bRestart)
DoRestartWallet(); DoRestartWallet();
}; };
function ViewRemoteParams() function ViewRemoteParams() {
{ if (IsVisibleBlock('idRemoteView')) {
if(IsVisibleBlock('idRemoteView'))
{
SetVisibleBlock('idRemoteView', false); SetVisibleBlock('idRemoteView', false);
} }
else else {
{
SetVisibleBlock('idRemoteView', true); SetVisibleBlock('idRemoteView', true);
if(CONFIG_DATA.HTTPPort) if (CONFIG_DATA.HTTPPort)
document.getElementById("idHTTPPort").value = CONFIG_DATA.HTTPPort; document.getElementById("idHTTPPort").value = CONFIG_DATA.HTTPPort;
document.getElementById("idHTTPPassword").value = CONFIG_DATA.HTTPPassword; document.getElementById("idHTTPPassword").value = CONFIG_DATA.HTTPPassword;
} }
}; };
function SetRemoteParams(bRestart) function SetRemoteParams(bRestart) {
{
var PrevHTTPPassword = HTTPPassword; var PrevHTTPPassword = HTTPPassword;
var HTTPPort = ParseNum(document.getElementById("idHTTPPort").value); var HTTPPort = ParseNum(document.getElementById("idHTTPPort").value);
var HTTPPassword = document.getElementById("idHTTPPassword").value; var HTTPPassword = document.getElementById("idHTTPPassword").value;
GetData("SetHTTPParams", {HTTPPort:HTTPPort, HTTPPassword:HTTPPassword, DoRestartNode:bRestart}, function (Data) GetData("SetHTTPParams", { HTTPPort: HTTPPort, HTTPPassword: HTTPPassword, DoRestartNode: bRestart }, function(Data) {
{ if (!PrevHTTPPassword && HTTPPassword)
if(!PrevHTTPPassword && HTTPPassword)
window.location.reload(); window.location.reload();
else else {
{
SetVisibleBlock('idRemoteView', false); SetVisibleBlock('idRemoteView', false);
SetStatus("Set HTTP params OK"); SetStatus("Set HTTP params OK");
} }
}); });
if(bRestart) if (bRestart)
DoRestartWallet(); DoRestartWallet();
}; };
function RewriteAllTransactions() function RewriteAllTransactions() {
{
DoBlockChainProcess("RewriteAllTransactions", "Rewrite all transactions", 0); DoBlockChainProcess("RewriteAllTransactions", "Rewrite all transactions", 0);
}; };
function RewriteTransactions() function RewriteTransactions() {
{
DoBlockChainProcess("RewriteTransactions", "Rewrite transactions on last %1 blocks", 1); DoBlockChainProcess("RewriteTransactions", "Rewrite transactions on last %1 blocks", 1);
}; };
function TruncateBlockChain() function TruncateBlockChain() {
{
DoBlockChainProcess("TruncateBlockChain", "Truncate last %1 blocks", 1); DoBlockChainProcess("TruncateBlockChain", "Truncate last %1 blocks", 1);
}; };
function ClearDataBase() function ClearDataBase() {
{
DoBlockChainProcess("ClearDataBase", "Clear DataBase", 0); DoBlockChainProcess("ClearDataBase", "Clear DataBase", 0);
}; };
function CleanChain() function CleanChain() {
{
DoBlockChainProcess("CleanChain", "Clean chain on last %1 blocks", 1); DoBlockChainProcess("CleanChain", "Clean chain on last %1 blocks", 1);
}; };
function DoBlockChainProcess(FuncName,Text,LastBlock) function DoBlockChainProcess(FuncName, Text, LastBlock) {
{
SaveValues(); SaveValues();
var Params = {}; var Params = {};
if(LastBlock) if (LastBlock) {
{
Params.BlockCount = ParseNum(document.getElementById("idBlockCount").value); Params.BlockCount = ParseNum(document.getElementById("idBlockCount").value);
Text = Text.replace("%1", Params.BlockCount); Text = Text.replace("%1", Params.BlockCount);
} }
var result = confirm(Text + "?"); var result = confirm(Text + "?");
if(!result) if (!result)
return ; return;
SetVisibleBlock("idServerBlock", 1); SetVisibleBlock("idServerBlock", 1);
SetStatus("START: " + Text); SetStatus("START: " + Text);
GetData(FuncName, Params, function (Data) GetData(FuncName, Params, function(Data) {
{ if (Data) {
if(Data)
{
SetStatus("FINISH: " + Text, !Data.result); SetStatus("FINISH: " + Text, !Data.result);
} }
}); });

View File

@@ -4,3 +4,10 @@ DIST=ts
for name in `ls *.${EXT}`; do for name in `ls *.${EXT}`; do
mv $name ${name%.${EXT}}.${DIST} mv $name ${name%.${EXT}}.${DIST}
done done
: Function;
global.
BlockNumDB
RelayMode
LoadHistoryMessage
LastLoadedBlockNum

View File

@@ -15,7 +15,7 @@ global.HTTPCaller.CreateAccount = function(Params, response) {
Type: global.TYPE_TRANSACTION_CREATE, Currency: Params.Currency, PubKey: global.GetArrFromHex(Params.PubKey), Description: Params.Name, Type: global.TYPE_TRANSACTION_CREATE, Currency: Params.Currency, PubKey: global.GetArrFromHex(Params.PubKey), Description: Params.Name,
Smart: Params.Smart, Adviser: 0, Smart: Params.Smart, Adviser: 0,
}; };
var Body = global.BufLib.GetBufferFromObject(TR, global.global.FORMAT_CREATE, 1000, {}); var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_CREATE, 1000, {});
return { result: 1 }; return { result: 1 };
} }
return { result: 0 }; return { result: 0 };

View File

@@ -9,18 +9,34 @@
*/ */
"use strict"; "use strict";
require("./library.js"); import "./library"
require("./crypto-library"); import "./crypto-library"
require("./terahashmining"); import "./terahashmining"
import * as crypto from 'crypto'; import * as crypto from 'crypto';
const os = require('os'); import * as os from 'os'
global.glStopNode = false; global.glStopNode = false;
const MAX_TIME_NETWORK_TRANSPORT = 1 * 1000; const MAX_TIME_NETWORK_TRANSPORT = 1 * 1000;
var GlSumUser; var GlSumUser;
var GlSumSys; var GlSumSys;
var GlSumIdle; var GlSumIdle;
global.CountAllNode = 0; global.CountAllNode = 0;
module.exports = class CCommon importasdasd { module.exports = class CCommon {
VirtualMode
KeyPair
PubKeyType
addrArr
addrStr
HashDBArr
ServerSign
MetaMap1
MetaMap2
CheckName
NodesArr
CurrentBlockNum
ReadBlockHeaderDB
GetActualNodes
BlockNumDB
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
global.SERVER = this global.SERVER = this
this.VirtualMode = bVirtual this.VirtualMode = bVirtual
@@ -29,7 +45,7 @@ module.exports = class CCommon importasdasd {
this.PubKeyType = PubKey[0] this.PubKeyType = PubKey[0]
this.addrArr = PubKey.slice(1) this.addrArr = PubKey.slice(1)
this.addrStr = global.GetHexFromArr(this.addrArr) this.addrStr = global.GetHexFromArr(this.addrArr)
this.HashDBArr = shaarr2(this.KeyPair.getPrivateKey(), [0, 0, 0, 0, 0, 0, 0, 1]) this.HashDBArr = global.shaarr2(this.KeyPair.getPrivateKey(), [0, 0, 0, 0, 0, 0, 0, 1])
this.ServerSign = [] this.ServerSign = []
} }
AddStatOnTimer() { AddStatOnTimer() {
@@ -37,10 +53,10 @@ module.exports = class CCommon importasdasd {
var CurTime = global.GetCurrentTime() - 0; var CurTime = global.GetCurrentTime() - 0;
for (var i = 0; i < this.NodesArr.length; i++) { for (var i = 0; i < this.NodesArr.length; i++) {
var Item = this.NodesArr[i]; var Item = this.NodesArr[i];
if (Item.LastTime && (CurTime - Item.LastTime) < NODES_DELTA_CALC_HOUR * 3600 * 1000) if (Item.LastTime && (CurTime - Item.LastTime) < global.NODES_DELTA_CALC_HOUR * 3600 * 1000)
CountAll++ CountAll++
else else
if (Item.LastTimeGetNode && (CurTime - Item.LastTimeGetNode) < NODES_DELTA_CALC_HOUR * 3600 * 1000) if (Item.LastTimeGetNode && (CurTime - Item.LastTimeGetNode) < global.NODES_DELTA_CALC_HOUR * 3600 * 1000)
CountAll++ CountAll++
} }
global.CountAllNode = CountAll global.CountAllNode = CountAll
@@ -52,9 +68,9 @@ module.exports = class CCommon importasdasd {
global.ADD_TO_STAT("MAX:DELTA_TX", Delta) global.ADD_TO_STAT("MAX:DELTA_TX", Delta)
} }
var bHasCP = 0; var bHasCP = 0;
if (CHECK_POINT.BlockNum) { if (global.CHECK_POINT.BlockNum) {
var Block = this.ReadBlockHeaderDB(CHECK_POINT.BlockNum); var Block = this.ReadBlockHeaderDB(global.CHECK_POINT.BlockNum);
if (Block && global.CompareArr(CHECK_POINT.Hash, Block.Hash) === 0) if (Block && global.CompareArr(global.CHECK_POINT.Hash, Block.Hash) === 0)
bHasCP = 1 bHasCP = 1
} }
var MinVer = global.MIN_VER_STAT; var MinVer = global.MIN_VER_STAT;
@@ -73,7 +89,7 @@ module.exports = class CCommon importasdasd {
var INFO = Node.INFO; var INFO = Node.INFO;
if (!INFO) if (!INFO)
INFO = {} INFO = {}
if (bHasCP && CHECK_POINT.BlockNum && INFO.CheckPointHashDB && global.CompareArr(CHECK_POINT.Hash, INFO.CheckPointHashDB) === 0) { if (bHasCP && global.CHECK_POINT.BlockNum && INFO.CheckPointHashDB && global.CompareArr(global.CHECK_POINT.Hash, INFO.CheckPointHashDB) === 0) {
CountCP++ CountCP++
} }
if (INFO.LoadHistoryMode) if (INFO.LoadHistoryMode)
@@ -118,7 +134,7 @@ module.exports = class CCommon importasdasd {
global.ADD_TO_STAT("MAX:MIN_VERSION", CountVer) global.ADD_TO_STAT("MAX:MIN_VERSION", CountVer)
global.ADD_TO_STAT("MAX:STOP_GET", CountStop) global.ADD_TO_STAT("MAX:STOP_GET", CountStop)
global.ADD_TO_STAT("MAX:AUTOCORRECT", CountAutoCorrectTime) global.ADD_TO_STAT("MAX:AUTOCORRECT", CountAutoCorrectTime)
global.ADD_TO_STAT("MAX:TIME_DELTA", DELTA_CURRENT_TIME) global.ADD_TO_STAT("MAX:TIME_DELTA", global.DELTA_CURRENT_TIME)
if (!Count) if (!Count)
Count = 1 Count = 1
if (!CountHot) if (!CountHot)
@@ -202,7 +218,7 @@ class SMemBuffer {
if (typeof Arr === "number" || typeof Arr === "string") { if (typeof Arr === "number" || typeof Arr === "string") {
return Arr; return Arr;
} else { } else {
return GetHexFromAddres(Arr); return global.GetHexFromAddres(Arr);
} }
throw "NOT RET!"; throw "NOT RET!";
} }
@@ -229,7 +245,7 @@ class SMemBuffer {
this.MetaMap1[Key] = Value this.MetaMap1[Key] = Value
} }
ShiftMapDirect() { ShiftMapDirect() {
if (glStopNode) if (global.glStopNode)
return; return;
if (this.CheckName) { if (this.CheckName) {
var Count = 0; var Count = 0;
@@ -249,6 +265,10 @@ class SMemBuffer {
} }
}; };
class STreeBuffer { class STreeBuffer {
KeyType
MetaTree1
MetaTree2
CheckName
constructor(MaxTime, CompareFunction?, KeyType?, CheckName?) { constructor(MaxTime, CompareFunction?, KeyType?, CheckName?) {
this.KeyType = KeyType this.KeyType = KeyType
this.MetaTree1 = new RBTree(CompareFunction) this.MetaTree1 = new RBTree(CompareFunction)
@@ -364,9 +384,9 @@ function TestCreateTr() {
var StartData = Date.now(); var StartData = Date.now();
var nonce = CreateHashBodyPOWInnerMinPower(Body, 1000, 17); var nonce = CreateHashBodyPOWInnerMinPower(Body, 1000, 17);
var Time = process.hrtime(startTime); var Time = process.hrtime(startTime);
var power = GetPowPower(shaarr(Body)); var power = global.GetPowPower(global.shaarr(Body));
var deltaTime = (Time[0] * 1000 + Time[1] / 1e6) / 1000; var deltaTime = (Time[0] * 1000 + Time[1] / 1e6) / 1000;
var DeltaData = (new Date() - StartData) / 1000; var DeltaData = ((new Date() as any) - StartData) / 1000;
global.ToLog("power=" + power + " nonce=" + nonce + " TIME=" + deltaTime + " sec" + " DeltaData=" + DeltaData + " sec"); global.ToLog("power=" + power + " nonce=" + nonce + " TIME=" + deltaTime + " sec" + " DeltaData=" + DeltaData + " sec");
return { time1: deltaTime, time2: DeltaData }; return { time1: deltaTime, time2: DeltaData };
}; };
@@ -381,7 +401,7 @@ function CreateHashBodyPOWInnerMinPower(arr, BlockNum, MinPow) {
var nonce = 0; var nonce = 0;
while (1) { while (1) {
var arrhash = CreateHashBody(arr, BlockNum, nonce); var arrhash = CreateHashBody(arr, BlockNum, nonce);
var power = GetPowPower(arrhash); var power = global.GetPowPower(arrhash);
if (power >= MinPow) { if (power >= MinPow) {
return nonce; return nonce;
} }

View File

@@ -15,10 +15,10 @@ const TX_PROCESS_TIME = 100;
const TX_DELTA_PROCESS_TIME = 300; const TX_DELTA_PROCESS_TIME = 300;
global.CAN_START = false; global.CAN_START = false;
global.StrWarn = ""; global.StrWarn = "";
global.SUM_LIST_LENGTH = 2 * BLOCK_PROCESSING_LENGTH; global.SUM_LIST_LENGTH = 2 * global.BLOCK_PROCESSING_LENGTH;
global.CONSENSUS_TIK_TIME = CONSENSUS_PERIOD_TIME / 10; global.CONSENSUS_TIK_TIME = global.CONSENSUS_PERIOD_TIME / 10;
global.CONSENSUS_CHECK_TIME = CONSENSUS_PERIOD_TIME / 20; global.CONSENSUS_CHECK_TIME = global.CONSENSUS_PERIOD_TIME / 20;
const PERIOD_FOR_NEXT_SEND = CONSENSUS_TIK_TIME * 3; const PERIOD_FOR_NEXT_SEND = global.CONSENSUS_TIK_TIME * 3;
global.BLOCK_DELTA_ACTIVATE = 0; global.BLOCK_DELTA_ACTIVATE = 0;
global.TIME_END_EXCHANGE = - 3; global.TIME_END_EXCHANGE = - 3;
global.TIME_START_POW = - 4; global.TIME_START_POW = - 4;
@@ -40,47 +40,53 @@ var FORMAT_DATA_TRANSFER = "{\
const WorkStructSend = {}; const WorkStructSend = {};
module.exports = class CConsensus extends require("./block-loader") module.exports = class CConsensus extends require("./block-loader")
{ {
CurrentBlockNum
SendBlockID
RelayMode
TreeSendPacket
idBlockChainTimer
OwnBlockCount
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
this.CurrentBlockNum = 0 this.CurrentBlockNum = 0
this.SendBlockID = 0 this.SendBlockID = 0
this.RelayMode = false this.RelayMode = false
this.TreeSendPacket = new RBTree(CompareItemHash) this.TreeSendPacket = new RBTree(global.CompareItemHash)
if (!global.ADDRLIST_MODE && !this.VirtualMode) { if (!global.ADDRLIST_MODE && !this.VirtualMode) {
this.idBlockChainTimer = setInterval(this.StartBlockChain.bind(this), CONSENSUS_PERIOD_TIME - 5) this.idBlockChainTimer = setInterval(this.StartBlockChain.bind(this), global.CONSENSUS_PERIOD_TIME - 5)
setInterval(this.DoTransfer.bind(this), CONSENSUS_CHECK_TIME) setInterval(this.DoTransfer.bind(this), global.CONSENSUS_CHECK_TIME)
} }
} }
StartBlockChain() { StartBlockChain() {
this.OnStartSecond() this.OnStartSecond()
var CurTimeNum = global.GetCurrentTime() - CONSENSUS_PERIOD_TIME / 2; var CurTimeNum = global.GetCurrentTime() - global.CONSENSUS_PERIOD_TIME / 2;
var StartTimeNum = Math.floor((CurTimeNum + CONSENSUS_PERIOD_TIME) / CONSENSUS_PERIOD_TIME) * CONSENSUS_PERIOD_TIME; var StartTimeNum = Math.floor((CurTimeNum + global.CONSENSUS_PERIOD_TIME) / global.CONSENSUS_PERIOD_TIME) * global.CONSENSUS_PERIOD_TIME;
var DeltaForStart = StartTimeNum - CurTimeNum; var DeltaForStart = StartTimeNum - CurTimeNum;
if (DeltaForStart < (CONSENSUS_PERIOD_TIME - 5)) { if (DeltaForStart < (global.CONSENSUS_PERIOD_TIME - 5)) {
var self = this; var self = this;
if (self.idBlockChainTimer) if (self.idBlockChainTimer)
clearInterval(self.idBlockChainTimer) clearInterval(self.idBlockChainTimer)
self.idBlockChainTimer = 0 self.idBlockChainTimer = 0
setTimeout(function() { setTimeout(function() {
self.idBlockChainTimer = setInterval(self.StartBlockChain.bind(self), CONSENSUS_PERIOD_TIME) self.idBlockChainTimer = setInterval(self.StartBlockChain.bind(self), global.CONSENSUS_PERIOD_TIME)
self.OnStartSecond() self.OnStartSecond()
}, DeltaForStart) }, DeltaForStart)
} }
} }
OnStartSecond() { OnStartSecond() {
PrepareStatEverySecond() global.PrepareStatEverySecond()
this.AddStatOnTimer() this.AddStatOnTimer()
this.DoBlockChain() this.DoBlockChain()
} }
CreateBlockContext() { CreateBlockContext() {
var Context = {}; var Context: any = {};
Context.AddInfo = AddInfoBlock.bind(Context) Context.AddInfo = global.AddInfoBlock.bind(Context)
Context.Active = false Context.Active = false
Context.TransferFromAddr = {} Context.TransferFromAddr = {}
Context.LevelsTransfer = [] Context.LevelsTransfer = []
Context.ErrRun = "" Context.ErrRun = ""
Context.PowTxTree = new RBTree(CompareItemTimePow) Context.PowTxTree = new RBTree(global.CompareItemTimePow)
Context.PowTicketTree = new RBTree(CompareItemTimePow) Context.PowTicketTree = new RBTree(global.CompareItemTimePow)
Context.bSave = false Context.bSave = false
Context.PrevHash = undefined Context.PrevHash = undefined
Context.TreeHash = undefined Context.TreeHash = undefined
@@ -91,7 +97,7 @@ module.exports = class CConsensus extends require("./block-loader")
Context.TrCount = 0 Context.TrCount = 0
Context.TrDataPos = 0 Context.TrDataPos = 0
Context.TrDataLen = 0 Context.TrDataLen = 0
Context.Info = "Create at:" + GetStrOnlyTimeUTC() Context.Info = "Create at:" + global.GetStrOnlyTimeUTC()
var Transfer; var Transfer;
var TransferM2; var TransferM2;
var LocalLevel = 0; var LocalLevel = 0;
@@ -100,7 +106,7 @@ module.exports = class CConsensus extends require("./block-loader")
var arr = Levels[L]; var arr = Levels[L];
if (arr && arr.length > 0) { if (arr && arr.length > 0) {
Transfer = { Transfer = {
LocalLevel: LocalLevel, TreeLevel: L, SendCount: 0, GetCount: 0, TransferNodes: {}, WasGet: false, WasSend: false, MustDeltaTime: CONSENSUS_TIK_TIME * (2 + MAX_LEVEL_SPECIALIZATION - L), LocalLevel: LocalLevel, TreeLevel: L, SendCount: 0, GetCount: 0, TransferNodes: {}, WasGet: false, WasSend: false, MustDeltaTime: global.CONSENSUS_TIK_TIME * (2 + global.MAX_LEVEL_SPECIALIZATION - L),
} }
LocalLevel++ LocalLevel++
Context.LevelsTransfer.push(Transfer) Context.LevelsTransfer.push(Transfer)
@@ -109,7 +115,7 @@ module.exports = class CConsensus extends require("./block-loader")
var Node = arr[j]; var Node = arr[j];
var Addr = Node.addrStr; var Addr = Node.addrStr;
if (!Transfer.TransferNodes[Addr]) { if (!Transfer.TransferNodes[Addr]) {
let Item = { Node: Node, SendCount: 0, GetCount: 0, addrStr: Addr, TreeLevel: L, GetTiming: 3 * CONSENSUS_PERIOD_TIME, }; let Item = { Node: Node, SendCount: 0, GetCount: 0, addrStr: Addr, TreeLevel: L, GetTiming: 3 * global.CONSENSUS_PERIOD_TIME, };
Transfer.TransferNodes[Addr] = Item Transfer.TransferNodes[Addr] = Item
} }
Context.TransferFromAddr[Addr] = Transfer Context.TransferFromAddr[Addr] = Transfer
@@ -120,19 +126,19 @@ module.exports = class CConsensus extends require("./block-loader")
return Context; return Context;
} }
StartConsensus() { StartConsensus() {
if (!CAN_START) if (!global.global.CAN_START)
return; return;
var StartBlockNum = GetCurrentBlockNumByTime(); var StartBlockNum = global.GetCurrentBlockNumByTime();
if (StartBlockNum < global.BLOCK_PROCESSING_LENGTH2) if (StartBlockNum < global.BLOCK_PROCESSING_LENGTH2)
return; return;
this.CurrentBlockNum = StartBlockNum this.CurrentBlockNum = StartBlockNum
var Block0 = this.GetBlockContext(StartBlockNum - BLOCK_DELTA_ACTIVATE); var Block0 = this.GetBlockContext(StartBlockNum - global.BLOCK_DELTA_ACTIVATE);
if (!Block0.Active) { if (!Block0.Active) {
AddInfoBlock(Block0, "Activate") global.AddInfoBlock(Block0, "Activate")
this.StartBlock(Block0) this.StartBlock(Block0)
} }
else { else {
AddInfoBlock(Block0, "Was Active") global.AddInfoBlock(Block0, "Was Active")
} }
} }
TrToInfo(Block, Array, StrInfo) { TrToInfo(Block, Array, StrInfo) {
@@ -140,9 +146,9 @@ module.exports = class CConsensus extends require("./block-loader")
for (var i = 0; i < Array.length; i++) { for (var i = 0; i < Array.length; i++) {
var Item = Array[i]; var Item = Array[i];
this.CheckCreateTransactionObject(Item) this.CheckCreateTransactionObject(Item)
Str += this.GetStrFromHashShort(shaarr(Item.body)) + "(" + Item.body.length + ")," Str += this.GetStrFromHashShort(global.shaarr(Item.body)) + "(" + Item.body.length + "),"
} }
AddInfoBlock(Block, "" + StrInfo + ": Arr=[" + Str + "]") global.AddInfoBlock(Block, "" + StrInfo + ": Arr=[" + Str + "]")
} }
TRANSFER(Info, CurTime) { TRANSFER(Info, CurTime) {
var startTime = process.hrtime(); var startTime = process.hrtime();
@@ -202,7 +208,7 @@ module.exports = class CConsensus extends require("./block-loader")
} }
} }
} }
ADD_TO_STAT_TIME("TRANSFER_MS", startTime) global.ADD_TO_STAT_TIME("TRANSFER_MS", startTime)
var Delta = Date.now() - this.StartLoadBlockTime; var Delta = Date.now() - this.StartLoadBlockTime;
if (Delta > 10 * 1000 && Node.TransferCount > 10) { if (Delta > 10 * 1000 && Node.TransferCount > 10) {
Node.BlockProcessCount++ Node.BlockProcessCount++
@@ -211,19 +217,19 @@ module.exports = class CConsensus extends require("./block-loader")
Node.TransferCount++ Node.TransferCount++
Node.LastTimeTransfer = global.GetCurrentTime() - 0 Node.LastTimeTransfer = global.GetCurrentTime() - 0
var Item = Transfer.TransferNodes[Key]; var Item = Transfer.TransferNodes[Key];
Item.GetTiming = GetCurrentTime(Block.DELTA_CURRENT_TIME) - Block.StartTimeNum Item.GetTiming = global.GetCurrentTime(Block.DELTA_CURRENT_TIME) - Block.StartTimeNum
if (!Block.TransferNodesCount) if (!Block.TransferNodesCount)
Block.TransferNodesCount = 0 Block.TransferNodesCount = 0
Block.TransferNodesCount++ Block.TransferNodesCount++
} }
DoTransfer() { DoTransfer() {
if (glStopNode) if (global.glStopNode)
return; return;
if (!CAN_START) if (!global.CAN_START)
return; return;
var MaxPOWList; var MaxPOWList;
var MaxSumList; var MaxSumList;
var start = this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH; var start = this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH;
var finish = this.GetLastCorrectBlockNum(); var finish = this.GetLastCorrectBlockNum();
for (var b = start; b <= finish; b++) { for (var b = start; b <= finish; b++) {
var Block = this.GetBlock(b); var Block = this.GetBlock(b);
@@ -257,7 +263,7 @@ module.exports = class CConsensus extends require("./block-loader")
Transfer.WasSend = true Transfer.WasSend = true
var bNext = Transfer.WasGet; var bNext = Transfer.WasGet;
if (!bNext) { if (!bNext) {
var CurTimeNum = GetCurrentTime(Block.DELTA_CURRENT_TIME) - 0; var CurTimeNum = global.GetCurrentTime(Block.DELTA_CURRENT_TIME) - 0;
var DeltaTime = CurTimeNum - Block.StartTimeNum; var DeltaTime = CurTimeNum - Block.StartTimeNum;
if (DeltaTime > Transfer.MustDeltaTime) { if (DeltaTime > Transfer.MustDeltaTime) {
bNext = true bNext = true
@@ -393,7 +399,7 @@ module.exports = class CConsensus extends require("./block-loader")
if (this.CanSendTest()) if (this.CanSendTest())
Arr.push(Tr0) Arr.push(Tr0)
BufLength += Tr0.body.length BufLength += Tr0.body.length
if (BufLength > MAX_BLOCK_SIZE) if (BufLength > global.MAX_BLOCK_SIZE)
break; break;
} }
else { else {
@@ -479,7 +485,7 @@ module.exports = class CConsensus extends require("./block-loader")
} }
return 0; return 0;
} }
FilterArrForSendNode(Block, Node, ArrTx, bTt) { FilterArrForSendNode(Block, Node, ArrTx, bTt?) {
var Arr = []; var Arr = [];
for (var t = 0; t < ArrTx.length; t++) { for (var t = 0; t < ArrTx.length; t++) {
var Tr = ArrTx[t]; var Tr = ArrTx[t];
@@ -521,7 +527,7 @@ module.exports = class CConsensus extends require("./block-loader")
this.CheckTxExchange(Block, bSend) this.CheckTxExchange(Block, bSend)
} }
} }
CheckTxExchange(Block) { CheckTxExchange(Block, b?) {
return; return;
if (Block.EndExchange) if (Block.EndExchange)
return; return;
@@ -627,7 +633,7 @@ module.exports = class CConsensus extends require("./block-loader")
"Version": 5, "BlockNum": Block.BlockNum, "Reserv1": 0, "MaxPOW": MaxPOWList, "Reserv2": 0, "BaseBlockNum": this.CurrentBlockNum - Block.BlockNum, "Version": 5, "BlockNum": Block.BlockNum, "Reserv1": 0, "MaxPOW": MaxPOWList, "Reserv2": 0, "BaseBlockNum": this.CurrentBlockNum - Block.BlockNum,
"MaxSumID": MaxSumID, "BlockList": BlockList, "TicketArray": ArrTt, "TxArray": ArrTx, "NoSendTx": Node.NoSendTx, "MaxSumID": MaxSumID, "BlockList": BlockList, "TicketArray": ArrTt, "TxArray": ArrTx, "NoSendTx": Node.NoSendTx,
} }
var BufWrite = global.BufLib.GetBufferFromObject(Data, FORMAT_DATA_TRANSFER, MAX_BLOCK_SIZE + 30000, WorkStructSend); var BufWrite = global.BufLib.GetBufferFromObject(Data, FORMAT_DATA_TRANSFER, global.MAX_BLOCK_SIZE + 30000, WorkStructSend);
return BufWrite; return BufWrite;
} }
static static
@@ -642,11 +648,11 @@ module.exports = class CConsensus extends require("./block-loader")
var StrKey = this.GetStrFromHashShort(LoadHash); var StrKey = this.GetStrFromHashShort(LoadHash);
var StrHashWas = this.GetStrFromHashShort(Block.Hash); var StrHashWas = this.GetStrFromHashShort(Block.Hash);
this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START OTHER:" + StrKey + " WAS:" + StrHashWas, false) this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START OTHER:" + StrKey + " WAS:" + StrHashWas, false)
AddInfoBlock(Block, "REQ H: " + StrKey) global.AddInfoBlock(Block, "REQ H: " + StrKey)
} }
Block.CheckMaxPow = true Block.CheckMaxPow = true
} }
AddToMaxPOW(Block, item, Node) { AddToMaxPOW(Block, item, Node?) {
if (Block && item) { if (Block && item) {
if (!Block.MaxPOW) if (!Block.MaxPOW)
Block.MaxPOW = {} Block.MaxPOW = {}
@@ -655,7 +661,7 @@ module.exports = class CConsensus extends require("./block-loader")
return; return;
item.BlockNum = Block.BlockNum item.BlockNum = Block.BlockNum
item.PrevHash = Block.PrevHash item.PrevHash = Block.PrevHash
CalcHashBlockFromSeqAddr(item, Block.PrevHash, global.MINING_VERSION_NUM) global.CalcHashBlockFromSeqAddr(item, Block.PrevHash, global.MINING_VERSION_NUM)
if (POW.SeqHash === undefined || global.CompareArr(item.PowHash, POW.PowHash) < 0) { if (POW.SeqHash === undefined || global.CompareArr(item.PowHash, POW.PowHash) < 0) {
POW.AddrHash = item.AddrHash POW.AddrHash = item.AddrHash
POW.Hash = item.Hash POW.Hash = item.Hash
@@ -678,8 +684,8 @@ module.exports = class CConsensus extends require("./block-loader")
if (wasLider) { if (wasLider) {
var newLider = POW.MaxTree.min(); var newLider = POW.MaxTree.min();
if (newLider !== wasLider) { if (newLider !== wasLider) {
var Power = GetPowPower(newLider.PowHash); var Power = global.GetPowPower(newLider.PowHash);
AddInfoBlock(Block, "MaxPOW: " + Power) global.AddInfoBlock(Block, "MaxPOW: " + Power)
} }
} }
} }
@@ -701,7 +707,7 @@ module.exports = class CConsensus extends require("./block-loader")
GetMaxPOWList() { GetMaxPOWList() {
var arr = []; var arr = [];
var start, finish; var start, finish;
start = this.CurrentBlockNum + TIME_START_SAVE - 2 start = this.CurrentBlockNum + global.TIME_START_SAVE - 2
finish = this.CurrentBlockNum finish = this.CurrentBlockNum
for (var b = start; b < finish; b++) { for (var b = start; b < finish; b++) {
var Block = this.GetBlock(b); var Block = this.GetBlock(b);
@@ -720,7 +726,7 @@ module.exports = class CConsensus extends require("./block-loader")
ToMaxPOWList(Arr) { ToMaxPOWList(Arr) {
for (var i = 0; i < Arr.length; i++) { for (var i = 0; i < Arr.length; i++) {
var item = Arr[i]; var item = Arr[i];
if (item && item.BlockNum >= this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH && item.BlockNum < this.CurrentBlockNum) { if (item && item.BlockNum >= this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH && item.BlockNum < this.CurrentBlockNum) {
var Block = this.GetBlock(item.BlockNum); var Block = this.GetBlock(item.BlockNum);
this.AddToMaxPOW(Block, item) this.AddToMaxPOW(Block, item)
} }
@@ -750,7 +756,7 @@ module.exports = class CConsensus extends require("./block-loader")
var LoadHash = POW.SumHash; var LoadHash = POW.SumHash;
var StrKey = this.GetStrFromHashShort(LoadHash); var StrKey = this.GetStrFromHashShort(LoadHash);
if (this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START POW:" + POW.SumPow + ">" + SumPow + " SH:" + StrKey, true)) if (this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START POW:" + POW.SumPow + ">" + SumPow + " SH:" + StrKey, true))
AddInfoBlock(Block, "REQ SH: " + StrKey) global.AddInfoBlock(Block, "REQ SH: " + StrKey)
} }
Block.CheckMaxSum = true Block.CheckMaxSum = true
} }
@@ -764,7 +770,7 @@ module.exports = class CConsensus extends require("./block-loader")
POW.SumPow = SumPow POW.SumPow = SumPow
POW.SumHash = item.SumHash POW.SumHash = item.SumHash
POW.SumList = item.SumList POW.SumList = item.SumList
AddInfoBlock(Block, "SumPow:" + POW.SumPow) global.AddInfoBlock(Block, "SumPow:" + POW.SumPow)
Block.CheckMaxSum = false Block.CheckMaxSum = false
} }
return SumPow; return SumPow;
@@ -774,7 +780,7 @@ module.exports = class CConsensus extends require("./block-loader")
GetMaxSumList() { GetMaxSumList() {
var Arr = []; var Arr = [];
var start, finish; var start, finish;
start = this.CurrentBlockNum + TIME_START_LOAD - 2 start = this.CurrentBlockNum + global.TIME_START_LOAD - 2
finish = this.CurrentBlockNum finish = this.CurrentBlockNum
for (var b = start; b <= finish; b++) { for (var b = start; b <= finish; b++) {
var Block = this.GetBlock(b); var Block = this.GetBlock(b);
@@ -788,7 +794,7 @@ module.exports = class CConsensus extends require("./block-loader")
} }
ToMaxSumList(Arr) { ToMaxSumList(Arr) {
var start, finish; var start, finish;
start = this.CurrentBlockNum + TIME_START_LOAD - 2 start = this.CurrentBlockNum + global.TIME_START_LOAD - 2
finish = this.CurrentBlockNum finish = this.CurrentBlockNum
for (var i = 0; i < Arr.length; i++) { for (var i = 0; i < Arr.length; i++) {
var item = Arr[i]; var item = Arr[i];
@@ -803,7 +809,7 @@ module.exports = class CConsensus extends require("./block-loader")
} }
GetBlockList(CurBlockNum) { GetBlockList(CurBlockNum) {
var arr = []; var arr = [];
for (var b = CurBlockNum - SUM_LIST_LENGTH + 1; b <= CurBlockNum; b++) { for (var b = CurBlockNum - global.SUM_LIST_LENGTH + 1; b <= CurBlockNum; b++) {
var Block = this.GetBlock(b); var Block = this.GetBlock(b);
if (Block && Block.bSave) { if (Block && Block.bSave) {
var item = { AddrHash: Block.AddrHash, SeqHash: Block.SeqHash, }; var item = { AddrHash: Block.AddrHash, SeqHash: Block.SeqHash, };
@@ -817,7 +823,7 @@ module.exports = class CConsensus extends require("./block-loader")
} }
GetSumFromList(arr, CurBlockNum) { GetSumFromList(arr, CurBlockNum) {
var SumPow = 0; var SumPow = 0;
if (arr.length !== SUM_LIST_LENGTH) if (arr.length !== global.SUM_LIST_LENGTH)
return SumPow; return SumPow;
var CountLoad = 0; var CountLoad = 0;
var BlockNumStart = CurBlockNum - arr.length + 1; var BlockNumStart = CurBlockNum - arr.length + 1;
@@ -825,8 +831,8 @@ module.exports = class CConsensus extends require("./block-loader")
var Item = arr[i]; var Item = arr[i];
if (Item) { if (Item) {
Item.BlockNum = BlockNumStart + i Item.BlockNum = BlockNumStart + i
var Value = GetHashFromSeqAddr(Item.SeqHash, Item.AddrHash, Item.BlockNum, undefined, global.MINING_VERSION_NUM); var Value = global.GetHashFromSeqAddr(Item.SeqHash, Item.AddrHash, Item.BlockNum, undefined, global.MINING_VERSION_NUM);
SumPow += GetPowPower(Value.PowHash) SumPow += global.GetPowPower(Value.PowHash)
Item.Hash3 = Value.Hash Item.Hash3 = Value.Hash
} }
else { else {
@@ -844,7 +850,7 @@ module.exports = class CConsensus extends require("./block-loader")
while ((Item = it.next()) !== null) { while ((Item = it.next()) !== null) {
arr.push(Item) arr.push(Item)
BufLength += Item.body.length BufLength += Item.body.length
if (BufLength > MAX_BLOCK_SIZE) if (BufLength > global.MAX_BLOCK_SIZE)
break; break;
} }
return arr; return arr;
@@ -866,7 +872,7 @@ module.exports = class CConsensus extends require("./block-loader")
} }
else { else {
Tree.insert(Tr) Tree.insert(Tr)
if (Tree.size > MAX_TRANSACTION_LIMIT) { if (Tree.size > global.MAX_TRANSACTION_LIMIT) {
var maxitem = Tree.max(); var maxitem = Tree.max();
Tree.remove(maxitem) Tree.remove(maxitem)
if (global.CompareArr(maxitem.HashPow, Tr.HashPow) === 0) if (global.CompareArr(maxitem.HashPow, Tr.HashPow) === 0)
@@ -886,7 +892,7 @@ module.exports = class CConsensus extends require("./block-loader")
return null; return null;
} }
} }
AddTrToBlockQuote(Block, Tr, bTTAdd) { AddTrToBlockQuote(Block, Tr, bTTAdd?) {
if (Block.PowTxTree) { if (Block.PowTxTree) {
var Res = this.IsValidTransaction(Tr, Block.BlockNum); var Res = this.IsValidTransaction(Tr, Block.BlockNum);
if (Res >= 1) { if (Res >= 1) {
@@ -907,8 +913,8 @@ module.exports = class CConsensus extends require("./block-loader")
if (!Context || !Context.StartTimeNum) { if (!Context || !Context.StartTimeNum) {
Context = this.CreateBlockContext() Context = this.CreateBlockContext()
Context.BlockNum = BlockNum Context.BlockNum = BlockNum
Context.DELTA_CURRENT_TIME = GetDeltaCurrentTime() Context.DELTA_CURRENT_TIME = global.GetDeltaCurrentTime()
Context.StartTimeNum = (BlockNum - 1 + BLOCK_DELTA_ACTIVATE) * CONSENSUS_PERIOD_TIME + START_NETWORK_DATE Context.StartTimeNum = (BlockNum - 1 + global.BLOCK_DELTA_ACTIVATE) * global.CONSENSUS_PERIOD_TIME + global.START_NETWORK_DATE
this.BlockChain[BlockNum] = Context this.BlockChain[BlockNum] = Context
} }
if (!Context.TransferFromAddr) { if (!Context.TransferFromAddr) {
@@ -921,7 +927,7 @@ module.exports = class CConsensus extends require("./block-loader")
Block.Active = true Block.Active = true
} }
IsCorrectBlockNum(BlockNum) { IsCorrectBlockNum(BlockNum) {
var start = this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH; var start = this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH;
var finish = this.GetLastCorrectBlockNum(); var finish = this.GetLastCorrectBlockNum();
if (BlockNum < start || BlockNum > finish) { if (BlockNum < start || BlockNum > finish) {
return false; return false;
@@ -971,23 +977,23 @@ module.exports = class CConsensus extends require("./block-loader")
hashStr = Block.ErrRun.substr(0, 5) hashStr = Block.ErrRun.substr(0, 5)
else else
if (Block && Block.TreeHash) if (Block && Block.TreeHash)
hashStr = "-" + GetHexFromAddres(Block.TreeHash).substr(0, 3) + "-" hashStr = "-" + global.GetHexFromAddres(Block.TreeHash).substr(0, 3) + "-"
} }
else else
if (Block && Block.TreeHash) { if (Block && Block.TreeHash) {
hashStr = GetHexFromAddres(Block.TreeHash).substr(0, 5) hashStr = global.GetHexFromAddres(Block.TreeHash).substr(0, 5)
} }
Str = Str + "|" + (hashStr + " ").substr(0, 5) Str = Str + "|" + (hashStr + " ").substr(0, 5)
} }
Str = Str.substr(1) Str = Str.substr(1)
ToInfo("" + finish + " -> " + Str + " " + DopStr) global.ToInfo("" + finish + " -> " + Str + " " + DopStr)
} }
PreparePOWHash(Block) { PreparePOWHash(Block) {
if (!Block.TreeHash) if (!Block.TreeHash)
Block.TreeHash = [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] Block.TreeHash = [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]
var PrevHash = this.GetPrevHash(Block); var PrevHash = this.GetPrevHash(Block);
if (!PrevHash) { if (!PrevHash) {
AddInfoBlock(Block, "-err prev hash-") global.AddInfoBlock(Block, "-err prev hash-")
return false; return false;
} }
Block.PrevHash = PrevHash Block.PrevHash = PrevHash
@@ -996,7 +1002,7 @@ module.exports = class CConsensus extends require("./block-loader")
Block.Prepared = true Block.Prepared = true
if (global.USE_MINING && !Block.StartMining) { if (global.USE_MINING && !Block.StartMining) {
Block.StartMining = true Block.StartMining = true
AddInfoBlock(Block, "-send mining-") global.AddInfoBlock(Block, "-send mining-")
global.SetCalcPOW(Block, "FastCalcBlock") global.SetCalcPOW(Block, "FastCalcBlock")
} }
return true; return true;
@@ -1007,7 +1013,7 @@ module.exports = class CConsensus extends require("./block-loader")
var Tr = arrTr[i]; var Tr = arrTr[i];
arrHASH.push(Tr.HASH) arrHASH.push(Tr.HASH)
} }
var Tree = CalcMerklFromArray(BlockNum, arrHASH); var Tree = global.CalcMerklFromArray(BlockNum, arrHASH);
return Tree.Root; return Tree.Root;
} }
CreateTreeHash(Block) { CreateTreeHash(Block) {
@@ -1018,10 +1024,10 @@ module.exports = class CConsensus extends require("./block-loader")
return; return;
var PrevBlock = this.GetBlock(Block.BlockNum - 1); var PrevBlock = this.GetBlock(Block.BlockNum - 1);
if (PrevBlock && !PrevBlock.EndExchange && !PrevBlock.bSave) { if (PrevBlock && !PrevBlock.EndExchange && !PrevBlock.bSave) {
AddInfoBlock(Block, "Prev Not End Exchange") global.AddInfoBlock(Block, "Prev Not End Exchange")
return; return;
} }
AddInfoBlock(Block, "End Exchange,N=" + Block.TransferNodesCount) global.AddInfoBlock(Block, "End Exchange,N=" + Block.TransferNodesCount)
var arrContent = []; var arrContent = [];
var arrHASH = []; var arrHASH = [];
var arrTr = this.GetArrayFromTxTree(Block); var arrTr = this.GetArrayFromTxTree(Block);
@@ -1031,7 +1037,7 @@ module.exports = class CConsensus extends require("./block-loader")
arrContent.push(Tr.body) arrContent.push(Tr.body)
arrHASH.push(Tr.HASH) arrHASH.push(Tr.HASH)
} }
var Tree = CalcMerklFromArray(Block.BlockNum, arrHASH); var Tree = global.CalcMerklFromArray(Block.BlockNum, arrHASH);
Block.TreeHash = Tree.Root Block.TreeHash = Tree.Root
Block.arrContent = arrContent Block.arrContent = arrContent
Block.TrCount = Block.arrContent.length Block.TrCount = Block.arrContent.length
@@ -1049,49 +1055,49 @@ module.exports = class CConsensus extends require("./block-loader")
return; return;
} }
if (global.CompareArr(BlockDB.Hash, Block.Hash) !== 0) { if (global.CompareArr(BlockDB.Hash, Block.Hash) !== 0) {
AddInfoBlock(Block, "=ERR:WATCHDOG=") global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
global.ToLog("#3 WatchdogSaved: Error Hash on Num=" + BlockNum) global.ToLog("#3 WatchdogSaved: Error Hash on Num=" + BlockNum)
return; return;
} }
if (global.CompareArr(BlockDB.SumHash, Block.SumHash) !== 0) { if (global.CompareArr(BlockDB.SumHash, Block.SumHash) !== 0) {
AddInfoBlock(Block, "=ERR:WATCHDOG=") global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
global.ToLog("#4 WatchdogSaved: Error SumHash on Num=" + BlockNum) global.ToLog("#4 WatchdogSaved: Error SumHash on Num=" + BlockNum)
return; return;
} }
if (global.CompareArr(BlockDB.SeqHash, Block.SeqHash) !== 0) { if (global.CompareArr(BlockDB.SeqHash, Block.SeqHash) !== 0) {
AddInfoBlock(Block, "=ERR:WATCHDOG=") global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
global.ToLog("#5 WatchdogSaved: Error SeqHash on Num=" + BlockNum) global.ToLog("#5 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
return; return;
} }
var PrevHash = this.GetPrevHash(Block); var PrevHash = this.GetPrevHash(Block);
if (!PrevHash) { if (!PrevHash) {
AddInfoBlock(Block, "=ERR:WATCHDOG=") global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
global.ToLog("#6 WatchdogSaved: Error PrevHash on Num=" + BlockNum) global.ToLog("#6 WatchdogSaved: Error PrevHash on Num=" + BlockNum)
return; return;
} }
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash); var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) { if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) {
AddInfoBlock(Block, "=ERR:WATCHDOG=") global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
global.ToLog("#7 WatchdogSaved: Error SeqHash on Num=" + BlockNum) global.ToLog("#7 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
return; return;
} }
PrevHash = this.GetPrevHashDB(BlockDB) PrevHash = this.GetPrevHashDB(BlockDB)
SeqHash = this.GetSeqHash(BlockDB.BlockNum, PrevHash, BlockDB.TreeHash) SeqHash = this.GetSeqHash(BlockDB.BlockNum, PrevHash, BlockDB.TreeHash)
if (global.CompareArr(SeqHash, BlockDB.SeqHash) !== 0) { if (global.CompareArr(SeqHash, BlockDB.SeqHash) !== 0) {
AddInfoBlock(Block, "=ERR:WATCHDOG=") global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
global.ToLog("#8 WatchdogSaved: Error SeqHash on Num=" + BlockNum) global.ToLog("#8 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
return; return;
} }
} }
} }
DoBlockChain() { DoBlockChain() {
if (glStopNode) if (global.glStopNode)
return; return;
if (!CAN_START) if (!global.CAN_START)
return; return;
this.StartConsensus() this.StartConsensus()
var CURRENTBLOCKNUM = this.CurrentBlockNum; var CURRENTBLOCKNUM = this.CurrentBlockNum;
if (GrayConnect()) { if (global.GrayConnect()) {
if (!this.LoadHistoryMode) if (!this.LoadHistoryMode)
this.StartSyncBlockchain(undefined, 1) this.StartSyncBlockchain(undefined, 1)
return; return;
@@ -1101,7 +1107,7 @@ module.exports = class CConsensus extends require("./block-loader")
var bWasSave = false; var bWasSave = false;
var LoadBlockNum; var LoadBlockNum;
var LoadHash; var LoadHash;
var start_save = CURRENTBLOCKNUM + TIME_START_SAVE; var start_save = CURRENTBLOCKNUM + global.TIME_START_SAVE;
for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < CURRENTBLOCKNUM; BlockNum++) { for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < CURRENTBLOCKNUM; BlockNum++) {
var Block = this.GetBlock(BlockNum); var Block = this.GetBlock(BlockNum);
if (!Block) { if (!Block) {
@@ -1121,10 +1127,10 @@ module.exports = class CConsensus extends require("./block-loader")
if (Block.bSave) { if (Block.bSave) {
bWasSave = true bWasSave = true
if (Block.MaxSum && !Block.CheckMaxSum) { if (Block.MaxSum && !Block.CheckMaxSum) {
AddInfoBlock(Block, "CheckMaxSum") global.AddInfoBlock(Block, "CheckMaxSum")
this.CheckMaxSum(Block) this.CheckMaxSum(Block)
} }
if (BlockNum <= CURRENTBLOCKNUM - BLOCK_PROCESSING_LENGTH * 4) { if (BlockNum <= CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH * 4) {
Block.TransferFromAddr = undefined Block.TransferFromAddr = undefined
Block.LevelsTransfer = undefined Block.LevelsTransfer = undefined
Block.mapData = undefined Block.mapData = undefined
@@ -1141,39 +1147,39 @@ module.exports = class CConsensus extends require("./block-loader")
var PrevBlock = this.GetBlock(BlockNum - 1); var PrevBlock = this.GetBlock(BlockNum - 1);
if (!PrevBlock) { if (!PrevBlock) {
Block.HasErr = 1 Block.HasErr = 1
AddInfoBlock(Block, "!PrevBlock") global.AddInfoBlock(Block, "!PrevBlock")
continue; continue;
} }
if (BlockNum >= CURRENTBLOCKNUM + TIME_END_EXCHANGE) { if (BlockNum >= CURRENTBLOCKNUM + global.TIME_END_EXCHANGE) {
if (!Block.Active) { if (!Block.Active) {
AddInfoBlock(Block, "WAIT ACTIVATE") global.AddInfoBlock(Block, "WAIT ACTIVATE")
continue; continue;
} }
else else
if (!Block.EndExchange) { if (!Block.EndExchange) {
AddInfoBlock(Block, "WAIT EXCHANGE") global.AddInfoBlock(Block, "WAIT EXCHANGE")
continue; continue;
} }
} }
if (BlockNum === CURRENTBLOCKNUM + TIME_START_POW || Block.EndExchange) if (BlockNum === CURRENTBLOCKNUM + global.TIME_START_POW || Block.EndExchange)
if (!Block.Prepared) { if (!Block.Prepared) {
if (!Block.EndExchange) if (!Block.EndExchange)
this.CreateTreeHash(Block) this.CreateTreeHash(Block)
AddInfoBlock(Block, "Start POW") global.AddInfoBlock(Block, "Start POW")
this.PreparePOWHash(Block) this.PreparePOWHash(Block)
if (!Block.Prepared) if (!Block.Prepared)
AddInfoBlock(Block, "!!Prepared") global.AddInfoBlock(Block, "!!Prepared")
continue; continue;
} }
if (!Block.EndExchange) { if (!Block.EndExchange) {
AddInfoBlock(Block, "Not EndExchange") global.AddInfoBlock(Block, "Not EndExchange")
Block.HasErr = 1 Block.HasErr = 1
Block.Prepared = 0 Block.Prepared = 0
this.CreateTreeHash(Block) this.CreateTreeHash(Block)
} }
if (!Block.Prepared) { if (!Block.Prepared) {
Block.HasErr = 1 Block.HasErr = 1
AddInfoBlock(Block, "Not was Prepared") global.AddInfoBlock(Block, "Not was Prepared")
this.PreparePOWHash(Block) this.PreparePOWHash(Block)
if (!Block.Prepared) if (!Block.Prepared)
continue; continue;
@@ -1187,53 +1193,53 @@ module.exports = class CConsensus extends require("./block-loader")
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash); var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) { if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) {
Block.HasErr = 1 Block.HasErr = 1
AddInfoBlock(Block, "New fast pow") global.AddInfoBlock(Block, "New fast pow")
this.PreparePOWHash(Block) this.PreparePOWHash(Block)
} }
if (Block.MaxPOW && Block.MaxPOW.SeqHash && Block.MaxPOW.AddrHash && Block.MaxPOW.LocalSeqHash && global.CompareArr(Block.SeqHash, if (Block.MaxPOW && Block.MaxPOW.SeqHash && Block.MaxPOW.AddrHash && Block.MaxPOW.LocalSeqHash && global.CompareArr(Block.SeqHash,
Block.MaxPOW.LocalSeqHash) === 0) { Block.MaxPOW.LocalSeqHash) === 0) {
if (global.CompareArr(Block.SeqHash, Block.MaxPOW.LocalSeqHash) === 0 && global.CompareArr(Block.MaxPOW.PowLocalHash, Block.PowHash) < 0) { if (global.CompareArr(Block.SeqHash, Block.MaxPOW.LocalSeqHash) === 0 && global.CompareArr(Block.MaxPOW.PowLocalHash, Block.PowHash) < 0) {
Block.AddrHash = Block.MaxPOW.LocalAddrHash Block.AddrHash = Block.MaxPOW.LocalAddrHash
CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM) global.CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
AddInfoBlock(Block, "->Local lider:" + GetPowPower(Block.PowHash)) global.AddInfoBlock(Block, "->Local lider:" + global.GetPowPower(Block.PowHash))
} }
if (global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) === 0 && global.CompareArr(Block.MaxPOW.AddrHash, Block.AddrHash) !== 0 && global.CompareArr(Block.MaxPOW.PowHash, if (global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) === 0 && global.CompareArr(Block.MaxPOW.AddrHash, Block.AddrHash) !== 0 && global.CompareArr(Block.MaxPOW.PowHash,
Block.PowHash) < 0) { Block.PowHash) < 0) {
Block.AddrHash = Block.MaxPOW.AddrHash Block.AddrHash = Block.MaxPOW.AddrHash
CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM) global.CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
AddInfoBlock(Block, "->Max lider") global.AddInfoBlock(Block, "->Max lider")
} }
} }
else { else {
Block.HasErr = 1 Block.HasErr = 1
AddInfoBlock(Block, "ERROR MaxPOW") global.AddInfoBlock(Block, "ERROR MaxPOW")
} }
if (Block.MaxPOW && Block.MaxPOW.SeqHash && !Block.CheckMaxPow && !Block.CheckMaxSum && global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) !== 0) { if (Block.MaxPOW && Block.MaxPOW.SeqHash && !Block.CheckMaxPow && !Block.CheckMaxSum && global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) !== 0) {
AddInfoBlock(Block, "CheckMaxPow") global.AddInfoBlock(Block, "CheckMaxPow")
this.CheckingMaxPowOther(Block) this.CheckingMaxPowOther(Block)
} }
if (BlockNum > start_save) if (BlockNum > start_save)
continue; continue;
if (PrevBlock.bSave && this.BlockNumDB + 1 >= Block.BlockNum) { if (PrevBlock.bSave && this.BlockNumDB + 1 >= Block.BlockNum) {
this.AddToStatBlockConfirmation(Block) this.AddToStatBlockConfirmation(Block)
var Power = GetPowPower(Block.PowHash); var Power = global.GetPowPower(Block.PowHash);
if (this.WriteBlockDB(Block)) { if (this.WriteBlockDB(Block)) {
if (Block.arrContent && Block.arrContent.length) if (Block.arrContent && Block.arrContent.length)
global.ADD_TO_STAT("MAX:TRANSACTION_COUNT", Block.arrContent.length) global.ADD_TO_STAT("MAX:TRANSACTION_COUNT", Block.arrContent.length)
AddInfoBlock(Block, "SAVE:" + Power + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4)) global.AddInfoBlock(Block, "SAVE:" + Power + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4))
} }
else { else {
Block.HasErr = 1 Block.HasErr = 1
AddInfoBlock(Block, "ERROR WRITE DB") global.AddInfoBlock(Block, "ERROR WRITE DB")
} }
this.AddToMaxSum(Block, { SumHash: Block.SumHash, SumList: this.GetBlockList(Block.BlockNum), }) this.AddToMaxSum(Block, { SumHash: Block.SumHash, SumList: this.GetBlockList(Block.BlockNum), })
if (typeof global.RESYNC_CONDITION === "object") { if (typeof global.RESYNC_CONDITION === "object") {
if (!this.OwnBlockCount) if (!this.OwnBlockCount)
this.OwnBlockCount = 0 this.OwnBlockCount = 0
var Miner = ReadUintFromArr(Block.AddrHash, 0); var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
var MultK = RESYNC_CONDITION.K_POW; var MultK = global.RESYNC_CONDITION.K_POW;
var MaxBlocks = RESYNC_CONDITION.OWN_BLOCKS; var MaxBlocks = global.RESYNC_CONDITION.OWN_BLOCKS;
if (Miner === GENERATE_BLOCK_ACCOUNT) { if (Miner === global.GENERATE_BLOCK_ACCOUNT) {
this.OwnBlockCount++ this.OwnBlockCount++
if (this.OwnBlockCount >= MaxBlocks) { if (this.OwnBlockCount >= MaxBlocks) {
var PrevSumPow = this.GetAvgPowBlock(Block.BlockNum - 2 * MaxBlocks, MaxBlocks); var PrevSumPow = this.GetAvgPowBlock(Block.BlockNum - 2 * MaxBlocks, MaxBlocks);
@@ -1254,9 +1260,9 @@ module.exports = class CConsensus extends require("./block-loader")
else { else {
Block.HasErr = 1 Block.HasErr = 1
if (!PrevBlock.bSave) if (!PrevBlock.bSave)
AddInfoBlock(Block, "Prev block not saved") global.AddInfoBlock(Block, "Prev block not saved")
else else
AddInfoBlock(Block, "Low BlockNumDB") global.AddInfoBlock(Block, "Low BlockNumDB")
} }
} }
} }
@@ -1264,15 +1270,15 @@ module.exports = class CConsensus extends require("./block-loader")
if (CURRENTBLOCKNUM + global.BLOCK_PROCESSING_LENGTH2 > MaxNumBlockDB) if (CURRENTBLOCKNUM + global.BLOCK_PROCESSING_LENGTH2 > MaxNumBlockDB)
for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < start_save; BlockNum++) { for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < start_save; BlockNum++) {
var Block = this.GetBlock(BlockNum); var Block = this.GetBlock(BlockNum);
if (Block && !Block.bSave && Block.TrCount && Block.TreeHash && !IsZeroArr(Block.TreeHash) && !Block.WasSaveDataTree) { if (Block && !Block.bSave && Block.TrCount && Block.TreeHash && !global.IsZeroArr(Block.TreeHash) && !Block.WasSaveDataTree) {
this.PreSaveDataTreeToDB(Block) this.PreSaveDataTreeToDB(Block)
Block.WasSaveDataTree = 1 Block.WasSaveDataTree = 1
AddInfoBlock(Block, "*PRESAVE DATA TREE*") global.AddInfoBlock(Block, "*PRESAVE DATA TREE*")
global.ToLog("PRESAVE DATA: " + Block.BlockNum) global.ToLog("PRESAVE DATA: " + Block.BlockNum)
} }
} }
this.RelayMode = !bWasSave this.RelayMode = !bWasSave
this.FREE_MEM_BLOCKS(CURRENTBLOCKNUM - BLOCK_COUNT_IN_MEMORY) this.FREE_MEM_BLOCKS(CURRENTBLOCKNUM - global.BLOCK_COUNT_IN_MEMORY)
} }
GetAvgPowBlock(StartNum, CountNum) { GetAvgPowBlock(StartNum, CountNum) {
var Count = 0; var Count = 0;
@@ -1280,7 +1286,7 @@ module.exports = class CConsensus extends require("./block-loader")
for (var Num = StartNum; Num < StartNum + CountNum; Num++) { for (var Num = StartNum; Num < StartNum + CountNum; Num++) {
var Block = this.GetBlock(Num); var Block = this.GetBlock(Num);
if (Block && Block.bSave) { if (Block && Block.bSave) {
var Power = GetPowPower(Block.PowHash); var Power = global.GetPowPower(Block.PowHash);
SumPow += Power SumPow += Power
Count++ Count++
} }
@@ -1291,7 +1297,7 @@ module.exports = class CConsensus extends require("./block-loader")
return SumPow / Count; return SumPow / Count;
} }
CreatePOWNew(Block) { CreatePOWNew(Block) {
CreateHashMinimal(Block, GENERATE_BLOCK_ACCOUNT) CreateHashMinimal(Block, global.GENERATE_BLOCK_ACCOUNT)
this.AddToMaxPOW(Block, { this.AddToMaxPOW(Block, {
SeqHash: Block.SeqHash, AddrHash: Block.AddrHash, PrevHash: Block.PrevHash, TreeHash: Block.TreeHash, SeqHash: Block.SeqHash, AddrHash: Block.AddrHash, PrevHash: Block.PrevHash, TreeHash: Block.TreeHash,
}) })
@@ -1303,7 +1309,7 @@ module.exports = class CConsensus extends require("./block-loader")
var BlockMem = this.BlockChain[CurNum]; var BlockMem = this.BlockChain[CurNum];
if (BlockMem) { if (BlockMem) {
if (BlockMem.Prepared) { if (BlockMem.Prepared) {
AddInfoBlock(BlockMem, "-reset POW:" + RefBlockNum + "/" + bReload) global.AddInfoBlock(BlockMem, "-reset POW:" + RefBlockNum + "/" + bReload)
BlockMem.bSave = false BlockMem.bSave = false
BlockMem.Prepared = false BlockMem.Prepared = false
BlockMem.StartMining = false BlockMem.StartMining = false
@@ -1324,36 +1330,36 @@ module.exports = class CConsensus extends require("./block-loader")
if (!BlockMining.StartMining || BlockMining.bSave) if (!BlockMining.StartMining || BlockMining.bSave)
return; return;
if (BlockMining && BlockMining.Hash && BlockMining.SeqHash && global.CompareArr(BlockMining.SeqHash, msg.SeqHash) === 0) { if (BlockMining && BlockMining.Hash && BlockMining.SeqHash && global.CompareArr(BlockMining.SeqHash, msg.SeqHash) === 0) {
var ValueOld = GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum); var ValueOld = global.GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
var ValueMsg = GetHashFromSeqAddr(msg.SeqHash, msg.AddrHash, BlockMining.BlockNum); var ValueMsg = global.GetHashFromSeqAddr(msg.SeqHash, msg.AddrHash, BlockMining.BlockNum);
var bWas = 0; var bWas = 0;
if (global.CompareArr(ValueOld.Hash1, ValueMsg.Hash1) > 0) { if (global.CompareArr(ValueOld.Hash1, ValueMsg.Hash1) > 0) {
var Nonce1 = ReadUintFromArr(msg.AddrHash, 12); var Nonce1 = global.ReadUintFromArr(msg.AddrHash, 12);
var DeltaNum1 = ReadUint16FromArr(msg.AddrHash, 24); var DeltaNum1 = global.ReadUint16FromArr(msg.AddrHash, 24);
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce1, 12) global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce1, 12)
WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum1, 24) global.WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum1, 24)
bWas += 1 bWas += 1
} }
if (global.CompareArr(ValueOld.Hash2, ValueMsg.Hash2) > 0) { if (global.CompareArr(ValueOld.Hash2, ValueMsg.Hash2) > 0) {
var Nonce0 = ReadUintFromArr(msg.AddrHash, 6); var Nonce0 = global.ReadUintFromArr(msg.AddrHash, 6);
var Nonce2 = ReadUintFromArr(msg.AddrHash, 18); var Nonce2 = global.ReadUintFromArr(msg.AddrHash, 18);
var DeltaNum2 = ReadUint16FromArr(msg.AddrHash, 26); var DeltaNum2 = global.ReadUint16FromArr(msg.AddrHash, 26);
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce0, 6) global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce0, 6)
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce2, 18) global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce2, 18)
WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum2, 26) global.WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum2, 26)
bWas += 2 bWas += 2
} }
if (!bWas) if (!bWas)
return; return;
var ValueNew = GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum); var ValueNew = global.GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
BlockMining.Hash = ValueNew.Hash BlockMining.Hash = ValueNew.Hash
BlockMining.PowHash = ValueNew.PowHash BlockMining.PowHash = ValueNew.PowHash
BlockMining.Power = GetPowPower(BlockMining.PowHash) BlockMining.Power = global.GetPowPower(BlockMining.PowHash)
global.ADD_TO_STAT("MAX:POWER", BlockMining.Power) global.ADD_TO_STAT("MAX:POWER", BlockMining.Power)
var Power = GetPowPower(BlockMining.PowHash); var Power = global.GetPowPower(BlockMining.PowHash);
var HashCount = Math.pow(2, Power); var HashCount = Math.pow(2, Power);
ADD_HASH_RATE(HashCount) global.ADD_HASH_RATE(HashCount)
AddInfoBlock(BlockMining, "Set POW: " + Power) global.AddInfoBlock(BlockMining, "Set POW: " + Power)
this.SetNoPOW(BlockMining.BlockNum + 8, 0, BlockMining.BlockNum) this.SetNoPOW(BlockMining.BlockNum + 8, 0, BlockMining.BlockNum)
this.AddToMaxPOW(BlockMining, { this.AddToMaxPOW(BlockMining, {
SeqHash: BlockMining.SeqHash, AddrHash: BlockMining.AddrHash, PrevHash: BlockMining.PrevHash, TreeHash: BlockMining.TreeHash, SeqHash: BlockMining.SeqHash, AddrHash: BlockMining.AddrHash, PrevHash: BlockMining.PrevHash, TreeHash: BlockMining.TreeHash,
@@ -1361,7 +1367,8 @@ module.exports = class CConsensus extends require("./block-loader")
} }
} }
}; };
global.TreeBlockBuf = new STreeBuffer(50 * 1000, CompareItemHashSimple, "string"); let STreeBuffer = global.STreeBuffer;
global.TreeBlockBuf = new STreeBuffer(50 * 1000, global.CompareItemHashSimple, "string");
var PrevTimeIdle = 0; var PrevTimeIdle = 0;
OnTimeIdle(); OnTimeIdle();

View File

@@ -8,9 +8,19 @@
* Telegram: https://t.me/terafoundation * Telegram: https://t.me/terafoundation
*/ */
global.PERIOD_GET_BLOCK = 300, global.COUNT_HISTORY_BLOCKS_FOR_LOAD = 600, global.COUNT_BLOCKS_FOR_CHECK_POW = 50, global.MAX_DELTA_COUNT_SUM_FOR_LOAD = 10, global.PERIOD_GET_BLOCK = 300
global.MAX_COUNT_CHAIN_LOAD = 120, global.PACKET_ALIVE_PERIOD = 4 * CONSENSUS_PERIOD_TIME, global.PACKET_ALIVE_PERIOD_NEXT_NODE = PACKET_ALIVE_PERIOD / 2, global.COUNT_HISTORY_BLOCKS_FOR_LOAD = 600
global.MAX_BLOCK_SEND = 8, global.COUNT_TASK_FOR_NODE = 10, global.FORMAT_BLOCK_TRANSFER = "{ BlockNum:uint, TreeHash:hash, arrContent:[tr], }", global.COUNT_BLOCKS_FOR_CHECK_POW = 50
global.WRK_BLOCK_TRANSFER = {}, global.MAX_ACCOUNTS_TRANSFER = 1024, global.MAX_SMARTS_TRANSFER = 10, global.TEST_NETWORK && (global.MAX_ACCOUNTS_TRANSFER = 128, global.MAX_DELTA_COUNT_SUM_FOR_LOAD = 10
global.MAX_SMARTS_TRANSFER = 10), global.FORMAT_REST_TRANSFER = "{ Result:uint, Version:uint, Arr:[arr200], ProofHash:hash, ProofArrL:<hash>, ProofArrR:<hash>, }", global.MAX_COUNT_CHAIN_LOAD = 120
global.PACKET_ALIVE_PERIOD = 4 * global.CONSENSUS_PERIOD_TIME
global.PACKET_ALIVE_PERIOD_NEXT_NODE = global.PACKET_ALIVE_PERIOD / 2
global.MAX_BLOCK_SEND = 8
global.COUNT_TASK_FOR_NODE = 10
global.FORMAT_BLOCK_TRANSFER = "{ BlockNum:uint, TreeHash:hash, arrContent:[tr], }"
global.WRK_BLOCK_TRANSFER = {}
global.MAX_ACCOUNTS_TRANSFER = 1024
global.MAX_SMARTS_TRANSFER = 10
global.TEST_NETWORK && (global.MAX_ACCOUNTS_TRANSFER = 128, global.MAX_SMARTS_TRANSFER = 10)
global.FORMAT_REST_TRANSFER = "{ Result:uint, Version:uint, Arr:[arr200], ProofHash:hash, ProofArrL:<hash>, ProofArrR:<hash>, }"
global.FORMAT_SMART_TRANSFER = "{ Result:uint, Arr:[tr], }"; global.FORMAT_SMART_TRANSFER = "{ Result:uint, Arr:[tr], }";

View File

@@ -12,9 +12,26 @@
const fs = require("fs"); const fs = require("fs");
import * as crypto from 'crypto'; import * as crypto from 'crypto';
require('./block-loader-const'); require('./block-loader-const');
const STAT_BLOCK_LOAD_PERIOD = CONSENSUS_PERIOD_TIME / 5; const STAT_BLOCK_LOAD_PERIOD = global.CONSENSUS_PERIOD_TIME / 5;
module.exports = class CBlock extends require("./rest-loader.js") module.exports = class CBlock extends require("./rest-loader.js")
{ {
MapMapLoaded
BlockChain
ChainID
BlockID
TaskNodeIndex
LoadedChainList
LastChainLoad
StartLoadBlockTime
LoadHistoryMode
MapBlockBodyLoad
BlockNumDB
RelayMode
LoadHistoryMessage
LastLoadedBlockNum
LoadHistoryContext
LoadBlockStatNum
BADHashCount
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
this.MapMapLoaded = {} this.MapMapLoaded = {}
@@ -43,9 +60,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
GenesisBlockHeaderDB(Num) { GenesisBlockHeaderDB(Num) {
if (Num < 0) if (Num < 0)
return undefined; return undefined;
var Block = { var Block: any = {
BlockNum: Num, TreeHash: [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, BlockNum: Num, TreeHash: [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], AddrHash: DEVELOP_PUB_KEY0, Hash: this.GetHashGenesis(Num), PowHash: this.GetHashGenesis(Num), PrevHash: [0, 0, 0, 0, 0, 0, 0], AddrHash: global.DEVELOP_PUB_KEY0, Hash: this.GetHashGenesis(Num), PowHash: this.GetHashGenesis(Num), PrevHash: [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], SeqHash: [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, 0, 0, 0, 0, 0, 0], SeqHash: [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], SumHash: [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, 0, 0, 0, 0, 0, 0], SumHash: [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], Comment1: "GENESIS", Comment2: "", TrCount: 0, TrDataPos: 0, TrDataLen: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], Comment1: "GENESIS", Comment2: "", TrCount: 0, TrDataPos: 0, TrDataLen: 0,
@@ -59,7 +76,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
this.FindStartBlockNum() this.FindStartBlockNum()
if (this.UseTruncateBlockDB) if (this.UseTruncateBlockDB)
this.TruncateBlockDB(this.UseTruncateBlockDB) this.TruncateBlockDB(this.UseTruncateBlockDB)
var CurNum = GetCurrentBlockNumByTime(); var CurNum = global.GetCurrentBlockNumByTime();
if (CurNum <= this.BlockNumDB) { if (CurNum <= this.BlockNumDB) {
this.TruncateBlockDB(CurNum) this.TruncateBlockDB(CurNum)
} }
@@ -70,8 +87,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
if (this.BlockNumDB < global.BLOCK_PROCESSING_LENGTH2) if (this.BlockNumDB < global.BLOCK_PROCESSING_LENGTH2)
this.CreateGenesisBlocks() this.CreateGenesisBlocks()
if (fs.existsSync(GetCodePath("EXPERIMENTAL/_run.js"))) { if (fs.existsSync(global.GetCodePath("EXPERIMENTAL/_run.js"))) {
require(GetCodePath("EXPERIMENTAL/_run.js")).Run() require(global.GetCodePath("EXPERIMENTAL/_run.js")).Run()
} }
this.LoadMemBlocksOnStart() this.LoadMemBlocksOnStart()
} }
@@ -89,7 +106,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2; var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
var Sum = 0; var Sum = 0;
var arr = []; var arr = [];
for (var i = 0; i < BLOCK_PROCESSING_LENGTH; i++) { for (var i = 0; i < global.BLOCK_PROCESSING_LENGTH; i++) {
var PrevBlock = this.GetBlock(startPrev + i); var PrevBlock = this.GetBlock(startPrev + i);
if (PrevBlock && PrevBlock.bSave) { if (PrevBlock && PrevBlock.bSave) {
Sum = Sum + PrevBlock.SumPow Sum = Sum + PrevBlock.SumPow
@@ -99,13 +116,13 @@ module.exports = class CBlock extends require("./rest-loader.js")
return undefined; return undefined;
} }
} }
var PrevHash = CalcHashFromArray(arr, true); var PrevHash = global.CalcHashFromArray(arr, true);
return PrevHash; return PrevHash;
} }
GetPrevHashDB(Block) { GetPrevHashDB(Block) {
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2; var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
var arr = []; var arr = [];
for (var i = 0; i < BLOCK_PROCESSING_LENGTH; i++) { for (var i = 0; i < global.BLOCK_PROCESSING_LENGTH; i++) {
var num = startPrev + i; var num = startPrev + i;
var PrevBlock = this.ReadBlockHeaderDB(num); var PrevBlock = this.ReadBlockHeaderDB(num);
if (!PrevBlock || !PrevBlock.bSave) { if (!PrevBlock || !PrevBlock.bSave) {
@@ -114,18 +131,18 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
arr.push(PrevBlock.Hash) arr.push(PrevBlock.Hash)
} }
var PrevHash = CalcHashFromArray(arr, true); var PrevHash = global.CalcHashFromArray(arr, true);
return PrevHash; return PrevHash;
} }
StartSyncBlockchain(Node, bSilent, bCheckPoint) { StartSyncBlockchain(Node?, bSilent?, bCheckPoint?) {
this.FREE_ALL_MEM_CHAINS() this.FREE_ALL_MEM_CHAINS()
if (global.NO_HISTORY_MODE) { if (global.NO_HISTORY_MODE) {
this.LoadHistoryMode = 0 this.LoadHistoryMode = 0
return; return;
} }
if (global.CREATE_ON_START && !LOCAL_RUN) if (global.CREATE_ON_START && !global.LOCAL_RUN)
return; return;
if (!GrayConnect()) if (!global.GrayConnect())
this.RelayMode = true this.RelayMode = true
else else
this.RelayMode = false this.RelayMode = false
@@ -137,7 +154,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
PrevBlockNum: - 1, Node: Node, BlockNum: this.BlockNumDB, MapSend: {}, Foward: 1, Pause: 0, DeltaBlockNum: 10, PrevBlockNum: - 1, Node: Node, BlockNum: this.BlockNumDB, MapSend: {}, Foward: 1, Pause: 0, DeltaBlockNum: 10,
StartTimeHistory: Date.now(), MaxTimeOut: 30 * 1000 StartTimeHistory: Date.now(), MaxTimeOut: 30 * 1000
} }
if (!bSilent && !bCheckPoint && REST_START_COUNT) { if (!bSilent && !bCheckPoint && global.REST_START_COUNT) {
this.CheckSyncRest() this.CheckSyncRest()
} }
if (!this.ActualNodes.size) { if (!this.ActualNodes.size) {
@@ -181,7 +198,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
Context.BlockNum = this.BlockNumDB Context.BlockNum = this.BlockNumDB
} }
var BlockDB = this.ReadBlockHeaderDB(Context.BlockNum); var BlockDB = this.ReadBlockHeaderDB(Context.BlockNum);
if (!BlockDB || this.BlockNumDB >= GetCurrentBlockNumByTime() - BLOCK_PROCESSING_LENGTH - 2) { if (!BlockDB || this.BlockNumDB >= global.GetCurrentBlockNumByTime() - global.BLOCK_PROCESSING_LENGTH - 2) {
this.LoadHistoryMode = false this.LoadHistoryMode = false
if (this.LoadHistoryMessage) if (this.LoadHistoryMessage)
global.ToLog("Finish synchronization") global.ToLog("Finish synchronization")
@@ -200,7 +217,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
if (global.NO_HISTORY_MODE) if (global.NO_HISTORY_MODE)
return; return;
this.StartLoadBlockTime = Date.now() this.StartLoadBlockTime = Date.now()
if (Num > this.CurrentBlockNum + TIME_START_SAVE) { if (Num > this.CurrentBlockNum + global.TIME_START_SAVE) {
return; return;
} }
bIsSum = bIsSum || false bIsSum = bIsSum || false
@@ -208,7 +225,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
if (Tree.find({ hash: LoadHash })) if (Tree.find({ hash: LoadHash }))
return false; return false;
Tree.insert({ hash: LoadHash }) Tree.insert({ hash: LoadHash })
var chain = { var chain: any = {
id: 0, Count: 16, BlockNum: Num, IsSum: bIsSum, Hash: LoadHash, time: undefined, FindBlockDB: false, LoadDB: false, LoadCountDB: 0, id: 0, Count: 16, BlockNum: Num, IsSum: bIsSum, Hash: LoadHash, time: undefined, FindBlockDB: false, LoadDB: false, LoadCountDB: 0,
LoadSumDB: 0, LoadSum: 0, ParentChain: undefined, RootChain: undefined, BlockNumStart: Num, HashStart: LoadHash, IsSumStart: bIsSum, LoadSumDB: 0, LoadSum: 0, ParentChain: undefined, RootChain: undefined, BlockNumStart: Num, HashStart: LoadHash, IsSumStart: bIsSum,
BlockHead: undefined, MapSend: {}, Comment2: "", StopSend: false, Info: "", Error: false, BlockHead: undefined, MapSend: {}, Comment2: "", StopSend: false, Info: "", Error: false,
@@ -232,7 +249,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
this.LoadedChainList.push(chain) this.LoadedChainList.push(chain)
} }
LoopChainLoad() { LoopChainLoad() {
if (glStopNode) if (global.glStopNode)
return; return;
if (this.UseTruncateBlockDB) if (this.UseTruncateBlockDB)
this.TruncateBlockDB(this.UseTruncateBlockDB) this.TruncateBlockDB(this.UseTruncateBlockDB)
@@ -248,7 +265,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
this.SendLoadToBegin() this.SendLoadToBegin()
} }
var CountStopSend = 0; var CountStopSend = 0;
var min_num = this.CurrentBlockNum - MAX_COUNT_CHAIN_LOAD; var min_num = this.CurrentBlockNum - global.MAX_COUNT_CHAIN_LOAD;
var min_num_load = this.CurrentBlockNum; var min_num_load = this.CurrentBlockNum;
for (var i = 0; i < this.LoadedChainList.length; i++) { for (var i = 0; i < this.LoadedChainList.length; i++) {
var chain = this.LoadedChainList[i]; var chain = this.LoadedChainList[i];
@@ -263,7 +280,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
min_num_load = RootChain.BlockNum min_num_load = RootChain.BlockNum
if (!chain.StopSend) { if (!chain.StopSend) {
if (chain.BlockHead) { if (chain.BlockHead) {
if (chain.BlockNum < this.CurrentBlockNum - COUNT_HISTORY_BLOCKS_FOR_LOAD) { if (chain.BlockNum < this.CurrentBlockNum - global.COUNT_HISTORY_BLOCKS_FOR_LOAD) {
if (global.WATCHDOG_DEV) if (global.WATCHDOG_DEV)
global.ToLog("Very long length of blocks to load history, stop chain with id=" + chain.id + " (" + chain.BlockNum + "-" + chain.BlockNumMax + ")") global.ToLog("Very long length of blocks to load history, stop chain with id=" + chain.id + " (" + chain.BlockNum + "-" + chain.BlockNumMax + ")")
chain.StopSend = true chain.StopSend = true
@@ -302,17 +319,17 @@ module.exports = class CBlock extends require("./rest-loader.js")
global.ADD_TO_STAT("MAX:LOADEDCHAINLIST", this.LoadedChainList.length) global.ADD_TO_STAT("MAX:LOADEDCHAINLIST", this.LoadedChainList.length)
this.FREE_MEM_CHAINS(min_num_load) this.FREE_MEM_CHAINS(min_num_load)
this.LastLoadedBlockNum = 0 this.LastLoadedBlockNum = 0
if (this.LoadedChainList.length > COUNT_HISTORY_BLOCKS_FOR_LOAD) { if (this.LoadedChainList.length > global.COUNT_HISTORY_BLOCKS_FOR_LOAD) {
if (global.WATCHDOG_DEV) if (global.WATCHDOG_DEV)
global.ToLog("LoadedChainList>COUNT_HISTORY_BLOCKS_FOR_LOAD -> FREE_ALL_MEM_CHAINS") global.ToLog("LoadedChainList>COUNT_HISTORY_BLOCKS_FOR_LOAD -> FREE_ALL_MEM_CHAINS")
this.FREE_ALL_MEM_CHAINS() this.FREE_ALL_MEM_CHAINS()
} }
} }
GetNextNode(task, keyid, checktime, BlockNum) { GetNextNode(task, keyid?, checktime?, BlockNum?) {
var CurTime = GetCurrentTime(0) - 0; var CurTime = global.GetCurrentTime(0) - 0;
if (checktime && task.time) { if (checktime && task.time) {
var Delta = CurTime - task.time; var Delta = CurTime - task.time;
if (Delta < PACKET_ALIVE_PERIOD_NEXT_NODE) if (Delta < global.PACKET_ALIVE_PERIOD_NEXT_NODE)
return { Result: false, timewait: true }; return { Result: false, timewait: true };
} }
task.time = undefined task.time = undefined
@@ -337,7 +354,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
Node = arr[this.TaskNodeIndex % arr.length] Node = arr[this.TaskNodeIndex % arr.length]
} }
if (Node.Active) { if (Node.Active) {
if (!Node.INFO || !Node.INFO.WasPing || Node.StopGetBlock || (Node.INFO.CheckPointHashDB && CHECK_POINT.BlockNum && global.CompareArr(CHECK_POINT.Hash, if (!Node.INFO || !Node.INFO.WasPing || Node.StopGetBlock || (Node.INFO.CheckPointHashDB && global.global.CHECK_POINT.BlockNum && global.CompareArr(global.global.CHECK_POINT.Hash,
Node.INFO.CheckPointHashDB) !== 0)) { Node.INFO.CheckPointHashDB) !== 0)) {
timewait = true timewait = true
continue; continue;
@@ -391,7 +408,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
var DopStr = ""; var DopStr = "";
if (chain.IsSum) if (chain.IsSum)
DopStr = "SUM:" DopStr = "SUM:"
chain.AddInfo(chain.BlockNum + "/" + DopStr + this.GetStrFromHashShort(chain.Hash) + "->" + GetNodeStrPort(Node)) chain.AddInfo(chain.BlockNum + "/" + DopStr + this.GetStrFromHashShort(chain.Hash) + "->" + global.GetNodeStrPort(Node))
return true; return true;
} }
return false; return false;
@@ -415,9 +432,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
}"; }";
} }
GetBlockArrFromBuffer_Load(BufRead, Info) { GetBlockArrFromBuffer_Load(BufRead, Info) {
var BlockArr = GetBlockArrFromBuffer(BufRead, Info); var BlockArr = global.GetBlockArrFromBuffer(BufRead, Info);
if (BlockArr.length > 0 && BlockArr[0].BlockNum === global.BLOCK_PROCESSING_LENGTH2) if (BlockArr.length > 0 && BlockArr[0].BlockNum === global.BLOCK_PROCESSING_LENGTH2)
BlockArr.unshift(this.ReadBlockHeaderDB(BLOCK_PROCESSING_LENGTH2 - 1)) BlockArr.unshift(this.ReadBlockHeaderDB(global.BLOCK_PROCESSING_LENGTH2 - 1))
return BlockArr; return BlockArr;
} }
RETBLOCKHEADER_FOWARD(Info, CurTime) { RETBLOCKHEADER_FOWARD(Info, CurTime) {
@@ -434,8 +451,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
var Block = arr[i]; var Block = arr[i];
if (!Block) if (!Block)
return; return;
if (Block.BlockNum === CHECK_POINT.BlockNum && !IsZeroArr(CHECK_POINT.Hash)) { if (Block.BlockNum === global.CHECK_POINT.BlockNum && !global.IsZeroArr(global.CHECK_POINT.Hash)) {
if (global.CompareArr(CHECK_POINT.Hash, Block.Hash) !== 0) { if (global.CompareArr(global.CHECK_POINT.Hash, Block.Hash) !== 0) {
break; break;
} }
Context.FindCheckPoint = true Context.FindCheckPoint = true
@@ -450,7 +467,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
arr2.push(Block) arr2.push(Block)
} }
else else
if (BlockDB && IsZeroArr(BlockDB.SumHash)) { if (BlockDB && global.IsZeroArr(BlockDB.SumHash)) {
bFindDB = 1 bFindDB = 1
arr2.push(Block) arr2.push(Block)
} }
@@ -485,7 +502,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
} }
RETBLOCKHEADER(Info, CurTime) { RETBLOCKHEADER(Info, CurTime) {
Info.Node.NextPing = MIN_PERIOD_PING Info.Node.NextPing = global.MIN_PERIOD_PING
if (Info.Context.Foward) if (Info.Context.Foward)
return this.RETBLOCKHEADER_FOWARD(Info, CurTime); return this.RETBLOCKHEADER_FOWARD(Info, CurTime);
var chain = Info.Context.Chain; var chain = Info.Context.Chain;
@@ -496,10 +513,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
if (arr.length <= 1) { if (arr.length <= 1) {
var keysend = "" + Info.Node.addrStr + ":" + chain.BlockNum; var keysend = "" + Info.Node.addrStr + ":" + chain.BlockNum;
chain.MapSend[keysend] = 1 chain.MapSend[keysend] = 1
chain.AddInfo("NO:" + GetNodeStrPort(Info.Node)) chain.AddInfo("NO:" + global.GetNodeStrPort(Info.Node))
return; return;
} }
chain.AddInfo("L=" + arr.length + " from:" + GetNodeStrPort(Info.Node)) chain.AddInfo("L=" + arr.length + " from:" + global.GetNodeStrPort(Info.Node))
var NextLoadBlock; var NextLoadBlock;
var PrevBlock; var PrevBlock;
for (var i = arr.length - 1; i >= 0; i--) { for (var i = arr.length - 1; i >= 0; i--) {
@@ -551,7 +568,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
MapBlockLoaded["TH:" + StrTreeHash] = Block MapBlockLoaded["TH:" + StrTreeHash] = Block
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum); var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
if (BlockDB) { if (BlockDB) {
Block.Power = GetPowPower(Block.PowHash) Block.Power = global.GetPowPower(Block.PowHash)
chain.LoadCountDB++ chain.LoadCountDB++
chain.LoadSumDB += BlockDB.Power chain.LoadSumDB += BlockDB.Power
chain.LoadSum += Block.Power chain.LoadSum += Block.Power
@@ -571,11 +588,11 @@ module.exports = class CBlock extends require("./rest-loader.js")
if (NextLoadBlock && !NextLoadBlock.chain.StopSend) { if (NextLoadBlock && !NextLoadBlock.chain.StopSend) {
if (arr.length >= chain.Count) { if (arr.length >= chain.Count) {
chain.Count = chain.Count * 2 chain.Count = chain.Count * 2
if (chain.Count > COUNT_BLOCKS_FOR_LOAD) if (chain.Count > global.COUNT_BLOCKS_FOR_LOAD)
chain.Count = COUNT_BLOCKS_FOR_LOAD chain.Count = global.COUNT_BLOCKS_FOR_LOAD
} }
if (chain.LoadCountDB >= COUNT_BLOCKS_FOR_CHECK_POW) { if (chain.LoadCountDB >= global.COUNT_BLOCKS_FOR_CHECK_POW) {
if (chain.LoadSumDB - chain.LoadSum > MAX_DELTA_COUNT_SUM_FOR_LOAD) { if (chain.LoadSumDB - chain.LoadSum > global.MAX_DELTA_COUNT_SUM_FOR_LOAD) {
var Str = "ERR LOADED SUM POW chains: SumDB > Sum loaded from: " + NodeInfo(Info.Node); var Str = "ERR LOADED SUM POW chains: SumDB > Sum loaded from: " + NodeInfo(Info.Node);
chain.StopSend = true chain.StopSend = true
chain.AddInfo(Str) chain.AddInfo(Str)
@@ -611,7 +628,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
var PrevBlock = BlockMin; var PrevBlock = BlockMin;
for (var i = 1; i < arr.length; i++) { for (var i = 1; i < arr.length; i++) {
var Block = arr[i]; var Block = arr[i];
Block.Power = GetPowPower(Block.PowHash) Block.Power = global.GetPowPower(Block.PowHash)
Block.SumPow = PrevBlock.SumPow + Block.Power Block.SumPow = PrevBlock.SumPow + Block.Power
PrevBlock = Block PrevBlock = Block
} }
@@ -637,7 +654,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
return arr; return arr;
} }
PrepareTransactionsForLoad(chain, arr, bNoSlice) { PrepareTransactionsForLoad(chain, arr, bNoSlice?) {
if (!bNoSlice) if (!bNoSlice)
arr = arr.slice(1) arr = arr.slice(1)
chain.arr = arr chain.arr = arr
@@ -648,7 +665,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
} }
LoopBlockLoad() { LoopBlockLoad() {
if (glStopNode) if (global.glStopNode)
return; return;
var CountSend = 0; var CountSend = 0;
for (var num = 0; num < this.LoadedChainList.length; num++) { for (var num = 0; num < this.LoadedChainList.length; num++) {
@@ -658,7 +675,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
for (var i = chain.CurNumArrLoad; i < chain.arr.length; i++) { for (var i = chain.CurNumArrLoad; i < chain.arr.length; i++) {
Count++ Count++
var Block = chain.arr[i]; var Block = chain.arr[i];
if (!IsZeroArr(Block.TreeHash) && !Block.TreeEq && !Block.LoadDBFinaly) { if (!global.IsZeroArr(Block.TreeHash) && !Block.TreeEq && !Block.LoadDBFinaly) {
if (!Block.MapSend) { if (!Block.MapSend) {
if (!Block.BodyLoad) { if (!Block.BodyLoad) {
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum); var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
@@ -676,7 +693,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
if (this.SendBlockNext(Block)) { if (this.SendBlockNext(Block)) {
CountSend++ CountSend++
if (CountSend >= MAX_BLOCK_SEND) if (CountSend >= global.MAX_BLOCK_SEND)
return; return;
} }
} }
@@ -694,7 +711,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
CheckAndWriteLoadedChain(chain) { CheckAndWriteLoadedChain(chain) {
if (chain.CurNumArrLoad >= chain.arr.length) { if (chain.CurNumArrLoad >= chain.arr.length) {
var Block = chain.arr[chain.arr.length - 1]; var Block = chain.arr[chain.arr.length - 1];
if (chain.WriteToDBAfterLoad || Block.BlockNum >= this.CurrentBlockNum + TIME_START_SAVE - 2) { if (chain.WriteToDBAfterLoad || Block.BlockNum >= this.CurrentBlockNum + global.TIME_START_SAVE - 2) {
var bAllLoaded = true; var bAllLoaded = true;
if (!chain.WriteToDBAfterLoad) { if (!chain.WriteToDBAfterLoad) {
var cur_parent = chain.ParentChain; var cur_parent = chain.ParentChain;
@@ -728,7 +745,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
var startTime = process.hrtime(); var startTime = process.hrtime();
if (this.LoadHistoryMessage) if (this.LoadHistoryMessage)
global.ToLog("WRITE DATA Count:" + arr.length + " " + arr[0].BlockNum + "-" + arr[arr.length - 1].BlockNum, 2) global.ToLog("WRITE DATA Count:" + arr.length + " " + arr[0].BlockNum + "-" + arr[arr.length - 1].BlockNum, 2)
var CurrentBlockNum = GetCurrentBlockNumByTime(); var CurrentBlockNum = global.GetCurrentBlockNumByTime();
var Block, FirstBlock; var Block, FirstBlock;
for (var i = 0; i < arr.length; i++) { for (var i = 0; i < arr.length; i++) {
Block = arr[i] Block = arr[i]
@@ -752,12 +769,12 @@ module.exports = class CBlock extends require("./rest-loader.js")
Res = this.WriteBlockDBFinaly(Block) Res = this.WriteBlockDBFinaly(Block)
} }
else { else {
if (IsZeroArr(Block.TreeHash)) { if (global.IsZeroArr(Block.TreeHash)) {
Res = this.WriteBlockDB(Block) Res = this.WriteBlockDB(Block)
} }
else { else {
ToLogTrace("IsZeroArr(Block.TreeHash)") global.ToLogTrace("global.IsZeroArr(Block.TreeHash)")
throw "IsZeroArr(Block.TreeHash)"; throw "global.IsZeroArr(Block.TreeHash)";
} }
} }
if (!Res) { if (!Res) {
@@ -766,7 +783,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
return; return;
} }
Block.LoadDB = true Block.LoadDB = true
if (Block.BlockNum >= CurrentBlockNum - BLOCK_COUNT_IN_MEMORY) { if (Block.BlockNum >= CurrentBlockNum - global.BLOCK_COUNT_IN_MEMORY) {
this.CopyBlockToMem(Block) this.CopyBlockToMem(Block)
} }
else { else {
@@ -776,7 +793,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
var BlockMem = this.BlockChain[Block.BlockNum]; var BlockMem = this.BlockChain[Block.BlockNum];
if (BlockMem) { if (BlockMem) {
AddInfoBlock(BlockMem, "LOAD:" + GetPowPower(Block.PowHash) + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4)) global.AddInfoBlock(BlockMem, "LOAD:" + global.GetPowPower(Block.PowHash) + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4))
} }
} }
if (Block && FirstBlock) { if (Block && FirstBlock) {
@@ -784,7 +801,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
this.SetNoPOW(CurNumStart, 1, FirstBlock.BlockNum) this.SetNoPOW(CurNumStart, 1, FirstBlock.BlockNum)
} }
this.FREE_ALL_MEM_CHAINS() this.FREE_ALL_MEM_CHAINS()
ADD_TO_STAT_TIME("WRITECHAIN_TO_DB_TIME", startTime) global.ADD_TO_STAT_TIME("WRITECHAIN_TO_DB_TIME", startTime)
} }
CopyBlock(Block, BlockDst) { CopyBlock(Block, BlockDst) {
BlockDst.BlockNum = Block.BlockNum BlockDst.BlockNum = Block.BlockNum
@@ -834,12 +851,12 @@ module.exports = class CBlock extends require("./rest-loader.js")
POW.SumPow = Block.SumPow POW.SumPow = Block.SumPow
} }
AddToStatBlockConfirmation(Block) { AddToStatBlockConfirmation(Block) {
if (Block.BlockNum > START_BLOCK_RUN + global.BLOCK_PROCESSING_LENGTH2) { if (Block.BlockNum > global.START_BLOCK_RUN + global.BLOCK_PROCESSING_LENGTH2) {
var TimeDelta = this.CurrentBlockNum - Block.BlockNum; var TimeDelta = this.CurrentBlockNum - Block.BlockNum;
global.ADD_TO_STAT("MAX:BlockConfirmation", TimeDelta) global.ADD_TO_STAT("MAX:BlockConfirmation", TimeDelta)
} }
else { else {
global.ADD_TO_STAT("MAX:BlockConfirmation", BLOCK_PROCESSING_LENGTH) global.ADD_TO_STAT("MAX:BlockConfirmation", global.BLOCK_PROCESSING_LENGTH)
} }
} }
SendBlockNext(Block) { SendBlockNext(Block) {
@@ -854,9 +871,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
this.SendF(Node, { "Method": "GETBLOCK", "Context": Block.Context, "Data": { BlockNum: Block.BlockNum, TreeHash: Block.TreeHash } }) this.SendF(Node, { "Method": "GETBLOCK", "Context": Block.Context, "Data": { BlockNum: Block.BlockNum, TreeHash: Block.TreeHash } })
Node.SendBlockCount++ Node.SendBlockCount++
SendResult = 1 SendResult = 1
AddInfoBlock(Block, "SendNext") global.AddInfoBlock(Block, "SendNext")
if (Block.chain) if (Block.chain)
Block.chain.AddInfo("QUERY BL:" + Block.BlockNum + "/" + this.GetStrFromHashShort(Block.TreeHash) + " TO:" + GetNodeStrPort(Node)) Block.chain.AddInfo("QUERY BL:" + Block.BlockNum + "/" + this.GetStrFromHashShort(Block.TreeHash) + " TO:" + global.GetNodeStrPort(Node))
} }
else { else {
if (!Ret.timewait) { if (!Ret.timewait) {
@@ -867,7 +884,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
return SendResult; return SendResult;
} }
ClearChains(DeleteChain, bShow) { ClearChains(DeleteChain, bShow?) {
if (!DeleteChain) { if (!DeleteChain) {
this.FREE_ALL_MEM_CHAINS() this.FREE_ALL_MEM_CHAINS()
return this.LoadedChainList.length; return this.LoadedChainList.length;
@@ -899,7 +916,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
return; return;
this.LoadBlockStatNum = TimeNum this.LoadBlockStatNum = TimeNum
const PeriodSec = 5; const PeriodSec = 5;
const Period = CONSENSUS_PERIOD_TIME / STAT_BLOCK_LOAD_PERIOD; const Period = global.CONSENSUS_PERIOD_TIME / STAT_BLOCK_LOAD_PERIOD;
const PeriodCount = PeriodSec * Period; const PeriodCount = PeriodSec * Period;
var FreeGet = 64; var FreeGet = 64;
var it = this.ActualNodes.iterator(), Node; var it = this.ActualNodes.iterator(), Node;
@@ -940,41 +957,41 @@ module.exports = class CBlock extends require("./rest-loader.js")
}"; }";
} }
RETGETBLOCK(Info, CurTime) { RETGETBLOCK(Info, CurTime) {
Info.Node.NextPing = MIN_PERIOD_PING Info.Node.NextPing = global.MIN_PERIOD_PING
var Block = Info.Context.Block; var Block = Info.Context.Block;
if (Block && !Block.TreeEq) { if (Block && !Block.TreeEq) {
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, FORMAT_BLOCK_TRANSFER, WRK_BLOCK_TRANSFER); var Data = global.BufLib.GetObjectFromBuffer(Info.Data, global.FORMAT_BLOCK_TRANSFER, global.WRK_BLOCK_TRANSFER);
Info.Data = undefined Info.Data = undefined
if (Data.BlockNum !== Block.BlockNum || global.CompareArr(Data.TreeHash, Block.TreeHash) !== 0) { if (Data.BlockNum !== Block.BlockNum || global.CompareArr(Data.TreeHash, Block.TreeHash) !== 0) {
this.SetBlockNOSendToNode(Block, Info.Node, "NO") this.SetBlockNOSendToNode(Block, Info.Node, "NO")
return; return;
} }
if (Block.chain) { if (Block.chain) {
Block.chain.AddInfo("Load TR:" + Data.BlockNum + "/" + this.GetStrFromHashShort(Data.TreeHash) + " from:" + GetNodeStrPort(Info.Node)) Block.chain.AddInfo("Load TR:" + Data.BlockNum + "/" + this.GetStrFromHashShort(Data.TreeHash) + " from:" + global.GetNodeStrPort(Info.Node))
AddInfoBlock(Block, "LOAD TR OK") global.AddInfoBlock(Block, "LOAD TR OK")
} }
var arrContent = Data.arrContent; var arrContent = Data.arrContent;
var TreeHash = CalcTreeHashFromArrBody(Block.BlockNum, arrContent); var TreeHash = global.CalcTreeHashFromArrBody(Block.BlockNum, arrContent);
if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) { if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) {
global.ToLog("2. BAD CMP TreeHash block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " TreeHash=" + global.GetHexFromArr(TreeHash) + " BlockTreeHash=" + global.GetHexFromArr(Block.TreeHash)) global.ToLog("2. BAD CMP TreeHash block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " TreeHash=" + global.GetHexFromArr(TreeHash) + " BlockTreeHash=" + global.GetHexFromArr(Block.TreeHash))
this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP TreeHash") this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP TreeHash")
return; return;
} }
if (arrContent.length > 0 && Data.BlockNum % PERIOD_ACCOUNT_HASH === 0) { if (arrContent.length > 0 && Data.BlockNum % global.PERIOD_ACCOUNT_HASH === 0) {
var TR = arrContent[0]; var TR = arrContent[0];
if (TR[0] === TYPE_TRANSACTION_ACC_HASH) { if (TR[0] === global.TYPE_TRANSACTION_ACC_HASH) {
if (!DApps.Accounts.TRCheckAccountHash(TR, Data.BlockNum)) { if (!global.DApps.Accounts.TRCheckAccountHash(TR, Data.BlockNum)) {
if (!this.BADHashCount) if (!this.BADHashCount)
this.BADHashCount = 0 this.BADHashCount = 0
this.BADHashCount++ this.BADHashCount++
global.ToLog("**** BAD ACCOUNT Hash in block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " ****") global.ToLog("**** BAD ACCOUNT Hash in block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " ****")
global.ToLog("May be need to Rewrite transactions from: " + (Block.BlockNum - 2 * DELTA_BLOCK_ACCOUNT_HASH)) global.ToLog("May be need to Rewrite transactions from: " + (Block.BlockNum - 2 * global.DELTA_BLOCK_ACCOUNT_HASH))
this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP ACC HASH") this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP ACC HASH")
if (global.WATCHDOG_BADACCOUNT && this.BADHashCount > 60) { if (global.WATCHDOG_BADACCOUNT && this.BADHashCount > 60) {
global.ToLog("Run WATCHDOG!") global.ToLog("Run WATCHDOG!")
this.BADHashCount = 0 this.BADHashCount = 0
this.FREE_ALL_MEM_CHAINS() this.FREE_ALL_MEM_CHAINS()
this.SetTruncateBlockDB(Block.BlockNum - 5 * DELTA_BLOCK_ACCOUNT_HASH) this.SetTruncateBlockDB(Block.BlockNum - 5 * global.DELTA_BLOCK_ACCOUNT_HASH)
} }
else { else {
} }
@@ -995,7 +1012,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
Block.Send = undefined Block.Send = undefined
global.ADD_TO_STAT("BLOCK_LOADED", 1) global.ADD_TO_STAT("BLOCK_LOADED", 1)
Info.Node.LoadBlockCount++ Info.Node.LoadBlockCount++
if (GrayConnect()) if (global.GrayConnect())
Info.Node.BlockProcessCount++ Info.Node.BlockProcessCount++
if (this.LoadHistoryMode) { if (this.LoadHistoryMode) {
var Context = this.LoadHistoryContext; var Context = this.LoadHistoryContext;
@@ -1036,7 +1053,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
var keysend = "" + Node.addrStr + ":" + Str; var keysend = "" + Node.addrStr + ":" + Str;
Block.MapSend[keysend] = 1 Block.MapSend[keysend] = 1
if (Block.chain) if (Block.chain)
Block.chain.AddInfo("" + Block.BlockNum + " " + Str2 + "<-" + GetNodeStrPort(Node)) Block.chain.AddInfo("" + Block.BlockNum + " " + Str2 + "<-" + global.GetNodeStrPort(Node))
} }
FindBlockInLoadedChain(BlockNum, TreeHash) { FindBlockInLoadedChain(BlockNum, TreeHash) {
var StrTreeHash = global.GetHexFromArr(TreeHash); var StrTreeHash = global.GetHexFromArr(TreeHash);
@@ -1050,25 +1067,25 @@ module.exports = class CBlock extends require("./rest-loader.js")
CheckSeqHashDB(Block, StrError) { CheckSeqHashDB(Block, StrError) {
if (Block.BlockNum < global.BLOCK_PROCESSING_LENGTH2) if (Block.BlockNum < global.BLOCK_PROCESSING_LENGTH2)
return true; return true;
var TreeHashTest = CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent); var TreeHashTest = global.CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
if (global.CompareArr(TreeHashTest, Block.TreeHash) !== 0) { if (global.CompareArr(TreeHashTest, Block.TreeHash) !== 0) {
var StrHex = global.GetHexFromArr(TreeHashTest); var StrHex = global.GetHexFromArr(TreeHashTest);
var StrHex0 = global.GetHexFromArr(Block.TreeHash); var StrHex0 = global.GetHexFromArr(Block.TreeHash);
var Str = StrError + " #3 ERROR TREEHASH: " + Block.BlockNum + " Hex:" + StrHex0.substr(0, 12) + " != " + StrHex.substr(0, var Str = StrError + " #3 ERROR TREEHASH: " + Block.BlockNum + " Hex:" + StrHex0.substr(0, 12) + " != " + StrHex.substr(0,
12); 12);
if (global.WATCHDOG_DEV) if (global.WATCHDOG_DEV)
ToErrorTrace(Str) global.ToErrorTrace(Str)
else else
global.ToError(Str) global.ToError(Str)
return false; return false;
} }
var PrevHash = this.GetPrevHashDB(Block); var PrevHash = this.GetPrevHashDB(Block);
var testSeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash); var testSeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
var TestValue = GetHashFromSeqAddr(testSeqHash, Block.AddrHash, Block.BlockNum, PrevHash); var TestValue = global.GetHashFromSeqAddr(testSeqHash, Block.AddrHash, Block.BlockNum, PrevHash);
if (global.CompareArr(TestValue.Hash, Block.Hash) !== 0) { if (global.CompareArr(TestValue.Hash, Block.Hash) !== 0) {
var Str = StrError + " #2 ERROR HASH - block num: " + Block.BlockNum; var Str = StrError + " #2 ERROR HASH - block num: " + Block.BlockNum;
if (global.WATCHDOG_DEV) if (global.WATCHDOG_DEV)
ToErrorTrace(Str) global.ToErrorTrace(Str)
else else
global.ToError(Str) global.ToError(Str)
return false; return false;
@@ -1089,10 +1106,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
global.ToLog("arr[" + i + "]=" + global.GetHexFromArr(arr[i])) global.ToLog("arr[" + i + "]=" + global.GetHexFromArr(arr[i]))
} }
} }
GetBlock(num, bToMem, bReadBody) { GetBlock(num, bToMem?, bReadBody?) {
if (bToMem === undefined) if (bToMem === undefined)
bToMem = true bToMem = true
if (num < this.CurrentBlockNum - BLOCK_COUNT_IN_MEMORY) if (num < this.CurrentBlockNum - global.BLOCK_COUNT_IN_MEMORY)
bToMem = false bToMem = false
var Block = this.BlockChain[num]; var Block = this.BlockChain[num];
if (!Block) { if (!Block) {
@@ -1109,7 +1126,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
GetMapLoaded(num) { GetMapLoaded(num) {
if (num < 0) if (num < 0)
num = 0 num = 0
var index = Math.floor(num / BLOCK_COUNT_IN_MEMORY); var index = Math.floor(num / global.BLOCK_COUNT_IN_MEMORY);
var map = this.MapMapLoaded[index]; var map = this.MapMapLoaded[index];
if (!map) { if (!map) {
map = {} map = {}
@@ -1129,19 +1146,19 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
} }
FREE_MEM_CHAINS(NumMax) { FREE_MEM_CHAINS(NumMax) {
this.FREE_MEM_BLOCKS(NumMax - BLOCK_COUNT_IN_MEMORY) this.FREE_MEM_BLOCKS(NumMax - global.BLOCK_COUNT_IN_MEMORY)
var maxArrMap = Math.floor(NumMax / BLOCK_COUNT_IN_MEMORY) - 1; var maxArrMap = Math.floor(NumMax / global.BLOCK_COUNT_IN_MEMORY) - 1;
if (maxArrMap >= 0) { if (maxArrMap >= 0) {
var nWasCount = 0; var nWasCount = 0;
for (var key in this.MapMapLoaded) for (var key in this.MapMapLoaded)
if (key < maxArrMap) { if (key as any < maxArrMap) {
nWasCount++ nWasCount++
delete this.MapMapLoaded[key] delete this.MapMapLoaded[key]
} }
} }
} }
FREE_ALL_MEM_CHAINS() { FREE_ALL_MEM_CHAINS() {
this.FREE_MEM_BLOCKS(this.BlockNumDB - BLOCK_COUNT_IN_MEMORY) this.FREE_MEM_BLOCKS(this.BlockNumDB - global.BLOCK_COUNT_IN_MEMORY)
for (var i = 0; i < this.LoadedChainList.length; i++) { for (var i = 0; i < this.LoadedChainList.length; i++) {
var chain = this.LoadedChainList[i]; var chain = this.LoadedChainList[i];
if (chain) { if (chain) {
@@ -1155,7 +1172,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
} }
this.LoadedChainList = [] this.LoadedChainList = []
this.MapMapLoaded = {} this.MapMapLoaded = {}
//@ts-ignore
if (typeof gc === "function") if (typeof gc === "function")
//@ts-ignore
gc() gc()
} }
AddValueToHistory(typedata, val) { AddValueToHistory(typedata, val) {
@@ -1169,7 +1188,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
GetHistoryTree(typedata) { GetHistoryTree(typedata) {
var Tree = global.HistoryBlockBuf.LoadValue(typedata, 1); var Tree = global.HistoryBlockBuf.LoadValue(typedata, 1);
if (!Tree) { if (!Tree) {
Tree = new RBTree(CompareItemHash) Tree = new RBTree(global.CompareItemHash)
global.HistoryBlockBuf.SaveValue(typedata, Tree) global.HistoryBlockBuf.SaveValue(typedata, Tree)
} }
return Tree; return Tree;
@@ -1182,8 +1201,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
while (root_chain.RootChain) { while (root_chain.RootChain) {
Count++ Count++
root_chain = root_chain.RootChain root_chain = root_chain.RootChain
if (Count > MAX_COUNT_CHAIN_LOAD) { if (Count > global.MAX_COUNT_CHAIN_LOAD) {
TO_ERROR_LOG("BLOCK", 10, "Error COUNT GetRootChain") global.TO_ERROR_LOG("BLOCK", 10, "Error COUNT GetRootChain")
global.SERVER.FREE_ALL_MEM_CHAINS() global.SERVER.FREE_ALL_MEM_CHAINS()
return undefined; return undefined;
} }
@@ -1200,10 +1219,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
}; };
chain.GetRootChain = GetRootChain.bind(chain) chain.GetRootChain = GetRootChain.bind(chain)
chain.GetFindDB = GetFindDB.bind(chain) chain.GetFindDB = GetFindDB.bind(chain)
chain.AddInfo = AddInfoChain.bind(chain) chain.AddInfo = global.AddInfoChain.bind(chain)
} }
GetMemoryStamp(Str) { GetMemoryStamp(Str) {
return Str + ":##:" + Math.floor(this.CurrentBlockNum / BLOCK_COUNT_IN_MEMORY); return Str + ":##:" + Math.floor(this.CurrentBlockNum / global.BLOCK_COUNT_IN_MEMORY);
} }
GetStrFromHashShort(Hash) { GetStrFromHashShort(Hash) {
var Str = global.GetHexFromArr(Hash); var Str = global.GetHexFromArr(Hash);
@@ -1255,7 +1274,7 @@ global.LoadBlockFromNetwork = function(Params, F) {
global.SERVER.SendF(Node, { global.SERVER.SendF(Node, {
"Method": "GETBLOCK", "Data": { BlockNum: BlockNum, TreeHash: [] }, "Context": { "Method": "GETBLOCK", "Data": { BlockNum: BlockNum, TreeHash: [] }, "Context": {
F: function(Info) { F: function(Info) {
var Block = global.BufLib.GetObjectFromBuffer(Info.Data, FORMAT_BLOCK_TRANSFER, WRK_BLOCK_TRANSFER); var Block = global.BufLib.GetObjectFromBuffer(Info.Data, global.FORMAT_BLOCK_TRANSFER, global.WRK_BLOCK_TRANSFER);
Info.Data = undefined; Info.Data = undefined;
if (!Block.BlockNum || Block.BlockNum !== Params.BlockNum) { if (!Block.BlockNum || Block.BlockNum !== Params.BlockNum) {
global.ToLog("Error get BlockNum:" + Params.BlockNum + " from " + NodeName(Info.Node), 2); global.ToLog("Error get BlockNum:" + Params.BlockNum + " from " + NodeName(Info.Node), 2);
@@ -1281,4 +1300,4 @@ global.LoadBlockFromNetwork = function(Params, F) {
F(1); F(1);
} }
}; };
global.HistoryBlockBuf = new STreeBuffer(HISTORY_BLOCK_COUNT * 1000, CompareItemHashSimple, "string"); global.HistoryBlockBuf = new STreeBuffer(global.HISTORY_BLOCK_COUNT * 1000, global.CompareItemHashSimple, "string");

View File

@@ -9,30 +9,26 @@
*/ */
function Write(e,r,t,n,l) function Write(e, r, t, n?, l?) {
{ if (!(e.len >= e.length)) {
if(!(e.len >= e.length)) if ("number" == typeof t)
{ throw global.ToLogTrace("ERRR StringFormat "), "ERR!!";
if("number" == typeof t)
throw ToLogTrace("ERRR StringFormat "), "ERR!!";
var a = t; var a = t;
if("buffer" === a.substr(0, 6) && 6 < a.length) if ("buffer" === a.substr(0, 6) && 6 < a.length)
n = parseInt(a.substr(6)), a = "buffer"; n = parseInt(a.substr(6)), a = "buffer";
else else
if("arr" === a.substr(0, 3) && 3 < a.length) if ("arr" === a.substr(0, 3) && 3 < a.length)
n = parseInt(a.substr(3)), a = "arr"; n = parseInt(a.substr(3)), a = "arr";
else else
if("str" === a.substr(0, 3) && 3 < a.length) if ("str" === a.substr(0, 3) && 3 < a.length) {
{
var i = parseInt(a.substr(3)); var i = parseInt(a.substr(3));
return r && e.write(r, e.len, i), void (e.len += i); return r && e.write(r, e.len, i), void (e.len += i);
} }
switch(a) switch (a) {
{
case "str": case "str":
var f = toUTF8Array(r); var f = global.toUTF8Array(r);
65535 < (i = f.length) && (i = 0), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255, e.len += 2; 65535 < (i = f.length) && (i = 0), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255, e.len += 2;
for(var s = 0; s < i; s++) for (var s = 0; s < i; s++)
e[e.len + s] = f[s]; e[e.len + s] = f[s];
e.len += i; e.len += i;
break; break;
@@ -58,39 +54,39 @@ function Write(e,r,t,n,l)
case "addres": case "addres":
case "hash": case "hash":
i = r ? Math.min(32, r.length) : 0; i = r ? Math.min(32, r.length) : 0;
for(s = 0; s < i; s++) for (s = 0; s < i; s++)
e[e.len + s] = r[s]; e[e.len + s] = r[s];
e.len += 32; e.len += 32;
break; break;
case "buffer": case "buffer":
i = void 0 === n ? r.length : Math.min(n, r.length); i = void 0 === n ? r.length : Math.min(n, r.length);
for(s = 0; s < i; s++) for (s = 0; s < i; s++)
e[e.len + s] = r[s]; e[e.len + s] = r[s];
e.len += n; e.len += n;
break; break;
case "arr": case "arr":
i = r ? Math.min(n, r.length) : 0; i = r ? Math.min(n, r.length) : 0;
for(s = 0; s < i; s++) for (s = 0; s < i; s++)
e[e.len + s] = r[s]; e[e.len + s] = r[s];
e.len += n; e.len += n;
break; break;
case "tr": case "tr":
i = r.length; i = r.length;
MAX_TRANSACTION_SIZE > MAX_TRANSACTION_SIZE && (i = MAX_TRANSACTION_SIZE), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255, global.MAX_TRANSACTION_SIZE > global.MAX_TRANSACTION_SIZE && (i = global.MAX_TRANSACTION_SIZE), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255,
e.len += 2; e.len += 2;
for(s = 0; s < i; s++) for (s = 0; s < i; s++)
e[e.len + s] = r[s]; e[e.len + s] = r[s];
e.len += i; e.len += i;
break; break;
case "data": case "data":
i = r.length; i = r.length;
e.writeUInt32LE(i, e.len, 4), e.len += 4; e.writeUInt32LE(i, e.len, 4), e.len += 4;
for(s = 0; s < i; s++) for (s = 0; s < i; s++)
e[e.len + s] = r[s]; e[e.len + s] = r[s];
e.len += i; e.len += i;
break; break;
case "hashSTR": case "hashSTR":
var o = GetHexFromAddres(r); var o = global.GetHexFromAddres(r);
e.write(o, e.len, 64), e.len += 64; e.write(o, e.len, 64), e.len += 64;
break; break;
case "uintSTR": case "uintSTR":
@@ -100,33 +96,29 @@ function Write(e,r,t,n,l)
default: default:
l = l || {}; l = l || {};
var d = t.substr(0, 1); var d = t.substr(0, 1);
if("[" === d) if ("[" === d) {
{
r && (i = r.length); r && (i = r.length);
var b = GetMiddleString(a); var b = GetMiddleString(a);
Write(e, i, "uint32"); Write(e, i, "uint32");
for(s = 0; s < i; s++) for (s = 0; s < i; s++)
Write(e, r[s], b, void 0, l); Write(e, r[s], b, void 0, l);
} }
else else
if("<" === d) if ("<" === d) {
{
r && (i = r.length); r && (i = r.length);
b = GetMiddleString(a); b = GetMiddleString(a);
var h = 0, c = e.len; var h = 0, c = e.len;
e.len += 4; e.len += 4;
for(s = 0; s < i; s++) for (s = 0; s < i; s++)
r[s] && (h++, Write(e, s, "uint32"), Write(e, r[s], b, void 0, l)); r[s] && (h++ , Write(e, s, "uint32"), Write(e, r[s], b, void 0, l));
e.writeUInt32LE(h, c, 4); e.writeUInt32LE(h, c, 4);
} }
else else {
{ if ("{" !== d)
if("{" !== d)
throw "Bad write type params: " + a; throw "Bad write type params: " + a;
var g = l[a]; var g = l[a];
g || (g = GetAttributes(GetMiddleString(a)), l[a] = g); g || (g = GetAttributes(GetMiddleString(a)), l[a] = g);
for(s = 0; s < g.length; s++) for (s = 0; s < g.length; s++) {
{
var v = g[s]; var v = g[s];
Write(e, r[v.Key], v.Value, void 0, l); Write(e, r[v.Key], v.Value, void 0, l);
} }
@@ -135,27 +127,23 @@ function Write(e,r,t,n,l)
} }
}; };
function Read(e,r,t,n,l) function Read(e, r, t?, n?, l?) {
{
var a; var a;
if("number" == typeof r) if ("number" == typeof r)
throw ToLogTrace("ERR StringFormat"), "ERRR!"; throw global.ToLogTrace("ERR StringFormat"), "ERRR!";
var i = r; var i = r;
if("buffer" === i.substr(0, 6)) if ("buffer" === i.substr(0, 6))
6 < i.length ? (t = parseInt(i.substr(6)), i = "buffer") : t = 0; 6 < i.length ? (t = parseInt(i.substr(6)), i = "buffer") : t = 0;
else else
if("arr" === i.substr(0, 3)) if ("arr" === i.substr(0, 3))
3 < i.length ? (t = parseInt(i.substr(3)), i = "arr") : t = 0; 3 < i.length ? (t = parseInt(i.substr(3)), i = "arr") : t = 0;
else else
if("str" === i.substr(0, 3)) if ("str" === i.substr(0, 3)) {
{ if (3 < i.length) {
if(3 < i.length)
{
var f = parseInt(i.substr(3)); var f = parseInt(i.substr(3));
a = e.toString("utf8", e.len, e.len + f), e.len += f; a = e.toString("utf8", e.len, e.len + f), e.len += f;
for(var s = - 1, u = a.length - 1; 0 <= u; u--) for (var s = - 1, u = a.length - 1; 0 <= u; u--)
if(0 !== a.charCodeAt(u)) if (0 !== a.charCodeAt(u)) {
{
s = u; s = u;
break; break;
} }
@@ -163,12 +151,11 @@ function Read(e,r,t,n,l)
} }
t = 0; t = 0;
} }
switch(i) switch (i) {
{
case "str": case "str":
f = e.len + 2 <= e.length ? e[e.len] + 256 * e[e.len + 1] : 0, e.len += 2; f = e.len + 2 <= e.length ? e[e.len] + 256 * e[e.len + 1] : 0, e.len += 2;
var o = e.slice(e.len, e.len + f); var o = e.slice(e.len, e.len + f);
a = Utf8ArrayToStr(o), e.len += f; a = global.Utf8ArrayToStr(o), e.len += f;
break; break;
case "byte": case "byte":
a = e.len + 1 <= e.length ? e[e.len] : 0, e.len += 1; a = e.len + 1 <= e.length ? e[e.len] : 0, e.len += 1;
@@ -186,14 +173,14 @@ function Read(e,r,t,n,l)
a = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0, e.len += 4; a = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0, e.len += 4;
break; break;
case "time": case "time":
if(l) if (l)
throw "Bad read type params: time - DisableTime ON"; throw "Bad read type params: time - DisableTime ON";
a = e.len + 6 <= e.length ? e.readUIntLE(e.len, 6) : 0, a = new Date(a), e.len += 6; a = e.len + 6 <= e.length ? e.readUIntLE(e.len, 6) : 0, a = new Date(a), e.len += 6;
break; break;
case "addres": case "addres":
case "hash": case "hash":
a = []; a = [];
for(u = 0; u < 32; u++) for (u = 0; u < 32; u++)
e.len + u <= e.length ? a[u] = e[e.len + u] : a[u] = 0; e.len + u <= e.length ? a[u] = e[e.len + u] : a[u] = 0;
e.len += 32; e.len += 32;
break; break;
@@ -202,8 +189,7 @@ function Read(e,r,t,n,l)
a = e.len + t <= e.length ? e.slice(e.len, e.len + t) : Buffer.alloc(t), e.len += t; a = e.len + t <= e.length ? e.slice(e.len, e.len + t) : Buffer.alloc(t), e.len += t;
break; break;
case "tr": case "tr":
if(e.len + 1 >= e.length) if (e.len + 1 >= e.length) {
{
a = void 0; a = void 0;
break; break;
} }
@@ -212,11 +198,11 @@ function Read(e,r,t,n,l)
break; break;
case "data": case "data":
(f = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0) > e.length - e.len - 4 && (f = 0), e.len += 4, a = e.slice(e.len, (f = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0) > e.length - e.len - 4 && (f = 0), e.len += 4, a = e.slice(e.len,
e.len + f), e.len += f; e.len + f), e.len += f;
break; break;
case "hashSTR": case "hashSTR":
var d = e.toString("utf8", e.len, e.len + 64); var d = e.toString("utf8", e.len, e.len + 64);
a = GetAddresFromHex(d), e.len += 64; a = global.GetAddresFromHex(d), e.len += 64;
break; break;
case "uintSTR": case "uintSTR":
d = e.toString("utf8", e.len, e.len + 10); d = e.toString("utf8", e.len, e.len + 10);
@@ -225,24 +211,20 @@ function Read(e,r,t,n,l)
default: default:
n = n || {}; n = n || {};
var b = i.substr(0, 1); var b = i.substr(0, 1);
if("[" === b || "<" === b) if ("[" === b || "<" === b) {
{
var h = "<" === b; var h = "<" === b;
a = []; a = [];
var c = GetMiddleString(i); var c = GetMiddleString(i);
for(f = Read(e, "uint32"), u = 0; u < f && e.len <= e.length; u++) for (f = Read(e, "uint32"), u = 0; u < f && e.len <= e.length; u++) {
{
h ? a[Read(e, "uint32")] = Read(e, c, void 0, n, l) : a[u] = Read(e, c, void 0, n, l); h ? a[Read(e, "uint32")] = Read(e, c, void 0, n, l) : a[u] = Read(e, c, void 0, n, l);
} }
} }
else else {
{ if ("{" !== b)
if("{" !== b)
throw "Bad read type params: " + i; throw "Bad read type params: " + i;
var g = n[i]; var g = n[i];
g || (g = GetAttributes(GetMiddleString(i)), n[i] = g), a = {}; g || (g = GetAttributes(GetMiddleString(i)), n[i] = g), a = {};
for(u = 0; u < g.length; u++) for (u = 0; u < g.length; u++) {
{
var v = g[u]; var v = g[u];
a[v.Key] = Read(e, v.Value, void 0, n, l); a[v.Key] = Read(e, v.Value, void 0, n, l);
} }
@@ -251,58 +233,47 @@ function Read(e,r,t,n,l)
return a; return a;
}; };
function BufWriteByte(e) function BufWriteByte(e) {
{
this[this.len] = e, this.len += 1; this[this.len] = e, this.len += 1;
}; };
function BufWrite(e,r,t) function BufWrite(e, r, t) {
{
Write(this, e, r, t); Write(this, e, r, t);
}; };
function BufRead(e,r) function BufRead(e, r) {
{
return Read(this, e, r); return Read(this, e, r);
}; };
function GetNewBuffer(e) function GetNewBuffer(e) {
{
var r = Buffer.alloc(e); var r = Buffer.alloc(e);
return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r; return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r;
}; };
function GetReadBuffer(e) function GetReadBuffer(e) {
{
var r = Buffer.from(e); var r = Buffer.from(e);
return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r; return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r;
}; };
function GetObjectFromBuffer(e,r,t,n) function GetObjectFromBuffer(e, r, t, n) {
{
var l = Buffer.from(e); var l = Buffer.from(e);
return l.len = 0, Read(l, r, void 0, t, n); return l.len = 0, Read(l, r, void 0, t, n);
}; };
function GetBufferFromObject(e,r,t,n,l) function GetBufferFromObject(e, r, t?, n?, l?) {
{
var a = Buffer.alloc(t); var a = Buffer.alloc(t);
return a.len = 0, Write(a, e, r, void 0, n), l || (a = a.slice(0, a.len)), a; return a.len = 0, Write(a, e, r, void 0, n), l || (a = a.slice(0, a.len)), a;
}; };
function GetMiddleString(e) function GetMiddleString(e) {
{
return e.substr(1, e.length - 2); return e.substr(1, e.length - 2);
}; };
function GetMiddleString2(e,r,t) function GetMiddleString2(e, r, t) {
{ for (var n = 0, l = "", a = 0; a < e.length; a++) {
for(var n = 0, l = "", a = 0; a < e.length; a++)
{
var i = e.substr(a, 1); var i = e.substr(a, 1);
if(" " !== i && "\n" !== i && (i !== r || 1 != ++n)) if (" " !== i && "\n" !== i && (i !== r || 1 != ++n)) {
{ if (i === t && 0 === --n)
if(i === t && 0 === --n)
break; break;
n && (l += i); n && (l += i);
} }
@@ -310,24 +281,20 @@ function GetMiddleString2(e,r,t)
return l; return l;
}; };
function GetAttributeStrings(e) function GetAttributeStrings(e) {
{ for (var r = 0, t = [], n = "", l = 0; l < e.length; l++) {
for(var r = 0, t = [], n = "", l = 0; l < e.length; l++)
{
var a = e.substr(l, 1); var a = e.substr(l, 1);
if("{" === a) if ("{" === a)
r++; r++;
else else
if("}" === a) if ("}" === a)
r--; r--;
else else {
{ if ("," === a && 0 === r) {
if("," === a && 0 === r)
{
0 < n.length && t.push(n), n = ""; 0 < n.length && t.push(n), n = "";
continue; continue;
} }
if(" " === a || "\n" === a) if (" " === a || "\n" === a)
continue; continue;
} }
n += a; n += a;
@@ -335,30 +302,25 @@ function GetAttributeStrings(e)
return 0 < n.length && t.push(n), t; return 0 < n.length && t.push(n), t;
}; };
function GetKeyValueStrings(e) function GetKeyValueStrings(e) {
{ for (var r = "", t = 0; t < e.length; t++) {
for(var r = "", t = 0; t < e.length; t++)
{
var n = e.substr(t, 1); var n = e.substr(t, 1);
if(" " !== n && "\n" !== n) if (" " !== n && "\n" !== n) {
{ if (":" === n)
if(":" === n) return { Key: r, Value: e.substr(t + 1) };
return {Key:r, Value:e.substr(t + 1)};
r += n; r += n;
} }
} }
throw "Error format Key:Value = " + e; throw "Error format Key:Value = " + e;
}; };
function GetAttributes(e) function GetAttributes(e) {
{ for (var r = [], t = GetAttributeStrings(e), n = 0; n < t.length; n++) {
for(var r = [], t = GetAttributeStrings(e), n = 0; n < t.length; n++)
{
var l = GetKeyValueStrings(t[n]); var l = GetKeyValueStrings(t[n]);
r.push(l); r.push(l);
} }
return r; return r;
}; };
module.exports.GetNewBuffer = GetNewBuffer, module.exports.GetReadBuffer = GetReadBuffer, module.exports.alloc = GetNewBuffer, module.exports.GetNewBuffer = GetNewBuffer, module.exports.GetReadBuffer = GetReadBuffer, module.exports.alloc = GetNewBuffer,
module.exports.from = GetReadBuffer, module.exports.Write = Write, module.exports.Read = Read, module.exports.GetObjectFromBuffer = GetObjectFromBuffer, module.exports.from = GetReadBuffer, module.exports.Write = Write, module.exports.Read = Read, module.exports.GetObjectFromBuffer = GetObjectFromBuffer,
module.exports.GetBufferFromObject = GetBufferFromObject; module.exports.GetBufferFromObject = GetBufferFromObject;

View File

@@ -78,7 +78,7 @@ module.exports = class CCode extends require("./base")
if (bUpdate) { if (bUpdate) {
UpdateCodeFiles(VersionNum) UpdateCodeFiles(VersionNum)
} }
if (global.global.START_LOAD_CODE.StartLoad) { if (global.START_LOAD_CODE.StartLoad) {
global.CODE_VERSION = global.START_LOAD_CODE.StartLoad global.CODE_VERSION = global.START_LOAD_CODE.StartLoad
this.ClearLoadCode() this.ClearLoadCode()
} }
@@ -95,8 +95,8 @@ module.exports = class CCode extends require("./base")
var file_handle = fs.openSync(fname2, "w"); var file_handle = fs.openSync(fname2, "w");
fs.writeSync(file_handle, data, 0, data.length) fs.writeSync(file_handle, data, 0, data.length)
fs.closeSync(file_handle) fs.closeSync(file_handle)
var SignArr = arr2(Hash, GetArrFromValue(Data.VersionNum)); var SignArr = global.arr2(Hash, global.GetArrFromValue(Data.VersionNum));
var Sign = secp256k1.sign(SHA3BUF(SignArr), PrivateKey).signature; var Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), PrivateKey).signature;
global.CODE_VERSION = Data global.CODE_VERSION = Data
global.CODE_VERSION.Hash = Hash global.CODE_VERSION.Hash = Hash
global.CODE_VERSION.Sign = Sign global.CODE_VERSION.Sign = Sign
@@ -150,10 +150,10 @@ global.UnpackCodeFile = UnpackCodeFile;
function UnpackCodeFile(fname) { function UnpackCodeFile(fname) {
var data = fs.readFileSync(fname); var data = fs.readFileSync(fname);
var reader = ZIP.Reader(data); var reader = global.ZIP.Reader(data);
reader.forEach(function(entry) { reader.forEach(function(entry) {
var Name = entry.getName(); var Name = entry.getName();
var Path = GetCodePath(Name); var Path = global.GetCodePath(Name);
if (entry.isFile()) { if (entry.isFile()) {
var buf = entry.getData(); var buf = entry.getData();
global.CheckCreateDir(Path, true, true); global.CheckCreateDir(Path, true, true);
@@ -171,7 +171,7 @@ global.RestartNode = function RestartNode(bForce) {
setTimeout(DoExit, 5000); setTimeout(DoExit, 5000);
if (global.nw || global.NWMODE) { if (global.nw || global.NWMODE) {
} else { } else {
StopChildProcess(); global.StopChildProcess();
global.ToLog("********************************** FORCE RESTART!!!"); global.ToLog("********************************** FORCE RESTART!!!");
return; return;
} }
@@ -179,12 +179,12 @@ global.RestartNode = function RestartNode(bForce) {
var it = this.ActualNodes.iterator(), Node; var it = this.ActualNodes.iterator(), Node;
while ((Node = it.next()) !== null) { while ((Node = it.next()) !== null) {
if (Node.Socket) if (Node.Socket)
CloseSocket(Node.Socket, "Restart"); global.CloseSocket(Node.Socket, "Restart");
} }
} }
this.StopServer(); this.StopServer();
this.StopNode(); this.StopNode();
StopChildProcess(); global.StopChildProcess();
global.ToLog("****************************************** RESTART!!!"); global.ToLog("****************************************** RESTART!!!");
global.ToLog("EXIT 1"); global.ToLog("EXIT 1");
}; };
@@ -195,7 +195,7 @@ function DoExit() {
global.ToLog("RESTART NW"); global.ToLog("RESTART NW");
var StrRun = '"' + process.argv[0] + '" .\n'; var StrRun = '"' + process.argv[0] + '" .\n';
StrRun += '"' + process.argv[0] + '" .\n'; StrRun += '"' + process.argv[0] + '" .\n';
SaveToFile("run-next.bat", StrRun); global.SaveToFile("run-next.bat", StrRun);
const child_process = require('child_process'); const child_process = require('child_process');
child_process.exec("run-next.bat", { shell: true }); child_process.exec("run-next.bat", { shell: true });
} }

View File

@@ -15,11 +15,11 @@ global.PERIOD_FOR_RECONNECT = 3600 * 1000;
global.CHECK_DELTA_TIME = { Num: 0, bUse: 0, StartBlockNum: 0, EndBlockNum: 0, bAddTime: 0, DeltaTime: 0, Sign: [] }; global.CHECK_DELTA_TIME = { Num: 0, bUse: 0, StartBlockNum: 0, EndBlockNum: 0, bAddTime: 0, DeltaTime: 0, Sign: [] };
global.CHECK_POINT = { BlockNum: 0, Hash: [], Sign: [] }; global.CHECK_POINT = { BlockNum: 0, Hash: [], Sign: [] };
global.CODE_VERSION = { global.CODE_VERSION = {
BlockNum: 0, addrArr: [], LevelUpdate: 0, BlockPeriod: 0, VersionNum: UPDATE_CODE_VERSION_NUM, Hash: [], Sign: [], BlockNum: 0, addrArr: [], LevelUpdate: 0, BlockPeriod: 0, VersionNum: global.UPDATE_CODE_VERSION_NUM, Hash: [], Sign: [],
StartLoadVersionNum: 0 StartLoadVersionNum: 0
}; };
global.NET_CONSTANT = { global.NET_CONSTANT = {
Num: 0, BlockNum: 0, MaxTrasactionLimit: MAX_TRANSACTION_LIMIT, Reserv1: 0, Reserv2: 0, Reserv3: 0, Reserv4: 0, Num: 0, BlockNum: 0, MaxTrasactionLimit: global.MAX_TRANSACTION_LIMIT, Reserv1: 0, Reserv2: 0, Reserv3: 0, Reserv4: 0,
Reserv5: 0, Hash: [], Sign: [] Reserv5: 0, Hash: [], Sign: []
}; };
global.START_LOAD_CODE = {}; global.START_LOAD_CODE = {};
@@ -28,7 +28,7 @@ global.MIN_PERIOD_PING = 4 * 1000;
const MAX_PERIOD_PING = 120 * 1000; const MAX_PERIOD_PING = 120 * 1000;
global.MAX_PING_FOR_CONNECT = 400; global.MAX_PING_FOR_CONNECT = 400;
var MAX_TIME_CORRECT = 3 * 3600 * 1000; var MAX_TIME_CORRECT = 3 * 3600 * 1000;
global.MAX_WAIT_PERIOD_FOR_HOT = 4 * CONSENSUS_PERIOD_TIME; global.MAX_WAIT_PERIOD_FOR_HOT = 4 * global.CONSENSUS_PERIOD_TIME;
const PERIOD_FOR_START_CHECK_TIME = 300; const PERIOD_FOR_START_CHECK_TIME = 300;
module.exports = class CConnect extends require("./transfer-msg") module.exports = class CConnect extends require("./transfer-msg")
{ {
@@ -41,6 +41,15 @@ module.exports = class CConnect extends require("./transfer-msg")
NodesIPMap NodesIPMap
PerioadAfterCanStart PerioadAfterCanStart
КодДляРазработчикаХекс КодДляРазработчикаХекс
CommonKey
KeyToNode
NameToNode
BlockNumDB
idTimerSetConst
SignCurrentTimeDev
StopDetectGrayMode
LastNotZeroNodesTime
TransferTree
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
this.StartTime = Date.now() this.StartTime = Date.now()
@@ -69,21 +78,21 @@ module.exports = class CConnect extends require("./transfer-msg")
СтатДанныеОтладкиИзБлока() { СтатДанныеОтладкиИзБлока() {
var Массив = []; var Массив = [];
if (this.СтатБлок && this.СтатБлок.SeqHash) { if (this.СтатБлок && this.СтатБлок.SeqHash) {
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:BlockNum", this.СтатБлок.BlockNum, "uint"), 6) global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:BlockNum", this.СтатБлок.BlockNum, "uint"), 6)
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:SeqHash", this.СтатБлок.SeqHash, "hash"), 32) global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:SeqHash", this.СтатБлок.SeqHash, "hash"), 32)
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:AddrHash", this.СтатБлок.AddrHash, "hash"), 32) global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:AddrHash", this.СтатБлок.AddrHash, "hash"), 32)
} }
return Массив; return Массив;
} }
ДоступенКлючРазработчика(Node) { ДоступенКлючРазработчика(Node) {
if (Node.PubKey && global.WALLET.WalletOpen !== false && IsDeveloperAccount(WALLET.PubKeyArr)) { if (Node.PubKey && global.WALLET.WalletOpen !== false && global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
return 1; return 1;
} }
return 0; return 0;
} }
БлокИзДанных(Node, Arr) { БлокИзДанных(Node, Arr) {
var Block = {}; var Block: any = {};
if (this.ДоступенКлючРазработчика(Node) && !IsZeroArr(Arr)) { if (this.ДоступенКлючРазработчика(Node) && !global.IsZeroArr(Arr)) {
var Data = global.BufLib.GetObjectFromBuffer(Arr, "{BlockNum:arr6,SeqHash:arr32,AddrHash:arr32}", {}); var Data = global.BufLib.GetObjectFromBuffer(Arr, "{BlockNum:arr6,SeqHash:arr32,AddrHash:arr32}", {});
Block.BlockNum = this.ValueFromXORDevelop(Node, "Stat:BlockNum", Data.BlockNum, "uint") Block.BlockNum = this.ValueFromXORDevelop(Node, "Stat:BlockNum", Data.BlockNum, "uint")
Block.SeqHash = this.ValueFromXORDevelop(Node, "Stat:SeqHash", Data.SeqHash, "hash") Block.SeqHash = this.ValueFromXORDevelop(Node, "Stat:SeqHash", Data.SeqHash, "hash")
@@ -106,7 +115,7 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
FindRunNodeContext(addrArr, ip, port, bUpdate) { FindRunNodeContext(addrArr, ip, port, bUpdate) {
var Node, addrStr; var Node, addrStr;
addrStr = GetHexFromAddres(addrArr) addrStr = global.GetHexFromAddres(addrArr)
Node = this.NodesMap[addrStr] Node = this.NodesMap[addrStr]
if (!Node) { if (!Node) {
var key = "" + ip + ":" + port; var key = "" + ip + ":" + port;
@@ -132,7 +141,7 @@ module.exports = class CConnect extends require("./transfer-msg")
var Node2 = this.NodesMap[Node.addrStr]; var Node2 = this.NodesMap[Node.addrStr];
if (Node2 && Node2 !== Node) { if (Node2 && Node2 !== Node) {
Node2.Delete = 1 Node2.Delete = 1
AddNodeInfo(Node2, "FIND DOUBLE!!") global.AddNodeInfo(Node2, "FIND DOUBLE!!")
delete this.NodesMap[Node.addrStr] delete this.NodesMap[Node.addrStr]
} }
this.NodesMap[Node.addrStr] = Node this.NodesMap[Node.addrStr] = Node
@@ -143,7 +152,7 @@ module.exports = class CConnect extends require("./transfer-msg")
return this.StartConnectTry(Node); return this.StartConnectTry(Node);
} }
StartPingPong() { StartPingPong() {
if (glStopNode) if (global.glStopNode)
return; return;
if (global.CAN_START) if (global.CAN_START)
this.PerioadAfterCanStart++ this.PerioadAfterCanStart++
@@ -153,9 +162,9 @@ module.exports = class CConnect extends require("./transfer-msg")
var Node = arr[i]; var Node = arr[i];
if (this.IsCanConnect(Node) && !Node.IsAddrList) { if (this.IsCanConnect(Node) && !Node.IsAddrList) {
if (Node.Hot) if (Node.Hot)
Node.NextPing = MIN_PERIOD_PING Node.NextPing = global.MIN_PERIOD_PING
if (Node.NextPing < MIN_PERIOD_PING) if (Node.NextPing < global.MIN_PERIOD_PING)
Node.NextPing = MIN_PERIOD_PING Node.NextPing = global.MIN_PERIOD_PING
var Delta = Date.now() - Node.PingStart; var Delta = Date.now() - Node.PingStart;
if (Delta >= Node.NextPing) { if (Delta >= Node.NextPing) {
Node.PingStart = Date.now() Node.PingStart = Date.now()
@@ -165,7 +174,7 @@ module.exports = class CConnect extends require("./transfer-msg")
if (!Node.PingNumber) if (!Node.PingNumber)
Node.PingNumber = 0 Node.PingNumber = 0
Node.PingNumber++ Node.PingNumber++
var Context = { "StartTime": GetCurrentTime(0), PingNumber: Node.PingNumber }; var Context = { "StartTime": global.GetCurrentTime(0), PingNumber: Node.PingNumber };
this.SendF(Node, { "Method": "PING", "Context": Context, "Data": this.GetPingData(Node) }) this.SendF(Node, { "Method": "PING", "Context": Context, "Data": this.GetPingData(Node) })
} }
} }
@@ -173,13 +182,13 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
GetPingData(Node) { GetPingData(Node) {
var GrayAddres = 0; var GrayAddres = 0;
if (GrayConnect()) if (global.GrayConnect())
GrayAddres = 1 GrayAddres = 1
var BlockNumHash = Math.trunc((GetCurrentBlockNumByTime() - global.BLOCK_PROCESSING_LENGTH2) / PERIOD_ACCOUNT_HASH) * PERIOD_ACCOUNT_HASH; var BlockNumHash = Math.trunc((global.GetCurrentBlockNumByTime() - global.BLOCK_PROCESSING_LENGTH2) / global.PERIOD_ACCOUNT_HASH) * global.PERIOD_ACCOUNT_HASH;
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(BlockNumHash); var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(BlockNumHash);
var CheckPointHashDB = []; var CheckPointHashDB = [];
if (CHECK_POINT.BlockNum && CHECK_POINT.BlockNum <= this.BlockNumDB) { if (global.CHECK_POINT.BlockNum && global.CHECK_POINT.BlockNum <= this.BlockNumDB) {
var Block = this.ReadBlockHeaderFromMapDB(CHECK_POINT.BlockNum); var Block = this.ReadBlockHeaderFromMapDB(global.CHECK_POINT.BlockNum);
if (Block) { if (Block) {
CheckPointHashDB = Block.Hash CheckPointHashDB = Block.Hash
} }
@@ -199,15 +208,15 @@ module.exports = class CConnect extends require("./transfer-msg")
var СтатДанные = []; var СтатДанные = [];
var DirectMAccount = 0; var DirectMAccount = 0;
var Ret = { var Ret = {
VERSIONMAX: DEF_VERSION, VERSIONMAX: global.DEF_VERSION,
FIRST_TIME_BLOCK: 0, FIRST_TIME_BLOCK: 0,
PingVersion: 3, PingVersion: 3,
GrayConnect: GrayAddres, Reserve2: 0, AutoCorrectTime: AUTO_CORRECT_TIME, GrayConnect: GrayAddres, Reserve2: 0, AutoCorrectTime: global.AUTO_CORRECT_TIME,
LevelCount: LevelCount, Time: (GetCurrentTime() - 0), BlockNumDB: this.BlockNumDB, LoadHistoryMode: this.LoadHistoryMode, CanStart: global.CAN_START, LevelCount: LevelCount, Time: (global.GetCurrentTime() - 0), BlockNumDB: this.BlockNumDB, LoadHistoryMode: this.LoadHistoryMode, CanStart: global.CAN_START,
CheckPoint: CHECK_POINT, Reserv3: [], Key: this.KeyToNode, Name: this.NameToNode, TrafficFree: this.SendTrafficFree, AccountBlockNum: BlockNumHash, CheckPoint: global.CHECK_POINT, Reserv3: [], Key: this.KeyToNode, Name: this.NameToNode, TrafficFree: this.SendTrafficFree, AccountBlockNum: BlockNumHash,
AccountsHash: AccountsHash, MemoryUsage: Math.trunc(process.memoryUsage().heapTotal / 1024 / 1024), CheckDeltaTime: CHECK_DELTA_TIME, AccountsHash: AccountsHash, MemoryUsage: Math.trunc(process.memoryUsage().heapTotal / 1024 / 1024), CheckDeltaTime: global.CHECK_DELTA_TIME,
CodeVersion: CODE_VERSION, IsAddrList: global.ADDRLIST_MODE, CheckPointHashDB: CheckPointHashDB, PortWeb: HTTP_HOSTING_PORT, HashDB: HashDB, CodeVersion: global.CODE_VERSION, IsAddrList: global.ADDRLIST_MODE, CheckPointHashDB: CheckPointHashDB, PortWeb: global.HTTP_HOSTING_PORT, HashDB: HashDB,
StopGetBlock: StopGetBlock, NetConstant: NET_CONSTANT, StopGetBlock: StopGetBlock, NetConstant: global.NET_CONSTANT,
}; };
return Ret; return Ret;
} }
@@ -286,7 +295,7 @@ module.exports = class CConnect extends require("./transfer-msg")
if (Info.Context.PingNumber !== Node.PingNumber) if (Info.Context.PingNumber !== Node.PingNumber)
return; return;
this.DoPingData(Info, 0) this.DoPingData(Info, 0)
var DeltaTime = GetCurrentTime(0) - Info.Context.StartTime; var DeltaTime = global.GetCurrentTime(0) - Info.Context.StartTime;
Node.DeltaTimeM = DeltaTime Node.DeltaTimeM = DeltaTime
Node.SumDeltaTime += DeltaTime Node.SumDeltaTime += DeltaTime
Node.CountDeltaTime++ Node.CountDeltaTime++
@@ -302,11 +311,11 @@ module.exports = class CConnect extends require("./transfer-msg")
this.CheckNetConstant(Data, Info.Node) this.CheckNetConstant(Data, Info.Node)
this.CheckCodeVersion(Data, Info.Node) this.CheckCodeVersion(Data, Info.Node)
if (!global.CAN_START) { if (!global.CAN_START) {
if (DeltaTime > MAX_PING_FOR_CONNECT) if (DeltaTime > global.MAX_PING_FOR_CONNECT)
global.ToLog("DeltaTime=" + DeltaTime + ">" + MAX_PING_FOR_CONNECT + " ms - " + NodeInfo(Node), 2) global.ToLog("DeltaTime=" + DeltaTime + ">" + global.MAX_PING_FOR_CONNECT + " ms - " + NodeInfo(Node), 2)
} }
var Times; var Times;
if (DeltaTime <= MAX_PING_FOR_CONNECT) { if (DeltaTime <= global.MAX_PING_FOR_CONNECT) {
Times = Node.Times Times = Node.Times
if (!Times || Times.Count >= 10) { if (!Times || Times.Count >= 10) {
Times = { SumDelta: 0, Count: 0, AvgDelta: 0, Arr: [] } Times = { SumDelta: 0, Count: 0, AvgDelta: 0, Arr: [] }
@@ -340,18 +349,18 @@ module.exports = class CConnect extends require("./transfer-msg")
this.CheckDeltaTime(Data, Info.Node) this.CheckDeltaTime(Data, Info.Node)
} }
CheckCheckPoint(Data, Node) { CheckCheckPoint(Data, Node) {
if (CREATE_ON_START) if (global.CREATE_ON_START)
return; return;
if (Data.CheckPoint.BlockNum && Data.CheckPoint.BlockNum > CHECK_POINT.BlockNum) { if (Data.CheckPoint.BlockNum && Data.CheckPoint.BlockNum > global.CHECK_POINT.BlockNum) {
var SignArr = arr2(Data.CheckPoint.Hash, GetArrFromValue(Data.CheckPoint.BlockNum)); var SignArr = global.arr2(Data.CheckPoint.Hash, global.SaveToFile(Data.CheckPoint.BlockNum));
if (CheckDevelopSign(SignArr, Data.CheckPoint.Sign)) { if (global.CheckDevelopSign(SignArr, Data.CheckPoint.Sign)) {
global.CHECK_POINT = Data.CheckPoint global.CHECK_POINT = Data.CheckPoint
this.ResetNextPingAllNode() this.ResetNextPingAllNode()
if (Data.CheckPoint.BlockNum < this.BlockNumDBMin) if (Data.CheckPoint.BlockNum < this.BlockNumDBMin)
return; return;
var Block = this.ReadBlockHeaderDB(CHECK_POINT.BlockNum); var Block = this.ReadBlockHeaderDB(global.CHECK_POINT.BlockNum);
if (Block && global.CompareArr(Block.Hash, CHECK_POINT.Hash) !== 0) { if (Block && global.CompareArr(Block.Hash, global.CHECK_POINT.Hash) !== 0) {
this.BlockNumDB = CHECK_POINT.BlockNum - 1 this.BlockNumDB = global.CHECK_POINT.BlockNum - 1
this.TruncateBlockDB(this.BlockNumDB) this.TruncateBlockDB(this.BlockNumDB)
this.StartSyncBlockchain(Node, 0, 1) this.StartSyncBlockchain(Node, 0, 1)
} }
@@ -365,10 +374,10 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
CheckDeltaTime(Data, Node) { CheckDeltaTime(Data, Node) {
if (global.AUTO_CORRECT_TIME) if (global.AUTO_CORRECT_TIME)
if (global.CAN_START && !CREATE_ON_START) { if (global.CAN_START && !global.CREATE_ON_START) {
if (Data.CheckDeltaTime.Num > CHECK_DELTA_TIME.Num) { if (Data.CheckDeltaTime.Num > global.CHECK_DELTA_TIME.Num) {
var SignArr = this.GetSignCheckDeltaTime(Data.CheckDeltaTime); var SignArr = this.GetSignCheckDeltaTime(Data.CheckDeltaTime);
if (CheckDevelopSign(SignArr, Data.CheckDeltaTime.Sign)) { if (global.CheckDevelopSign(SignArr, Data.CheckDeltaTime.Sign)) {
global.CHECK_DELTA_TIME = Data.CheckDeltaTime global.CHECK_DELTA_TIME = Data.CheckDeltaTime
} }
else { else {
@@ -380,11 +389,11 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
} }
CheckNetConstant(Data, Node) { CheckNetConstant(Data, Node) {
if (Data.NetConstant.Num > NET_CONSTANT.Num) { if (Data.NetConstant.Num > global.NET_CONSTANT.Num) {
var SignArr = this.GetSignCheckNetConstant(Data.NetConstant); var SignArr = this.GetSignCheckNetConstant(Data.NetConstant);
if (CheckDevelopSign(SignArr, Data.NetConstant.Sign)) { if (global.CheckDevelopSign(SignArr, Data.NetConstant.Sign)) {
global.NET_CONSTANT = Data.NetConstant global.NET_CONSTANT = Data.NetConstant
var CurBlockNum = GetCurrentBlockNumByTime(); var CurBlockNum = global.GetCurrentBlockNumByTime();
var Delta = Data.NetConstant.BlockNum - CurBlockNum; var Delta = Data.NetConstant.BlockNum - CurBlockNum;
if (Delta < 1) if (Delta < 1)
Delta = 1 Delta = 1
@@ -406,12 +415,12 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
} }
DoNetConst() { DoNetConst() {
global.MAX_TRANSACTION_LIMIT = NET_CONSTANT.MaxTrasactionLimit global.MAX_TRANSACTION_LIMIT = global.NET_CONSTANT.MaxTrasactionLimit
} }
CheckCodeVersion(Data, Node) { CheckCodeVersion(Data, Node) {
var CodeVersion = Data.CodeVersion; var CodeVersion = Data.CodeVersion;
Node.VersionNum = CodeVersion.VersionNum Node.VersionNum = CodeVersion.VersionNum
if (CodeVersion.VersionNum >= MIN_CODE_VERSION_NUM) { if (CodeVersion.VersionNum >= global.MIN_CODE_VERSION_NUM) {
Node.VersionOK = true Node.VersionOK = true
} }
else { else {
@@ -419,8 +428,8 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
if (Node.VersionOK) { if (Node.VersionOK) {
Node.CanHot = true Node.CanHot = true
if (CHECK_POINT.BlockNum && Data.CheckPoint.BlockNum) if (global.CHECK_POINT.BlockNum && Data.CheckPoint.BlockNum)
if (CHECK_POINT.BlockNum !== Data.CheckPoint.BlockNum || global.CompareArr(CHECK_POINT.Hash, Data.CheckPoint.Hash) !== 0) { if (global.CHECK_POINT.BlockNum !== Data.CheckPoint.BlockNum || global.CompareArr(global.CHECK_POINT.Hash, Data.CheckPoint.Hash) !== 0) {
Node.CanHot = false Node.CanHot = false
Node.NextConnectDelta = 60 * 1000 Node.NextConnectDelta = 60 * 1000
} }
@@ -432,24 +441,24 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
} }
var bLoadVer = 0; var bLoadVer = 0;
if (CodeVersion.BlockNum && (CodeVersion.BlockNum <= GetCurrentBlockNumByTime() || CodeVersion.BlockPeriod === 0) && CodeVersion.BlockNum > CODE_VERSION.BlockNum && !IsZeroArr(CodeVersion.Hash) && (CodeVersion.VersionNum > CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum || CodeVersion.VersionNum === CODE_VERSION.VersionNum && IsZeroArr(CODE_VERSION.Hash))) { if (CodeVersion.BlockNum && (CodeVersion.BlockNum <= global.GetCurrentBlockNumByTime() || CodeVersion.BlockPeriod === 0) && CodeVersion.BlockNum > global.CODE_VERSION.BlockNum && !global.IsZeroArr(CodeVersion.Hash) && (CodeVersion.VersionNum > global.CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum || CodeVersion.VersionNum === global.CODE_VERSION.VersionNum && global.IsZeroArr(global.CODE_VERSION.Hash))) {
bLoadVer = 1 bLoadVer = 1
} }
if (bLoadVer) { if (bLoadVer) {
var Level = AddrLevelArrFromBegin(this.addrArr, CodeVersion.addrArr); var Level = global.AddrLevelArrFromBegin(this.addrArr, CodeVersion.addrArr);
if (CodeVersion.BlockPeriod) { if (CodeVersion.BlockPeriod) {
var Delta = GetCurrentBlockNumByTime() - CodeVersion.BlockNum; var Delta = global.GetCurrentBlockNumByTime() - CodeVersion.BlockNum;
Level += Delta / CodeVersion.BlockPeriod Level += Delta / CodeVersion.BlockPeriod
} }
if (Level >= CodeVersion.LevelUpdate) { if (Level >= CodeVersion.LevelUpdate) {
var SignArr = arr2(CodeVersion.Hash, GetArrFromValue(CodeVersion.VersionNum)); var SignArr = global.arr2(CodeVersion.Hash, global.SaveToFile(CodeVersion.VersionNum));
if (CheckDevelopSign(SignArr, CodeVersion.Sign)) { if (global.CheckDevelopSign(SignArr, CodeVersion.Sign)) {
global.ToLog("Get new CodeVersion = " + CodeVersion.VersionNum + " HASH:" + global.GetHexFromArr(CodeVersion.Hash).substr(0, 20)) global.ToLog("Get new CodeVersion = " + CodeVersion.VersionNum + " HASH:" + global.GetHexFromArr(CodeVersion.Hash).substr(0, 20))
if (CodeVersion.VersionNum > CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum) { if (CodeVersion.VersionNum > global.CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum) {
this.StartLoadCode(Node, CodeVersion) this.StartLoadCode(Node, CodeVersion)
} }
else { else {
CODE_VERSION = CodeVersion global.CODE_VERSION = CodeVersion
} }
} }
else { else {
@@ -480,21 +489,21 @@ module.exports = class CConnect extends require("./transfer-msg")
Node2.NextPing = 5 * 1000 Node2.NextPing = 5 * 1000
} }
} }
StartDisconnectHot(Node, StrError, bDeleteHot) { StartDisconnectHot(Node, StrError, bDeleteHot?) {
AddNodeInfo(Node, "DisconnectHot:" + StrError) global.AddNodeInfo(Node, "DisconnectHot:" + StrError)
if (Node.Active && Node.Hot) { if (Node.Active && Node.Hot) {
AddNodeInfo(Node, "SEND DISCONNECTHOT") global.AddNodeInfo(Node, "SEND DISCONNECTHOT")
this.Send(Node, { "Method": "DISCONNECTHOT", "Context": {}, "Data": StrError }, STR_TYPE) this.Send(Node, { "Method": "DISCONNECTHOT", "Context": {}, "Data": StrError }, global.STR_TYPE)
} }
this.DeleteNodeFromHot(Node) this.DeleteNodeFromHot(Node)
} }
DISCONNECTHOT(Info, CurTime) { DISCONNECTHOT(Info, CurTime) {
this.DeleteNodeFromHot(Info.Node) this.DeleteNodeFromHot(Info.Node)
global.ADD_TO_STAT("DISCONNECTHOT") global.ADD_TO_STAT("DISCONNECTHOT")
AddNodeInfo(Info.Node, "GET DISCONNECTHOT:" + Info.Data) global.AddNodeInfo(Info.Node, "GET DISCONNECTHOT:" + Info.Data)
} }
StartGetNodes(Node) { StartGetNodes(Node) {
if (glStopNode) if (global.glStopNode)
return; return;
var Delta = Date.now() - Node.StartTimeGetNodes; var Delta = Date.now() - Node.StartTimeGetNodes;
if (Delta >= Node.NextGetNodesDelta) { if (Delta >= Node.NextGetNodesDelta) {
@@ -510,7 +519,7 @@ module.exports = class CConnect extends require("./transfer-msg")
"Method": "RETGETNODES", "Context": Info.Context, "Data": { "Method": "RETGETNODES", "Context": Info.Context, "Data": {
arr: this.GetDirectNodesArray(false, 0, 1), IsAddrList: global.ADDRLIST_MODE, arr: this.GetDirectNodesArray(false, 0, 1), IsAddrList: global.ADDRLIST_MODE,
} }
}, MAX_NODES_RETURN * 250 + 300) }, global.MAX_NODES_RETURN * 250 + 300)
} }
static static
RETGETNODES_F() { RETGETNODES_F() {
@@ -539,7 +548,7 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
} }
Info.Node.IsAddrList = Data.IsAddrList Info.Node.IsAddrList = Data.IsAddrList
AddNodeInfo(Info.Node, "RETGETNODES length=" + arr.length) global.AddNodeInfo(Info.Node, "RETGETNODES length=" + arr.length)
} }
static static
RETGETNODES2_F() { RETGETNODES2_F() {
@@ -567,7 +576,7 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
} }
Info.Node.IsAddrList = Data.IsAddrList Info.Node.IsAddrList = Data.IsAddrList
AddNodeInfo(Info.Node, "RETGETNODES2 length=" + arr.length) global.AddNodeInfo(Info.Node, "RETGETNODES2 length=" + arr.length)
} }
GetNewNode(addrStr, ip, port) { GetNewNode(addrStr, ip, port) {
var Node = new CNode(addrStr, ip, port); var Node = new CNode(addrStr, ip, port);
@@ -583,10 +592,10 @@ module.exports = class CConnect extends require("./transfer-msg")
return false; return false;
return true; return true;
} }
GetDirectNodesArray(bAll, bWebPort, bGetAddrArr) { GetDirectNodesArray(bAll, bWebPort?, bGetAddrArr?) {
var ret = []; var ret = [];
var Value = { var Value: any = {
addrStr: this.addrStr, ip: this.ip, port: this.port, LastTime: 0, DeltaTime: 0, Hot: true, BlockProcessCount: 0, portweb: HTTP_HOSTING_PORT, addrStr: this.addrStr, ip: this.ip, port: this.port, LastTime: 0, DeltaTime: 0, Hot: true, BlockProcessCount: 0, portweb: global.HTTP_HOSTING_PORT,
}; };
if (bGetAddrArr) if (bGetAddrArr)
Value.addrArr = global.GetArrFromHex(Value.addrStr) Value.addrArr = global.GetArrFromHex(Value.addrStr)
@@ -594,17 +603,17 @@ module.exports = class CConnect extends require("./transfer-msg")
var len = this.NodesArr.length; var len = this.NodesArr.length;
var UseRandom = 0; var UseRandom = 0;
var MaxDeltaTime = 24 * 3600 * 1000; var MaxDeltaTime = 24 * 3600 * 1000;
if (len > MAX_NODES_RETURN && !bAll) { if (len > global.MAX_NODES_RETURN && !bAll) {
UseRandom = 1 UseRandom = 1
MaxDeltaTime = NODES_DELTA_CALC_HOUR * 3600 * 1000 MaxDeltaTime = global.NODES_DELTA_CALC_HOUR * 3600 * 1000
len = MAX_NODES_RETURN len = global.MAX_NODES_RETURN
} }
var mapWasAdd = {}; var mapWasAdd = {};
var CurTime = global.GetCurrentTime(); var CurTime = global.GetCurrentTime();
for (var i = 0; i < len; i++) { for (var i = 0; i < len; i++) {
var Item; var Item;
if (UseRandom) { if (UseRandom) {
Item = this.NodesArr[random(this.NodesArr.length)] Item = this.NodesArr[global.random(this.NodesArr.length)]
if (mapWasAdd[Item.addrStr]) { if (mapWasAdd[Item.addrStr]) {
continue; continue;
} }
@@ -621,9 +630,9 @@ module.exports = class CConnect extends require("./transfer-msg")
continue; continue;
if (Item.BlockProcessCount < 0) if (Item.BlockProcessCount < 0)
continue; continue;
if (!GrayConnect() && Item.LastTime - 0 < CurTime - MaxDeltaTime) if (!global.GrayConnect() && Item.LastTime - 0 < CurTime - MaxDeltaTime)
continue; continue;
var Value = { var Value: any = {
addrStr: Item.addrStr, ip: Item.ip, port: Item.port, FirstTime: Item.FirstTime, FirstTimeStr: Item.FirstTimeStr, LastTime: Item.LastTime - 0, addrStr: Item.addrStr, ip: Item.ip, port: Item.port, FirstTime: Item.FirstTime, FirstTimeStr: Item.FirstTimeStr, LastTime: Item.LastTime - 0,
DeltaTime: Item.DeltaTime, Hot: Item.Hot, BlockProcessCount: Item.BlockProcessCount, Name: Item.Name, portweb: Item.portweb, DeltaTime: Item.DeltaTime, Hot: Item.Hot, BlockProcessCount: Item.BlockProcessCount, Name: Item.Name, portweb: Item.portweb,
}; };
@@ -633,7 +642,7 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
return ret; return ret;
} }
AddToArrNodes(Item) { AddToArrNodes(Item, b?) {
if (Item.addrStr === "" || Item.addrStr === this.addrStr) if (Item.addrStr === "" || Item.addrStr === this.addrStr)
return; return;
var Node; var Node;
@@ -648,7 +657,7 @@ module.exports = class CConnect extends require("./transfer-msg")
else else
Node = new CNode(Item.addrStr, Item.ip, Item.port) Node = new CNode(Item.addrStr, Item.ip, Item.port)
Node.id = this.NodesArr.length Node.id = this.NodesArr.length
Node.addrArr = GetAddresFromHex(Node.addrStr) Node.addrArr = global.GetAddresFromHex(Node.addrStr)
this.NodesMap[Node.addrStr] = Node this.NodesMap[Node.addrStr] = Node
this.NodesArr.push(Node) this.NodesArr.push(Node)
this.NodesArrUnSort.push(Node) this.NodesArrUnSort.push(Node)
@@ -673,14 +682,14 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
NodesArrSort() { NodesArrSort() {
this.NodesArr.sort(SortNodeBlockProcessCount) this.NodesArr.sort(SortNodeBlockProcessCount)
if ((GrayConnect() || !this.LoadHistoryMode) && Date.now() - this.StartTime > 120 * 1000) { if ((global.GrayConnect() || !this.LoadHistoryMode) && Date.now() - this.StartTime > 120 * 1000) {
var arr0 = this.GetDirectNodesArray(true); var arr0 = this.GetDirectNodesArray(true);
var arr = arr0.slice(1, 2000); var arr = arr0.slice(1, 2000);
SaveParams(global.GetDataPath("nodes.lst"), arr) global.SaveParams(global.GetDataPath("nodes.lst"), arr)
} }
} }
LoadNodesFromFile() { LoadNodesFromFile() {
var arr = LoadParams(global.GetDataPath("nodes.lst"), []); var arr = global.LoadParams(global.GetDataPath("nodes.lst"), []);
arr.sort(SortNodeBlockProcessCount) arr.sort(SortNodeBlockProcessCount)
for (var i = 0; i < arr.length; i++) { for (var i = 0; i < arr.length; i++) {
if (arr[i].LastTime) { if (arr[i].LastTime) {
@@ -733,7 +742,7 @@ module.exports = class CConnect extends require("./transfer-msg")
var Count; var Count;
if (!global.CAN_START) if (!global.CAN_START)
return; return;
if (Info.Node.GrayConnect || GrayConnect()) if (Info.Node.GrayConnect || global.GrayConnect())
return; return;
var Count = this.GetLevelEnum(Info.Node); var Count = this.GetLevelEnum(Info.Node);
var bAdd = this.AddLevelConnect(Info.Node); var bAdd = this.AddLevelConnect(Info.Node);
@@ -743,7 +752,7 @@ module.exports = class CConnect extends require("./transfer-msg")
else { else {
ret = { result: 0, Count: Count } ret = { result: 0, Count: Count }
} }
AddNodeInfo(Info.Node, "GET ADDLEVELCONNECT, DO bAdd=" + bAdd) global.AddNodeInfo(Info.Node, "GET ADDLEVELCONNECT, DO bAdd=" + bAdd)
this.SendF(Info.Node, { "Method": "RETADDLEVELCONNECT", "Context": Info.Context, "Data": ret }) this.SendF(Info.Node, { "Method": "RETADDLEVELCONNECT", "Context": Info.Context, "Data": ret })
} }
AddLevelConnect(Node) { AddLevelConnect(Node) {
@@ -765,9 +774,9 @@ module.exports = class CConnect extends require("./transfer-msg")
arr.push(Node) arr.push(Node)
Node.TransferCount = 0 Node.TransferCount = 0
if (this.LoadHistoryMode) if (this.LoadHistoryMode)
Node.LastTimeTransfer = (GetCurrentTime() - 0) + 30 * 1000 Node.LastTimeTransfer = (global.GetCurrentTime() - 0) + 30 * 1000
else else
Node.LastTimeTransfer = (GetCurrentTime() - 0) + 10 * 1000 Node.LastTimeTransfer = (global.GetCurrentTime() - 0) + 10 * 1000
Node.CanHot = true Node.CanHot = true
this.CheckDisconnectHot(Level) this.CheckDisconnectHot(Level)
if (!Node.CanHot) if (!Node.CanHot)
@@ -775,7 +784,7 @@ module.exports = class CConnect extends require("./transfer-msg")
this.SendGetMessage(Node) this.SendGetMessage(Node)
global.ADD_TO_STAT("NETCONFIGURATION") global.ADD_TO_STAT("NETCONFIGURATION")
global.ADD_TO_STAT("AddLevelConnect") global.ADD_TO_STAT("AddLevelConnect")
AddNodeInfo(Node, "Add Level connect") global.AddNodeInfo(Node, "Add Level connect")
return true; return true;
} }
static static
@@ -784,7 +793,7 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
RETADDLEVELCONNECT(Info, CurTime) { RETADDLEVELCONNECT(Info, CurTime) {
var Data = this.DataFromF(Info); var Data = this.DataFromF(Info);
AddNodeInfo(Info.Node, "GET RETADDLEVELCONNECT: " + Data.result) global.AddNodeInfo(Info.Node, "GET RETADDLEVELCONNECT: " + Data.result)
if (Data.result === 1) { if (Data.result === 1) {
this.AddLevelConnect(Info.Node) this.AddLevelConnect(Info.Node)
} }
@@ -794,7 +803,7 @@ module.exports = class CConnect extends require("./transfer-msg")
Info.Node.LevelCount = Data.Count Info.Node.LevelCount = Data.Count
} }
DeleteBadConnectingByTimer() { DeleteBadConnectingByTimer() {
if (glStopNode) if (global.glStopNode)
return; return;
var CurTime = global.GetCurrentTime(); var CurTime = global.GetCurrentTime();
var arr = global.SERVER.NodesArr; var arr = global.SERVER.NodesArr;
@@ -803,8 +812,8 @@ module.exports = class CConnect extends require("./transfer-msg")
var Status = GetSocketStatus(Node.Socket); var Status = GetSocketStatus(Node.Socket);
if (Node.Active && Status < 100) { if (Node.Active && Status < 100) {
var Delta = CurTime - Node.LastTime; var Delta = CurTime - Node.LastTime;
if (Delta > MAX_WAIT_PERIOD_FOR_STATUS) { if (Delta > global.MAX_WAIT_PERIOD_FOR_STATUS) {
AddNodeInfo(Node, "Close bad connecting by time") global.AddNodeInfo(Node, "Close bad connecting by time")
this.DeleteNodeFromActive(Node) this.DeleteNodeFromActive(Node)
} }
} }
@@ -816,21 +825,21 @@ module.exports = class CConnect extends require("./transfer-msg")
if (Level < 3) if (Level < 3)
MaxCountChilds = 4 MaxCountChilds = 4
else else
MaxCountChilds = MAX_CONNECT_CHILD MaxCountChilds = global.MAX_CONNECT_CHILD
var arr = this.LevelNodes[Level]; var arr = this.LevelNodes[Level];
if (arr) { if (arr) {
for (var n = arr.length - 1; n >= 0; n--) { for (var n = arr.length - 1; n >= 0; n--) {
var Node = arr[n]; var Node = arr[n];
if (Node) { if (Node) {
var DeltaTime = CurTime - Node.LastTimeTransfer; var DeltaTime = CurTime - Node.LastTimeTransfer;
if (!Node.Hot || DeltaTime > MAX_WAIT_PERIOD_FOR_HOT) { if (!Node.Hot || DeltaTime > global.MAX_WAIT_PERIOD_FOR_HOT) {
this.StartDisconnectHot(Node, "TimeDisconnectHot") this.StartDisconnectHot(Node, "TimeDisconnectHot")
} }
} }
} }
arr.sort(SortNodeBlockProcessCount) arr.sort(SortNodeBlockProcessCount)
var ChildCount = arr.length; var ChildCount = arr.length;
for (var n = arr.length - 1; n >= MIN_CONNECT_CHILD; n--) { for (var n = arr.length - 1; n >= global.MIN_CONNECT_CHILD; n--) {
var Node = arr[n]; var Node = arr[n];
if (Node) { if (Node) {
if (ChildCount > MaxCountChilds) { if (ChildCount > MaxCountChilds) {
@@ -840,7 +849,7 @@ module.exports = class CConnect extends require("./transfer-msg")
global.ADD_TO_STAT("DisconnectChild") global.ADD_TO_STAT("DisconnectChild")
continue; continue;
} }
if (ChildCount > (MIN_CONNECT_CHILD) && Node.LevelCount > MIN_CONNECT_CHILD) { if (ChildCount > (global.MIN_CONNECT_CHILD) && Node.LevelCount > global.MIN_CONNECT_CHILD) {
ChildCount-- ChildCount--
Node.CanHot = false Node.CanHot = false
this.AddCheckErrCount(Node, 1) this.AddCheckErrCount(Node, 1)
@@ -855,8 +864,8 @@ module.exports = class CConnect extends require("./transfer-msg")
SetTime(NewTime) { SetTime(NewTime) {
global.ToLog("Set new time: " + NewTime) global.ToLog("Set new time: " + NewTime)
if (NewTime) { if (NewTime) {
global.DELTA_CURRENT_TIME = NewTime - (GetCurrentTime(0) - 0) global.DELTA_CURRENT_TIME = NewTime - (global.GetCurrentTime(0) - 0)
SAVE_CONST(true) global.SAVE_CONST(true)
} }
} }
static static
@@ -864,13 +873,13 @@ module.exports = class CConnect extends require("./transfer-msg")
return "{Time:uint, Sign:arr64}"; return "{Time:uint, Sign:arr64}";
} }
SendTimeDev(Node) { SendTimeDev(Node) {
if (!WALLET.WalletOpen) { if (!global.WALLET.WalletOpen) {
global.ToLog("Error Wallet not open") global.ToLog("Error Wallet not open")
return 0; return 0;
} }
if (!this.SignCurrentTimeDev) { if (!this.SignCurrentTimeDev) {
var SignArr = global.GetArrFromHex(SERVER.addrStr); var SignArr = global.GetArrFromHex(global.SERVER.addrStr);
this.SignCurrentTimeDev = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature this.SignCurrentTimeDev = global.SaveToFile(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature
} }
var Time = global.GetCurrentTime() - 0; var Time = global.GetCurrentTime() - 0;
global.ToLog("Send time: " + Time + " to " + NodeInfo(Node)) global.ToLog("Send time: " + Time + " to " + NodeInfo(Node))
@@ -893,7 +902,7 @@ module.exports = class CConnect extends require("./transfer-msg")
var Node = Info.Node; var Node = Info.Node;
var Data = this.DataFromF(Info); var Data = this.DataFromF(Info);
var SignArr = global.GetArrFromHex(Node.addrStr); var SignArr = global.GetArrFromHex(Node.addrStr);
if (CheckDevelopSign(SignArr, Data.Sign)) { if (global.CheckDevelopSign(SignArr, Data.Sign)) {
this.SetTime(Data.Time) this.SetTime(Data.Time)
} }
else { else {
@@ -908,10 +917,10 @@ module.exports = class CConnect extends require("./transfer-msg")
for (var i = 0; i < this.NodesArr.length; i++) { for (var i = 0; i < this.NodesArr.length; i++) {
var Node = this.NodesArr[i]; var Node = this.NodesArr[i];
if (!Node.Active && this.IsCanConnect(Node) && !Node.WasAddToConnect) { if (!Node.Active && this.IsCanConnect(Node) && !Node.WasAddToConnect) {
AddNodeInfo(Node, "To connect all") global.AddNodeInfo(Node, "To connect all")
Node.NextConnectDelta = 1000 Node.NextConnectDelta = 1000
Node.WasAddToConnect = 1 Node.WasAddToConnect = 1
ArrConnect.push(Node) global.ArrConnect.push(Node)
Count++ Count++
} }
} }
@@ -922,7 +931,7 @@ module.exports = class CConnect extends require("./transfer-msg")
for (var i = 0; i < this.NodesArr.length; i++) { for (var i = 0; i < this.NodesArr.length; i++) {
var Node = this.NodesArr[i]; var Node = this.NodesArr[i];
if (Node.Active) { if (Node.Active) {
AddNodeInfo(Node, "Disconnect hot all") global.AddNodeInfo(Node, "Disconnect hot all")
Node.NextConnectDelta = 10000 Node.NextConnectDelta = 10000
this.DeleteNodeFromActive(Node) this.DeleteNodeFromActive(Node)
Count++ Count++
@@ -942,7 +951,7 @@ module.exports = class CConnect extends require("./transfer-msg")
var ArrNodes = this.GetHotTimeNodes(); var ArrNodes = this.GetHotTimeNodes();
var CountNodes = ArrNodes.length; var CountNodes = ArrNodes.length;
var DeltaArr = []; var DeltaArr = [];
var NodesSet = new Set(); var NodesSet: any = new Set();
for (var i = 0; i < ArrNodes.length; i++) { for (var i = 0; i < ArrNodes.length; i++) {
var Node = ArrNodes[i]; var Node = ArrNodes[i];
if (!Node.Times) if (!Node.Times)
@@ -983,6 +992,7 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
var Sum = 0; var Sum = 0;
var Count = 0; var Count = 0;
//@ts-ignore
for (var i = start; i <= finish; i++) { for (var i = start; i <= finish; i++) {
Sum = Sum + DeltaArr[i] Sum = Sum + DeltaArr[i]
Count++ Count++
@@ -1010,7 +1020,7 @@ module.exports = class CConnect extends require("./transfer-msg")
global.ADD_TO_STAT("CORRECT_TIME_DOWN", - AvgDelta) global.ADD_TO_STAT("CORRECT_TIME_DOWN", - AvgDelta)
global.DELTA_CURRENT_TIME = Math.trunc(global.DELTA_CURRENT_TIME + AvgDelta) global.DELTA_CURRENT_TIME = Math.trunc(global.DELTA_CURRENT_TIME + AvgDelta)
this.ClearTimeStat() this.ClearTimeStat()
SAVE_CONST() global.SAVE_CONST()
} }
ClearTimeStat() { ClearTimeStat() {
var ArrNodes = this.GetHotTimeNodes(); var ArrNodes = this.GetHotTimeNodes();
@@ -1019,19 +1029,19 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
} }
TimeDevCorrect() { TimeDevCorrect() {
if (CHECK_DELTA_TIME.bUse) { if (global.CHECK_DELTA_TIME.bUse) {
var BlockNum = GetCurrentBlockNumByTime(); var BlockNum = global.GetCurrentBlockNumByTime();
if (CHECK_DELTA_TIME.StartBlockNum <= BlockNum && CHECK_DELTA_TIME.EndBlockNum > BlockNum) { if (global.CHECK_DELTA_TIME.StartBlockNum <= BlockNum && global.CHECK_DELTA_TIME.EndBlockNum > BlockNum) {
if (!global.DELTA_CURRENT_TIME) if (!global.DELTA_CURRENT_TIME)
global.DELTA_CURRENT_TIME = 0 global.DELTA_CURRENT_TIME = 0
var CorrectTime = 0; var CorrectTime = 0;
if (CHECK_DELTA_TIME.bAddTime) if (global.CHECK_DELTA_TIME.bAddTime)
CorrectTime = CHECK_DELTA_TIME.DeltaTime CorrectTime = global.CHECK_DELTA_TIME.DeltaTime
else else
CorrectTime = - CHECK_DELTA_TIME.DeltaTime CorrectTime = - global.CHECK_DELTA_TIME.DeltaTime
global.DELTA_CURRENT_TIME += CorrectTime global.DELTA_CURRENT_TIME += CorrectTime
this.ClearTimeStat() this.ClearTimeStat()
SAVE_CONST(true) global.SAVE_CONST(true)
} }
} }
} }
@@ -1061,7 +1071,7 @@ module.exports = class CConnect extends require("./transfer-msg")
Node.NextConnectDelta = 1000 Node.NextConnectDelta = 1000
if (!Node.FirstTime) { if (!Node.FirstTime) {
Node.FirstTime = global.GetCurrentTime() - 0 Node.FirstTime = global.GetCurrentTime() - 0
Node.FirstTimeStr = "" + GetStrTimeUTC() Node.FirstTimeStr = "" + global.GetStrTimeUTC()
} }
global.ADD_TO_STAT("AddToActive") global.ADD_TO_STAT("AddToActive")
} }
@@ -1071,8 +1081,8 @@ module.exports = class CConnect extends require("./transfer-msg")
this.StartDisconnectHot(Node, "NotActive", 1) this.StartDisconnectHot(Node, "NotActive", 1)
Node.Hot = false Node.Hot = false
this.ActualNodes.remove(Node) this.ActualNodes.remove(Node)
CloseSocket(Node.Socket, "DeleteNodeFromActive") global.CloseSocket(Node.Socket, "DeleteNodeFromActive")
CloseSocket(Node.Socket2, "DeleteNodeFromActive") global.CloseSocket(Node.Socket2, "DeleteNodeFromActive")
Node.ResetNode() Node.ResetNode()
Node.Socket = undefined Node.Socket = undefined
Node.Socket2 = undefined Node.Socket2 = undefined
@@ -1086,8 +1096,8 @@ module.exports = class CConnect extends require("./transfer-msg")
if (!Node.SocketStart) if (!Node.SocketStart)
Node.SocketStart = Date.now() Node.SocketStart = Date.now()
var DeltaTime = Date.now() - Node.SocketStart; var DeltaTime = Date.now() - Node.SocketStart;
if (DeltaTime >= PERIOD_FOR_RECONNECT) { if (DeltaTime >= global.PERIOD_FOR_RECONNECT) {
if (random(100) >= 90) if (global.random(100) >= 90)
Node.CreateReconnection() Node.CreateReconnection()
} }
} }
@@ -1120,8 +1130,8 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
AddrLevelNode(Node) { AddrLevelNode(Node) {
if (Node.GrayConnect) if (Node.GrayConnect)
return MAX_LEVEL_SPECIALIZATION - 1; return global.MAX_LEVEL_SPECIALIZATION - 1;
return AddrLevelArr(this.addrArr, Node.addrArr); return global.AddrLevelArr(this.addrArr, Node.addrArr);
} }
GetNodesLevelCount() { GetNodesLevelCount() {
var Count = 0; var Count = 0;
@@ -1222,7 +1232,7 @@ module.exports = class CConnect extends require("./transfer-msg")
global.NET_WORK_MODE = { ip: "", port: "" } global.NET_WORK_MODE = { ip: "", port: "" }
} }
global.NET_WORK_MODE.UseDirectIP = 0 global.NET_WORK_MODE.UseDirectIP = 0
SAVE_CONST() global.SAVE_CONST()
} }
} }
SetDirectMode() { SetDirectMode() {
@@ -1230,14 +1240,14 @@ module.exports = class CConnect extends require("./transfer-msg")
if (CountNodes && !global.NET_WORK_MODE) { if (CountNodes && !global.NET_WORK_MODE) {
global.NET_WORK_MODE = { ip: "", port: "30000" } global.NET_WORK_MODE = { ip: "", port: "30000" }
global.NET_WORK_MODE.UseDirectIP = 1 global.NET_WORK_MODE.UseDirectIP = 1
SAVE_CONST() global.SAVE_CONST()
} }
} }
StartCheckTransferTree() { StartCheckTransferTree() {
var ArrTree = this.GetTransferTree(); var ArrTree = this.GetTransferTree();
this.TransferTree = ArrTree this.TransferTree = ArrTree
var CurTime = Date.now(); var CurTime = Date.now();
if (GrayConnect()) { if (global.GrayConnect()) {
var MustCount = GetGrayServerConnections(); var MustCount = GetGrayServerConnections();
if (this.ActualNodes.size < MustCount) { if (this.ActualNodes.size < MustCount) {
this.NodesArr.sort(SortNodeBlockProcessCountGray) this.NodesArr.sort(SortNodeBlockProcessCountGray)
@@ -1251,16 +1261,16 @@ module.exports = class CConnect extends require("./transfer-msg")
continue; continue;
var DeltaTime = CurTime - Node.StartTimeConnect; var DeltaTime = CurTime - Node.StartTimeConnect;
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) { if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
AddNodeInfo(Node, "To connect") global.AddNodeInfo(Node, "To connect")
Node.WasAddToConnect = 1 Node.WasAddToConnect = 1
ArrConnect.push(Node) global.ArrConnect.push(Node)
WasDoConnect++ WasDoConnect++
} }
} }
} }
while (this.ActualNodes.size > MustCount) { while (this.ActualNodes.size > MustCount) {
var Node = this.ActualNodes.max(); var Node = this.ActualNodes.max();
AddNodeInfo(Node, "DeleteFromActive") global.AddNodeInfo(Node, "DeleteFromActive")
this.DeleteNodeFromActive(Node) this.DeleteNodeFromActive(Node)
} }
} }
@@ -1278,14 +1288,14 @@ module.exports = class CConnect extends require("./transfer-msg")
var Node = arr[n]; var Node = arr[n];
var DeltaTime = CurTime - Node.StartTimeConnect; var DeltaTime = CurTime - Node.StartTimeConnect;
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) { if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
AddNodeInfo(Node, "To connect") global.AddNodeInfo(Node, "To connect")
Node.WasAddToConnect = 1 Node.WasAddToConnect = 1
ArrConnect.push(Node) global.ArrConnect.push(Node)
WasDoConnect++ WasDoConnect++
} }
DeltaTime = CurTime - Node.StartTimeHot DeltaTime = CurTime - Node.StartTimeHot
if (Node.Active && !Node.Hot && WasDoHot < MIN_CONNECT_CHILD && DeltaTime > Node.NextHotDelta && !Node.GrayConnect) { if (Node.Active && !Node.Hot && WasDoHot < global.MIN_CONNECT_CHILD && DeltaTime > Node.NextHotDelta && !Node.GrayConnect) {
AddNodeInfo(Node, "To hot level") global.AddNodeInfo(Node, "To hot level")
this.StartAddLevelConnect(Node) this.StartAddLevelConnect(Node)
Node.StartTimeHot = CurTime Node.StartTimeHot = CurTime
Node.NextHotDelta = Node.NextHotDelta * 2 Node.NextHotDelta = Node.NextHotDelta * 2
@@ -1299,21 +1309,21 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
} }
ValueToXOR(StrType, Str) { ValueToXOR(StrType, Str) {
var Arr1 = toUTF8Array(Str); var Arr1 = global.toUTF8Array(Str);
var Arr2 = global.shaarr(this.CommonKey + ":" + this.addrStr + ":" + StrType); var Arr2 = global.shaarr(this.CommonKey + ":" + this.addrStr + ":" + StrType);
return global.WALLET.XORHash(Arr1, Arr2, 32); return global.WALLET.XORHash(Arr1, Arr2, 32);
} }
ValueFromXOR(Node, StrType, Arr1) { ValueFromXOR(Node, StrType, Arr1) {
var Arr2 = global.shaarr(this.CommonKey + ":" + Node.addrStr + ":" + StrType); var Arr2 = global.shaarr(this.CommonKey + ":" + Node.addrStr + ":" + StrType);
var Arr = global.WALLET.XORHash(Arr1, Arr2, 32); var Arr = global.WALLET.XORHash(Arr1, Arr2, 32);
var Str = Utf8ArrayToStr(Arr); var Str = global.Utf8ArrayToStr(Arr);
return Str; return Str;
} }
ValueToXORDevelop(StrName, Data, Type) { ValueToXORDevelop(StrName, Data, Type) {
var Arr1; var Arr1;
if (Type === "uint") { if (Type === "uint") {
Arr1 = [] Arr1 = []
WriteUintToArr(Arr1, Data) global.WriteUintToArr(Arr1, Data)
} }
else else
if (Type === "hash") { if (Type === "hash") {
@@ -1321,25 +1331,25 @@ module.exports = class CConnect extends require("./transfer-msg")
} }
else else
if (Type === "str") { if (Type === "str") {
Arr1 = toUTF8Array(Data) Arr1 = global.toUTF8Array(Data)
} }
var Arr2 = global.shaarr(this.КодДляРазработчикаХекс + ":" + StrName); var Arr2 = global.shaarr(this.КодДляРазработчикаХекс + ":" + StrName);
return global.WALLET.XORHash(Arr1, Arr2, Arr1.length); return global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
} }
ValueFromXORDevelop(Node, StrName, Arr1, Type) { ValueFromXORDevelop(Node, StrName, Arr1, Type) {
if (!Node.КодДляРазработчикаХекс) { if (!Node.КодДляРазработчикаХекс) {
Node.КодДляРазработчикаХекс = global.GetHexFromArr(WALLET.KeyPair.computeSecret(Node.PubKey, null)) Node.КодДляРазработчикаХекс = global.GetHexFromArr(global.WALLET.KeyPair.computeSecret(Node.PubKey, null))
} }
var Arr2 = global.shaarr(Node.КодДляРазработчикаХекс + ":" + StrName); var Arr2 = global.shaarr(Node.КодДляРазработчикаХекс + ":" + StrName);
var Arr = global.WALLET.XORHash(Arr1, Arr2, Arr1.length); var Arr = global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
if (Type === "uint") { if (Type === "uint") {
return ReadUintFromArr(Arr, 0); return global.ReadUintFromArr(Arr, 0);
} }
else else
if (Type === "hash") { if (Type === "hash") {
return Arr; return Arr;
} }
var Str = Utf8ArrayToStr(Arr); var Str = global.Utf8ArrayToStr(Arr);
return Str; return Str;
} }
}; };
@@ -1363,8 +1373,8 @@ function SortNodeBlockProcessCountGray(a, b) {
}; };
function GetGrayServerConnections() { function GetGrayServerConnections() {
var Count = MAX_GRAY_CONNECTIONS_TO_SERVER; var Count = global.MAX_GRAY_CONNECTIONS_TO_SERVER;
if (SERVER.LoadHistoryMode && global.SERVER.LoadHistoryMessage) if (global.SERVER.LoadHistoryMode && global.SERVER.LoadHistoryMessage)
Count = Count * 10; Count = Count * 10;
return Count; return Count;
}; };

View File

@@ -63,6 +63,8 @@ global.CONST_NAME_ARR = [
"REST_START_COUNT", "REST_START_COUNT",
"LOAD_TO_BEGIN" "LOAD_TO_BEGIN"
]; ];
global.MAX_LENGTH_SENDER_MAP = 3000;
global.DELTA_START_SENDER_MAP = 24;
global.NODES_DELTA_CALC_HOUR = 4; global.NODES_DELTA_CALC_HOUR = 4;
global.USE_HARD_API_V2 = 0; global.USE_HARD_API_V2 = 0;
global.USE_TICKET = 0; global.USE_TICKET = 0;
@@ -196,7 +198,7 @@ if (global.LOCAL_RUN) {
global.NEW_FORMULA_KTERA = 3; global.NEW_FORMULA_KTERA = 3;
global.NEW_FORMULA_TARGET1 = 0; global.NEW_FORMULA_TARGET1 = 0;
global.NEW_FORMULA_TARGET2 = 1; global.NEW_FORMULA_TARGET2 = 1;
NETWORK = "LOCAL"; global.NETWORK = "LOCAL";
global.ALL_VIEW_ROWS = 1; global.ALL_VIEW_ROWS = 1;
global.COUNT_NODE_PROOF = 1; global.COUNT_NODE_PROOF = 1;
global.NEW_SIGN_TIME = 0; global.NEW_SIGN_TIME = 0;
@@ -217,7 +219,7 @@ else
global.START_BLOCK_ACCOUNT_HASH3 = 2356000; global.START_BLOCK_ACCOUNT_HASH3 = 2356000;
global.BLOCKNUM_TICKET_ALGO = 1; global.BLOCKNUM_TICKET_ALGO = 1;
global.WALLET_NAME = "TEST"; global.WALLET_NAME = "TEST";
NETWORK = "TERA-TEST2"; global.NETWORK = "TERA-TEST2";
if (global.START_PORT_NUMBER === undefined) if (global.START_PORT_NUMBER === undefined)
global.START_PORT_NUMBER = 40000; global.START_PORT_NUMBER = 40000;
global.ALL_VIEW_ROWS = 1; global.ALL_VIEW_ROWS = 1;
@@ -238,7 +240,7 @@ if (global.LOCAL_RUN) {
global.CHECK_GLOBAL_TIME = 0; global.CHECK_GLOBAL_TIME = 0;
} }
global.GetNetworkName = function() { global.GetNetworkName = function() {
return NETWORK + "-" + global.DEF_MAJOR_VERSION; return global.NETWORK + "-" + global.DEF_MAJOR_VERSION;
}; };
global.DEF_VERSION = global.DEF_MAJOR_VERSION + "." + global.UPDATE_CODE_VERSION_NUM; global.DEF_VERSION = global.DEF_MAJOR_VERSION + "." + global.UPDATE_CODE_VERSION_NUM;
global.DEF_CLIENT = "TERA-CORE"; global.DEF_CLIENT = "TERA-CORE";

View File

@@ -10,15 +10,6 @@
require("./library.js"); require("./library.js");
import * as crypto from 'crypto' import * as crypto from 'crypto'
let {
sha3,
secp256k1,
SHA3BUF,
GetSignHash,
shaarr,
ToLog
} = global
global.MAX_SUPER_VALUE_POW = (1 << 30) * 2; global.MAX_SUPER_VALUE_POW = (1 << 30) * 2;
var BuferForStr = Buffer.alloc(32); var BuferForStr = Buffer.alloc(32);
global.GetHexFromAddres = function(arr) { global.GetHexFromAddres = function(arr) {
@@ -79,9 +70,9 @@ global.GetPublicKeyFromAddres = function(Arr) {
return RetArr; return RetArr;
}; };
global.CheckDevelopSign = function(SignArr, Sign) { global.CheckDevelopSign = function(SignArr, Sign) {
var hash = SHA3BUF(SignArr); var hash = global.SHA3BUF(SignArr);
for (var i = 0; i < DEVELOP_PUB_KEY_ARR.length; i++) { for (var i = 0; i < DEVELOP_PUB_KEY_ARR.length; i++) {
var Result = secp256k1.verify(hash, Buffer.from(Sign), DEVELOP_PUB_KEY_ARR[i]); var Result = global.secp256k1.verify(hash, Buffer.from(Sign), DEVELOP_PUB_KEY_ARR[i]);
if (Result) if (Result)
return 1; return 1;
} }
@@ -107,7 +98,7 @@ global.GetSignHash = function(Context, ContextAddrTo, Msg) {
}; };
global.GetVerifyHash = function(Context, ContextAddr, Msg, Sign1) { global.GetVerifyHash = function(Context, ContextAddr, Msg, Sign1) {
try { try {
var Sign2 = GetSignHash(Context, ContextAddr, Msg); var Sign2 = global.GetSignHash(Context, ContextAddr, Msg);
for (var i = 0; i < Sign1.length; i++) for (var i = 0; i < Sign1.length; i++)
if (Sign1[i] !== Sign2[i]) if (Sign1[i] !== Sign2[i])
return false; return false;
@@ -170,7 +161,7 @@ global.GetKeyPairTest = function(password, Power) {
var Data = KeyPair.getPublicKey('', 'compressed'); var Data = KeyPair.getPublicKey('', 'compressed');
if (Data[0] === 2) { if (Data[0] === 2) {
if (Power) { if (Power) {
var nBits = GetPowPower(Data.slice(1)); var nBits = global.GetPowPower(Data.slice(1));
if (nBits < Power) if (nBits < Power)
continue; continue;
} }
@@ -197,7 +188,7 @@ function GetArrFromValue(Num) {
}; };
function GetHashWithNonce(hash0, nonce) { function GetHashWithNonce(hash0, nonce) {
return shaarr2(hash0, GetArrFromValue(nonce)); return global.shaarr2(hash0, global.GetArrFromValue(nonce));
}; };
global.GetHashWithValues = GetHashWithValues; global.GetHashWithValues = GetHashWithValues;
@@ -246,7 +237,7 @@ function CreateNoncePOWExtern(arr0, BlockNum, count, startnone) {
if (!startnone) if (!startnone)
startnone = 0; startnone = 0;
var maxnonce = 0; var maxnonce = 0;
var supervalue = MAX_SUPER_VALUE_POW; var supervalue = global.MAX_SUPER_VALUE_POW;
for (var nonce = startnone; nonce <= startnone + count; nonce++) { for (var nonce = startnone; nonce <= startnone + count; nonce++) {
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true); var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
var value = GetPowValue(arrhash); var value = GetPowValue(arrhash);
@@ -266,7 +257,7 @@ function CreateNoncePOWExternMinPower(arr0, BlockNum, MinPow) {
var nonce = 0; var nonce = 0;
while (1) { while (1) {
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true); var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
var power = GetPowPower(arrhash); var power = global.GetPowPower(arrhash);
if (power >= MinPow) { if (power >= MinPow) {
return nonce; return nonce;
} }
@@ -277,7 +268,7 @@ global.CreateNoncePOWInner = function(arr0, count) {
var Hash; var Hash;
var arr = arr0.slice(); var arr = arr0.slice();
var maxnonce = 0; var maxnonce = 0;
var supervalue = MAX_SUPER_VALUE_POW; var supervalue = global.MAX_SUPER_VALUE_POW;
for (var nonce = 0; nonce < count; nonce++) { for (var nonce = 0; nonce < count; nonce++) {
var hashTest = GetHashWithNonce(arr, nonce); var hashTest = GetHashWithNonce(arr, nonce);
var value = GetPowValue(hashTest); var value = GetPowValue(hashTest);
@@ -297,7 +288,7 @@ global.CreateAddrPOW = function(SeqHash, AddrArr, MaxHash, Start, CountNonce, Bl
AddrArr[7] = (nonce >>> 8) & 0xFF; AddrArr[7] = (nonce >>> 8) & 0xFF;
AddrArr[8] = (nonce >>> 16) & 0xFF; AddrArr[8] = (nonce >>> 16) & 0xFF;
AddrArr[9] = (nonce >>> 24) & 0xFF; AddrArr[9] = (nonce >>> 24) & 0xFF;
var HashTest = shaarrblock2(SeqHash, AddrArr, BlockNum); var HashTest = global.shaarrblock2(SeqHash, AddrArr, BlockNum);
if (global.CompareArr(MaxHash, HashTest) >= 0) { if (global.CompareArr(MaxHash, HashTest) >= 0) {
MaxHash = HashTest; MaxHash = HashTest;
MaxNonce = nonce; MaxNonce = nonce;
@@ -324,7 +315,7 @@ function IsZeroArr(arr) {
function CalcHashFromArray(ArrHashes, bOriginalSeq) { function CalcHashFromArray(ArrHashes, bOriginalSeq) {
if (bOriginalSeq === undefined) if (bOriginalSeq === undefined)
ArrHashes.sort(CompareArr); ArrHashes.sort(global.CompareArr);
var Buf = []; var Buf = [];
for (var i = 0; i < ArrHashes.length; i++) { for (var i = 0; i < ArrHashes.length; i++) {
var Value = ArrHashes[i]; var Value = ArrHashes[i];
@@ -342,7 +333,7 @@ function CalcHashFromArray(ArrHashes, bOriginalSeq) {
function CalcHash3FromArray(ArrHashes, bOriginalSeq) { function CalcHash3FromArray(ArrHashes, bOriginalSeq) {
if (bOriginalSeq === undefined) if (bOriginalSeq === undefined)
ArrHashes.sort(CompareArr); ArrHashes.sort(global.CompareArr);
var Buf = []; var Buf = [];
for (var i = 0; i < ArrHashes.length; i++) { for (var i = 0; i < ArrHashes.length; i++) {
var Value = ArrHashes[i]; var Value = ArrHashes[i];
@@ -381,12 +372,12 @@ function CalcMerkl3FromArray(Arr, Tree0?) {
return Tree; return Tree;
} }
if (bSort) { if (bSort) {
Arr.sort(CompareArr); Arr.sort(global.CompareArr);
} }
var Arr2 = []; var Arr2 = [];
var len = Math.floor(Arr.length / 2); var len = Math.floor(Arr.length / 2);
for (var i = 0; i < len; i++) { for (var i = 0; i < len; i++) {
var Hash = sha3arr2(Arr[i * 2], Arr[i * 2 + 1]); var Hash = global.sha3arr2(Arr[i * 2], Arr[i * 2 + 1]);
Arr2.push(Hash); Arr2.push(Hash);
} }
if (len * 2 !== Arr.length) { if (len * 2 !== Arr.length) {
@@ -418,12 +409,12 @@ function CalcMerkl0FromArray(Arr, Tree0?) {
return Tree; return Tree;
} }
if (bSort) { if (bSort) {
Arr.sort(CompareArr); Arr.sort(global.CompareArr);
} }
var Arr2 = []; var Arr2 = [];
var len = Math.floor(Arr.length / 2); var len = Math.floor(Arr.length / 2);
for (var i = 0; i < len; i++) { for (var i = 0; i < len; i++) {
var Hash = shaarr2(Arr[i * 2], Arr[i * 2 + 1]); var Hash = global.shaarr2(Arr[i * 2], Arr[i * 2 + 1]);
Arr2.push(Hash); Arr2.push(Hash);
} }
if (len * 2 !== Arr.length) { if (len * 2 !== Arr.length) {
@@ -555,7 +546,7 @@ function CheckMerkleProof(ArrL, ArrM, ArrR) {
var length2 = Math.floor(Arr.length / 2); var length2 = Math.floor(Arr.length / 2);
Arr2 = []; Arr2 = [];
for (i = 0; i < length2; i++) { for (i = 0; i < length2; i++) {
var Hash = global.sha3(arr2(Arr[i * 2], Arr[i * 2 + 1])); var Hash = global.sha3(global.arr2(Arr[i * 2], Arr[i * 2 + 1]));
Arr2.push(Hash); Arr2.push(Hash);
} }
if (Arr.length / 2 > length2) if (Arr.length / 2 > length2)
@@ -593,7 +584,7 @@ function UpdateMerklTree(Tree, CalcMap: any, NumLevel) {
if (i2 < len2) { if (i2 < len2) {
Count++; Count++;
CalcMap2[i2] = 1; CalcMap2[i2] = 1;
HashArr2[i2] = global.sha3(arr2(HashArr[i2 * 2], HashArr[i2 * 2 + 1])); HashArr2[i2] = global.sha3(global.arr2(HashArr[i2 * 2], HashArr[i2 * 2 + 1]));
} }
else { else {
if (key as any > LastIndex) { if (key as any > LastIndex) {

View File

@@ -9,7 +9,7 @@
*/ */
"use strict"; "use strict";
const fs = require('fs'); import * as fs from 'fs'
const DBLib = require("./db"); const DBLib = require("./db");
const DBRow = require("./db-row"); const DBRow = require("./db-row");
global.BlockDB = new DBLib(); global.BlockDB = new DBLib();
@@ -35,24 +35,33 @@ const WorkStructHeader2 = {};
const DEFAULT_DB_VERSION = 2; const DEFAULT_DB_VERSION = 2;
module.exports = class CDB extends require("../code") module.exports = class CDB extends require("../code")
{ {
DBHeader100
BlockNumDB
BlockNumDBMin
CurrentBlockNum
CheckOnStartComplete
UseTruncateBlockDB
MapHeader
StatMap
PrevBlockChainArr
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
var bWriteMode = (global.PROCESS_NAME === "MAIN"); var bWriteMode = (global.PROCESS_NAME === "MAIN");
global.DB_VERSION = DEFAULT_DB_VERSION global.DB_VERSION = DEFAULT_DB_VERSION
var FileItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, bWriteMode); var FileItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, bWriteMode);
var FileItem2 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, bWriteMode); var FileItem2 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, bWriteMode);
if (FileItem2.size) if (FileItem2.size)
global.DB_VERSION = 2 global.DB_VERSION = 2
else else
if (FileItem1.size) if (FileItem1.size)
global.DB_VERSION = 1 global.DB_VERSION = 1
BlockDB.OpenDBFile(FILE_NAME_BODY, bWriteMode) global.BlockDB.OpenDBFile(FILE_NAME_BODY, bWriteMode)
this.DBHeader100 = new DBRow("block-header100", 32 + 32, "{Hash100:hash,Hash:hash}", !bWriteMode) this.DBHeader100 = new DBRow("block-header100", 32 + 32, "{Hash100:hash,Hash:hash}", !bWriteMode)
this.BlockNumDB = 0 this.BlockNumDB = 0
this.BlockNumDBMin = 0 this.BlockNumDBMin = 0
this.ClearBufMap() this.ClearBufMap()
setTimeout(function() { setTimeout(function() {
SERVER.ReadStateTX() global.SERVER.ReadStateTX()
}, 10) }, 10)
} }
ReadStateTX() { ReadStateTX() {
@@ -62,10 +71,10 @@ module.exports = class CDB extends require("../code")
} }
} }
LoadMemBlocksOnStart() { LoadMemBlocksOnStart() {
this.CurrentBlockNum = GetCurrentBlockNumByTime() this.CurrentBlockNum = global.GetCurrentBlockNumByTime()
for (var i = this.BlockNumDB - BLOCK_COUNT_IN_MEMORY; i <= this.BlockNumDB; i++) for (var i = this.BlockNumDB - global.BLOCK_COUNT_IN_MEMORY; i <= this.BlockNumDB; i++)
if (i >= 0) { if (i >= 0) {
if (i >= this.BlockNumDB - BLOCK_PROCESSING_LENGTH * 5) if (i >= this.BlockNumDB - global.BLOCK_PROCESSING_LENGTH * 5)
this.GetBlock(i, true, true) this.GetBlock(i, true, true)
else else
this.GetBlock(i, true, false) this.GetBlock(i, true, false)
@@ -74,12 +83,12 @@ module.exports = class CDB extends require("../code")
GetMaxNumBlockDB() { GetMaxNumBlockDB() {
var FileItem, BlockNum; var FileItem, BlockNum;
if (global.DB_VERSION === 2) { if (global.DB_VERSION === 2) {
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2) FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2)
BlockNum = (FileItem.size / BLOCK_HEADER_SIZE2) - 1 BlockNum = (FileItem.size / global.BLOCK_HEADER_SIZE2) - 1
} }
else { else {
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER) FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER)
BlockNum = (FileItem.size / BLOCK_HEADER_SIZE) - 1 BlockNum = (FileItem.size / global.BLOCK_HEADER_SIZE) - 1
} }
return BlockNum; return BlockNum;
} }
@@ -88,7 +97,7 @@ module.exports = class CDB extends require("../code")
var BlockNum = this.GetMaxNumBlockDB(); var BlockNum = this.GetMaxNumBlockDB();
if (global.NO_CHECK_BLOCKNUM_ONSTART) { if (global.NO_CHECK_BLOCKNUM_ONSTART) {
this.BlockNumDB = this.CheckBlocksOnStartFoward(BlockNum - 2, 0) this.BlockNumDB = this.CheckBlocksOnStartFoward(BlockNum - 2, 0)
ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2) global.ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
return; return;
} }
BlockNum = this.CheckBlocksOnStartReverse(BlockNum) BlockNum = this.CheckBlocksOnStartReverse(BlockNum)
@@ -97,7 +106,7 @@ module.exports = class CDB extends require("../code")
if (this.BlockNumDB >= global.BLOCK_PROCESSING_LENGTH2) { if (this.BlockNumDB >= global.BLOCK_PROCESSING_LENGTH2) {
this.TruncateBlockDB(this.BlockNumDB) this.TruncateBlockDB(this.BlockNumDB)
} }
ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2) global.ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
this.CheckOnStartComplete = 1 this.CheckOnStartComplete = 1
} }
CheckBlocksOnStartReverse(StartNum) { CheckBlocksOnStartReverse(StartNum) {
@@ -106,21 +115,21 @@ module.exports = class CDB extends require("../code")
var PrevBlock; var PrevBlock;
for (var num = StartNum; num >= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2; num -= delta) { for (var num = StartNum; num >= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2; num -= delta) {
var Block = this.ReadBlockHeaderDB(num); var Block = this.ReadBlockHeaderDB(num);
if (!Block || IsZeroArr(Block.SumHash)) { if (!Block || global.IsZeroArr(Block.SumHash)) {
delta++ delta++
Count = 0 Count = 0
continue; continue;
} }
var PrevBlock = this.ReadBlockHeaderDB(num - 1); var PrevBlock = this.ReadBlockHeaderDB(num - 1);
if (!PrevBlock || IsZeroArr(PrevBlock.SumHash)) { if (!PrevBlock || global.IsZeroArr(PrevBlock.SumHash)) {
Count = 0 Count = 0
continue; continue;
} }
var SumHash = shaarr2(PrevBlock.SumHash, Block.Hash); var SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash);
if (global.CompareArr(SumHash, Block.SumHash) === 0) { if (global.CompareArr(SumHash, Block.SumHash) === 0) {
delta = 1 delta = 1
Count++ Count++
if (Count > COUNT_BLOCKS_FOR_LOAD / 10) if (Count > global.COUNT_BLOCKS_FOR_LOAD / 10)
return num; return num;
} }
else { else {
@@ -135,7 +144,7 @@ module.exports = class CDB extends require("../code")
if (StartNum < this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) if (StartNum < this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2)
StartNum = this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2 StartNum = this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2
var MaxNum = global.DApps.Accounts.GetHashedMaxBlockNum(); var MaxNum = global.DApps.Accounts.GetHashedMaxBlockNum();
var BlockNumTime = GetCurrentBlockNumByTime(); var BlockNumTime = global.GetCurrentBlockNumByTime();
if (BlockNumTime < MaxNum) if (BlockNumTime < MaxNum)
MaxNum = BlockNumTime MaxNum = BlockNumTime
var arr = []; var arr = [];
@@ -148,37 +157,37 @@ module.exports = class CDB extends require("../code")
if (!Block) if (!Block)
return num > 0 ? num - 1 : 0; return num > 0 ? num - 1 : 0;
if (num % 100000 === 0) if (num % 100000 === 0)
ToLog("CheckBlocksOnStartFoward: " + num) global.ToLog("CheckBlocksOnStartFoward: " + num)
if (bCheckBody) { if (bCheckBody) {
var TreeHash = CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent); var TreeHash = global.CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) { if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) {
ToLog("BAD TreeHash block=" + Block.BlockNum) global.ToLog("BAD TreeHash block=" + Block.BlockNum)
return num > 0 ? num - 1 : 0; return num > 0 ? num - 1 : 0;
} }
} }
if (PrevBlock) { if (PrevBlock) {
if (arr.length !== BLOCK_PROCESSING_LENGTH) { if (arr.length !== global.BLOCK_PROCESSING_LENGTH) {
var start = num - global.BLOCK_PROCESSING_LENGTH2; var start = num - global.BLOCK_PROCESSING_LENGTH2;
for (var n = 0; n < BLOCK_PROCESSING_LENGTH; n++) { for (var n = 0; n < global.BLOCK_PROCESSING_LENGTH; n++) {
var Prev = this.ReadBlockHeaderDB(start + n); var Prev = this.ReadBlockHeaderDB(start + n);
arr.push(Prev.Hash) arr.push(Prev.Hash)
} }
} }
else { else {
arr.shift() arr.shift()
var Prev = this.ReadBlockHeaderDB(num - BLOCK_PROCESSING_LENGTH - 1); var Prev = this.ReadBlockHeaderDB(num - global.BLOCK_PROCESSING_LENGTH - 1);
arr.push(Prev.Hash) arr.push(Prev.Hash)
} }
var PrevHash = CalcHashFromArray(arr, true); var PrevHash = global.CalcHashFromArray(arr, true);
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash); var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
var Value = GetHashFromSeqAddr(SeqHash, Block.AddrHash, Block.BlockNum, PrevHash); var Value = global.GetHashFromSeqAddr(SeqHash, Block.AddrHash, Block.BlockNum, PrevHash);
if (global.CompareArr(Value.Hash, Block.Hash) !== 0) { if (global.CompareArr(Value.Hash, Block.Hash) !== 0) {
ToLog("=================== FIND ERR Hash in " + Block.BlockNum + " bCheckBody=" + bCheckBody) global.ToLog("=================== FIND ERR Hash in " + Block.BlockNum + " bCheckBody=" + bCheckBody)
return num > 0 ? num - 1 : 0; return num > 0 ? num - 1 : 0;
} }
var SumHash = shaarr2(PrevBlock.SumHash, Block.Hash); var SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash);
if (global.CompareArr(SumHash, Block.SumHash) !== 0) { if (global.CompareArr(SumHash, Block.SumHash) !== 0) {
ToLog("=================== FIND ERR SumHash in " + Block.BlockNum) global.ToLog("=================== FIND ERR SumHash in " + Block.BlockNum)
return num > 0 ? num - 1 : 0; return num > 0 ? num - 1 : 0;
} }
} }
@@ -188,23 +197,23 @@ module.exports = class CDB extends require("../code")
} }
WriteBlockDB(Block) { WriteBlockDB(Block) {
var startTime = process.hrtime(); var startTime = process.hrtime();
if (Block.TrCount === 0 && !IsZeroArr(Block.TreeHash)) { if (Block.TrCount === 0 && !global.IsZeroArr(Block.TreeHash)) {
ToLogTrace("ERROR WRITE TrCount BLOCK:" + Block.BlockNum) global.ToLogTrace("ERROR WRITE TrCount BLOCK:" + Block.BlockNum)
throw "ERROR WRITE"; throw "ERROR WRITE";
} }
var Ret = this.WriteBodyDB(Block); var Ret = this.WriteBodyDB(Block);
if (Ret) { if (Ret) {
Ret = this.WriteBlockDBFinaly(Block) Ret = this.WriteBlockDBFinaly(Block)
} }
ADD_TO_STAT_TIME("MAX:WriteBlockDB", startTime) global.ADD_TO_STAT_TIME("MAX:WriteBlockDB", startTime)
ADD_TO_STAT_TIME("WriteBlockDB", startTime) global.ADD_TO_STAT_TIME("WriteBlockDB", startTime)
return Ret; return Ret;
} }
WriteBlockDBFinaly(Block) { WriteBlockDBFinaly(Block) {
var Ret = this.WriteBlockHeaderDB(Block); var Ret = this.WriteBlockHeaderDB(Block);
if (Ret) { if (Ret) {
if (Block.TrDataLen === 0 && !IsZeroArr(Block.TreeHash)) { if (Block.TrDataLen === 0 && !global.IsZeroArr(Block.TreeHash)) {
ToLogTrace("ERROR WRITE FINAL TrDataLen BLOCK") global.ToLogTrace("ERROR WRITE FINAL TrDataLen BLOCK")
throw "ERROR WRITE"; throw "ERROR WRITE";
} }
this.OnWriteBlock(Block) this.OnWriteBlock(Block)
@@ -224,28 +233,28 @@ module.exports = class CDB extends require("../code")
WriteBodyResultDB(Block) { WriteBodyResultDB(Block) {
var arrTr = Block.arrContentResult; var arrTr = Block.arrContentResult;
if (Block.TrDataPos && Block.TrDataLen && Block.VersionBody && arrTr && arrTr.length) { if (Block.TrDataPos && Block.TrDataLen && Block.VersionBody && arrTr && arrTr.length) {
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1); var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
var FD = FileItem.fd; var FD = FileItem.fd;
var Size = arrTr.length * 6; var Size = arrTr.length * 6;
var Position = Block.TrDataPos + Block.TrDataLen - Size; var Position = Block.TrDataPos + Block.TrDataLen - Size;
if (FileItem.size < Position + Size) { if (FileItem.size < Position + Size) {
TO_ERROR_LOG("DB", 241, "Error Position in WriteBodyResultDB on block: " + Block.BlockNum) global.TO_ERROR_LOG("DB", 241, "Error Position in WriteBodyResultDB on block: " + Block.BlockNum)
return false; return false;
} }
var BufWrite = BufLib.GetNewBuffer(Size); var BufWrite = global.BufLib.GetNewBuffer(Size);
for (var i = 0; i < arrTr.length; i++) { for (var i = 0; i < arrTr.length; i++) {
BufWrite.Write(arrTr[i], "uint") BufWrite.Write(arrTr[i], "uint")
} }
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position); var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
if (written !== BufWrite.length) { if (written !== BufWrite.length) {
TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length) global.TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
return false; return false;
} }
} }
return true; return true;
} }
WriteBodyDB(Block) { WriteBodyDB(Block) {
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1); var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
var FD = FileItem.fd; var FD = FileItem.fd;
var Position = FileItem.size; var Position = FileItem.size;
Block.TrDataPos = Position Block.TrDataPos = Position
@@ -264,7 +273,7 @@ module.exports = class CDB extends require("../code")
} }
Block.VersionBody = 1 Block.VersionBody = 1
TrDataLen += arrTr.length * 6 TrDataLen += arrTr.length * 6
var BufWrite = BufLib.GetNewBuffer(TrDataLen); var BufWrite = global.BufLib.GetNewBuffer(TrDataLen);
BufWrite.Write(arrTr.length, "uint16") BufWrite.Write(arrTr.length, "uint16")
BufWrite.Write(Block.VersionBody, "uint16") BufWrite.Write(Block.VersionBody, "uint16")
for (var i = 0; i < arrTr.length; i++) { for (var i = 0; i < arrTr.length; i++) {
@@ -273,7 +282,7 @@ module.exports = class CDB extends require("../code")
} }
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position); var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
if (written !== BufWrite.length) { if (written !== BufWrite.length) {
TO_ERROR_LOG("DB", 240, "Error write to file block-chain : " + written + " <> " + BufWrite.length) global.TO_ERROR_LOG("DB", 240, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
return false; return false;
} }
FileItem.size += TrDataLen FileItem.size += TrDataLen
@@ -281,9 +290,9 @@ module.exports = class CDB extends require("../code")
Block.TrDataLen = TrDataLen Block.TrDataLen = TrDataLen
return true; return true;
} }
WriteBlockHeaderDB(Block, bPreSave) { WriteBlockHeaderDB(Block, bPreSave?) {
if (!bPreSave && Block.BlockNum > this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) { if (!bPreSave && Block.BlockNum > this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) {
if (USE_CHECK_SAVE_DB) if (global.USE_CHECK_SAVE_DB)
if (!this.CheckSeqHashDB(Block, "WriteBlockHeaderDB")) if (!this.CheckSeqHashDB(Block, "WriteBlockHeaderDB"))
return false; return false;
this.WriteBlockHeader100(Block) this.WriteBlockHeader100(Block)
@@ -291,17 +300,17 @@ module.exports = class CDB extends require("../code")
this.BlockNumDB = Block.BlockNum - 1 this.BlockNumDB = Block.BlockNum - 1
var PrevBlock = this.ReadBlockHeaderDB(Block.BlockNum - 1); var PrevBlock = this.ReadBlockHeaderDB(Block.BlockNum - 1);
if (!PrevBlock) { if (!PrevBlock) {
ToLogTrace("Cant write header block:" + Block.BlockNum + " prev block not found") global.ToLogTrace("Cant write header block:" + Block.BlockNum + " prev block not found")
throw "ERR: PREV BLOCK NOT FOUND"; throw "ERR: PREV BLOCK NOT FOUND";
return false; return false;
} }
Block.SumHash = shaarr2(PrevBlock.SumHash, Block.Hash) Block.SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash)
Block.SumPow = PrevBlock.SumPow + GetPowPower(Block.PowHash) Block.SumPow = PrevBlock.SumPow + global.GetPowPower(Block.PowHash)
} }
if (global.DB_VERSION === 2) { if (global.DB_VERSION === 2) {
return this.WriteBlockHeaderToFile2(Block); return this.WriteBlockHeaderToFile2(Block);
} }
var BufWrite = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE); var BufWrite = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE);
this.BlockHeaderToBuf(BufWrite, Block) this.BlockHeaderToBuf(BufWrite, Block)
var Res = this.WriteBufHeaderToFile1(BufWrite, Block.BlockNum); var Res = this.WriteBufHeaderToFile1(BufWrite, Block.BlockNum);
return Res; return Res;
@@ -311,8 +320,8 @@ module.exports = class CDB extends require("../code")
var BlockNum = Math.trunc(Block.BlockNum); var BlockNum = Math.trunc(Block.BlockNum);
this.ClearBufMap() this.ClearBufMap()
Block.VersionDB = global.DB_VERSION Block.VersionDB = global.DB_VERSION
BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader) BufWrite = global.BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader)
FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1) FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1)
if (!Block.FilePos) { if (!Block.FilePos) {
if (!FileItem.size) if (!FileItem.size)
FileItem.size = 100 FileItem.size = 100
@@ -320,21 +329,21 @@ module.exports = class CDB extends require("../code")
} }
written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Block.FilePos) written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Block.FilePos)
if (written !== BufWrite.length) { if (written !== BufWrite.length) {
TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length) global.TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
return false; return false;
} }
if (Block.FilePos >= FileItem.size) { if (Block.FilePos >= FileItem.size) {
FileItem.size = Block.FilePos + BufWrite.length FileItem.size = Block.FilePos + BufWrite.length
} }
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1) FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
var Position = BlockNum * BLOCK_HEADER_SIZE2; var Position = BlockNum * global.BLOCK_HEADER_SIZE2;
BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_HEADER_VERSION2, BLOCK_HEADER_SIZE2, WorkStructHeader2) BufWrite = global.BufLib.GetBufferFromObject(Block, FORMAT_HEADER_VERSION2, global.BLOCK_HEADER_SIZE2, WorkStructHeader2)
written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position) written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position)
if (Position >= FileItem.size) { if (Position >= FileItem.size) {
FileItem.size = Position + BufWrite.length FileItem.size = Position + BufWrite.length
} }
if (written !== BufWrite.length) { if (written !== BufWrite.length) {
TO_ERROR_LOG("DB", 262, "Error write to file block-header :" + written + " <> " + BufWrite.length) global.TO_ERROR_LOG("DB", 262, "Error write to file block-header :" + written + " <> " + BufWrite.length)
return false; return false;
} }
else { else {
@@ -344,14 +353,14 @@ module.exports = class CDB extends require("../code")
WriteBufHeaderToFile1(BufWrite, BlockNum) { WriteBufHeaderToFile1(BufWrite, BlockNum) {
BlockNum = Math.trunc(BlockNum) BlockNum = Math.trunc(BlockNum)
this.ClearBufMap() this.ClearBufMap()
var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1); var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
var Position = BlockNum * BLOCK_HEADER_SIZE; var Position = BlockNum * global.BLOCK_HEADER_SIZE;
var written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position); var written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position);
if (Position >= FileItem.size) { if (Position >= FileItem.size) {
FileItem.size = Position + BufWrite.length FileItem.size = Position + BufWrite.length
} }
if (written !== BufWrite.length) { if (written !== BufWrite.length) {
TO_ERROR_LOG("DB", 260, "Error write to file block-header :" + written + " <> " + BufWrite.length) global.TO_ERROR_LOG("DB", 260, "Error write to file block-header :" + written + " <> " + BufWrite.length)
return false; return false;
} }
else { else {
@@ -375,10 +384,10 @@ module.exports = class CDB extends require("../code")
} }
else else
if (Num > 1) { if (Num > 1) {
ToLog("NOT FIND PEVHASH100 BlockNum=" + Block.BlockNum, 2) global.ToLog("NOT FIND PEVHASH100 BlockNum=" + Block.BlockNum, 2)
return; return;
} }
Hash100 = sha3arr2(PrevHash100, Block.Hash) Hash100 = global.sha3arr2(PrevHash100, Block.Hash)
} }
this.DBHeader100.Write({ Num: Num, Hash100: Hash100, Hash: Block.Hash }) this.DBHeader100.Write({ Num: Num, Hash100: Hash100, Hash: Block.Hash })
} }
@@ -397,31 +406,31 @@ module.exports = class CDB extends require("../code")
return undefined; return undefined;
} }
else { else {
if (Block && !IsZeroArr(Block.TreeHash)) { if (Block && !global.IsZeroArr(Block.TreeHash)) {
ToLogTrace("ERROR arrContent on BlockNum=" + Num) global.ToLogTrace("ERROR arrContent on BlockNum=" + Num)
return undefined; return undefined;
} }
} }
return Block; return Block;
} }
ReadBlockBodyDB(Block) { ReadBlockBodyDB(Block) {
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY); var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY);
if (Block.TrDataLen > MAX_BLOCK_SIZE * 2) { if (Block.TrDataLen > global.MAX_BLOCK_SIZE * 2) {
ToLogTrace("Error value TrDataLen, BlockNum=" + Block.BlockNum) global.ToLogTrace("Error value TrDataLen, BlockNum=" + Block.BlockNum)
return false; return false;
} }
var Position = Block.TrDataPos; var Position = Block.TrDataPos;
var BufRead = BufLib.GetNewBuffer(Block.TrDataLen); var BufRead = global.BufLib.GetNewBuffer(Block.TrDataLen);
var bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position); var bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position);
if (bytesRead !== BufRead.length) { if (bytesRead !== BufRead.length) {
TO_ERROR_LOG("DB", 272, "Error read block-body file: " + FileItem.name + " from POS:" + Position + " bytesRead=" + bytesRead + " of " + BufRead.length + " BlockNum=" + Block.BlockNum) global.TO_ERROR_LOG("DB", 272, "Error read block-body file: " + FileItem.name + " from POS:" + Position + " bytesRead=" + bytesRead + " of " + BufRead.length + " BlockNum=" + Block.BlockNum)
return false; return false;
} }
Block.arrContent = [] Block.arrContent = []
Block.arrContentResult = [] Block.arrContentResult = []
var TrCount = BufRead.Read("uint16"); var TrCount = BufRead.Read("uint16");
Block.VersionBody = BufRead.Read("uint16") Block.VersionBody = BufRead.Read("uint16")
if (TrCount <= MAX_TRANSACTION_COUNT) { if (TrCount <= global.MAX_TRANSACTION_COUNT) {
for (var i = 0; i < TrCount; i++) { for (var i = 0; i < TrCount; i++) {
var body = BufRead.Read("tr"); var body = BufRead.Read("tr");
if (!body) if (!body)
@@ -448,9 +457,9 @@ module.exports = class CDB extends require("../code")
} }
BlockNum = Math.trunc(BlockNum) BlockNum = Math.trunc(BlockNum)
var Block, BufRead, FileItem, bytesRead, Position; var Block, BufRead, FileItem, bytesRead, Position;
BufRead = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE) BufRead = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE)
Position = BlockNum * BLOCK_HEADER_SIZE Position = BlockNum * global.BLOCK_HEADER_SIZE
var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER); var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER);
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position) bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
if (bytesRead !== BufRead.length) if (bytesRead !== BufRead.length)
return undefined; return undefined;
@@ -467,21 +476,21 @@ module.exports = class CDB extends require("../code")
return undefined; return undefined;
} }
BlockNum = Math.trunc(BlockNum) BlockNum = Math.trunc(BlockNum)
Position = BlockNum * BLOCK_HEADER_SIZE2 Position = BlockNum * global.BLOCK_HEADER_SIZE2
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2) FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2)
BufRead = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE2) BufRead = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE2)
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position) bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
if (bytesRead !== BufRead.length) if (bytesRead !== BufRead.length)
return undefined; return undefined;
Block = BufLib.GetObjectFromBuffer(BufRead, FORMAT_HEADER_VERSION2, WorkStructHeader2) Block = global.BufLib.GetObjectFromBuffer(BufRead, FORMAT_HEADER_VERSION2, WorkStructHeader2)
if (!Block.FilePos) { if (!Block.FilePos) {
return undefined; return undefined;
} }
Position = Block.FilePos Position = Block.FilePos
FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY) FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY)
BufRead = BufLib.GetNewBuffer(200) BufRead = global.BufLib.GetNewBuffer(200)
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position) bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
Block = BufLib.GetObjectFromBuffer(BufRead, FORMAT_STREAM_HEADER, WorkStructStreamHeader) Block = global.BufLib.GetObjectFromBuffer(BufRead, FORMAT_STREAM_HEADER, WorkStructStreamHeader)
if (Block.VersionDB !== global.DB_VERSION) { if (Block.VersionDB !== global.DB_VERSION) {
throw ("ERROR Block.VersionDB"); throw ("ERROR Block.VersionDB");
return undefined; return undefined;
@@ -516,7 +525,7 @@ module.exports = class CDB extends require("../code")
this.UseTruncateBlockDB = undefined this.UseTruncateBlockDB = undefined
var Block = this.ReadBlockDB(LastBlockNum); var Block = this.ReadBlockDB(LastBlockNum);
if (!Block) { if (!Block) {
ToLog("************ ERROR TruncateBlockDB - not found block=" + LastBlockNum, 2) global.ToLog("************ ERROR TruncateBlockDB - not found block=" + LastBlockNum, 2)
return; return;
} }
this.WriteBlockDB(Block) this.WriteBlockDB(Block)
@@ -524,12 +533,12 @@ module.exports = class CDB extends require("../code")
TruncateBlockDBInner(LastBlock) { TruncateBlockDBInner(LastBlock) {
var FItem1, size; var FItem1, size;
if (global.DB_VERSION === 2) { if (global.DB_VERSION === 2) {
FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1) FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
size = (LastBlock.BlockNum + 1) * BLOCK_HEADER_SIZE2 size = (LastBlock.BlockNum + 1) * global.BLOCK_HEADER_SIZE2
} }
else { else {
FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1) FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1)
size = (LastBlock.BlockNum + 1) * BLOCK_HEADER_SIZE size = (LastBlock.BlockNum + 1) * global.BLOCK_HEADER_SIZE
} }
if (size < 0) if (size < 0)
size = 0 size = 0
@@ -543,13 +552,13 @@ module.exports = class CDB extends require("../code")
ClearDataBase() { ClearDataBase() {
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC) if (global.TX_PROCESS && global.TX_PROCESS.RunRPC)
global.TX_PROCESS.RunRPC("ClearDataBase", {}) global.TX_PROCESS.RunRPC("ClearDataBase", {})
var FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1); var FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
FItem1.size = 0 FItem1.size = 0
fs.ftruncateSync(FItem1.fd, FItem1.size) fs.ftruncateSync(FItem1.fd, FItem1.size)
var FItem12 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1); var FItem12 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1);
FItem12.size = 0 FItem12.size = 0
fs.ftruncateSync(FItem12.fd, FItem12.size) fs.ftruncateSync(FItem12.fd, FItem12.size)
var FItem2 = BlockDB.OpenDBFile(FILE_NAME_BODY, 1); var FItem2 = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
FItem2.size = 0 FItem2.size = 0
fs.ftruncateSync(FItem2.fd, FItem2.size) fs.ftruncateSync(FItem2.fd, FItem2.size)
this.DBHeader100.Truncate(- 1) this.DBHeader100.Truncate(- 1)
@@ -567,13 +576,13 @@ module.exports = class CDB extends require("../code")
Close() { Close() {
this.ClearBufMap() this.ClearBufMap()
this.ReadStateTX() this.ReadStateTX()
BlockDB.CloseDBFile(FILE_NAME_HEADER) global.BlockDB.CloseDBFile(FILE_NAME_HEADER)
BlockDB.CloseDBFile(FILE_NAME_HEADER2) global.BlockDB.CloseDBFile(FILE_NAME_HEADER2)
BlockDB.CloseDBFile(FILE_NAME_BODY) global.BlockDB.CloseDBFile(FILE_NAME_BODY)
this.DBHeader100.Close() this.DBHeader100.Close()
} }
RewriteAllTransactions() { RewriteAllTransactions() {
if (TX_PROCESS.Worker) { if (global.TX_PROCESS.Worker) {
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC) { if (global.TX_PROCESS && global.TX_PROCESS.RunRPC) {
global.TX_PROCESS.RunRPC("RewriteAllTransactions", {}) global.TX_PROCESS.RunRPC("RewriteAllTransactions", {})
return 1; return 1;
@@ -592,10 +601,10 @@ module.exports = class CDB extends require("../code")
BufWrite.Write(Block.Reserv500, "uint") BufWrite.Write(Block.Reserv500, "uint")
BufWrite.Write(Block.TrDataPos, "uint") BufWrite.Write(Block.TrDataPos, "uint")
BufWrite.Write(Block.TrDataLen, "uint32") BufWrite.Write(Block.TrDataLen, "uint32")
BufWrite.len = len + BLOCK_HEADER_SIZE BufWrite.len = len + global.BLOCK_HEADER_SIZE
} }
BufToBlockHeader(BufRead, Num) { BufToBlockHeader(BufRead, Num) {
var Block = {}; var Block: any = {};
var len = BufRead.len; var len = BufRead.len;
Block.TreeHash = BufRead.Read("hash") Block.TreeHash = BufRead.Read("hash")
Block.AddrHash = BufRead.Read("hash") Block.AddrHash = BufRead.Read("hash")
@@ -606,23 +615,23 @@ module.exports = class CDB extends require("../code")
Block.TrDataPos = BufRead.Read("uint") Block.TrDataPos = BufRead.Read("uint")
Block.TrDataLen = BufRead.Read("uint32") Block.TrDataLen = BufRead.Read("uint32")
Block.TrCount = 0 Block.TrCount = 0
BufRead.len = len + BLOCK_HEADER_SIZE BufRead.len = len + global.BLOCK_HEADER_SIZE
return this.PrepareBlockFields(Block, Num); return this.PrepareBlockFields(Block, Num);
} }
PrepareBlockFields(Block, Num) { PrepareBlockFields(Block, Num) {
Block.AddInfo = AddInfoBlock.bind(Block) Block.AddInfo = global.AddInfoBlock.bind(Block)
Block.Info = "" Block.Info = ""
Block.BlockNum = Num Block.BlockNum = Num
Block.SeqHash = this.GetSeqHash(Block.BlockNum, Block.PrevHash, Block.TreeHash) Block.SeqHash = this.GetSeqHash(Block.BlockNum, Block.PrevHash, Block.TreeHash)
if (Block.BlockNum >= global.BLOCK_PROCESSING_LENGTH2) { if (Block.BlockNum >= global.BLOCK_PROCESSING_LENGTH2) {
CalcHashBlockFromSeqAddr(Block) global.CalcHashBlockFromSeqAddr(Block)
} }
else { else {
Block.Hash = this.GetHashGenesis(Block.BlockNum) Block.Hash = this.GetHashGenesis(Block.BlockNum)
Block.PowHash = Block.Hash Block.PowHash = Block.Hash
} }
Block.Power = GetPowPower(Block.PowHash) Block.Power = global.GetPowPower(Block.PowHash)
if (IsZeroArr(Block.Hash)) if (global.IsZeroArr(Block.Hash))
return undefined; return undefined;
return Block; return Block;
} }
@@ -640,7 +649,7 @@ module.exports = class CDB extends require("../code")
break; break;
Block.Num = Block.BlockNum Block.Num = Block.BlockNum
if (Block.AddrHash) { if (Block.AddrHash) {
Block.Miner = ReadUintFromArr(Block.AddrHash, 0) Block.Miner = global.ReadUintFromArr(Block.AddrHash, 0)
if (Block.BlockNum < 16 || Block.Miner > MaxAccount) if (Block.BlockNum < 16 || Block.Miner > MaxAccount)
Block.Miner = 0 Block.Miner = 0
if (bMinerName && Block.Miner) { if (bMinerName && Block.Miner) {
@@ -650,7 +659,7 @@ module.exports = class CDB extends require("../code")
else else
Block.MinerName = "" Block.MinerName = ""
} }
var Value = GetHashFromSeqAddr(Block.SeqHash, Block.AddrHash, Block.BlockNum, Block.PrevHash); var Value = global.GetHashFromSeqAddr(Block.SeqHash, Block.AddrHash, Block.BlockNum, Block.PrevHash);
Block.Hash1 = Value.Hash1 Block.Hash1 = Value.Hash1
Block.Hash2 = Value.Hash2 Block.Hash2 = Value.Hash2
} }
@@ -659,14 +668,14 @@ module.exports = class CDB extends require("../code")
var Bytes = Block.TrDataLen; var Bytes = Block.TrDataLen;
var Pow = Block.Power; var Pow = Block.Power;
var Miner = Block.Miner; var Miner = Block.Miner;
var Date = DateFromBlock(Block.BlockNum); var Date = global.DateFromBlock(Block.BlockNum);
try { try {
if (!eval(Filter)) if (!eval(Filter))
continue; continue;
} }
catch (e) { catch (e) {
if (!WasError) if (!WasError)
ToLog(e) global.ToLog(e)
WasError = 1 WasError = 1
} }
} }
@@ -686,7 +695,7 @@ module.exports = class CDB extends require("../code")
continue; continue;
if (num >= Block.arrContent.length) if (num >= Block.arrContent.length)
break; break;
var Tr = { body: Block.arrContent[num] }; var Tr: any = { body: Block.arrContent[num] };
this.CheckCreateTransactionObject(Tr, 1) this.CheckCreateTransactionObject(Tr, 1)
Tr.Num = num Tr.Num = num
Tr.Type = Tr.body[0] Tr.Type = Tr.body[0]
@@ -694,7 +703,7 @@ module.exports = class CDB extends require("../code")
Tr.Body = [] Tr.Body = []
for (var j = 0; j < Tr.body.length; j++) for (var j = 0; j < Tr.body.length; j++)
Tr.Body[j] = Tr.body[j] Tr.Body[j] = Tr.body[j]
var App = DAppByType[Tr.Type]; var App = global.DAppByType[Tr.Type];
if (App) { if (App) {
Tr.Script = App.GetScriptTransaction(Tr.body) Tr.Script = App.GetScriptTransaction(Tr.body)
if (BlockNum >= this.BlockNumDBMin) if (BlockNum >= this.BlockNumDBMin)
@@ -722,7 +731,7 @@ module.exports = class CDB extends require("../code")
return arr; return arr;
} }
ClearStat() { ClearStat() {
var MAX_ARR_PERIOD = MAX_STAT_PERIOD * 2 + 10; var MAX_ARR_PERIOD = global.MAX_STAT_PERIOD * 2 + 10;
this.StatMap = { this.StatMap = {
StartPos: 0, StartBlockNum: 0, Length: 0, "ArrPower": new Float64Array(MAX_ARR_PERIOD), "ArrPowerMy": new Float64Array(MAX_ARR_PERIOD), StartPos: 0, StartBlockNum: 0, Length: 0, "ArrPower": new Float64Array(MAX_ARR_PERIOD), "ArrPowerMy": new Float64Array(MAX_ARR_PERIOD),
} }
@@ -755,9 +764,9 @@ module.exports = class CDB extends require("../code")
if (num <= this.BlockNumDB) { if (num <= this.BlockNumDB) {
var Block = this.ReadBlockHeaderDB(num); var Block = this.ReadBlockHeaderDB(num);
if (Block) { if (Block) {
Power = GetPowPower(Block.PowHash) Power = global.GetPowPower(Block.PowHash)
var Miner = ReadUintFromArr(Block.AddrHash, 0); var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
var Nonce = ReadUintFromArr(Block.AddrHash, 6); Nonce = global.ReadUintFromArr(Block.AddrHash, 6);
if (Param.Miner < 0) { if (Param.Miner < 0) {
if (Param.Adviser) { if (Param.Adviser) {
var Adviser = global.DApps.Accounts.GetAdviserByMiner(Map, Miner); var Adviser = global.DApps.Accounts.GetAdviserByMiner(Map, Miner);
@@ -794,9 +803,9 @@ module.exports = class CDB extends require("../code")
var StepTime = 1; var StepTime = 1;
while (ArrList.length >= MaxSizeArr) { while (ArrList.length >= MaxSizeArr) {
if (Param.bNonce) if (Param.bNonce)
ArrList = ResizeArrMax(ArrList) ArrList = global.ResizeArrMax(ArrList)
else else
ArrList = ResizeArrAvg(ArrList) ArrList = global.ResizeArrAvg(ArrList)
StepTime = StepTime * 2 StepTime = StepTime * 2
} }
return { ArrList: ArrList, AvgValue: AvgValue, steptime: StepTime }; return { ArrList: ArrList, AvgValue: AvgValue, steptime: StepTime };
@@ -804,7 +813,7 @@ module.exports = class CDB extends require("../code")
GetStatBlockchain(name, MinLength) { GetStatBlockchain(name, MinLength) {
if (!MinLength) if (!MinLength)
return []; return [];
var MAX_ARR_PERIOD = MAX_STAT_PERIOD * 2 + 10; var MAX_ARR_PERIOD = global.MAX_STAT_PERIOD * 2 + 10;
if (!this.StatMap) { if (!this.StatMap) {
this.ClearStat() this.ClearStat()
} }
@@ -835,9 +844,9 @@ module.exports = class CDB extends require("../code")
if (num <= MaxNumBlockDB) { if (num <= MaxNumBlockDB) {
var Block = this.ReadBlockHeaderDB(num); var Block = this.ReadBlockHeaderDB(num);
if (Block) { if (Block) {
Power = GetPowPower(Block.PowHash) Power = global.GetPowPower(Block.PowHash)
var Miner = ReadUintFromArr(Block.AddrHash, 0); var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
if (Miner === GENERATE_BLOCK_ACCOUNT) { if (Miner === global.GENERATE_BLOCK_ACCOUNT) {
PowerMy = Power PowerMy = Power
} }
} }
@@ -860,7 +869,7 @@ module.exports = class CDB extends require("../code")
this.StatMap["POWER_BLOCKCHAIN"] = arr this.StatMap["POWER_BLOCKCHAIN"] = arr
this.StatMap["POWER_MY_WIN"] = arrmy this.StatMap["POWER_MY_WIN"] = arrmy
} }
var arr = this.StatMap[name]; arr = this.StatMap[name];
if (!arr) if (!arr)
arr = [] arr = []
var arrT = this.StatMap["POWER_BLOCKCHAIN"]; var arrT = this.StatMap["POWER_BLOCKCHAIN"];
@@ -875,8 +884,8 @@ module.exports = class CDB extends require("../code")
return [Num + 1, 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, Num + 1]; return [Num + 1, 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, Num + 1];
} }
GetSeqHash(BlockNum, PrevHash, TreeHash) { GetSeqHash(BlockNum, PrevHash, TreeHash) {
var arr = [GetArrFromValue(BlockNum), PrevHash, TreeHash]; var arr = [global.GetArrFromValue(BlockNum), PrevHash, TreeHash];
var SeqHash = CalcHashFromArray(arr, true); var SeqHash = global.CalcHashFromArray(arr, true);
return SeqHash; return SeqHash;
} }
CheckCreateTicketObject(Tr, BlockNum, SetTxID) { CheckCreateTicketObject(Tr, BlockNum, SetTxID) {
@@ -885,28 +894,28 @@ module.exports = class CDB extends require("../code")
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]; 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 < global.TR_TICKET_HASH_LENGTH; i++) for (var i = 0; i < global.TR_TICKET_HASH_LENGTH; i++)
FullHashTicket[i] = Tr.HashTicket[i] FullHashTicket[i] = Tr.HashTicket[i]
WriteUintToArrOnPos(FullHashTicket, Tr.num, global.TR_TICKET_HASH_LENGTH) global.WriteUintToArrOnPos(FullHashTicket, Tr.num, global.TR_TICKET_HASH_LENGTH)
Tr.HashPow = global.sha3(FullHashTicket) Tr.HashPow = global.sha3(FullHashTicket)
Tr.power = GetPowPower(Tr.HashPow) Tr.power = global.GetPowPower(Tr.HashPow)
Tr.TimePow = Tr.power Tr.TimePow = Tr.power
if (SetTxID) if (SetTxID)
Tr.TxID = GetHexFromArr(FullHashTicket.slice(0, TR_TICKET_HASH_LENGTH + 6)) Tr.TxID = global.GetHexFromArr(FullHashTicket.slice(0, global.TR_TICKET_HASH_LENGTH + 6))
} }
} }
CheckCreateTransactionObject(Tr, SetTxID, NotPrioritet) { CheckCreateTransactionObject(Tr, SetTxID, NotPrioritet?) {
if (!Tr.HashPow) { if (!Tr.HashPow) {
var Body = Tr.body; var Body = Tr.body;
Tr.IsTx = 1 Tr.IsTx = 1
Tr.num = ReadUintFromArr(Body, Body.length - 12) Tr.num = global.ReadUintFromArr(Body, Body.length - 12)
if (Tr.num >= global.BLOCKNUM_TICKET_ALGO) if (Tr.num >= global.BLOCKNUM_TICKET_ALGO)
Tr.HASH = global.sha3(Body) Tr.HASH = global.sha3(Body)
else else
Tr.HASH = global.shaarr(Body) Tr.HASH = global.shaarr(Body)
Tr.HashTicket = Tr.HASH.slice(0, global.TR_TICKET_HASH_LENGTH) Tr.HashTicket = Tr.HASH.slice(0, global.TR_TICKET_HASH_LENGTH)
this.CheckCreateTicketObject(Tr, Tr.num, SetTxID) this.CheckCreateTicketObject(Tr, Tr.num, SetTxID)
Tr.Prioritet = MAX_LENGTH_SENDER_MAP Tr.Prioritet = global.MAX_LENGTH_SENDER_MAP
if (!NotPrioritet && this.GetSenderPrioritet) { if (!NotPrioritet && this.GetSenderPrioritet) {
var App = DAppByType[Body[0]]; var App = global.DAppByType[Body[0]];
if (App) { if (App) {
Tr.SenderNum = App.GetSenderNum(Tr.num, Body) Tr.SenderNum = App.GetSenderNum(Tr.num, Body)
if (Tr.SenderNum && Tr.SenderNum > 0) { if (Tr.SenderNum && Tr.SenderNum > 0) {
@@ -919,7 +928,7 @@ module.exports = class CDB extends require("../code")
} }
BlockChainToBuf(WriteNum, StartNum, EndBlockNum) { BlockChainToBuf(WriteNum, StartNum, EndBlockNum) {
if (StartNum === undefined) if (StartNum === undefined)
return BufLib.GetNewBuffer(10); return global.BufLib.GetNewBuffer(10);
var GetLength = EndBlockNum - StartNum + 1; var GetLength = EndBlockNum - StartNum + 1;
var arr = []; var arr = [];
var arr0 = this.PrevBlockChainArr; var arr0 = this.PrevBlockChainArr;
@@ -927,7 +936,7 @@ module.exports = class CDB extends require("../code")
var Block = arr0[arr0.length - 1]; var Block = arr0[arr0.length - 1];
if (Block.BlockNum >= StartNum && Block.BlockNum <= EndBlockNum) { if (Block.BlockNum >= StartNum && Block.BlockNum <= EndBlockNum) {
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum); var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
if (!BlockDB || global.CompareArr(Block.SumHash, BlockDB.SumHash) !== 0) { if (!BlockDB || global.CompareArr(Block.SumHash, global.BlockDB.SumHash) !== 0) {
arr0 = undefined arr0 = undefined
} }
else { else {
@@ -960,11 +969,11 @@ module.exports = class CDB extends require("../code")
var CountSend = arr.length - global.BLOCK_PROCESSING_LENGTH2; var CountSend = arr.length - global.BLOCK_PROCESSING_LENGTH2;
var BufWrite; var BufWrite;
if (CountSend <= 0) { if (CountSend <= 0) {
BufWrite = BufLib.GetNewBuffer(10) BufWrite = global.BufLib.GetNewBuffer(10)
} }
else { else {
var BufSize = 6 + 4 + global.BLOCK_PROCESSING_LENGTH2 * 32 + 32 + 6 + CountSend * 64; var BufSize = 6 + 4 + global.BLOCK_PROCESSING_LENGTH2 * 32 + 32 + 6 + CountSend * 64;
BufWrite = BufLib.GetNewBuffer(BufSize) BufWrite = global.BufLib.GetNewBuffer(BufSize)
BufWrite.Write(StartNum, "uint") BufWrite.Write(StartNum, "uint")
BufWrite.Write(CountSend, "uint32") BufWrite.Write(CountSend, "uint32")
for (var i = 0; i < arr.length; i++) { for (var i = 0; i < arr.length; i++) {
@@ -993,8 +1002,8 @@ function AddInfo(Block, Str, BlockNumStart) {
Block.Info = Str; Block.Info = Str;
else else
if (Block.Info.length < 2000) { if (Block.Info.length < 2000) {
var timesend = "" + SERVER.CurrentBlockNum - BlockNumStart; var timesend: any = "" as any + global.SERVER.CurrentBlockNum - BlockNumStart;
var now = GetCurrentTime(); var now = global.GetCurrentTime();
timesend += ".[" + now.getSeconds().toStringZ(2) + "." + now.getMilliseconds().toStringZ(3) + "]"; timesend += ".[" + now.getSeconds().toStringZ(2) + "." + now.getMilliseconds().toStringZ(3) + "]";
Str = timesend + ": " + Str; Str = timesend + ": " + Str;
Block.Info += "\n" + Str; Block.Info += "\n" + Str;
@@ -1003,19 +1012,19 @@ function AddInfo(Block, Str, BlockNumStart) {
global.AddInfoChain = function(Str) { global.AddInfoChain = function(Str) {
if (!global.STAT_MODE) if (!global.STAT_MODE)
return; return;
if (this.BlockNumStart > GetCurrentBlockNumByTime() - HISTORY_BLOCK_COUNT) if (this.BlockNumStart > global.GetCurrentBlockNumByTime() - global.HISTORY_BLOCK_COUNT)
AddInfo(this, Str, this.BlockNumStart); AddInfo(this, Str, this.BlockNumStart);
}; };
global.AddInfoBlock = function(Block, Str) { global.AddInfoBlock = function(Block, Str) {
if (!global.STAT_MODE) if (!global.STAT_MODE)
return; return;
if (Block && Block.BlockNum && Block.BlockNum > GetCurrentBlockNumByTime() - HISTORY_BLOCK_COUNT) if (Block && Block.BlockNum && Block.BlockNum > global.GetCurrentBlockNumByTime() - global.HISTORY_BLOCK_COUNT)
AddInfo(Block, Str, Block.BlockNum); AddInfo(Block, Str, Block.BlockNum);
}; };
global.GetNodeStrPort = function(Node) { global.GetNodeStrPort = function(Node) {
if (!Node) if (!Node)
return ""; return "";
if (LOCAL_RUN) if (global.LOCAL_RUN)
return "" + Node.port; return "" + Node.port;
else { else {
if (!Node.ip) if (!Node.ip)

View File

@@ -21,8 +21,8 @@ module.exports = class {
this.DBMap = {} this.DBMap = {}
} }
CheckPathDB() { CheckPathDB() {
var Path = global.global.GetDataPath("DB"); var Path = global.GetDataPath("DB");
global.global.CheckCreateDir(Path) global.CheckCreateDir(Path)
} }
CloseDBFile(name, bdelete) { CloseDBFile(name, bdelete) {
this.LastHash = undefined this.LastHash = undefined
@@ -34,7 +34,7 @@ module.exports = class {
fs.close(Item.fd, function(err) { fs.close(Item.fd, function(err) {
if (!err) { if (!err) {
if (bDelete) { if (bDelete) {
var fname = global.global.GetDataPath("DB/" + Name); var fname = global.GetDataPath("DB/" + Name);
fs.unlink(fname, function(err) { fs.unlink(fname, function(err) {
if (err) if (err)
global.ToLog(err) global.ToLog(err)
@@ -63,7 +63,7 @@ module.exports = class {
this.CheckPathDB() this.CheckPathDB()
this.WasCheckPathDB = true this.WasCheckPathDB = true
} }
var fname = global.global.GetDataPath("DB/" + name); var fname = global.GetDataPath("DB/" + name);
if (!fs.existsSync(fname)) { if (!fs.existsSync(fname)) {
if (bExist) { if (bExist) {
this.DBMap[name] = null this.DBMap[name] = null
@@ -90,7 +90,7 @@ function CheckStartOneProcess(Name) {
if (global.READ_ONLY_DB || MapCheckProcess[Name]) if (global.READ_ONLY_DB || MapCheckProcess[Name])
return; return;
MapCheckProcess[Name] = 1; MapCheckProcess[Name] = 1;
var path = global.global.GetDataPath("DB/" + Name); var path = global.GetDataPath("DB/" + Name);
if (fs.existsSync(path)) { if (fs.existsSync(path)) {
fs.unlinkSync(path); fs.unlinkSync(path);
} }

View File

@@ -41,15 +41,7 @@ ContenTypeMap[".js"] = "application/javascript";
ContenTypeMap["html"] = "text/html"; ContenTypeMap["html"] = "text/html";
ContenTypeMap["psd"] = "application/octet-stream"; ContenTypeMap["psd"] = "application/octet-stream";
global.HTTPCaller = {}; global.HTTPCaller = {};
let HTTPCaller = global.HTTPCaller
let {
ToLog,
ToError,
DApps,
SERVER,
MAX_TRANSACTION_COUNT
} = global
function DoCommand(response, Type, Path, params, remoteAddress) { function DoCommand(response, Type, Path, params, remoteAddress) {
var F = global.HTTPCaller[params[0]]; var F = global.HTTPCaller[params[0]];
if (F) { if (F) {
@@ -188,7 +180,7 @@ function DappClientCodeFile(response, StrNum) {
response.end(); response.end();
}; };
global.HTTPCaller.DappSmartHTMLFile = function(Params) { global.HTTPCaller.DappSmartHTMLFile = function(Params) {
var Data = global.DApps.Smart.ReadSmart(ParseNum(Params.Smart)); var Data = global.DApps.Smart.ReadSmart(global.ParseNum(Params.Smart));
if (Data) { if (Data) {
if (global.DEV_MODE && Params.DebugPath) { if (global.DEV_MODE && Params.DebugPath) {
global.ToLog("Load: " + Params.DebugPath); global.ToLog("Load: " + Params.DebugPath);
@@ -203,7 +195,7 @@ global.SendBlockFile = SendBlockFile;
function SendBlockFile(response, BlockNum, TrNum) { function SendBlockFile(response, BlockNum, TrNum) {
BlockNum = parseInt(BlockNum); BlockNum = parseInt(BlockNum);
TrNum = parseInt(TrNum); TrNum = parseInt(TrNum);
if (BlockNum && BlockNum <= global.SERVER.GetMaxNumBlockDB() && TrNum <= MAX_TRANSACTION_COUNT) { if (BlockNum && BlockNum <= global.SERVER.GetMaxNumBlockDB() && TrNum <= global.MAX_TRANSACTION_COUNT) {
var Block = global.SERVER.ReadBlockDB(BlockNum); var Block = global.SERVER.ReadBlockDB(BlockNum);
if (Block && Block.arrContent) { if (Block && Block.arrContent) {
SendToResponceFile(response, Block, TrNum); SendToResponceFile(response, Block, TrNum);
@@ -211,7 +203,7 @@ function SendBlockFile(response, BlockNum, TrNum) {
} }
else else
if (!Block || !Block.TrDataPos) { if (!Block || !Block.TrDataPos) {
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) { global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
if (Err) { if (Err) {
SendToResponce404(response); SendToResponce404(response);
} }
@@ -247,11 +239,11 @@ function SendToResponce404(response) {
response.end(); response.end();
}; };
HTTPCaller.DappBlockFile = function(Params, response) { HTTPCaller.DappBlockFile = function(Params, response) {
Params.BlockNum = ParseNum(Params.BlockNum); Params.BlockNum = global.ParseNum(Params.BlockNum);
Params.TrNum = ParseNum(Params.TrNum); Params.TrNum = global.ParseNum(Params.TrNum);
if (!Params.TrNum) if (!Params.TrNum)
Params.TrNum = 0; Params.TrNum = 0;
if (Params.BlockNum && Params.BlockNum <= global.SERVER.GetMaxNumBlockDB() && Params.TrNum <= MAX_TRANSACTION_COUNT) { if (Params.BlockNum && Params.BlockNum <= global.SERVER.GetMaxNumBlockDB() && Params.TrNum <= global.MAX_TRANSACTION_COUNT) {
var Block = global.SERVER.ReadBlockDB(Params.BlockNum); var Block = global.SERVER.ReadBlockDB(Params.BlockNum);
if (Block && Block.arrContent) { if (Block && Block.arrContent) {
SendToResponceDappFile(response, Block, Params.TrNum); SendToResponceDappFile(response, Block, Params.TrNum);
@@ -259,7 +251,7 @@ HTTPCaller.DappBlockFile = function(Params, response) {
} }
else else
if (!Block || !Block.TrDataPos) { if (!Block || !Block.TrDataPos) {
LoadBlockFromNetwork(Params, function(Err, Block) { global.LoadBlockFromNetwork(Params, function(Err, Block) {
if (Err) { if (Err) {
SendToResponceResult0(response); SendToResponceResult0(response);
} }
@@ -274,7 +266,7 @@ HTTPCaller.DappBlockFile = function(Params, response) {
}; };
function SendToResponceDappFile(response, Block, TrNum) { function SendToResponceDappFile(response, Block, TrNum) {
var Result = { result: 0 }; var Result: any = { result: 0 };
var Body = Block.arrContent[TrNum]; var Body = Block.arrContent[TrNum];
if (Body) { if (Body) {
var Type = Body[0]; var Type = Body[0];
@@ -283,7 +275,7 @@ function SendToResponceDappFile(response, Block, TrNum) {
Result = { result: 1, Type: Type, ContentType: TR.ContentType, Name: TR.Name, Body: TR.Data.toString('utf8') }; Result = { result: 1, Type: Type, ContentType: TR.ContentType, Name: TR.Name, Body: TR.Data.toString('utf8') };
} }
else { else {
var App = DAppByType[Type]; var App = global.DAppByType[Type];
if (App) { if (App) {
Body = JSON.parse(App.GetScriptTransaction(Body)); Body = JSON.parse(App.GetScriptTransaction(Body));
} }
@@ -303,7 +295,7 @@ HTTPCaller.DappStaticCall = function(Params, response) {
global.DApps.Accounts.BeginBlock(); global.DApps.Accounts.BeginBlock();
global.DApps.Accounts.BeginTransaction(); global.DApps.Accounts.BeginTransaction();
global.TickCounter = 100000; global.TickCounter = 100000;
var Account = global.DApps.Accounts.ReadStateTR(ParseNum(Params.Account)); var Account = global.DApps.Accounts.ReadStateTR(global.ParseNum(Params.Account));
if (!Account) { if (!Account) {
return { result: 0, RetValue: "Error account Num: " + Params.Account }; return { result: 0, RetValue: "Error account Num: " + Params.Account };
} }
@@ -324,7 +316,7 @@ HTTPCaller.DappStaticCall = function(Params, response) {
return null; return null;
}; };
HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) { HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
var SmartNum = ParseNum(Params.Smart); var SmartNum = global.ParseNum(Params.Smart);
if (global.TX_PROCESS && global.TX_PROCESS.Worker) if (global.TX_PROCESS && global.TX_PROCESS.Worker)
global.TX_PROCESS.Worker.send({ cmd: "SetSmartEvent", Smart: SmartNum }); global.TX_PROCESS.Worker.send({ cmd: "SetSmartEvent", Smart: SmartNum });
var Account; var Account;
@@ -349,15 +341,15 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
var EArr = GetEventArray(SmartNum, Context); var EArr = GetEventArray(SmartNum, Context);
var WLData = HTTPCaller.DappWalletList(Params); var WLData = HTTPCaller.DappWalletList(Params);
var ArrLog = []; var ArrLog = [];
for (var i = 0; i < ArrLogClient.length; i++) { for (var i = 0; i < global.ArrLogClient.length; i++) {
var Item = ArrLogClient[i]; var Item = global.ArrLogClient[i];
if (!Item.final) if (!Item.final)
continue; continue;
ArrLog.push(Item); ArrLog.push(Item);
} }
var Ret = { var Ret: any = {
result: 1, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, MIN_POWER_POW_TR: MIN_POWER_POW_TR, FIRST_TIME_BLOCK: FIRST_TIME_BLOCK, result: 1, 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: CONSENSUS_PERIOD_TIME, PRICE_DAO: PRICE_DAO(SERVER.BlockNumDB), NEW_SIGN_TIME: NEW_SIGN_TIME, Smart: Smart, CONSENSUS_PERIOD_TIME: global.CONSENSUS_PERIOD_TIME, PRICE_DAO: global.PRICE_DAO(global.SERVER.BlockNumDB), NEW_SIGN_TIME: global.NEW_SIGN_TIME, Smart: Smart,
Account: Account, ArrWallet: WLData.arr, ArrEvent: EArr, ArrLog: ArrLog, Account: Account, ArrWallet: WLData.arr, ArrEvent: EArr, ArrLog: ArrLog,
}; };
if (global.WALLET) { if (global.WALLET) {
@@ -367,7 +359,7 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
} }
if (!ObjectOnly) { if (!ObjectOnly) {
Ret.CurTime = Date.now(); Ret.CurTime = Date.now();
Ret.CurBlockNum = GetCurrentBlockNumByTime(); Ret.CurBlockNum = global.GetCurrentBlockNumByTime();
Ret.BlockNumDB = global.SERVER.BlockNumDB; Ret.BlockNumDB = global.SERVER.BlockNumDB;
Ret.MaxAccID = global.DApps.Accounts.GetMaxAccount(); Ret.MaxAccID = global.DApps.Accounts.GetMaxAccount();
Ret.MaxDappsID = global.DApps.Smart.GetMaxNum(); Ret.MaxDappsID = global.DApps.Smart.GetMaxNum();
@@ -375,14 +367,14 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
return Ret; return Ret;
}; };
HTTPCaller.DappWalletList = function(Params) { HTTPCaller.DappWalletList = function(Params) {
var arr0 = global.DApps.Accounts.GetWalletAccountsByMap(WALLET.AccountMap); var arr0 = global.DApps.Accounts.GetWalletAccountsByMap(global.WALLET.AccountMap);
var arr = []; var arr = [];
for (var i = 0; i < arr0.length; i++) { for (var i = 0; i < arr0.length; i++) {
if (Params.AllAccounts || arr0[i].Value.Smart === Params.Smart) { if (Params.AllAccounts || arr0[i].Value.Smart === Params.Smart) {
arr.push(arr0[i]); arr.push(arr0[i]);
} }
} }
var Ret = { result: 1, arr: arr, }; var Ret: any = { result: 1, arr: arr, };
return Ret; return Ret;
}; };
HTTPCaller.DappAccountList = function(Params) { HTTPCaller.DappAccountList = function(Params) {
@@ -402,13 +394,13 @@ HTTPCaller.DappTransactionList = function(Params, response) {
Params.Param3 = Params.BlockNum; Params.Param3 = Params.BlockNum;
return HTTPCaller.GetTransactionAll(Params, response); return HTTPCaller.GetTransactionAll(Params, response);
}; };
var sessionid = GetHexFromAddres(crypto.randomBytes(20)); var sessionid = global.GetHexFromAddres(crypto.randomBytes(20));
HTTPCaller.RestartNode = function(Params) { HTTPCaller.RestartNode = function(Params) {
global.RestartNode(); global.RestartNode();
return { result: 1 }; return { result: 1 };
}; };
HTTPCaller.ToLogServer = function(Str) { HTTPCaller.ToLogServer = function(Str) {
ToLogClient(Str); global.ToLogClient(Str);
return { result: 1 }; return { result: 1 };
}; };
HTTPCaller.FindMyAccounts = function(Params) { HTTPCaller.FindMyAccounts = function(Params) {
@@ -443,11 +435,11 @@ HTTPCaller.GetBlockList = function(Params, response, bOnlyNum) {
if (!Block) { if (!Block) {
CountWait++; CountWait++;
WasWait = 1; WasWait = 1;
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) { global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
CountWait--; CountWait--;
if (CountWait === 0) { if (CountWait === 0) {
var arr = global.SERVER.GetRows(Params.StartNum, Params.CountNum, Params.Filter); var arr = global.SERVER.GetRows(Params.StartNum, Params.CountNum, Params.Filter);
var Result = { arr: arr, result: 1 }; var Result: any = { arr: arr, result: 1 };
response.end(JSON.stringify(Result)); response.end(JSON.stringify(Result));
} }
}); });
@@ -466,7 +458,7 @@ HTTPCaller.GetTransactionAll = function(Params, response) {
if (BlockNum < global.SERVER.BlockNumDBMin) { if (BlockNum < global.SERVER.BlockNumDBMin) {
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum); var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
if (!Block) { if (!Block) {
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) { global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
var Result; var Result;
if (Err) { if (Err) {
Result = { arr: [], result: 0 }; Result = { arr: [], result: 0 };
@@ -492,7 +484,7 @@ HTTPCaller.GetHashList = function(Params) {
var arr = global.DApps.Accounts.DBAccountsHash.GetRows(Params.StartNum, Params.CountNum, Params.Filter); var arr = global.DApps.Accounts.DBAccountsHash.GetRows(Params.StartNum, Params.CountNum, Params.Filter);
for (var i = 0; i < arr.length; i++) { for (var i = 0; i < arr.length; i++) {
var item = arr[i]; var item = arr[i];
item.BlockNum = item.Num * PERIOD_ACCOUNT_HASH; item.BlockNum = item.Num * global.PERIOD_ACCOUNT_HASH;
item.Hash100 = []; item.Hash100 = [];
if (item.BlockNum % 100 === 0) { if (item.BlockNum % 100 === 0) {
var Data = global.SERVER.DBHeader100.Read(item.BlockNum / 100); var Data = global.SERVER.DBHeader100.Read(item.BlockNum / 100);
@@ -527,24 +519,24 @@ HTTPCaller.GetWalletInfo = function(Params) {
var TXBlockNum = 0; var TXBlockNum = 0;
if (StateTX) if (StateTX)
TXBlockNum = StateTX.BlockNum; TXBlockNum = StateTX.BlockNum;
var Ret = { var Ret: any = {
result: 1, WalletOpen: global.WALLET.WalletOpen, WalletIsOpen: (global.WALLET.WalletOpen !== false), WalletCanSign: (global.WALLET.WalletOpen !== false && global.WALLET.KeyPair.WasInit), result: 1, WalletOpen: global.WALLET.WalletOpen, WalletIsOpen: (global.WALLET.WalletOpen !== false), WalletCanSign: (global.WALLET.WalletOpen !== false && global.WALLET.KeyPair.WasInit),
CODE_VERSION: CODE_VERSION, MAX_TRANSACTION_LIMIT: MAX_TRANSACTION_LIMIT, VersionNum: global.UPDATE_CODE_VERSION_NUM, RelayMode: global.SERVER.RelayMode, CODE_VERSION: global.CODE_VERSION, MAX_TRANSACTION_LIMIT: global.MAX_TRANSACTION_LIMIT, VersionNum: global.UPDATE_CODE_VERSION_NUM, RelayMode: global.SERVER.RelayMode,
BlockNumDB: global.SERVER.BlockNumDB, CurBlockNum: GetCurrentBlockNumByTime(), CurTime: Date.now(), IsDevelopAccount: IsDeveloperAccount(WALLET.PubKeyArr), BlockNumDB: global.SERVER.BlockNumDB, CurBlockNum: global.GetCurrentBlockNumByTime(), CurTime: Date.now(), IsDevelopAccount: global.IsDeveloperAccount(global.WALLET.PubKeyArr),
AccountMap: global.WALLET.AccountMap, ArrLog: ArrLogClient, MaxAccID: global.DApps.Accounts.GetMaxAccount(), MaxActNum: global.DApps.Accounts.GetActsMaxNum(), AccountMap: global.WALLET.AccountMap, ArrLog: global.global.ArrLogClient, MaxAccID: global.DApps.Accounts.GetMaxAccount(), MaxActNum: global.DApps.Accounts.GetActsMaxNum(),
MaxDappsID: global.DApps.Smart.GetMaxNum(), NeedRestart: global.NeedRestart, ip: global.SERVER.ip, port: global.SERVER.port, NET_WORK_MODE: global.NET_WORK_MODE, MaxDappsID: global.DApps.Smart.GetMaxNum(), NeedRestart: global.NeedRestart, ip: global.SERVER.ip, port: global.SERVER.port, NET_WORK_MODE: global.NET_WORK_MODE,
INTERNET_IP_FROM_STUN: global.INTERNET_IP_FROM_STUN, HistoryMaxNum: MaxHistory, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, FIRST_TIME_BLOCK: FIRST_TIME_BLOCK, INTERNET_IP_FROM_STUN: global.INTERNET_IP_FROM_STUN, HistoryMaxNum: MaxHistory, DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME, FIRST_TIME_BLOCK: global.FIRST_TIME_BLOCK,
CONSENSUS_PERIOD_TIME: CONSENSUS_PERIOD_TIME, NEW_SIGN_TIME: NEW_SIGN_TIME, DATA_PATH: (DATA_PATH.substr(1, 1) === ":" ? DATA_PATH : GetNormalPathString(process.cwd() + "/" + DATA_PATH)), CONSENSUS_PERIOD_TIME: global.CONSENSUS_PERIOD_TIME, NEW_SIGN_TIME: global.NEW_SIGN_TIME, DATA_PATH: (global.DATA_PATH.substr(1, 1) === ":" ? global.DATA_PATH : global.GetNormalPathString(process.cwd() + "/" + global.DATA_PATH)),
NodeAddrStr: global.SERVER.addrStr, STAT_MODE: global.STAT_MODE, HTTPPort: global.HTTP_PORT_NUMBER, HTTPPassword: HTTP_PORT_PASSWORD, NodeAddrStr: global.SERVER.addrStr, STAT_MODE: global.STAT_MODE, HTTPPort: global.HTTP_PORT_NUMBER, HTTPPassword: global.HTTP_PORT_PASSWORD,
CONSTANTS: Constants, CheckPointBlockNum: CHECK_POINT.BlockNum, MiningAccount: global.GENERATE_BLOCK_ACCOUNT, CountMiningCPU: GetCountMiningCPU(), CONSTANTS: Constants, CheckPointBlockNum: global.CHECK_POINT.BlockNum, MiningAccount: global.GENERATE_BLOCK_ACCOUNT, CountMiningCPU: global.GetCountMiningCPU(),
CountRunCPU: global.ArrMiningWrk.length, MiningPaused: global.MiningPaused, HashRate: HashRateOneSec, MIN_POWER_POW_TR: MIN_POWER_POW_TR, CountRunCPU: global.ArrMiningWrk.length, MiningPaused: global.MiningPaused, HashRate: HashRateOneSec, MIN_POWER_POW_TR: global.MIN_POWER_POW_TR,
PRICE_DAO: PRICE_DAO(SERVER.BlockNumDB), NWMODE: global.NWMODE, PERIOD_ACCOUNT_HASH: PERIOD_ACCOUNT_HASH, MAX_ACCOUNT_HASH: global.DApps.Accounts.DBAccountsHash.GetMaxNum(), PRICE_DAO: global.PRICE_DAO(global.SERVER.BlockNumDB), NWMODE: global.NWMODE, PERIOD_ACCOUNT_HASH: global.PERIOD_ACCOUNT_HASH, MAX_ACCOUNT_HASH: global.DApps.Accounts.DBAccountsHash.GetMaxNum(),
TXBlockNum: TXBlockNum, SpeedSignLib: global.SpeedSignLib, TXBlockNum: TXBlockNum, SpeedSignLib: global.SpeedSignLib,
}; };
if (Params.Account) if (Params.Account)
Ret.PrivateKey = global.GetHexFromArr(WALLET.GetPrivateKey(WALLET.AccountMap[Params.Account])); Ret.PrivateKey = global.GetHexFromArr(global.WALLET.GetPrivateKey(global.WALLET.AccountMap[Params.Account]));
else else
Ret.PrivateKey = global.GetHexFromArr(WALLET.GetPrivateKey()); Ret.PrivateKey = global.GetHexFromArr(global.WALLET.GetPrivateKey());
Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr; Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr;
return Ret; return Ret;
}; };
@@ -553,7 +545,7 @@ HTTPCaller.TestSignLib = function() {
global.TestSignLib(); global.TestSignLib();
}; };
HTTPCaller.GetWalletAccounts = function() { HTTPCaller.GetWalletAccounts = function() {
var Ret = { result: 1, arr: global.DApps.Accounts.GetWalletAccountsByMap(WALLET.AccountMap), }; var Ret: any = { result: 1, arr: global.DApps.Accounts.GetWalletAccountsByMap(global.WALLET.AccountMap), };
Ret.PrivateKey = global.WALLET.KeyPair.PrivKeyStr; Ret.PrivateKey = global.WALLET.KeyPair.PrivKeyStr;
Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr; Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr;
return Ret; return Ret;
@@ -589,14 +581,14 @@ HTTPCaller.GetSignFromHEX = function(Params) {
}; };
HTTPCaller.SendTransactionHex = function(Params) { HTTPCaller.SendTransactionHex = function(Params) {
var body = global.GetArrFromHex(Params.Hex); var body = global.GetArrFromHex(Params.Hex);
var Result = { result: 1 }; var Result: any = { result: 1 };
var Res = global.SERVER.AddTransactionOwn({ body: body, ToAll: 1 }); var Res = global.SERVER.AddTransactionOwn({ body: body, ToAll: 1 });
Result.sessionid = sessionid; Result.sessionid = sessionid;
Result.text = AddTrMap[Res]; Result.text = global.AddTrMap[Res];
var final = false; var final = false;
if (Res <= 0 && Res !== - 3) if (Res <= 0 && Res !== - 3)
final = true; final = true;
ToLogClient("Send: " + Result.text, global.GetHexFromArr(sha3(body)), final); global.ToLogClient("Send: " + Result.text, global.GetHexFromArr(global.sha3(body)), final);
return Result; return Result;
}; };
HTTPCaller.SendDirectCode = function(Params, response) { HTTPCaller.SendDirectCode = function(Params, response) {
@@ -617,7 +609,7 @@ HTTPCaller.SendDirectCode = function(Params, response) {
else { else {
try { try {
var ret = eval(Params.Code); var ret = eval(Params.Code);
Result = JSON.stringify(ret, "", 4); Result = JSON.stringify(ret, undefined, 4);
} }
catch (e) { catch (e) {
Result = "" + e; Result = "" + e;
@@ -634,12 +626,12 @@ HTTPCaller.SetMining = function(MiningAccount) {
function CheckCorrectDevKey() { function CheckCorrectDevKey() {
if (global.WALLET.WalletOpen === false) { if (global.WALLET.WalletOpen === false) {
var StrErr = "Not open wallet"; var StrErr = "Not open wallet";
ToLogClient(StrErr); global.ToLogClient(StrErr);
return { result: 0, text: StrErr }; return { result: 0, text: StrErr };
} }
if (!IsDeveloperAccount(WALLET.PubKeyArr)) { if (!global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
var StrErr = "Not developer key"; var StrErr = "Not developer key";
ToLogClient(StrErr); global.ToLogClient(StrErr);
return { result: 0, text: StrErr }; return { result: 0, text: StrErr };
} }
return true; return true;
@@ -685,8 +677,8 @@ function SetCheckPointOnBlock(BlockNum) {
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum); var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
if (!Block) if (!Block)
return 0; return 0;
var SignArr = arr2(Block.Hash, GetArrFromValue(Block.BlockNum)); var SignArr = global.arr2(Block.Hash, global.GetArrFromValue(Block.BlockNum));
var Sign = secp256k1.sign(SHA3BUF(SignArr, Block.BlockNum), global.WALLET.KeyPair.getPrivateKey('')).signature; var Sign = global.secp256k1.sign(global.SHA3BUF(SignArr, Block.BlockNum), global.WALLET.KeyPair.getPrivateKey('')).signature;
global.CHECK_POINT = { BlockNum: BlockNum, Hash: Block.Hash, Sign: Sign }; global.CHECK_POINT = { BlockNum: BlockNum, Hash: Block.Hash, Sign: Sign };
global.SERVER.ResetNextPingAllNode(); global.SERVER.ResetNextPingAllNode();
return 1; return 1;
@@ -708,17 +700,17 @@ var SumCheckPow = 0;
var CountCheckPow = 0; var CountCheckPow = 0;
function RunSetCheckPoint() { function RunSetCheckPoint() {
if (!SERVER.BlockNumDB) if (!global.SERVER.BlockNumDB)
return; return;
if (SERVER.BlockNumDB < 2100000) if (global.SERVER.BlockNumDB < 2100000)
return; return;
var Delta = GetCurrentBlockNumByTime() - global.SERVER.BlockNumDB; var Delta = global.GetCurrentBlockNumByTime() - global.SERVER.BlockNumDB;
if (Delta > 16) if (Delta > 16)
return; return;
var BlockNum = global.SERVER.BlockNumDB - global.CheckPointDelta; var BlockNum = global.SERVER.BlockNumDB - global.CheckPointDelta;
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum); var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
if (Block) { if (Block) {
var Power = GetPowPower(Block.PowHash); var Power = global.GetPowPower(Block.PowHash);
if (Power < 30) { if (Power < 30) {
global.ToLog("CANNOT SET CHECK POINT Power=" + Power + " BlockNum=" + BlockNum); global.ToLog("CANNOT SET CHECK POINT Power=" + Power + " BlockNum=" + BlockNum);
return; return;
@@ -737,7 +729,7 @@ function RunSetCheckPoint() {
} }
}; };
HTTPCaller.SetNewCodeVersion = function(Data) { HTTPCaller.SetNewCodeVersion = function(Data) {
var Ret = CheckCorrectDevKey(); var Ret: any = CheckCorrectDevKey();
if (Ret !== true) if (Ret !== true)
return Ret; return Ret;
var Ret = global.SERVER.SetNewCodeVersion(Data, global.WALLET.KeyPair.getPrivateKey('')); var Ret = global.SERVER.SetNewCodeVersion(Data, global.WALLET.KeyPair.getPrivateKey(''));
@@ -745,17 +737,17 @@ HTTPCaller.SetNewCodeVersion = function(Data) {
return { result: 1, text: Ret }; return { result: 1, text: Ret };
}; };
HTTPCaller.SetCheckNetConstant = function(Data) { HTTPCaller.SetCheckNetConstant = function(Data) {
var Ret = CheckCorrectDevKey(); var Ret: any = CheckCorrectDevKey();
if (Ret !== true) if (Ret !== true)
return Ret; return Ret;
if (!Data) { if (!Data) {
ToLogClient("Data not set"); global.ToLogClient("Data not set");
return { result: 0, text: "Data not set" }; return { result: 0, text: "Data not set" };
} }
Data.Num = GetCurrentBlockNumByTime(); Data.Num = global.GetCurrentBlockNumByTime();
Data.BlockNum = GetCurrentBlockNumByTime() + 10; Data.BlockNum = global.GetCurrentBlockNumByTime() + 10;
var SignArr = global.SERVER.GetSignCheckNetConstant(Data); var SignArr = global.SERVER.GetSignCheckNetConstant(Data);
Data.Sign = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature; Data.Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
global.SERVER.CheckNetConstant({ NetConstant: Data }, { addrStr: "local" }); global.SERVER.CheckNetConstant({ NetConstant: Data }, { addrStr: "local" });
global.SERVER.ResetNextPingAllNode(); global.SERVER.ResetNextPingAllNode();
return { result: 1, text: "Set NET_CONSTANT BlockNum=" + Data.BlockNum }; return { result: 1, text: "Set NET_CONSTANT BlockNum=" + Data.BlockNum };
@@ -765,11 +757,11 @@ HTTPCaller.SetCheckDeltaTime = function(Data) {
if (Ret !== true) if (Ret !== true)
return Ret; return Ret;
if (!Data || !Data.Num) { if (!Data || !Data.Num) {
ToLogClient("Num not set"); global.ToLogClient("Num not set");
return { result: 0 }; return { result: 0 };
} }
var SignArr = global.SERVER.GetSignCheckDeltaTime(Data); var SignArr = global.SERVER.GetSignCheckDeltaTime(Data);
Data.Sign = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature; Data.Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
global.CHECK_DELTA_TIME = Data; global.CHECK_DELTA_TIME = Data;
global.SERVER.ResetNextPingAllNode(); global.SERVER.ResetNextPingAllNode();
return { result: 1, text: "Set check time Num=" + Data.Num }; return { result: 1, text: "Set check time Num=" + Data.Num };
@@ -791,9 +783,9 @@ var StartCheckTimeNum = 0;
function RunAutoCorrTime() { function RunAutoCorrTime() {
if (global.WALLET.WalletOpen === false) if (global.WALLET.WalletOpen === false)
return; return;
if (GetCurrentBlockNumByTime() > StartCheckTimeNum && Math.abs(global.DELTA_CURRENT_TIME) >= 120) { if (global.GetCurrentBlockNumByTime() > StartCheckTimeNum && Math.abs(global.DELTA_CURRENT_TIME) >= 120) {
var AutoDelta = - Math.trunc(global.DELTA_CURRENT_TIME); var AutoDelta = - Math.trunc(global.DELTA_CURRENT_TIME);
var Data = { Num: GetCurrentBlockNumByTime(), bUse: 1, bAddTime: 1 }; var Data: any = { Num: global.GetCurrentBlockNumByTime(), bUse: 1, bAddTime: 1 };
if (AutoDelta < 0) { if (AutoDelta < 0) {
AutoDelta = - AutoDelta; AutoDelta = - AutoDelta;
Data.bAddTime = 0; Data.bAddTime = 0;
@@ -802,7 +794,7 @@ function RunAutoCorrTime() {
Data.StartBlockNum = Data.Num + 5; Data.StartBlockNum = Data.Num + 5;
Data.EndBlockNum = Data.StartBlockNum + Math.trunc(AutoDelta / Data.DeltaTime); Data.EndBlockNum = Data.StartBlockNum + Math.trunc(AutoDelta / Data.DeltaTime);
var SignArr = global.SERVER.GetSignCheckDeltaTime(Data); var SignArr = global.SERVER.GetSignCheckDeltaTime(Data);
Data.Sign = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature; Data.Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
global.CHECK_DELTA_TIME = Data; global.CHECK_DELTA_TIME = Data;
global.SERVER.ResetNextPingAllNode(); global.SERVER.ResetNextPingAllNode();
StartCheckTimeNum = Data.EndBlockNum + 1; StartCheckTimeNum = Data.EndBlockNum + 1;
@@ -814,10 +806,10 @@ HTTPCaller.SaveConstant = function(SetObj) {
for (var key in SetObj) { for (var key in SetObj) {
global[key] = SetObj[key]; global[key] = SetObj[key];
} }
SAVE_CONST(true); global.SAVE_CONST(true);
global.SERVER.DO_CONSTANT(); global.SERVER.DO_CONSTANT();
if (!WasUpdate && global.USE_AUTO_UPDATE && CODE_VERSION.VersionNum && global.UPDATE_CODE_VERSION_NUM < CODE_VERSION.VersionNum) { if (!WasUpdate && global.USE_AUTO_UPDATE && global.CODE_VERSION.VersionNum && global.UPDATE_CODE_VERSION_NUM < global.CODE_VERSION.VersionNum) {
global.SERVER.UseCode(CODE_VERSION.VersionNum, true); global.SERVER.UseCode(global.CODE_VERSION.VersionNum, true);
} }
if (SetObj.DoRestartNode) if (SetObj.DoRestartNode)
global.RestartNode(); global.RestartNode();
@@ -830,7 +822,7 @@ HTTPCaller.SaveConstant = function(SetObj) {
HTTPCaller.SetHTTPParams = function(SetObj) { HTTPCaller.SetHTTPParams = function(SetObj) {
global.HTTP_PORT_NUMBER = SetObj.HTTPPort; global.HTTP_PORT_NUMBER = SetObj.HTTPPort;
global.HTTP_PORT_PASSWORD = SetObj.HTTPPassword; global.HTTP_PORT_PASSWORD = SetObj.HTTPPassword;
SAVE_CONST(true); global.SAVE_CONST(true);
if (SetObj.DoRestartNode) if (SetObj.DoRestartNode)
global.RestartNode(); global.RestartNode();
return { result: 1 }; return { result: 1 };
@@ -841,17 +833,17 @@ HTTPCaller.SetNetMode = function(SetObj) {
for (var key in SetObj) { for (var key in SetObj) {
global.NET_WORK_MODE[key] = SetObj[key]; global.NET_WORK_MODE[key] = SetObj[key];
} }
if (NET_WORK_MODE) { if (global.NET_WORK_MODE) {
global.START_IP = NET_WORK_MODE.ip; global.START_IP = global.NET_WORK_MODE.ip;
global.START_PORT_NUMBER = NET_WORK_MODE.port; global.START_PORT_NUMBER = global.NET_WORK_MODE.port;
} }
SAVE_CONST(true); global.SAVE_CONST(true);
if (SetObj.DoRestartNode) if (SetObj.DoRestartNode)
global.RestartNode(); global.RestartNode();
return { result: 1 }; return { result: 1 };
}; };
HTTPCaller.GetAccountKey = function(Num) { HTTPCaller.GetAccountKey = function(Num) {
var Result = {}; var Result: any = {};
Result.result = 0; Result.result = 0;
var KeyPair = global.WALLET.GetAccountKey(Num); var KeyPair = global.WALLET.GetAccountKey(Num);
if (KeyPair) { if (KeyPair) {
@@ -924,7 +916,7 @@ function GetCopyNode(Node, BlockCounts) {
var Item = { var Item = {
VersionNum: Node.VersionNum, NoSendTx: Node.NoSendTx, GetNoSendTx: Node.GetNoSendTx, DirectMAccount: Node.DirectMAccount, VersionNum: Node.VersionNum, NoSendTx: Node.NoSendTx, GetNoSendTx: Node.GetNoSendTx, DirectMAccount: Node.DirectMAccount,
id: Node.id, ip: Node.ip, portweb: Node.portweb, port: Node.port, TransferCount: Node.TransferCount, GetTiming: GetTiming, ErrCountAll: Node.ErrCountAll, id: Node.id, ip: Node.ip, portweb: Node.portweb, port: Node.port, TransferCount: Node.TransferCount, GetTiming: GetTiming, ErrCountAll: Node.ErrCountAll,
LevelCount: Node.LevelCount, LevelEnum: Node.LevelEnum, TimeTransfer: GetStrOnlyTimeUTC(new Date(Node.LastTimeTransfer)), BlockProcessCount: Node.BlockProcessCount, LevelCount: Node.LevelCount, LevelEnum: Node.LevelEnum, TimeTransfer: global.GetStrOnlyTimeUTC(new Date(Node.LastTimeTransfer)), BlockProcessCount: Node.BlockProcessCount,
DeltaTime: Node.DeltaTime, DeltaTimeM: Node.DeltaTimeM, DeltaGlobTime: Node.DeltaGlobTime, PingNumber: Node.PingNumber, NextConnectDelta: Node.NextConnectDelta, DeltaTime: Node.DeltaTime, DeltaTimeM: Node.DeltaTimeM, DeltaGlobTime: Node.DeltaGlobTime, PingNumber: Node.PingNumber, NextConnectDelta: Node.NextConnectDelta,
NextGetNodesDelta: Node.NextGetNodesDelta, NextHotDelta: Node.NextHotDelta, Name: Node.Name, addrStr: Node.addrStr, CanHot: Node.CanHot, NextGetNodesDelta: Node.NextGetNodesDelta, NextHotDelta: Node.NextHotDelta, Name: Node.Name, addrStr: Node.addrStr, CanHot: Node.CanHot,
Active: Node.Active, Hot: Node.Hot, Info: Node.PrevInfo + Node.Info, InConnectArr: Node.WasAddToConnect, Level: Node.Level, TransferBlockNum: Node.TransferBlockNum, Active: Node.Active, Hot: Node.Hot, Info: Node.PrevInfo + Node.Info, InConnectArr: Node.WasAddToConnect, Level: Node.Level, TransferBlockNum: Node.TransferBlockNum,
@@ -939,7 +931,7 @@ HTTPCaller.GetBlockchainStat = function(Param) {
return Result; return Result;
}; };
HTTPCaller.GetAllCounters = function(Params, response) { HTTPCaller.GetAllCounters = function(Params, response) {
let Result = GET_STATS(); let Result = global.GET_STATS();
Result.result = 1; Result.result = 1;
Result.sessionid = sessionid; Result.sessionid = sessionid;
Result.STAT_MODE = global.STAT_MODE; Result.STAT_MODE = global.STAT_MODE;
@@ -976,9 +968,9 @@ function AddStatData(Params, Result, Prefix) {
}; };
HTTPCaller.SetStatMode = function(flag) { HTTPCaller.SetStatMode = function(flag) {
if (flag) if (flag)
StartCommonStat(); global.StartCommonStat();
global.STAT_MODE = flag; global.STAT_MODE = flag;
SAVE_CONST(true); global.SAVE_CONST(true);
global.TX_PROCESS.RunRPC("LOAD_CONST"); global.TX_PROCESS.RunRPC("LOAD_CONST");
return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE }; return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE };
}; };
@@ -995,7 +987,7 @@ HTTPCaller.ClearStat = function() {
return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE }; return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE };
}; };
HTTPCaller.RewriteAllTransactions = function(Param) { HTTPCaller.RewriteAllTransactions = function(Param) {
RewriteAllTransactions(); global.RewriteAllTransactions();
return { result: 1, sessionid: sessionid }; return { result: 1, sessionid: sessionid };
}; };
HTTPCaller.RewriteTransactions = function(Param) { HTTPCaller.RewriteTransactions = function(Param) {
@@ -1006,7 +998,7 @@ HTTPCaller.TruncateBlockChain = function(Param) {
var StartNum = global.SERVER.BlockNumDB - Param.BlockCount; var StartNum = global.SERVER.BlockNumDB - Param.BlockCount;
var MinBlock = global.DApps.Accounts.GetMinBlockAct(); var MinBlock = global.DApps.Accounts.GetMinBlockAct();
if (MinBlock > StartNum) { if (MinBlock > StartNum) {
global.ToLog("Cant Truncate BlockChain. Very long length. Max length=" + (SERVER.BlockNumDB - MinBlock), 0); global.ToLog("Cant Truncate BlockChain. Very long length. Max length=" + (global.SERVER.BlockNumDB - MinBlock), 0);
return { result: 0, sessionid: sessionid }; return { result: 0, sessionid: sessionid };
} }
global.SERVER.TruncateBlockDB(StartNum); global.SERVER.TruncateBlockDB(StartNum);
@@ -1026,8 +1018,8 @@ HTTPCaller.CleanChain = function(Param) {
return { result: 0, sessionid: sessionid }; return { result: 0, sessionid: sessionid };
}; };
HTTPCaller.GetArrStats = function(Keys, response) { HTTPCaller.GetArrStats = function(Keys, response) {
var arr = GET_STATDIAGRAMS(Keys); var arr = global.GET_STATDIAGRAMS(Keys);
let Result = { result: 1, sessionid: sessionid, arr: arr, STAT_MODE: global.STAT_MODE }; let Result: any = { result: 1, sessionid: sessionid, arr: arr, STAT_MODE: global.STAT_MODE };
if (!global.TX_PROCESS || !global.TX_PROCESS.RunRPC) if (!global.TX_PROCESS || !global.TX_PROCESS.RunRPC)
return Result; return Result;
var Keys2 = []; var Keys2 = [];
@@ -1051,7 +1043,7 @@ HTTPCaller.GetArrStats = function(Keys, response) {
return null; return null;
}; };
HTTPCaller.GetBlockChain = function(type) { HTTPCaller.GetBlockChain = function(type) {
if (!global.SERVER || !SERVER.LoadedChainList) { if (!global.SERVER || !global.SERVER.LoadedChainList) {
return { result: 0 }; return { result: 0 };
} }
var MainChains = {}; var MainChains = {};
@@ -1081,13 +1073,13 @@ HTTPCaller.GetBlockChain = function(type) {
for (var List of ArrMapMapLoaded) { for (var List of ArrMapMapLoaded) {
AddMapList(arrLoadedBlocks, type, List); AddMapList(arrLoadedBlocks, type, List);
} }
var obj = { var obj: any = {
LastCurrentBlockNum: global.SERVER.GetLastCorrectBlockNum(), CurrentBlockNum: global.SERVER.CurrentBlockNum, LoadedChainList: arrLoadedChainList, LastCurrentBlockNum: global.SERVER.GetLastCorrectBlockNum(), CurrentBlockNum: global.SERVER.CurrentBlockNum, LoadedChainList: arrLoadedChainList,
LoadedBlocks: arrLoadedBlocks, BlockChain: arrBlocks, port: global.SERVER.port, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, memoryUsage: process.memoryUsage(), LoadedBlocks: arrLoadedBlocks, BlockChain: arrBlocks, port: global.SERVER.port, DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME, memoryUsage: process.memoryUsage(),
IsDevelopAccount: IsDeveloperAccount(WALLET.PubKeyArr), LoadedChainCount: global.SERVER.LoadedChainList.length, StartLoadBlockTime: global.SERVER.StartLoadBlockTime, IsDevelopAccount: global.IsDeveloperAccount(global.WALLET.PubKeyArr), LoadedChainCount: global.SERVER.LoadedChainList.length, StartLoadBlockTime: global.SERVER.StartLoadBlockTime,
sessionid: sessionid, result: 1 sessionid: sessionid, result: 1
}; };
var obj2 = HTTPCaller.GetHotArray(); var obj2: any = HTTPCaller.GetHotArray();
obj.ArrTree = obj2.ArrTree; obj.ArrTree = obj2.ArrTree;
arrBlocks = []; arrBlocks = [];
arrLoadedChainList = []; arrLoadedChainList = [];
@@ -1116,9 +1108,9 @@ HTTPCaller.GetHistoryTransactions = function(Params) {
Item.Description = TR.Description; Item.Description = TR.Description;
} }
} }
var Result = { var Result: any = {
Value: { SumCOIN: Account.Value.SumCOIN, SumCENT: Account.Value.SumCENT }, Name: Account.Name, Currency: Account.Currency, Value: { SumCOIN: Account.Value.SumCOIN, SumCENT: Account.Value.SumCENT }, Name: Account.Name, Currency: Account.Currency,
MaxBlockNum: GetCurrentBlockNumByTime(), FIRST_TIME_BLOCK: FIRST_TIME_BLOCK, result: arr.length > 0 ? 1 : 0, History: arr MaxBlockNum: global.GetCurrentBlockNumByTime(), FIRST_TIME_BLOCK: global.FIRST_TIME_BLOCK, result: arr.length > 0 ? 1 : 0, History: arr
}; };
return Result; return Result;
} }
@@ -1126,10 +1118,10 @@ HTTPCaller.GetHistoryTransactions = function(Params) {
}; };
function GetCopyBlock(Block) { function GetCopyBlock(Block) {
var Result = { var Result: any = {
BlockNum: Block.BlockNum, bSave: Block.bSave, TreeHash: GetHexFromAddres(Block.TreeHash), AddrHash: GetHexFromAddres(Block.AddrHash), BlockNum: Block.BlockNum, bSave: Block.bSave, TreeHash: global.GetHexFromAddres(Block.TreeHash), AddrHash: global.GetHexFromAddres(Block.AddrHash),
PrevHash: GetHexFromAddres(Block.PrevHash), SumHash: GetHexFromAddres(Block.SumHash), SumPow: Block.SumPow, TrDataPos: Block.TrDataPos, PrevHash: global.GetHexFromAddres(Block.PrevHash), SumHash: global.GetHexFromAddres(Block.SumHash), SumPow: Block.SumPow, TrDataPos: Block.TrDataPos,
TrDataLen: Block.TrDataLen, SeqHash: GetHexFromAddres(Block.SeqHash), Hash: GetHexFromAddres(Block.Hash), Power: GetPowPower(Block.PowHash), TrDataLen: Block.TrDataLen, SeqHash: global.GetHexFromAddres(Block.SeqHash), Hash: global.GetHexFromAddres(Block.Hash), Power: global.GetPowPower(Block.PowHash),
TrCount: Block.TrCount, arrContent: Block.arrContent, TrCount: Block.TrCount, arrContent: Block.arrContent,
}; };
return Result; return Result;
@@ -1137,7 +1129,7 @@ function GetCopyBlock(Block) {
var AddrLength = 16; var AddrLength = 16;
function GetHexFromAddresShort(Hash) { function GetHexFromAddresShort(Hash) {
return GetHexFromAddres(Hash).substr(0, AddrLength); return global.GetHexFromAddres(Hash).substr(0, AddrLength);
}; };
function GetHexFromStrShort(Str) { function GetHexFromStrShort(Str) {
@@ -1162,27 +1154,27 @@ function CopyBlockDraw(Block, MainChains) {
var MinerID = 0; var MinerID = 0;
var MinerName = ""; var MinerName = "";
if (Block.AddrHash) { if (Block.AddrHash) {
var Num = ReadUintFromArr(Block.AddrHash, 0); var Num = global.ReadUintFromArr(Block.AddrHash, 0);
MinerID = Num; MinerID = Num;
var Item = global.DApps.Accounts.ReadState(Num); var Item = global.DApps.Accounts.ReadState(Num);
if (Item && Item.Name) if (Item && Item.Name)
MinerName = Item.Name.substr(0, 8); MinerName = Item.Name.substr(0, 8);
} }
var CheckPoint = 0; var CheckPoint = 0;
if (Block.BlockNum === CHECK_POINT.BlockNum) if (Block.BlockNum === global.CHECK_POINT.BlockNum)
CheckPoint = 1; CheckPoint = 1;
var Mining; var Mining;
if (SERVER.MiningBlock === Block) if (global.SERVER.MiningBlock === Block)
Mining = 1; Mining = 1;
else else
Mining = 0; Mining = 0;
GetGUID(Block); GetGUID(Block);
var Item = { Item = {
guid: Block.guid, Active: Block.Active, bSave: Block.bSave, Prepared: Block.Prepared, BlockNum: Block.BlockNum, Hash: GetHexFromAddresShort(Block.Hash), guid: Block.guid, Active: Block.Active, bSave: Block.bSave, Prepared: Block.Prepared, BlockNum: Block.BlockNum, Hash: GetHexFromAddresShort(Block.Hash),
SumHash: GetHexFromAddresShort(Block.SumHash), SeqHash: GetHexFromAddresShort(Block.SeqHash), TreeHash: GetHexFromAddresShort(Block.TreeHash), SumHash: GetHexFromAddresShort(Block.SumHash), SeqHash: GetHexFromAddresShort(Block.SeqHash), TreeHash: GetHexFromAddresShort(Block.TreeHash),
AddrHash: GetHexFromAddresShort(Block.AddrHash), MinerID: MinerID, MinerName: MinerName, Comment1: Block.Comment1, Comment2: Block.Comment2, AddrHash: GetHexFromAddresShort(Block.AddrHash), MinerID: MinerID, MinerName: MinerName, Comment1: Block.Comment1, Comment2: Block.Comment2,
SumPow: Block.SumPow, Info: Block.Info, TreeLoaded: Block.TreeEq, AddToLoad: Block.AddToLoad, LoadDB: Block.LoadDB, FindBlockDB: Block.FindBlockDB, SumPow: Block.SumPow, Info: Block.Info, TreeLoaded: Block.TreeEq, AddToLoad: Block.AddToLoad, LoadDB: Block.LoadDB, FindBlockDB: Block.FindBlockDB,
TrCount: Block.TrCount, ArrLength: 0, TrDataLen: Block.TrDataLen, Power: GetPowPower(Block.PowHash), CheckPoint: CheckPoint, Mining: Mining, TrCount: Block.TrCount, ArrLength: 0, TrDataLen: Block.TrDataLen, Power: global.GetPowPower(Block.PowHash), CheckPoint: CheckPoint, Mining: Mining,
TransferSize: Block.TransferSize, HasErr: Block.HasErr, TransferSize: Block.TransferSize, HasErr: Block.HasErr,
}; };
if (Block.chain) if (Block.chain)
@@ -1198,11 +1190,11 @@ function CopyBlockDraw(Block, MainChains) {
return Item; return Item;
}; };
function CopyChainDraw(Chain, bWasRecursive, bMain) { function CopyChainDraw(Chain, bWasRecursive, bMain?) {
if (!Chain) if (!Chain)
return Chain; return Chain;
GetGUID(Chain); GetGUID(Chain);
var Item = { var Item: any = {
guid: Chain.guid, id: Chain.id, chainid: Chain.id, bSave: Chain.LoadDB, FindBlockDB: Chain.FindBlockDB, GetFindDB: Chain.GetFindDB(), guid: Chain.guid, id: Chain.id, chainid: Chain.id, bSave: Chain.LoadDB, FindBlockDB: Chain.FindBlockDB, GetFindDB: Chain.GetFindDB(),
BlockNum: Chain.BlockNumStart, Hash: GetHexFromAddresShort(Chain.HashStart), Comment1: Chain.Comment1, Comment2: Chain.Comment2, BlockNum: Chain.BlockNumStart, Hash: GetHexFromAddresShort(Chain.HashStart), Comment1: Chain.Comment1, Comment2: Chain.Comment2,
StopSend: Chain.StopSend, SumPow: 0, Info: Chain.Info, IsSum: Chain.IsSum, Main: bMain, StopSend: Chain.StopSend, SumPow: 0, Info: Chain.Info, IsSum: Chain.IsSum, Main: bMain,
@@ -1231,7 +1223,7 @@ function CopyChainDraw(Chain, bWasRecursive, bMain) {
return Item; return Item;
}; };
function AddChainList(arrLoadedChainList, LoadedChainList, bMain) { function AddChainList(arrLoadedChainList, LoadedChainList, bMain?) {
for (var chain of LoadedChainList) { for (var chain of LoadedChainList) {
if (chain) { if (chain) {
arrLoadedChainList.push(CopyChainDraw(chain, false, bMain)); arrLoadedChainList.push(CopyChainDraw(chain, false, bMain));
@@ -1239,7 +1231,7 @@ function AddChainList(arrLoadedChainList, LoadedChainList, bMain) {
} }
}; };
function AddMapList(arrLoadedBlocks, type, MapMapLoaded, MainChains) { function AddMapList(arrLoadedBlocks, type, MapMapLoaded, MainChains?) {
for (var key in MapMapLoaded) { for (var key in MapMapLoaded) {
var map = MapMapLoaded[key]; var map = MapMapLoaded[key];
if (map) { if (map) {
@@ -1278,8 +1270,7 @@ function SendWebFile(response, name?, StrCookie?, bParsing?) {
if (StrCookie) if (StrCookie)
Headers['Set-Cookie'] = StrCookie; Headers['Set-Cookie'] = StrCookie;
response.writeHead(200, Headers); response.writeHead(200, Headers);
} } else {
else {
if (StrContentType === "application/font-woff") { if (StrContentType === "application/font-woff") {
response.writeHead(200, { 'Content-Type': StrContentType, 'Access-Control-Allow-Origin': "*" }); response.writeHead(200, { 'Content-Type': StrContentType, 'Access-Control-Allow-Origin': "*" });
} }
@@ -1287,7 +1278,7 @@ function SendWebFile(response, name?, StrCookie?, bParsing?) {
response.writeHead(200, { 'Content-Type': StrContentType }); response.writeHead(200, { 'Content-Type': StrContentType });
} }
if (bParsing && StrContentType === "text/html") { if (bParsing && StrContentType === "text/html") {
var data = GetFileHTMLWithParsing(Path); data = GetFileHTMLWithParsing(Path);
response.end(data); response.end(data);
return; return;
} }
@@ -1322,11 +1313,13 @@ function ParseTag(Str, TagName, bEdit) {
if (index >= 0) { if (index >= 0) {
var index2 = Str.indexOf("}}", index + 3 + TagName.length); var index2 = Str.indexOf("}}", index + 3 + TagName.length);
if (index2 < 0) { if (index2 < 0) {
//@ts-ignore
global.ToLog("Error teg " + TagName + " in " + Path); global.ToLog("Error teg " + TagName + " in " + Path);
break; break;
} }
var Delta = index2 - index; var Delta = index2 - index;
if (Delta > 210) { if (Delta > 210) {
//@ts-ignore
global.ToLog("Error length (more 200) teg File in " + Path); global.ToLog("Error length (more 200) teg File in " + Path);
break; break;
} }
@@ -1383,7 +1376,7 @@ function SaveFileSimple(Path, Str) {
global.SendHTMLMap = {}; global.SendHTMLMap = {};
var Key = "GetFileSimple-" + Path; var Key = "GetFileSimple-" + Path;
global.SendHTMLMap[Key] = Str; global.SendHTMLMap[Key] = Str;
SaveToFile(Path, Str); global.SaveToFile(Path, Str);
}; };
global.SendHTMLMap = {}; global.SendHTMLMap = {};
global.SendWebFile = SendWebFile; global.SendWebFile = SendWebFile;
@@ -1394,7 +1387,7 @@ global.SaveFileSimple = SaveFileSimple;
function GetStrTime(now) { function GetStrTime(now) {
if (!now) if (!now)
now = GetCurrentTime(0); now = global.GetCurrentTime(0);
var Str = "" + now.getHours().toStringZ(2); var Str = "" + now.getHours().toStringZ(2);
Str = Str + ":" + now.getMinutes().toStringZ(2); Str = Str + ":" + now.getMinutes().toStringZ(2);
Str = Str + ":" + now.getSeconds().toStringZ(2); Str = Str + ":" + now.getSeconds().toStringZ(2);
@@ -1499,7 +1492,7 @@ if (global.HTTP_PORT_NUMBER) {
global.ToLog("Path: " + Path, 0); global.ToLog("Path: " + Path, 0);
} }
if (CheckPassword && global.HTTP_PORT_PASSWORD) { if (CheckPassword && global.HTTP_PORT_PASSWORD) {
var StrPort = ""; var StrPort: any = "";
if (global.HTTP_PORT_NUMBER !== 80) if (global.HTTP_PORT_NUMBER !== 80)
StrPort = global.HTTP_PORT_NUMBER; StrPort = global.HTTP_PORT_NUMBER;
var cookies = parseCookies(request.headers.cookie); var cookies = parseCookies(request.headers.cookie);
@@ -1517,7 +1510,7 @@ if (global.HTTP_PORT_NUMBER) {
if (!nonce) if (!nonce)
nonce = 0; nonce = 0;
} }
var hash = ClientHex(cookies_token + "-" + global.HTTP_PORT_PASSWORD, nonce); var hash = global.ClientHex(cookies_token + "-" + global.HTTP_PORT_PASSWORD, nonce);
if (hash === cookies_hash) { if (hash === cookies_hash) {
ClientTokenMap[cookies_token] = 1; ClientTokenMap[cookies_token] = 1;
} }
@@ -1563,9 +1556,9 @@ if (global.HTTP_PORT_NUMBER) {
else { else {
DoCommand(response, Type, Path, params, remoteAddress); DoCommand(response, Type, Path, params, remoteAddress);
} }
}).listen(port, LISTEN_IP, function() { }).listen(port, global.LISTEN_IP, function() {
global.HTTP_SERVER_START_OK = 1; global.HTTP_SERVER_START_OK = 1;
global.ToLog("Run HTTP-server on " + LISTEN_IP + ":" + port); global.ToLog("Run HTTP-server on " + global.LISTEN_IP + ":" + port);
}); });
HTTPServer.on('error', function(err) { HTTPServer.on('error', function(err) {
global.ToError("H##3"); global.ToError("H##3");
@@ -1654,7 +1647,7 @@ function GetEventArray(SmartNum, Context) {
return ArrRet; return ArrRet;
}; };
HTTPCaller.GetHashRate = function(ArrParams) { HTTPCaller.GetHashRate = function(ArrParams) {
var CurBlockNum = GetCurrentBlockNumByTime(); var CurBlockNum = global.GetCurrentBlockNumByTime();
var ResArr = []; var ResArr = [];
for (var i = 0; i < ArrParams.length; i++) { for (var i = 0; i < ArrParams.length; i++) {
var Item = ArrParams[i]; var Item = ArrParams[i];
@@ -1693,7 +1686,7 @@ HTTPCaller.GetHashRate = function(ArrParams) {
var Block = global.SERVER.ReadBlockHeaderDB(Num + d); var Block = global.SERVER.ReadBlockHeaderDB(Num + d);
if (Block) { if (Block) {
CountSum++; CountSum++;
Sum += GetPowPower(Block.PowHash); Sum += global.GetPowPower(Block.PowHash);
} }
} }
if (!CountSum) if (!CountSum)

View File

@@ -14,7 +14,6 @@ import './constant'
import './log' import './log'
let { let {
CONSENSUS_PERIOD_TIME,
ToLog, ToLog,
TO_ERROR_LOG, TO_ERROR_LOG,
SaveToFile, SaveToFile,
@@ -82,7 +81,7 @@ require('../HTML/JS/sha3.js');
require('../HTML/JS/coinlib.js'); require('../HTML/JS/coinlib.js');
global.GetCurrentBlockNumByTime = function GetCurrentBlockNumByTime() { global.GetCurrentBlockNumByTime = function GetCurrentBlockNumByTime() {
var CurTimeNum = global.GetCurrentTime() - global.FIRST_TIME_BLOCK; var CurTimeNum = global.GetCurrentTime() - global.FIRST_TIME_BLOCK;
var StartBlockNum = Math.trunc((CurTimeNum + CONSENSUS_PERIOD_TIME) / CONSENSUS_PERIOD_TIME); var StartBlockNum = Math.trunc((CurTimeNum + global.CONSENSUS_PERIOD_TIME) / global.CONSENSUS_PERIOD_TIME);
return StartBlockNum; return StartBlockNum;
}; };
global.DelDir = function(Path) { global.DelDir = function(Path) {
@@ -168,7 +167,7 @@ global.LoadParams = function(filename, DefaultValue) {
return DefaultValue; return DefaultValue;
}; };
global.SaveParams = function(filename, data) { global.SaveParams = function(filename, data) {
SaveToFile(filename, Buffer.from(JSON.stringify(data, undefined, 4))); global.SaveToFile(filename, Buffer.from(JSON.stringify(data, undefined, 4)));
}; };
global.StartTime = function() { global.StartTime = function() {
global.TimeStart = global.GetCurrentTime(); global.TimeStart = global.GetCurrentTime();

View File

@@ -13,14 +13,8 @@ import './constant'
import './log-strict' import './log-strict'
let { let {
GetDataPath,
START_PORT_NUMBER, START_PORT_NUMBER,
CheckSizeLogFile, CheckSizeLogFile,
ToError,
ToLog,
GetCurrentTime,
DEBUG_MODE,
SERVER
} = global } = global
var file_name_info = global.GetDataPath("info.log"), file_name_infoPrev = global.GetDataPath("info-prev.log"); var file_name_info = global.GetDataPath("info.log"), file_name_infoPrev = global.GetDataPath("info-prev.log");
@@ -172,7 +166,7 @@ global.PrepareStatEverySecond = function() {
AddToStatContext(CONTEXT_STATS, e, t); AddToStatContext(CONTEXT_STATS, e, t);
} }
}, global.GET_STATDIAGRAMS = function(e) { }, global.GET_STATDIAGRAMS = function(e) {
GetCurrentTime(); global.GetCurrentTime();
var t = GetCurrentStatIndex(); var t = GetCurrentStatIndex();
if (!e || !e.length) if (!e || !e.length)
return []; return [];
@@ -219,8 +213,8 @@ global.PrepareStatEverySecond = function() {
}, global.ClearCommonStat = function() { }, global.ClearCommonStat = function() {
StartStatTime = void (CurStatIndex = 0), CONTEXT_STATS = { Total: {}, Interval: [] }, CONTEXT_ERRORS = { Total: {}, Interval: [] }, StartStatTime = void (CurStatIndex = 0), CONTEXT_STATS = { Total: {}, Interval: [] }, CONTEXT_ERRORS = { Total: {}, Interval: [] },
global.HASH_RATE = 0, global.SERVER.ClearStat(); global.HASH_RATE = 0, global.SERVER.ClearStat();
}, global.ResizeArrAvg = ResizeArrAvg, global.ResizeArrMax = ResizeArrMax, DEBUG_MODE ? global.TO_DEBUG_LOG = function(e, t, r, o) { }, global.ResizeArrAvg = ResizeArrAvg, global.ResizeArrMax = ResizeArrMax, global.DEBUG_MODE ? global.TO_DEBUG_LOG = function(e, t, r, o) {
DEBUG_MODE && ("rinfo" === t && (e += " from: " + r.address + ":" + r.port + " - " + o.length), global.ToLog(e)); global.DEBUG_MODE && ("rinfo" === t && (e += " from: " + r.address + ":" + r.port + " - " + o.length), global.ToLog(e));
} : global.TO_DEBUG_LOG = function(e, t, r, o) { } : global.TO_DEBUG_LOG = function(e, t, r, o) {
}, global.GetStrOnlyTime = function(e) { }, global.GetStrOnlyTime = function(e) {
if (!global.GetCurrentTime) if (!global.GetCurrentTime)

View File

@@ -12,6 +12,7 @@
require("./library.js"); require("./library.js");
const net = require("net"); const net = require("net");
var ConnectIDCount = 1; var ConnectIDCount = 1;
let RBTree = global.RBTree;
module.exports = class CNode { module.exports = class CNode {
addrStr addrStr
ip ip
@@ -81,6 +82,16 @@ module.exports = class CNode {
SendPacketNum SendPacketNum
Socket Socket
Socket2 Socket2
ReconnectFromServer
SecretForReconnect
Self
addrStrTemp
DoubleConnection
PubKey
addrArr
SocketStart
WaitConnectFromServer
WaitConnectIP
constructor(addrStr, ip, port) { constructor(addrStr, ip, port) {
this.addrStr = addrStr this.addrStr = addrStr
this.ip = ip.trim() this.ip = ip.trim()
@@ -131,7 +142,7 @@ module.exports = class CNode {
this.StartTimeGetNodes = 0 this.StartTimeGetNodes = 0
this.NextGetNodesDelta = 1000 this.NextGetNodesDelta = 1000
this.PingStart = 0 this.PingStart = 0
this.NextPing = MIN_PERIOD_PING this.NextPing = global.MIN_PERIOD_PING
this.SendBlockArr = [] this.SendBlockArr = []
this.LoadBlockArr = [] this.LoadBlockArr = []
this.SendBlockCount = 0 this.SendBlockCount = 0
@@ -175,7 +186,7 @@ module.exports = class CNode {
NODE.SocketStart = Date.now() NODE.SocketStart = Date.now()
NODE.Socket = net.createConnection(NODE.port, NODE.ip, function() { NODE.Socket = net.createConnection(NODE.port, NODE.ip, function() {
if (NODE.Socket) { if (NODE.Socket) {
socketInit(NODE.Socket, "s") global.socketInit(NODE.Socket, "s")
global.AddNodeInfo(NODE, "OK connected *" + NODE.Socket.ConnectID) global.AddNodeInfo(NODE, "OK connected *" + NODE.Socket.ConnectID)
NODE.Socket.ConnectToServer = true NODE.Socket.ConnectToServer = true
SetSocketStatus(NODE.Socket, 2) SetSocketStatus(NODE.Socket, 2)
@@ -194,7 +205,7 @@ module.exports = class CNode {
NODE.SocketStart = Date.now() NODE.SocketStart = Date.now()
NODE.Socket2 = net.createConnection(NODE.port, NODE.ip, function() { NODE.Socket2 = net.createConnection(NODE.port, NODE.ip, function() {
if (NODE.Socket2) { if (NODE.Socket2) {
socketInit(NODE.Socket2, "s") global.socketInit(NODE.Socket2, "s")
global.AddNodeInfo(NODE, "OK Reconnected *" + NODE.Socket2.ConnectID) global.AddNodeInfo(NODE, "OK Reconnected *" + NODE.Socket2.ConnectID)
NODE.Socket2.ConnectToServer = true NODE.Socket2.ConnectToServer = true
SetSocketStatus(NODE.Socket2, 2) SetSocketStatus(NODE.Socket2, 2)
@@ -287,7 +298,7 @@ module.exports = class CNode {
global.CloseSocket(SOCKET, Buf ? "Method=" + Buf.Method + ":" + Str : "=CLIENT ON DATA=") global.CloseSocket(SOCKET, Buf ? "Method=" + Buf.Method + ":" + Str : "=CLIENT ON DATA=")
} }
else { else {
socketRead(Socket, data) global.socketRead(Socket, data)
global.SERVER.OnGetFromTCP(NODE, Socket, data) global.SERVER.OnGetFromTCP(NODE, Socket, data)
} }
}) })
@@ -323,13 +334,13 @@ module.exports = class CNode {
var Info = this.GetPOWClientData(0); var Info = this.GetPOWClientData(0);
Info.Reconnect = 1 Info.Reconnect = 1
Info.SecretForReconnect = Node.SecretForReconnect Info.SecretForReconnect = Node.SecretForReconnect
var BufWrite = global.BufLib.GetBufferFromObject(Info, FORMAT_POW_TO_SERVER, 1200, {}); var BufWrite = global.BufLib.GetBufferFromObject(Info, global.FORMAT_POW_TO_SERVER, 1200, {});
var BufAll = global.SERVER.GetBufFromData("POW_CONNECT7", BufWrite, 1); var BufAll = global.SERVER.GetBufFromData("POW_CONNECT7", BufWrite, 1);
Socket.write(BufAll) Socket.write(BufAll)
return 1; return 1;
} }
try { try {
var Buf = global.BufLib.GetObjectFromBuffer(data, FORMAT_POW_TO_CLIENT, {}); var Buf = global.BufLib.GetObjectFromBuffer(data, global.FORMAT_POW_TO_CLIENT, {});
} }
catch (e) { catch (e) {
global.SERVER.Sendglobal.CloseSocket(Socket, "FORMAT_POW_TO_CLIENT") global.SERVER.Sendglobal.CloseSocket(Socket, "FORMAT_POW_TO_CLIENT")
@@ -341,7 +352,7 @@ module.exports = class CNode {
global.SERVER.Sendglobal.CloseSocket(Socket, "SELF") global.SERVER.Sendglobal.CloseSocket(Socket, "SELF")
return; return;
} }
var addrStr = GetHexFromAddres(Buf.addrArr); var addrStr = global.GetHexFromAddres(Buf.addrArr);
if (!Node.StartFindList && addrStr !== Node.addrStr) { if (!Node.StartFindList && addrStr !== Node.addrStr) {
global.AddNodeInfo(Node, "END: CHANGED ADDR: " + Node.addrStr.substr(0, 16) + "->" + addrStr.substr(0, 16)) global.AddNodeInfo(Node, "END: CHANGED ADDR: " + Node.addrStr.substr(0, 16) + "->" + addrStr.substr(0, 16))
global.SERVER.Sendglobal.CloseSocket(Socket, "ADDRESS_HAS_BEEN_CHANGED") global.SERVER.Sendglobal.CloseSocket(Socket, "ADDRESS_HAS_BEEN_CHANGED")
@@ -354,9 +365,9 @@ module.exports = class CNode {
} }
var Result = false; var Result = false;
if (Buf.PubKeyType === 2 || Buf.PubKeyType === 3) { if (Buf.PubKeyType === 2 || Buf.PubKeyType === 3) {
Result = secp256k1.verify(Buffer.from(shaarr(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr))) Result = global.secp256k1.verify(Buffer.from(global.shaarr(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr)))
if (!Result) { if (!Result) {
Result = secp256k1.verify(Buffer.from(sha3(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr))) Result = global.secp256k1.verify(Buffer.from(global.sha3(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr)))
} }
} }
if (!Result) { if (!Result) {
@@ -365,7 +376,7 @@ module.exports = class CNode {
global.SERVER.Sendglobal.CloseSocket(Socket, "ERROR_SIGN_SERVER") global.SERVER.Sendglobal.CloseSocket(Socket, "ERROR_SIGN_SERVER")
return; return;
} }
if (Buf.MIN_POWER_POW_HANDSHAKE > 1 + MIN_POWER_POW_HANDSHAKE) { if (Buf.MIN_POWER_POW_HANDSHAKE > 1 + global.MIN_POWER_POW_HANDSHAKE) {
global.ToLog("END: BIG_MIN_POWER_POW_HANDSHAKE ADDR: " + addrStr.substr(0, 16) + " from ip: " + Socket.remoteAddress) global.ToLog("END: BIG_MIN_POWER_POW_HANDSHAKE ADDR: " + addrStr.substr(0, 16) + " from ip: " + Socket.remoteAddress)
return 0; return 0;
} }
@@ -384,18 +395,18 @@ module.exports = class CNode {
Node.PubKey = Buffer.from([Buf.PubKeyType].concat(Buf.addrArr)) Node.PubKey = Buffer.from([Buf.PubKeyType].concat(Buf.addrArr))
Node.addrArr = Buf.addrArr Node.addrArr = Buf.addrArr
Node.addrStr = addrStr Node.addrStr = addrStr
if (global.CompareArr(SERVER.addrArr, Node.addrArr) === 0) { if (global.CompareArr(global.SERVER.addrArr, Node.addrArr) === 0) {
Node.Self = 1 Node.Self = 1
return 0; return 0;
} }
var Hash = shaarr2(Buf.addrArr, Buf.HashRND); var Hash = global.shaarr2(Buf.addrArr, Buf.HashRND);
var nonce = CreateNoncePOWExternMinPower(Hash, 0, Buf.MIN_POWER_POW_HANDSHAKE); var nonce = global.CreateNoncePOWExternMinPower(Hash, 0, Buf.MIN_POWER_POW_HANDSHAKE);
var Info; var Info;
if (WALLET.WalletOpen && IsDeveloperAccount(WALLET.PubKeyArr)) { if (global.WALLET.WalletOpen && global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
Info = this.GetPOWClientData(0) Info = this.GetPOWClientData(0)
Info.Reconnect = 255 Info.Reconnect = 255
Info.Sign = secp256k1.sign(SHA3BUF(Hash), WALLET.KeyPair.getPrivateKey('')).signature Info.Sign = global.secp256k1.sign(global.SHA3BUF(Hash), global.WALLET.KeyPair.getPrivateKey('')).signature
Result = CheckDevelopSign(Hash, Info.Sign) Result = global.CheckDevelopSign(Hash, Info.Sign)
if (!Result) { if (!Result) {
throw "ERROR DEVELOPSIGN!"; throw "ERROR DEVELOPSIGN!";
} }
@@ -403,19 +414,19 @@ module.exports = class CNode {
else { else {
Info = this.GetPOWClientData(nonce) Info = this.GetPOWClientData(nonce)
Info.PubKeyType = global.SERVER.PubKeyType Info.PubKeyType = global.SERVER.PubKeyType
Info.Sign = secp256k1.sign(Buffer.from(Hash), global.SERVER.KeyPair.getPrivateKey('')).signature Info.Sign = global.secp256k1.sign(Buffer.from(Hash), global.SERVER.KeyPair.getPrivateKey('')).signature
} }
var BufWrite = global.BufLib.GetBufferFromObject(Info, FORMAT_POW_TO_SERVER, 1200, {}); var BufWrite = global.BufLib.GetBufferFromObject(Info, global.FORMAT_POW_TO_SERVER, 1200, {});
var BufAll = global.SERVER.GetBufFromData("POW_CONNECT6", BufWrite, 1); var BufAll = global.SERVER.GetBufFromData("POW_CONNECT6", BufWrite, 1);
Socket.write(BufAll) Socket.write(BufAll)
return 1; return 1;
} }
GetPOWClientData(nonce) { GetPOWClientData(nonce) {
var Node = this; var Node = this;
var Info = {}; var Info: any = {};
Info.DEF_NETWORK = GetNetworkName() Info.DEF_NETWORK = global.GetNetworkName()
Info.DEF_VERSION = DEF_VERSION Info.DEF_VERSION = global.DEF_VERSION
Info.DEF_CLIENT = DEF_CLIENT Info.DEF_CLIENT = global.DEF_CLIENT
Info.addrArr = global.SERVER.addrArr Info.addrArr = global.SERVER.addrArr
Info.ToIP = Node.ip Info.ToIP = Node.ip
Info.ToPort = Node.port Info.ToPort = Node.port
@@ -426,7 +437,7 @@ module.exports = class CNode {
Info.SendBytes = 0 Info.SendBytes = 0
Info.SecretForReconnect = [] Info.SecretForReconnect = []
Info.Reserv = [] Info.Reserv = []
if (GrayConnect()) if (global.GrayConnect())
Info.GrayConnect = 1 Info.GrayConnect = 1
return Info; return Info;
} }
@@ -480,7 +491,7 @@ global.CloseSocket = function(Socket, StrError?, bHide?) {
function SetSocketStatus(Socket, Status) { function SetSocketStatus(Socket, Status) {
if (Socket && Socket.SocketStatus !== Status) { if (Socket && Socket.SocketStatus !== Status) {
if (Status === 100 && (Socket.SocketStatus !== 3 && Socket.SocketStatus !== 200)) { if (Status === 100 && (Socket.SocketStatus !== 3 && Socket.SocketStatus !== 200)) {
ToLogTrace("===================ERROR=================== " + Status); global.ToLogTrace("===================ERROR=================== " + Status);
return; return;
} }
if (Status === 100 && Socket.Node) if (Status === 100 && Socket.Node)
@@ -494,7 +505,7 @@ function GetSocketStatus(Socket) {
if (Socket && Socket.SocketStatus) { if (Socket && Socket.SocketStatus) {
if (Socket.SocketStatus !== 100) { if (Socket.SocketStatus !== 100) {
var Delta = Date.now() - Socket.TimeStatus; var Delta = Date.now() - Socket.TimeStatus;
if (Delta > MAX_WAIT_PERIOD_FOR_STATUS) { if (Delta > global.MAX_WAIT_PERIOD_FOR_STATUS) {
global.CloseSocket(Socket, "MAX_WAIT_PERIOD_FOR_STATUS = " + Socket.SocketStatus + " time = " + Delta); global.CloseSocket(Socket, "MAX_WAIT_PERIOD_FOR_STATUS = " + Socket.SocketStatus + " time = " + Delta);
} }
} }
@@ -543,7 +554,7 @@ function NodeName(Node) {
return ""; return "";
if (Node.Name) if (Node.Name)
return Node.Name; return Node.Name;
if (LOCAL_RUN) if (global.LOCAL_RUN)
return "" + Node.port; return "" + Node.port;
else { else {
return "" + Node.ip + ":" + Node.addrStr.substr(0, 6); return "" + Node.ip + ":" + Node.addrStr.substr(0, 6);
@@ -583,7 +594,7 @@ function AddNodeInfo(Node, Str, bSet) {
Node.Info = ""; Node.Info = "";
} }
{ {
var timesend = GetStrOnlyTimeUTC(); var timesend = global.GetStrOnlyTimeUTC();
Str = timesend + " " + Str; Str = timesend + " " + Str;
Node.Info += Str + "\n"; Node.Info += Str + "\n";
} }

View File

@@ -11,14 +11,19 @@
"use strict"; "use strict";
module.exports = class CRest extends require("./db/block-db") module.exports = class CRest extends require("./db/block-db")
{ {
LoadRestContext
BlockNumDB
BlockNumDBMin
UseTruncateBlockDB
ContextSendLoadToBegin
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
} }
CheckSyncRest() { CheckSyncRest() {
var BlockNumTime = GetCurrentBlockNumByTime(); var BlockNumTime = global.GetCurrentBlockNumByTime();
var Delta = BlockNumTime - this.BlockNumDB; var Delta = BlockNumTime - this.BlockNumDB;
if (Delta > REST_START_COUNT + DELTA_BLOCK_ACCOUNT_HASH + 500) { if (Delta > global.REST_START_COUNT + global.DELTA_BLOCK_ACCOUNT_HASH + 500) {
var BlockNumRest = GetCurrentRestNum(REST_START_COUNT + DELTA_BLOCK_ACCOUNT_HASH + 500); var BlockNumRest = GetCurrentRestNum(global.REST_START_COUNT + global.DELTA_BLOCK_ACCOUNT_HASH + 500);
if (this.BlockNumDB >= this.BlockNumDBMin && this.BlockNumDB <= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) { if (this.BlockNumDB >= this.BlockNumDBMin && this.BlockNumDB <= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) {
} }
else else
@@ -29,8 +34,8 @@ module.exports = class CRest extends require("./db/block-db")
return; return;
} }
this.LoadRestContext = { this.LoadRestContext = {
Mode: 0, BlockNum: BlockNumRest, BlockNumRest: BlockNumRest, WasDelta: Delta, BlockNumProof: BlockNumRest + DELTA_BLOCK_ACCOUNT_HASH, Mode: 0, BlockNum: BlockNumRest, BlockNumRest: BlockNumRest, WasDelta: Delta, BlockNumProof: BlockNumRest + global.DELTA_BLOCK_ACCOUNT_HASH,
CountProof: COUNT_BLOCKS_FOR_LOAD, StartTimeHistory: Date.now(), MaxTimeOut: 600 * 1000, LoopSyncRest: 1, SendGetHeaderCount: 0, CountProof: global.COUNT_BLOCKS_FOR_LOAD, StartTimeHistory: Date.now(), MaxTimeOut: 600 * 1000, LoopSyncRest: 1, SendGetHeaderCount: 0,
ReceiveHeaderCount: 0, ArrProof: [], MapSend: {} ReceiveHeaderCount: 0, ArrProof: [], MapSend: {}
} }
for (var i = 0; i < this.NodesArr.length; i++) { for (var i = 0; i < this.NodesArr.length; i++) {
@@ -60,7 +65,7 @@ module.exports = class CRest extends require("./db/block-db")
Context.SendGetHeaderCount++ Context.SendGetHeaderCount++
break; break;
} }
if (Context.ReceiveHeaderCount >= COUNT_NODE_PROOF) { if (Context.ReceiveHeaderCount >= global.COUNT_NODE_PROOF) {
Context.Mode = 2 Context.Mode = 2
global.ToLog("Next mode: " + Context.Mode + " Receive:" + Context.ReceiveHeaderCount + "/" + Context.SendGetHeaderCount, 2) global.ToLog("Next mode: " + Context.Mode + " Receive:" + Context.ReceiveHeaderCount + "/" + Context.SendGetHeaderCount, 2)
} }
@@ -133,13 +138,13 @@ module.exports = class CRest extends require("./db/block-db")
F: function(Info) { F: function(Info) {
if (Context.TxProof) if (Context.TxProof)
return; return;
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, FORMAT_BLOCK_TRANSFER, WRK_BLOCK_TRANSFER); var Data = global.BufLib.GetObjectFromBuffer(Info.Data, global.FORMAT_BLOCK_TRANSFER, global.WRK_BLOCK_TRANSFER);
Info.Data = undefined Info.Data = undefined
if (Data.BlockNum !== BlockProof.BlockNum || global.CompareArr(Data.TreeHash, BlockProof.TreeHash) !== 0) { if (Data.BlockNum !== BlockProof.BlockNum || global.CompareArr(Data.TreeHash, BlockProof.TreeHash) !== 0) {
global.ToLog("Error get proof block from " + NodeName(Item.Node), 2) global.ToLog("Error get proof block from " + NodeName(Item.Node), 2)
return; return;
} }
var TreeHash = CalcTreeHashFromArrBody(Data.BlockNum, Data.arrContent); var TreeHash = global.CalcTreeHashFromArrBody(Data.BlockNum, Data.arrContent);
if (global.CompareArr(BlockProof.TreeHash, TreeHash) !== 0) { if (global.CompareArr(BlockProof.TreeHash, TreeHash) !== 0) {
global.ToLog("Error TreeHash in proof block from " + NodeName(Item.Node), 2) global.ToLog("Error TreeHash in proof block from " + NodeName(Item.Node), 2)
return; return;
@@ -148,9 +153,9 @@ module.exports = class CRest extends require("./db/block-db")
var FindTx = undefined; var FindTx = undefined;
for (var n = 0; n < Data.arrContent.length; n++) { for (var n = 0; n < Data.arrContent.length; n++) {
var Body = Data.arrContent[n]; var Body = Data.arrContent[n];
if (Body[0] === TYPE_TRANSACTION_ACC_HASH) { if (Body[0] === global.TYPE_TRANSACTION_ACC_HASH) {
try { try {
FindTx = global.BufLib.GetObjectFromBuffer(Body, FORMAT_ACCOUNT_HASH3, {}) FindTx = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_ACCOUNT_HASH3, {})
} }
catch (e) { catch (e) {
global.ToLog("Error parsing Body[" + n + "] block proof: " + e, 2) global.ToLog("Error parsing Body[" + n + "] block proof: " + e, 2)
@@ -167,16 +172,16 @@ module.exports = class CRest extends require("./db/block-db")
Context.AccTaskList = [] Context.AccTaskList = []
Context.AccTaskFinished = 0 Context.AccTaskFinished = 0
var AccCount = FindTx.AccountMax + 1; var AccCount = FindTx.AccountMax + 1;
for (var n = 0; n < AccCount; n += MAX_ACCOUNTS_TRANSFER) { for (var n = 0; n < AccCount; n += global.MAX_ACCOUNTS_TRANSFER) {
var Task = { StartNum: n, Count: MAX_ACCOUNTS_TRANSFER, Time: 0, MapSend: {} }; var Task = { StartNum: n, Count: global.MAX_ACCOUNTS_TRANSFER, Time: 0, MapSend: {} };
if (Task.StartNum + Task.Count > AccCount) if (Task.StartNum + Task.Count > AccCount)
Task.Count = AccCount - Task.StartNum Task.Count = AccCount - Task.StartNum
Context.AccTaskList.push(Task) Context.AccTaskList.push(Task)
} }
Context.SmartTaskList = [] Context.SmartTaskList = []
Context.SmartTaskFinished = 0 Context.SmartTaskFinished = 0
for (var n = 0; n < FindTx.SmartCount; n += MAX_SMARTS_TRANSFER) { for (var n = 0; n < FindTx.SmartCount; n += global.MAX_SMARTS_TRANSFER) {
var Task = { StartNum: n, Count: MAX_SMARTS_TRANSFER, Time: 0, MapSend: {} }; var Task = { StartNum: n, Count: global.MAX_SMARTS_TRANSFER, Time: 0, MapSend: {} };
if (Task.StartNum + Task.Count > FindTx.SmartCount) if (Task.StartNum + Task.Count > FindTx.SmartCount)
Task.Count = FindTx.SmartCount - Task.StartNum Task.Count = FindTx.SmartCount - Task.StartNum
Context.SmartTaskList.push(Task) Context.SmartTaskList.push(Task)
@@ -221,7 +226,7 @@ module.exports = class CRest extends require("./db/block-db")
global.ToLog("ERROR Version Result GETREST Num:" + Task.StartNum + " from " + NodeName(Info.Node), 2) global.ToLog("ERROR Version Result GETREST Num:" + Task.StartNum + " from " + NodeName(Info.Node), 2)
return; return;
} }
if (CompareArrL(Data.ProofHash, Context.TxProof.AccHash) !== 0) { if (global.CompareArrL(Data.ProofHash, Context.TxProof.AccHash) !== 0) {
global.ToLog("ERROR PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(Data.ProofHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node), global.ToLog("ERROR PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(Data.ProofHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
2) 2)
return; return;
@@ -230,8 +235,8 @@ module.exports = class CRest extends require("./db/block-db")
for (var i = 0; i < Data.Arr.length; i++) { for (var i = 0; i < Data.Arr.length; i++) {
ArrM[i] = global.shaarr(Data.Arr[i]) ArrM[i] = global.shaarr(Data.Arr[i])
} }
var GetHash = CheckMerkleProof(Data.ProofArrL, ArrM, Data.ProofArrR); var GetHash = global.CheckMerkleProof(Data.ProofArrL, ArrM, Data.ProofArrR);
if (CompareArrL(GetHash, Context.TxProof.AccHash) !== 0) { if (global.CompareArrL(GetHash, Context.TxProof.AccHash) !== 0) {
global.ToLog("ERROR CALC PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(GetHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node), global.ToLog("ERROR CALC PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(GetHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
2) 2)
return; return;
@@ -302,7 +307,7 @@ module.exports = class CRest extends require("./db/block-db")
if (ErrSmartNum > 0) { if (ErrSmartNum > 0) {
var Str = "Error hash in smart num: " + ErrSmartNum; var Str = "Error hash in smart num: " + ErrSmartNum;
global.ToLog(Str, 2) global.ToLog(Str, 2)
var t = Math.trunc(ErrSmartNum / MAX_SMARTS_TRANSFER); var t = Math.trunc(ErrSmartNum / global.MAX_SMARTS_TRANSFER);
var Task = Context.SmartTaskList[t]; var Task = Context.SmartTaskList[t];
if (!Task) { if (!Task) {
global.ToLog("error task number: " + t) global.ToLog("error task number: " + t)
@@ -444,7 +449,7 @@ function CheckHashSmarts(LastSumHash) {
Item.SumHash = []; Item.SumHash = [];
var Buf = global.BufLib.GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, WorkStruct); var Buf = global.BufLib.GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, WorkStruct);
var Hash = global.sha3(Buf); var Hash = global.sha3(Buf);
var SumHash = sha3arr2(PrevItem.SumHash, Hash); var SumHash = global.sha3arr2(PrevItem.SumHash, Hash);
if (global.CompareArr(SumHash, WasSumHash) !== 0) if (global.CompareArr(SumHash, WasSumHash) !== 0)
return Num; return Num;
Item = PrevItem; Item = PrevItem;

View File

@@ -9,65 +9,59 @@
*/ */
function DoRest(r,t,e) function DoRest(r, t, e) {
{ var u = r.Arr[0], o = Math.floor(e / global.REST_BLOCK_SCALE);
var u = r.Arr[0], o = Math.floor(e / REST_BLOCK_SCALE); if (o !== Math.floor((u.BlockNum - 1) / global.REST_BLOCK_SCALE)) {
if(o !== Math.floor((u.BlockNum - 1) / REST_BLOCK_SCALE)) for (var n = GetRestArr(o), l = [], a = n.length - 2; 0 <= a; a--)
{ l.push(n[a] * global.REST_BLOCK_SCALE);
for(var n = GetRestArr(o), l = [], a = n.length - 2; 0 <= a; a--)
l.push(n[a] * REST_BLOCK_SCALE);
RestPush(r, l, e, 1); RestPush(r, l, e, 1);
} }
r.Arr[0] = {BlockNum:e, Value:t.Value}; r.Arr[0] = { BlockNum: e, Value: t.Value };
}; };
function RestPush(r,t,e,u) function RestPush(r, t, e, u) {
{
var o = r.Arr[u - 1], n = r.Arr[u]; var o = r.Arr[u - 1], n = r.Arr[u];
if(1 < u) if (1 < u) {
{
var l = t[u - 2]; var l = t[u - 2];
if(o.BlockNum > l) if (o.BlockNum > l)
return ; return;
} }
if(n.BlockNum && n.BlockNum >= e || o.BlockNum >= e) if (n.BlockNum && n.BlockNum >= e || o.BlockNum >= e)
return n.BlockNum = 0, void (n.Value = {}); return n.BlockNum = 0, void (n.Value = {});
n.BlockNum && u < r.Arr.length - 1 && RestPush(r, t, e, u + 1), r.Arr[u] = o; n.BlockNum && u < r.Arr.length - 1 && RestPush(r, t, e, u + 1), r.Arr[u] = o;
}; };
function GetRestArr(r) function GetRestArr(r) {
{ for (var t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e = t.length, u = 0; u <= r; u++)
for(var t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e = t.length, u = 0; u <= r; u++) for (var o = 0, n = u, l = e - 1; 0 <= l; l--) {
for(var o = 0, n = u, l = e - 1; 0 <= l; l--)
{
var a = t[l]; var a = t[l];
if(t[l] = n, n = a, 0 == ((o = o << 4 | 15) & u)) if (t[l] = n, n = a, 0 == ((o = o << 4 | 15) & u))
break; break;
if(0 != (o & n)) if (0 != (o & n))
break; break;
} }
return t; return t;
}; };
var RestArrMap = {}; var RestArrMap = {};
function GetCurrentRestArr() function GetCurrentRestArr() {
{ var r = global.GetCurrentBlockNumByTime(), t = Math.floor(r / global.REST_BLOCK_SCALE), e = RestArrMap[t];
var r = GetCurrentBlockNumByTime(), t = Math.floor(r / REST_BLOCK_SCALE), e = RestArrMap[t]; if (void 0 === e) {
if(void 0 === e)
{
RestArrMap = {}, (e = GetRestArr(t)).length = e.length - 1; RestArrMap = {}, (e = GetRestArr(t)).length = e.length - 1;
for(var u = 0; u < e.length; u++) for (var u = 0; u < e.length; u++)
e[u] = e[u] * REST_BLOCK_SCALE; e[u] = e[u] * global.REST_BLOCK_SCALE;
RestArrMap[t] = e; RestArrMap[t] = e;
} }
return e; return e;
}; };
function GetCurrentRestNum(r) function GetCurrentRestNum(r) {
{ for (var t = global.GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--)
for(var t = GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--) if (e[u] <= t)
if(e[u] <= t)
return e[u]; return e[u];
return 0; return 0;
}; };
global.DoRest = DoRest, global.GetRestArr = GetRestArr, global.GetCurrentRestArr = GetCurrentRestArr, global.GetCurrentRestNum = GetCurrentRestNum; global.DoRest = DoRest
global.GetRestArr = GetRestArr
global.GetCurrentRestArr = GetCurrentRestArr
global.GetCurrentRestNum = GetCurrentRestNum;

View File

@@ -20,16 +20,16 @@ global.STR_TYPE = 2;
global.MAX_STR_BUF_DATA = 200; global.MAX_STR_BUF_DATA = 200;
global.MAX_CONNECTION_ACTIVE = 40; global.MAX_CONNECTION_ACTIVE = 40;
var MAX_CONNECTION_ANOTHER = 40; var MAX_CONNECTION_ANOTHER = 40;
const TRAFIC_LIMIT_NODE_1S = MAX_BLOCK_SIZE * 1.25; const TRAFIC_LIMIT_NODE_1S = global.MAX_BLOCK_SIZE * 1.25;
const TRAFIC_LIMIT_1S = 8 * TRAFIC_LIMIT_NODE_1S; const TRAFIC_LIMIT_1S = 8 * TRAFIC_LIMIT_NODE_1S;
global.STAT_PERIOD = CONSENSUS_PERIOD_TIME / 5; global.STAT_PERIOD = global.CONSENSUS_PERIOD_TIME / 5;
const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * STAT_PERIOD / 1000; const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * global.STAT_PERIOD / 1000;
const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * STAT_PERIOD / 1000; const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * global.STAT_PERIOD / 1000;
const BUF_PACKET_SIZE = 32 * 1024; const BUF_PACKET_SIZE = 32 * 1024;
global.FORMAT_POW_TO_CLIENT = "{addrArr:hash,HashRND:hash,MIN_POWER_POW_HANDSHAKE:uint,PubKeyType:byte,Sign:arr64,Reserve:arr33}"; global.FORMAT_POW_TO_CLIENT = "{addrArr:hash,HashRND:hash,MIN_POWER_POW_HANDSHAKE:uint,PubKeyType:byte,Sign:arr64,Reserve:arr33}";
global.FORMAT_POW_TO_SERVER = "{\ global.FORMAT_POW_TO_SERVER = "{\
DEF_NETWORK:str15,\ DEF_NETWORK:str15,\
DEF_VERSION:str9,\ global.DEF_VERSION:str9,\
DEF_CLIENT:str16, \ DEF_CLIENT:str16, \
addrArr:addres, \ addrArr:addres, \
ToIP:str26,\ ToIP:str26,\
@@ -57,8 +57,31 @@ const FORMAT_PACKET_SEND_TCP = "{\
Hash:hash,\ Hash:hash,\
Data:data,\ Data:data,\
}"; }";
let RBTree = global.RBTree;
let STreeBuffer = global.STreeBuffer;
module.exports = class CTransport extends require("./connect") module.exports = class CTransport extends require("./connect")
{ {
UseRNDHeader
BAN_IP
ip
port
CanSend
SendFormatMap
ActualNodes
SendTrafficFree
LoadedPacketNum
LoadedSocketNum
LoadBufSocketList
BusyLevel
LastTimeHard
LastTimeHardOK
HardPacketForSend
MethodTiming
CurrentTimeStart
CurrentTimeValues
SendStatNum
Server
ServerSign
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
this.UseRNDHeader = UseRNDHeader this.UseRNDHeader = UseRNDHeader
@@ -107,10 +130,10 @@ module.exports = class CTransport extends require("./connect")
Map["DISCONNECTHOT"] = { Period: 1000, Hard: 1 } Map["DISCONNECTHOT"] = { Period: 1000, Hard: 1 }
Map["GETMESSAGE"] = { Period: 1000, Hard: 1 } Map["GETMESSAGE"] = { Period: 1000, Hard: 1 }
Map["MESSAGE"] = { Period: 1000, Hard: 1 } Map["MESSAGE"] = { Period: 1000, Hard: 1 }
Map["TRANSACTION"] = { Period: PERIOD_GET_BLOCK, Hard: 1 } Map["TRANSACTION"] = { Period: global.PERIOD_GET_BLOCK, Hard: 1 }
Map["GETBLOCKHEADER"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS } Map["GETBLOCKHEADER"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
Map["GETBLOCKHEADER100"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS } Map["GETBLOCKHEADER100"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
Map["GETBLOCK"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS } Map["GETBLOCK"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
Map["GETNODES"] = { Period: 1000, Hard: 1, LowVersion: 1, IsAddrList: 1 } Map["GETNODES"] = { Period: 1000, Hard: 1, LowVersion: 1, IsAddrList: 1 }
Map["RETGETNODES"] = { Period: 0, IsAddrList: 1 } Map["RETGETNODES"] = { Period: 0, IsAddrList: 1 }
Map["RETGETNODES2"] = { Period: 0, IsAddrList: 1 } Map["RETGETNODES2"] = { Period: 0, IsAddrList: 1 }
@@ -152,7 +175,7 @@ module.exports = class CTransport extends require("./connect")
Info.Data = global.BufLib.GetBufferFromObject(Info.Data, format.struct, Length, format.wrk) Info.Data = global.BufLib.GetBufferFromObject(Info.Data, format.struct, Length, format.wrk)
this.Send(Node, Info, 1) this.Send(Node, Info, 1)
} }
DataFromF(Info, bSendFormat) { DataFromF(Info, bSendFormat?) {
var format = this.GetF(Info.Method, bSendFormat); var format = this.GetF(Info.Method, bSendFormat);
try { try {
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, format.struct, format.wrk); var Data = global.BufLib.GetObjectFromBuffer(Info.Data, format.struct, format.wrk);
@@ -164,7 +187,7 @@ module.exports = class CTransport extends require("./connect")
} }
} }
ADD_CURRENT_STAT_TIME(Key, Value) { ADD_CURRENT_STAT_TIME(Key, Value) {
var TimeNum = Math.floor(Date.now() / STAT_PERIOD); var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
if (this.CurrentTimeStart !== TimeNum) if (this.CurrentTimeStart !== TimeNum)
this.CurrentTimeValues = {} this.CurrentTimeValues = {}
this.CurrentTimeStart = TimeNum this.CurrentTimeStart = TimeNum
@@ -173,7 +196,7 @@ module.exports = class CTransport extends require("./connect")
this.CurrentTimeValues[Key] += Value this.CurrentTimeValues[Key] += Value
} }
GET_CURRENT_STAT_TIME(Key) { GET_CURRENT_STAT_TIME(Key) {
var TimeNum = Math.floor(Date.now() / STAT_PERIOD); var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
if (this.CurrentTimeStart === TimeNum) { if (this.CurrentTimeStart === TimeNum) {
var Value = this.CurrentTimeValues[Key]; var Value = this.CurrentTimeValues[Key];
if (Value === undefined) if (Value === undefined)
@@ -186,11 +209,11 @@ module.exports = class CTransport extends require("./connect")
} }
} }
RecalcSendStatictic() { RecalcSendStatictic() {
var TimeNum = Math.floor(Date.now() / STAT_PERIOD); var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
if (this.SendStatNum === TimeNum) if (this.SendStatNum === TimeNum)
return; return;
this.SendStatNum = TimeNum this.SendStatNum = TimeNum
var Period = CONSENSUS_PERIOD_TIME / STAT_PERIOD; var Period = global.CONSENSUS_PERIOD_TIME / global.STAT_PERIOD;
this.SendTrafficFree = TRAFIC_LIMIT_SEND this.SendTrafficFree = TRAFIC_LIMIT_SEND
var it = this.ActualNodes.iterator(), Node; var it = this.ActualNodes.iterator(), Node;
while ((Node = it.next()) !== null) { while ((Node = it.next()) !== null) {
@@ -212,17 +235,17 @@ module.exports = class CTransport extends require("./connect")
this.SendTrafficFree -= Node.SendTrafficLimit this.SendTrafficFree -= Node.SendTrafficLimit
} }
Node.SendTrafficCurrent = 0 Node.SendTrafficCurrent = 0
global.ADD_TO_STAT("MAX:NODE_TRAFFIC_LIMIT:" + NodeName(Node), 1000 / STAT_PERIOD * Node.SendTrafficLimit / 1024, 1) global.ADD_TO_STAT("MAX:NODE_TRAFFIC_LIMIT:" + NodeName(Node), 1000 / global.STAT_PERIOD * Node.SendTrafficLimit / 1024, 1)
} }
this.SendTrafficFree += TRAFIC_LIMIT_NODE this.SendTrafficFree += TRAFIC_LIMIT_NODE
global.ADD_TO_STAT("SEND_TRAFFIC_FREE", this.SendTrafficFree / 1024) global.ADD_TO_STAT("SEND_TRAFFIC_FREE", this.SendTrafficFree / 1024)
} }
OnGetMethod(Info, CurTime) { OnGetMethod(Info, CurTime) {
if (DEBUG_MODE) { if (global.DEBUG_MODE) {
var Str = ""; var Str = "";
if (Info.Data && Info.Data.Length) if (Info.Data && Info.Data.Length)
Str = " LENGTH=" + Info.Data.Length Str = " LENGTH=" + Info.Data.Length
TO_DEBUG_LOG("GET:" + Info.Method + Str + " from: Node=" + NodeInfo(Info.Node)) global.TO_DEBUG_LOG("GET:" + Info.Method + Str + " from: Node=" + NodeInfo(Info.Node))
} }
if (global.ADDRLIST_MODE) { if (global.ADDRLIST_MODE) {
var StrOK = ",HAND,GETNODES,"; var StrOK = ",HAND,GETNODES,";
@@ -239,7 +262,7 @@ module.exports = class CTransport extends require("./connect")
F.bind(this)(Info, CurTime) F.bind(this)(Info, CurTime)
} }
else { else {
TO_ERROR_LOG("TRANSPORT", 20, "Method '" + Info.Method + "' not found Socket=*" + Info.Socket.ConnectID, "node", Info.Node) global.TO_ERROR_LOG("TRANSPORT", 20, "Method '" + Info.Method + "' not found Socket=*" + Info.Socket.ConnectID, "node", Info.Node)
this.AddCheckErrCount(Info.Node, 1, "Method not found") this.AddCheckErrCount(Info.Node, 1, "Method not found")
} }
} }
@@ -277,7 +300,7 @@ module.exports = class CTransport extends require("./connect")
var Key = "" + rinfo.address.trim(); var Key = "" + rinfo.address.trim();
var Stat = this.BAN_IP[Key]; var Stat = this.BAN_IP[Key];
if (Stat) { if (Stat) {
if (Stat.TimeTo > (GetCurrentTime(0) - 0)) if (Stat.TimeTo > (global.GetCurrentTime(0) - 0))
return true; return true;
} }
return false; return false;
@@ -306,17 +329,17 @@ module.exports = class CTransport extends require("./connect")
if (Node.DeltaBan > 1000000) if (Node.DeltaBan > 1000000)
Node.DeltaBan = 1000000 Node.DeltaBan = 1000000
Node.DeltaBan = Node.DeltaBan * 2 Node.DeltaBan = Node.DeltaBan * 2
var TimeTo = (GetCurrentTime(0) - 0) + Node.DeltaBan * 1000; var TimeTo = (global.GetCurrentTime(0) - 0) + Node.DeltaBan * 1000;
this.BAN_IP[Key] = { TimeTo: TimeTo } this.BAN_IP[Key] = { TimeTo: TimeTo }
Node.BlockProcessCount = 0 Node.BlockProcessCount = 0
this.DeleteNodeFromActiveByIP(Node.ip) this.DeleteNodeFromActiveByIP(Node.ip)
global.ADD_TO_STAT("AddToBan") global.ADD_TO_STAT("AddToBan")
} }
AddToBanIP(ip, Str, Period) { AddToBanIP(ip, Str, Period?) {
if (!Period) if (!Period)
Period = 600 * 1000 Period = 600 * 1000
var Key = "" + ip.trim(); var Key = "" + ip.trim();
this.BAN_IP[Key] = { TimeTo: (GetCurrentTime(0) - 0) + Period } this.BAN_IP[Key] = { TimeTo: (global.GetCurrentTime(0) - 0) + Period }
this.DeleteNodeFromActiveByIP(ip) this.DeleteNodeFromActiveByIP(ip)
global.ToLog("ADD TO BAN:: " + Key + " " + Str) global.ToLog("ADD TO BAN:: " + Key + " " + Str)
global.ADD_TO_STAT("AddToBanIP") global.ADD_TO_STAT("AddToBanIP")
@@ -333,29 +356,29 @@ module.exports = class CTransport extends require("./connect")
else { else {
this.OnGetMethod(Meta, CurTime) this.OnGetMethod(Meta, CurTime)
} }
ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET", startTime) global.ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET", startTime)
ADD_TO_STAT_TIME("TIME_USE_PACKET", startTime) global.ADD_TO_STAT_TIME("TIME_USE_PACKET", startTime)
ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET:" + Meta.Method, startTime) global.ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET:" + Meta.Method, startTime)
} }
GetBufFromData(Method, Data, TypeData, ContextID) { GetBufFromData(Method, Data, TypeData, ContextID?) {
var BufData; var BufData;
if (TypeData === BUF_TYPE) { if (TypeData === global.BUF_TYPE) {
BufData = Data BufData = Data
} }
else else
if (TypeData === STR_TYPE) { if (TypeData === global.STR_TYPE) {
BufData = Buffer.from(Data.substr(0, MAX_STR_BUF_DATA)) BufData = Buffer.from(Data.substr(0, global.MAX_STR_BUF_DATA))
} }
else { else {
if (Data === undefined) { if (Data === undefined) {
TypeData = BUF_TYPE TypeData = global.BUF_TYPE
BufData = Buffer.alloc(0) BufData = Buffer.alloc(0)
} }
else { else {
throw "ERROR TYPE DATA"; throw "ERROR TYPE DATA";
} }
} }
var BUF = {}; var BUF: any = {};
BUF.PacketSize = 0 BUF.PacketSize = 0
BUF.NumXORRND = 0 BUF.NumXORRND = 0
BUF.Method = Method BUF.Method = Method
@@ -375,7 +398,7 @@ module.exports = class CTransport extends require("./connect")
var Meta = global.BufLib.GetObjectFromBuffer(buf, FORMAT_PACKET_SEND_TCP, WorkStructPacketSend); var Meta = global.BufLib.GetObjectFromBuffer(buf, FORMAT_PACKET_SEND_TCP, WorkStructPacketSend);
} }
catch (e) { catch (e) {
TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer") global.TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer")
return undefined; return undefined;
} }
var Hash = this.GetHashFromData(Meta); var Hash = this.GetHashFromData(Meta);
@@ -384,8 +407,8 @@ module.exports = class CTransport extends require("./connect")
global.ToLog("TRANSPORT", 645, "Error hash Buffer", 2) global.ToLog("TRANSPORT", 645, "Error hash Buffer", 2)
return undefined; return undefined;
} }
if (Meta.TypeData === STR_TYPE) { if (Meta.TypeData === global.STR_TYPE) {
Meta.Data = Meta.Data.slice(0, MAX_STR_BUF_DATA).toString() Meta.Data = Meta.Data.slice(0, global.MAX_STR_BUF_DATA).toString()
} }
return Meta; return Meta;
} }
@@ -422,7 +445,7 @@ module.exports = class CTransport extends require("./connect")
global.ADD_TO_STAT("MAX:BUFFE_LOAD_SIZE", Socket.Buf.length / 1024) global.ADD_TO_STAT("MAX:BUFFE_LOAD_SIZE", Socket.Buf.length / 1024)
Socket.Buf.len = 0 Socket.Buf.len = 0
var PacketSize = global.BufLib.Read(Socket.Buf, "uint"); var PacketSize = global.BufLib.Read(Socket.Buf, "uint");
if (PacketSize > MAX_PACKET_LENGTH) { if (PacketSize > global.MAX_PACKET_LENGTH) {
this.SendCloseSocket(Socket, "MAX_PACKET_LENGTH") this.SendCloseSocket(Socket, "MAX_PACKET_LENGTH")
break; break;
} }
@@ -464,7 +487,7 @@ module.exports = class CTransport extends require("./connect")
if (this.StopDoSendPacket(Param, Node, Buf.Method)) { if (this.StopDoSendPacket(Param, Node, Buf.Method)) {
return 1; return 1;
} }
if (!IsZeroArr(Buf.ContextID)) { if (!global.IsZeroArr(Buf.ContextID)) {
Buf.Context = global.ContextPackets.LoadValue(Buf.ContextID) Buf.Context = global.ContextPackets.LoadValue(Buf.ContextID)
} }
if (!Buf.Context) { if (!Buf.Context) {
@@ -494,11 +517,11 @@ module.exports = class CTransport extends require("./connect")
this.OnPacketTCP(Buf) this.OnPacketTCP(Buf)
} }
} }
ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime) global.ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime)
return 1; return 1;
} }
StopDoSendPacket(Param, Node, Name) { StopDoSendPacket(Param, Node, Name) {
var CurTime = GetCurrentTime(0) - 0; var CurTime = global.GetCurrentTime(0) - 0;
if (!Param) { if (!Param) {
global.ADD_TO_STAT("STOP_METHOD") global.ADD_TO_STAT("STOP_METHOD")
global.ADD_TO_STAT("STOP_METHOD:NO") global.ADD_TO_STAT("STOP_METHOD:NO")
@@ -589,7 +612,7 @@ module.exports = class CTransport extends require("./connect")
global.ADD_TO_STAT("DO_HARD_PACKET") global.ADD_TO_STAT("DO_HARD_PACKET")
global.ADD_TO_STAT("DO_HARD_PACKET:" + Info.Method) global.ADD_TO_STAT("DO_HARD_PACKET:" + Info.Method)
var DeltaTime = Date.now() - Info.TimeLoad; var DeltaTime = Date.now() - Info.TimeLoad;
if (this.HardPacketForSend.size && DeltaTime > PACKET_ALIVE_PERIOD / 2) { if (this.HardPacketForSend.size && DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
global.ADD_TO_STAT("DELETE_HARD_PACKET_OLD", this.HardPacketForSend.size) global.ADD_TO_STAT("DELETE_HARD_PACKET_OLD", this.HardPacketForSend.size)
this.HardPacketForSend.clear() this.HardPacketForSend.clear()
return; return;
@@ -597,9 +620,9 @@ module.exports = class CTransport extends require("./connect")
var MaxCount = 20; var MaxCount = 20;
while (Info = this.HardPacketForSend.max()) { while (Info = this.HardPacketForSend.max()) {
var DeltaTime = Date.now() - Info.TimeLoad; var DeltaTime = Date.now() - Info.TimeLoad;
if (DeltaTime > PACKET_ALIVE_PERIOD / 2 || !Info.Node.Socket || Info.Node.Socket.WasClose) { if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2 || !Info.Node.Socket || Info.Node.Socket.WasClose) {
this.HardPacketForSend.remove(Info) this.HardPacketForSend.remove(Info)
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) { if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
this.RiseBusyLevelByInfo(Info) this.RiseBusyLevelByInfo(Info)
Info.Node.NextPing = 1 * 1000 Info.Node.NextPing = 1 * 1000
this.AddCheckErrCount(Info.Node, 0.2) this.AddCheckErrCount(Info.Node, 0.2)
@@ -645,10 +668,10 @@ module.exports = class CTransport extends require("./connect")
DoSendPacketNode(Node) { DoSendPacketNode(Node) {
var TimeNum = Date.now(); var TimeNum = Date.now();
var Info = Node.SendPacket.max(); var Info = Node.SendPacket.max();
if (Info && TimeNum - Info.TimeNum > PACKET_ALIVE_PERIOD) if (Info && TimeNum - Info.TimeNum > global.PACKET_ALIVE_PERIOD)
while (Info = Node.SendPacket.max()) { while (Info = Node.SendPacket.max()) {
var DeltaTime = TimeNum - Info.TimeNum; var DeltaTime = TimeNum - Info.TimeNum;
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) { if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
Node.SendPacket.remove(Info) Node.SendPacket.remove(Info)
global.ADD_TO_STAT("DELETE_OLD_PACKET") global.ADD_TO_STAT("DELETE_OLD_PACKET")
} }
@@ -678,7 +701,7 @@ module.exports = class CTransport extends require("./connect")
global.ADD_TO_STAT("SEND:" + Info.Method) global.ADD_TO_STAT("SEND:" + Info.Method)
global.ADD_TO_STAT("SEND:(KB)" + Info.Method, BufWrite.length / 1024) global.ADD_TO_STAT("SEND:(KB)" + Info.Method, BufWrite.length / 1024)
global.ADD_TO_STAT("SEND:" + Info.Method + ":" + NodeName(Node), 1, 1) global.ADD_TO_STAT("SEND:" + Info.Method + ":" + NodeName(Node), 1, 1)
TO_DEBUG_LOG("SEND " + Info.Method + " to " + NodeInfo(Node) + " LENGTH=" + BufWrite.length) global.TO_DEBUG_LOG("SEND " + Info.Method + " to " + NodeInfo(Node) + " LENGTH=" + BufWrite.length)
return 1; return 1;
} }
DoSendPacket() { DoSendPacket() {
@@ -723,36 +746,36 @@ module.exports = class CTransport extends require("./connect")
} }
CheckPOWTicketConnect(Socket, data) { CheckPOWTicketConnect(Socket, data) {
try { try {
var Info = global.BufLib.GetObjectFromBuffer(data, FORMAT_POW_TO_SERVER, {}); var Info = global.BufLib.GetObjectFromBuffer(data, global.FORMAT_POW_TO_SERVER, {});
} }
catch (e) { catch (e) {
this.SendCloseSocket(Socket, "FORMAT_POW_TO_SERVER") this.SendCloseSocket(Socket, "FORMAT_POW_TO_SERVER")
return; return;
} }
if (Info.DEF_NETWORK !== GetNetworkName()) { if (Info.DEF_NETWORK !== global.GetNetworkName()) {
this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + GetNetworkName()) this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + global.GetNetworkName())
return; return;
} }
var Node = this.FindRunNodeContext(Info.addrArr, Info.FromIP, Info.FromPort, true); var Node = this.FindRunNodeContext(Info.addrArr, Info.FromIP, Info.FromPort, true);
if (global.CompareArr(Info.addrArr, this.addrArr) === 0) { if (global.CompareArr(Info.addrArr, this.addrArr) === 0) {
AddNodeInfo(Node, "SERV: GET SELF") global.AddNodeInfo(Node, "SERV: GET SELF")
this.SendCloseSocket(Socket, "SELF") this.SendCloseSocket(Socket, "SELF")
return; return;
} }
var Hash = shaarr2(this.addrArr, Socket.HashRND); var Hash = global.shaarr2(this.addrArr, Socket.HashRND);
var hashInfo = GetHashWithValues(Hash, Info.nonce, 0); var hashInfo = global.GetHashWithValues(Hash, Info.nonce, 0);
var power = GetPowPower(hashInfo); var power = global.GetPowPower(hashInfo);
if (Info.Reconnect) { if (Info.Reconnect) {
if ((Node.SecretForReconnect && Node.WaitConnectFromServer && global.CompareArr(Node.SecretForReconnect, Info.SecretForReconnect) === 0) || Info.Reconnect === 255) { if ((Node.SecretForReconnect && Node.WaitConnectFromServer && global.CompareArr(Node.SecretForReconnect, Info.SecretForReconnect) === 0) || Info.Reconnect === 255) {
var Result = 1; let Result = 1;
if (Info.Reconnect === 255) { if (Info.Reconnect === 255) {
Result = CheckDevelopSign(Hash, Info.Sign) Result = global.CheckDevelopSign(Hash, Info.Sign)
} }
if (Result) { if (Result) {
Node.NextConnectDelta = 1000 Node.NextConnectDelta = 1000
Node.WaitConnectFromServer = 0 Node.WaitConnectFromServer = 0
Node.GrayConnect = 0 Node.GrayConnect = 0
AddNodeInfo(Node, "3. SERVER OK CONNECT for client node " + SocketInfo(Socket)) global.AddNodeInfo(Node, "3. SERVER OK CONNECT for client node " + SocketInfo(Socket))
this.AddNodeToActive(Node) this.AddNodeToActive(Node)
Node.Socket = Socket Node.Socket = Socket
SetSocketStatus(Socket, 3) SetSocketStatus(Socket, 3)
@@ -767,39 +790,39 @@ module.exports = class CTransport extends require("./connect")
this.AddCheckErrCount(Node, 10, "Error Sign Node") this.AddCheckErrCount(Node, 10, "Error Sign Node")
} }
} }
AddNodeInfo(Node, "SERV: ERROR_RECONNECT") global.AddNodeInfo(Node, "SERV: ERROR_RECONNECT")
Socket.end(this.GetBufFromData("POW_CONNEC11", "ERROR_RECONNECT", 2)) Socket.end(this.GetBufFromData("POW_CONNEC11", "ERROR_RECONNECT", 2))
CloseSocket(Socket, "ERROR_RECONNECT") global.CloseSocket(Socket, "ERROR_RECONNECT")
return; return;
} }
else { else {
if (power < MIN_POWER_POW_HANDSHAKE) { if (power < global.MIN_POWER_POW_HANDSHAKE) {
global.ToLog("END: MIN_POWER_POW_HANDSHAKE") global.ToLog("END: MIN_POWER_POW_HANDSHAKE")
AddNodeInfo(Node, "SERV: ERR MIN_POWER_POW_HANDSHAKE") global.AddNodeInfo(Node, "SERV: ERR MIN_POWER_POW_HANDSHAKE")
Socket.end(this.GetBufFromData("POW_CONNECT2", "MIN_POWER_POW_HANDSHAKE", 2)) Socket.end(this.GetBufFromData("POW_CONNECT2", "MIN_POWER_POW_HANDSHAKE", 2))
CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE") global.CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE")
return; return;
} }
else { else {
if (!Node.BlockProcessCount) if (!Node.BlockProcessCount)
Node.BlockProcessCount = 0 Node.BlockProcessCount = 0
if (this.ActualNodes.size >= MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) { if (this.ActualNodes.size >= global.MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) {
AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS") global.AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS")
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_MAX_CLIENTS", 2)) Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_MAX_CLIENTS", 2))
CloseSocket(Socket, "ERROR_MAX_CLIENTS") global.CloseSocket(Socket, "ERROR_MAX_CLIENTS")
return; return;
} }
var Result = false; let Result = false;
if (Info.PubKeyType === 2 || Info.PubKeyType === 3) if (Info.PubKeyType === 2 || Info.PubKeyType === 3)
Result = secp256k1.verify(Buffer.from(Hash), Buffer.from(Info.Sign), Buffer.from([Info.PubKeyType].concat(Info.addrArr))) Result = global.secp256k1.verify(Buffer.from(Hash), Buffer.from(Info.Sign), Buffer.from([Info.PubKeyType].concat(Info.addrArr)))
if (!Result) { if (!Result) {
AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT") global.AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT")
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_SIGN_CLIENT", 2)) Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_SIGN_CLIENT", 2))
CloseSocket(Socket, "ERROR_SIGN_CLIENT") global.CloseSocket(Socket, "ERROR_SIGN_CLIENT")
this.AddToBanIP(Socket.remoteAddress, "ERROR_SIGN_CLIENT") this.AddToBanIP(Socket.remoteAddress, "ERROR_SIGN_CLIENT")
return; return;
} }
AddNodeInfo(Node, "1. SERVER OK POW for client node " + SocketInfo(Socket)) global.AddNodeInfo(Node, "1. SERVER OK POW for client node " + SocketInfo(Socket))
Node.FromIP = Info.FromIP Node.FromIP = Info.FromIP
Node.FromPort = Info.FromPort Node.FromPort = Info.FromPort
Node.SecretForReconnect = crypto.randomBytes(20) Node.SecretForReconnect = crypto.randomBytes(20)
@@ -808,7 +831,7 @@ module.exports = class CTransport extends require("./connect")
Node.NextConnectDelta = 1000 Node.NextConnectDelta = 1000
Node.WaitConnectFromServer = 0 Node.WaitConnectFromServer = 0
Node.GrayConnect = 1 Node.GrayConnect = 1
AddNodeInfo(Node, "5. CLIENT OK GRAY CONNECT " + SocketInfo(Socket)) global.AddNodeInfo(Node, "5. CLIENT OK GRAY CONNECT " + SocketInfo(Socket))
this.AddNodeToActive(Node) this.AddNodeToActive(Node)
Node.Socket = Socket Node.Socket = Socket
SetSocketStatus(Socket, 3) SetSocketStatus(Socket, 3)
@@ -831,7 +854,7 @@ module.exports = class CTransport extends require("./connect")
this.Server.close() this.Server.close()
} }
StartServer() { StartServer() {
if (GrayConnect()) { if (global.GrayConnect()) {
this.CanSend++ this.CanSend++
return; return;
} }
@@ -839,20 +862,20 @@ module.exports = class CTransport extends require("./connect")
this.Server = net.createServer(function(sock) { this.Server = net.createServer(function(sock) {
if (SELF.WasBanIP({ address: sock.remoteAddress })) { if (SELF.WasBanIP({ address: sock.remoteAddress })) {
sock.ConnectID = "new" sock.ConnectID = "new"
CloseSocket(sock, "WAS BAN", true) global.CloseSocket(sock, "WAS BAN", true)
return; return;
} }
let SOCKET = sock; let SOCKET = sock;
socketInit(SOCKET, "c") global.socketInit(SOCKET, "c")
SetSocketStatus(SOCKET, 0) SetSocketStatus(SOCKET, 0)
AddNodeInfo(SOCKET, "Client *" + SOCKET.ConnectID + " connected from " + SOCKET.remoteAddress + ":" + SOCKET.remotePort, 1) global.AddNodeInfo(SOCKET, "Client *" + SOCKET.ConnectID + " connected from " + SOCKET.remoteAddress + ":" + SOCKET.remotePort, 1)
global.ADD_TO_STAT("ClientConnected") global.ADD_TO_STAT("ClientConnected")
SOCKET.HashRND = crypto.randomBytes(32) SOCKET.HashRND = crypto.randomBytes(32)
var Data = { var Data = {
addrArr: SELF.addrArr, HashRND: SOCKET.HashRND, MIN_POWER_POW_HANDSHAKE: MIN_POWER_POW_HANDSHAKE, PubKeyType: SELF.PubKeyType, addrArr: SELF.addrArr, HashRND: SOCKET.HashRND, MIN_POWER_POW_HANDSHAKE: global.MIN_POWER_POW_HANDSHAKE, PubKeyType: SELF.PubKeyType,
Sign: SELF.ServerSign, Reserve: [] Sign: SELF.ServerSign, Reserve: []
}; };
var BufData = global.BufLib.GetBufferFromObject(Data, FORMAT_POW_TO_CLIENT, 300, {}); var BufData = global.BufLib.GetBufferFromObject(Data, global.FORMAT_POW_TO_CLIENT, 300, {});
var BufWrite = SELF.GetBufFromData("POW_CONNECT5", BufData, 1); var BufWrite = SELF.GetBufFromData("POW_CONNECT5", BufData, 1);
try { try {
SOCKET.write(BufWrite) SOCKET.write(BufWrite)
@@ -873,10 +896,10 @@ module.exports = class CTransport extends require("./connect")
SOCKET.ConnectToServer = 0 SOCKET.ConnectToServer = 0
return; return;
} }
CloseSocket(SOCKET, "=SERVER ON DATA=") global.CloseSocket(SOCKET, "=SERVER ON DATA=")
} }
else { else {
socketRead(SOCKET, data) global.socketRead(SOCKET, data)
SELF.OnGetFromTCP(SOCKET.Node, SOCKET, data) SELF.OnGetFromTCP(SOCKET.Node, SOCKET, data)
} }
}) })
@@ -885,7 +908,7 @@ module.exports = class CTransport extends require("./connect")
var Node = SOCKET.Node; var Node = SOCKET.Node;
var Status = GetSocketStatus(SOCKET); var Status = GetSocketStatus(SOCKET);
if (Status) if (Status)
AddNodeInfo(Node, "Get socket end *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET)) global.AddNodeInfo(Node, "Get socket end *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
if (Node && Status === 200) { if (Node && Status === 200) {
Node.SwapSockets() Node.SwapSockets()
SOCKET.WasClose = 1 SOCKET.WasClose = 1
@@ -894,15 +917,15 @@ module.exports = class CTransport extends require("./connect")
SOCKET.on('close', function(err) { SOCKET.on('close', function(err) {
global.ADD_TO_STAT("ClientClose") global.ADD_TO_STAT("ClientClose")
if (SOCKET.ConnectID && GetSocketStatus(SOCKET)) if (SOCKET.ConnectID && GetSocketStatus(SOCKET))
AddNodeInfo(SOCKET.Node, "Get socket close *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET)) global.AddNodeInfo(SOCKET.Node, "Get socket close *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
if (!SOCKET.WasClose && SOCKET.Node) { if (!SOCKET.WasClose && SOCKET.Node) {
CloseSocket(SOCKET, "GET CLOSE") global.CloseSocket(SOCKET, "GET CLOSE")
} }
SetSocketStatus(SOCKET, 0) SetSocketStatus(SOCKET, 0)
}) })
SOCKET.on('error', function(err) { SOCKET.on('error', function(err) {
global.ADD_TO_STAT("ERRORS") global.ADD_TO_STAT("ERRORS")
CloseSocket(SOCKET, "ERRORS") global.CloseSocket(SOCKET, "ERRORS")
if (SOCKET.Node) if (SOCKET.Node)
SELF.AddCheckErrCount(SOCKET.Node, 1, "ERR##2 : socket") SELF.AddCheckErrCount(SOCKET.Node, 1, "ERR##2 : socket")
}) })
@@ -911,7 +934,7 @@ module.exports = class CTransport extends require("./connect")
}) })
this.Server.on('error', function(err) { this.Server.on('error', function(err) {
if (err.code === 'EADDRINUSE') { if (err.code === 'EADDRINUSE') {
ToLogClient('Port ' + SELF.port + ' in use, retrying...') global.ToLogClient('Port ' + SELF.port + ' in use, retrying...')
if (SELF.Server) if (SELF.Server)
SELF.Server.close() SELF.Server.close()
setTimeout(function() { setTimeout(function() {
@@ -931,21 +954,22 @@ module.exports = class CTransport extends require("./connect")
} }
} }
RunListenServer() { RunListenServer() {
if (!START_PORT_NUMBER || START_PORT_NUMBER === "undefined") if (!global.START_PORT_NUMBER || global.START_PORT_NUMBER === "undefined")
START_PORT_NUMBER = 30000 global.START_PORT_NUMBER = 30000
let SELF = this; let SELF = this;
SELF.port = START_PORT_NUMBER SELF.port = global.START_PORT_NUMBER
ToLogClient("Prepare to run TCP server on " + LISTEN_IP + ":" + SELF.port) global.ToLogClient("Prepare to run TCP server on " + global.LISTEN_IP + ":" + SELF.port)
this.Server.listen(SELF.port, LISTEN_IP, function() { this.Server.listen(SELF.port, global.LISTEN_IP, function() {
if (SELF.CanSend < 2) if (SELF.CanSend < 2)
ToLogClient("Run TCP server on " + SELF.ip + ":" + SELF.port) global.ToLogClient("Run TCP server on " + SELF.ip + ":" + SELF.port)
SELF.CanSend++ SELF.CanSend++
var Hash; var Hash;
Hash = global.sha3(SELF.addrStr) Hash = global.sha3(SELF.addrStr)
SELF.ServerSign = secp256k1.sign(Buffer.from(Hash), SELF.KeyPair.getPrivateKey('')).signature SELF.ServerSign = global.secp256k1.sign(Buffer.from(Hash), SELF.KeyPair.getPrivateKey('')).signature
}) })
} }
FindInternetIP() { FindInternetIP() {
let Stun = global.Stun;
let SELF = this; let SELF = this;
let server = Stun.createServer(); let server = Stun.createServer();
const request = Stun.createMessage(Stun.constants.STUN_BINDING_REQUEST); const request = Stun.createMessage(Stun.constants.STUN_BINDING_REQUEST);
@@ -958,7 +982,7 @@ module.exports = class CTransport extends require("./connect")
SELF.CanSend++ SELF.CanSend++
global.INTERNET_IP_FROM_STUN = value.address global.INTERNET_IP_FROM_STUN = value.address
if (!SELF.ip) if (!SELF.ip)
SELF.ip = INTERNET_IP_FROM_STUN SELF.ip = global.INTERNET_IP_FROM_STUN
if (server) if (server)
server.close() server.close()
SELF.RunListenServer() SELF.RunListenServer()
@@ -973,11 +997,11 @@ module.exports = class CTransport extends require("./connect")
}) })
} }
CLOSE_SOCKET(Context, CurTime) { CLOSE_SOCKET(Context, CurTime) {
AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString()) global.AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString())
CloseSocket(Context.Socket, "CLOSE_SOCKET") global.CloseSocket(Context.Socket, "CLOSE_SOCKET")
} }
SendCloseSocket(Socket, Str) { SendCloseSocket(Socket, Str) {
AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str) global.AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str)
if (Socket.WasClose) { if (Socket.WasClose) {
return; return;
} }
@@ -985,12 +1009,12 @@ module.exports = class CTransport extends require("./connect")
if (Socket.Node && Socket.Node.BufWrite && Socket.Node.BufWrite.length > 0) { if (Socket.Node && Socket.Node.BufWrite && Socket.Node.BufWrite.length > 0) {
} }
else { else {
AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str) global.AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str)
Socket.end(this.GetBufFromData("CLOSE_SOCKET", Str, 2)) Socket.end(this.GetBufFromData("CLOSE_SOCKET", Str, 2))
} }
CloseSocket(Socket, Str) global.CloseSocket(Socket, Str)
} }
AddCheckErrCount(Node, Count, StrErr) { AddCheckErrCount(Node, Count, StrErr?) {
if (!Node) if (!Node)
return; return;
if (!Count) if (!Count)
@@ -1016,7 +1040,7 @@ module.exports = class CTransport extends require("./connect")
} }
} }
}; };
global.ContextPackets = new STreeBuffer(10 * 1000, CompareItemHash32, "object"); global.ContextPackets = new STreeBuffer(10 * 1000, global.CompareItemHash32, "object");
function CalcStatArr(arr, arrAvg, arrNext, Period) { function CalcStatArr(arr, arrAvg, arrNext, Period) {
var arrSum = [arr[0]]; var arrSum = [arr[0]];

View File

@@ -27,14 +27,14 @@ function CreateHashMinimal(Block, MinerID) {
throw "BlockNum < BLOCKNUM_ALGO2"; throw "BlockNum < BLOCKNUM_ALGO2";
return false; return false;
} }
var PrevHashNum = ReadUint32FromArr(Block.PrevHash, 28); var PrevHashNum = global.ReadUint32FromArr(Block.PrevHash, 28);
var Ret = GetHash(Block.SeqHash, PrevHashNum, Block.BlockNum, MinerID, 0, 0, 0, 0, 0); var Ret = global.GetHash(Block.SeqHash, PrevHashNum, Block.BlockNum, MinerID, 0, 0, 0, 0, 0);
Block.Hash = Ret.Hash; Block.Hash = Ret.Hash;
Block.PowHash = Ret.PowHash; Block.PowHash = Ret.PowHash;
Block.Power = GetPowPower(Block.PowHash); Block.Power = global.GetPowPower(Block.PowHash);
Block.AddrHash = [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]; Block.AddrHash = [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];
WriteUintToArrOnPos(Block.AddrHash, MinerID, 0); global.WriteUintToArrOnPos(Block.AddrHash, MinerID, 0);
WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28); global.WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
return true; return true;
}; };
var MAX_MEMORY3 = 0, SHIFT_MASKA3; var MAX_MEMORY3 = 0, SHIFT_MASKA3;
@@ -61,8 +61,7 @@ function InitVer3(Block) {
try { try {
BufferNonce3 = new Uint32Array(MAX_MEMORY3); BufferNonce3 = new Uint32Array(MAX_MEMORY3);
BufferBlockNum3 = new Uint32Array(MAX_MEMORY3); BufferBlockNum3 = new Uint32Array(MAX_MEMORY3);
} } catch (e) {
catch (e) {
SHIFT_MASKA3 = SHIFT_MASKA3 + 1; SHIFT_MASKA3 = SHIFT_MASKA3 + 1;
MAX_MEMORY3 = MAX_MEMORY3 / 2; MAX_MEMORY3 = MAX_MEMORY3 / 2;
global.ToLog("WAS ALLOC MEMORY ERROR. NEW TRY: " + MAX_MEMORY3); global.ToLog("WAS ALLOC MEMORY ERROR. NEW TRY: " + MAX_MEMORY3);
@@ -88,10 +87,13 @@ function CreatePOWVersion3(Block, bHashPump) {
if (!Block.MaxLider) { if (!Block.MaxLider) {
Block.HashCount = 0; Block.HashCount = 0;
Block.MaxLider = { Block.MaxLider = {
Nonce0: 0, Nonce1: 0, Nonce2: 0, DeltaNum1: 0, DeltaNum2: 0, Hash1: [255, 255, 255, 255, 255, 255, 255, 255, 255, Nonce0: 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], Hash2: [255, Nonce1: 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, Nonce2: 0,
255, 255, 255, 255, 255, 255], DeltaNum1: 0,
DeltaNum2: 0,
Hash1: [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
Hash2: [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
}; };
} }
var MaxLider = Block.MaxLider; var MaxLider = Block.MaxLider;
@@ -99,7 +101,7 @@ function CreatePOWVersion3(Block, bHashPump) {
var BlockNum = Block.BlockNum; var BlockNum = Block.BlockNum;
var Miner = Block.MinerID; var Miner = Block.MinerID;
var StartNonceRnd = DELTA_NONCE + Block.LastNonce + Math.trunc(3000000000 * Math.random()); var StartNonceRnd = DELTA_NONCE + Block.LastNonce + Math.trunc(3000000000 * Math.random());
var List = GetNonceHashArr(BlockNum, Miner, StartNonceRnd, RunCount); var List = global.GetNonceHashArr(BlockNum, Miner, StartNonceRnd, RunCount);
for (var n = 0; n < RunCount; n++) { for (var n = 0; n < RunCount; n++) {
var Nonce = List.ArrNonce[n]; var Nonce = List.ArrNonce[n];
var HashNum = List.ArrHash[n] >>> SHIFT_MASKA3; var HashNum = List.ArrHash[n] >>> SHIFT_MASKA3;
@@ -110,11 +112,11 @@ function CreatePOWVersion3(Block, bHashPump) {
if (bHashPump) if (bHashPump)
return; return;
var Ret = 0; var Ret = 0;
var PrevHashNum = ReadUint32FromArr(Block.PrevHash, 28); var PrevHashNum = global.ReadUint32FromArr(Block.PrevHash, 28);
var HashBase = GetHashFromNum2(BlockNum, PrevHashNum); var HashBase = global.GetHashFromNum2(BlockNum, PrevHashNum);
var Value1 = FindHashBuffer3(HashBase, BlockNum, Miner, 1); var Value1 = FindHashBuffer3(HashBase, BlockNum, Miner, 1);
if (Value1) { if (Value1) {
var Hash1 = XORArr(HashBase, Value1.Hash); var Hash1 = global.XORArr(HashBase, Value1.Hash);
if (global.CompareArr(MaxLider.Hash1, Hash1) > 0) { if (global.CompareArr(MaxLider.Hash1, Hash1) > 0) {
MaxLider.Hash1 = Hash1; MaxLider.Hash1 = Hash1;
MaxLider.Nonce1 = Value1.Nonce; MaxLider.Nonce1 = Value1.Nonce;
@@ -126,10 +128,10 @@ function CreatePOWVersion3(Block, bHashPump) {
var CountEnd = START_NONCE + 50000; var CountEnd = START_NONCE + 50000;
var Nonce0; var Nonce0;
for (Nonce0 = START_NONCE; Nonce0 < CountEnd; Nonce0++) { for (Nonce0 = START_NONCE; Nonce0 < CountEnd; Nonce0++) {
var HashCurrent = GetHashFromArrNum2(Block.SeqHash, Miner, Nonce0); var HashCurrent = global.GetHashFromArrNum2(Block.SeqHash, Miner, Nonce0);
var Value2 = FindHashBuffer3(HashCurrent, BlockNum, Miner, 1); var Value2 = FindHashBuffer3(HashCurrent, BlockNum, Miner, 1);
if (Value2) { if (Value2) {
var Hash2 = XORArr(HashCurrent, Value2.Hash); var Hash2 = global.XORArr(HashCurrent, Value2.Hash);
if (global.CompareArr(MaxLider.Hash2, Hash2) > 0) { if (global.CompareArr(MaxLider.Hash2, Hash2) > 0) {
MaxLider.Nonce0 = Nonce0; MaxLider.Nonce0 = Nonce0;
MaxLider.Hash2 = Hash2; MaxLider.Hash2 = Hash2;
@@ -145,13 +147,13 @@ function CreatePOWVersion3(Block, bHashPump) {
Block.LastNonce0 = Nonce0; Block.LastNonce0 = Nonce0;
if (Ret) { if (Ret) {
Block.AddrHash = [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]; Block.AddrHash = [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];
WriteUintToArrOnPos(Block.AddrHash, Miner, 0); global.WriteUintToArrOnPos(Block.AddrHash, Miner, 0);
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce0, 6); global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce0, 6);
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce1, 12); global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce1, 12);
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce2, 18); global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce2, 18);
WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum1, 24); global.WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum1, 24);
WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum2, 26); global.WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum2, 26);
WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28); global.WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
Block.Hash = MaxLider.Hash2; Block.Hash = MaxLider.Hash2;
if (global.CompareArr(MaxLider.Hash1, MaxLider.Hash2) > 0) { if (global.CompareArr(MaxLider.Hash1, MaxLider.Hash2) > 0) {
Block.PowHash = MaxLider.Hash1; Block.PowHash = MaxLider.Hash1;
@@ -160,10 +162,10 @@ function CreatePOWVersion3(Block, bHashPump) {
Block.PowHash = MaxLider.Hash2; Block.PowHash = MaxLider.Hash2;
} }
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO) if (BlockNum >= global.BLOCKNUM_TICKET_ALGO)
Block.Hash = sha3arr2(MaxLider.Hash1, MaxLider.Hash2); Block.Hash = global.sha3arr2(MaxLider.Hash1, MaxLider.Hash2);
else else
Block.Hash = shaarr2(MaxLider.Hash1, MaxLider.Hash2); Block.Hash = global.shaarr2(MaxLider.Hash1, MaxLider.Hash2);
var Power = GetPowPower(Block.PowHash); var Power = global.GetPowPower(Block.PowHash);
Block.HashCount = (1 << Power) >>> 0; Block.HashCount = (1 << Power) >>> 0;
} }
return Ret; return Ret;
@@ -176,7 +178,7 @@ function FindHashBuffer3(HashFind, BlockNum, Miner, CountFind) {
var BlockNum2 = BufferBlockNum3[Index]; var BlockNum2 = BufferBlockNum3[Index];
if (BlockNum2 && BlockNum2 > BlockNum - DELTA_LONG_MINING) { if (BlockNum2 && BlockNum2 > BlockNum - DELTA_LONG_MINING) {
var Nonce2 = DELTA_NONCE + BufferNonce3[Index]; var Nonce2 = DELTA_NONCE + BufferNonce3[Index];
var Hash2 = GetHashFromNum3(BlockNum2, Miner, Nonce2); var Hash2 = global.GetHashFromNum3(BlockNum2, Miner, Nonce2);
return { Hash: Hash2, DeltaNum: BlockNum - BlockNum2, Nonce: Nonce2 }; return { Hash: Hash2, DeltaNum: BlockNum - BlockNum2, Nonce: Nonce2 };
} }
} }
@@ -193,7 +195,7 @@ global.GetNonceHashArr = function(BlockNum, Miner, StartNonceRnd, CountNonce) {
var ArrHash = []; var ArrHash = [];
for (var n = 0; n < CountNonce; n++) { for (var n = 0; n < CountNonce; n++) {
var Nonce = StartNonceRnd + n; var Nonce = StartNonceRnd + n;
var HashNonce = GetHashFromNum3(BlockNum, Miner, Nonce); var HashNonce = global.GetHashFromNum3(BlockNum, Miner, Nonce);
var HashNum = (HashNonce[0] << 23) * 2 + (HashNonce[1] << 16) + (HashNonce[2] << 8) + HashNonce[3]; var HashNum = (HashNonce[0] << 23) * 2 + (HashNonce[1] << 16) + (HashNonce[2] << 8) + HashNonce[3];
ArrNonce[n] = Nonce; ArrNonce[n] = Nonce;
ArrHash[n] = HashNum; ArrHash[n] = HashNum;

View File

@@ -19,9 +19,10 @@ if (global.PROCESS_NAME === "MAIN" || global.PROCESS_NAME === "TX")
require("./wallet"); require("./wallet");
module.exports = class CSmartContract extends require("./block-exchange") module.exports = class CSmartContract extends require("./block-exchange")
{ {
BufHashTree
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
this.BufHashTree = new RBTree(CompareArr) this.BufHashTree = new RBTree(global.CompareArr)
this.BufHashTree.LastAddNum = 0 this.BufHashTree.LastAddNum = 0
} }
AddBlockToHashTree(Block) { AddBlockToHashTree(Block) {
@@ -73,8 +74,8 @@ module.exports = class CSmartContract extends require("./block-exchange")
} }
} }
} }
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].OnWriteBlockStart(Block) global.DApps[key].OnWriteBlockStart(Block)
} }
var arrContentResult = []; var arrContentResult = [];
var BlockNum = Block.BlockNum; var BlockNum = Block.BlockNum;
@@ -86,11 +87,11 @@ module.exports = class CSmartContract extends require("./block-exchange")
continue; continue;
} }
var type = arr[i][0]; var type = arr[i][0];
var App = DAppByType[type]; var App = global.DAppByType[type];
if (App) { if (App) {
App.ResultTx = 0 App.ResultTx = 0
global.DApps.Accounts.BeginTransaction() global.DApps.Accounts.BeginTransaction()
var StrHex = global.GetHexFromArr(sha3(arr[i])); var StrHex = global.GetHexFromArr(global.sha3(arr[i]));
var item; var item;
global.CurTrItem = undefined global.CurTrItem = undefined
if (global.TreeFindTX) { if (global.TreeFindTX) {
@@ -103,7 +104,7 @@ module.exports = class CSmartContract extends require("./block-exchange")
if (Result === true) { if (Result === true) {
if (App.ResultTx) if (App.ResultTx)
SetResult = App.ResultTx SetResult = App.ResultTx
if (!DApps.Accounts.CommitTransaction(BlockNum, i)) if (!global.DApps.Accounts.CommitTransaction(BlockNum, i))
SetResult = 0 SetResult = 0
} }
else { else {
@@ -137,40 +138,40 @@ module.exports = class CSmartContract extends require("./block-exchange")
} }
if (arrContentResult.length) if (arrContentResult.length)
process.send({ cmd: "WriteBodyResult", BlockNum: Block.BlockNum, arrContentResult: arrContentResult }) process.send({ cmd: "WriteBodyResult", BlockNum: Block.BlockNum, arrContentResult: arrContentResult })
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].OnWriteBlockFinish(Block) global.DApps[key].OnWriteBlockFinish(Block)
} }
} }
BlockDeleteTX(Block) { BlockDeleteTX(Block) {
this.BufHashTree.LastAddNum = 0 this.BufHashTree.LastAddNum = 0
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].OnDeleteBlock(Block) global.DApps[key].OnDeleteBlock(Block)
} }
} }
OnDelete(Block) { OnDelete(Block) {
} }
IsValidTicket(Tr, BlockNum) { IsValidTicket(Tr, BlockNum) {
this.CheckCreateTicketObject(Tr, BlockNum) this.CheckCreateTicketObject(Tr, BlockNum)
if (Tr.power < MIN_POWER_POW_TR) if (Tr.power < global.MIN_POWER_POW_TR)
return - 2; return - 2;
if (Tr.num !== BlockNum) if (Tr.num !== BlockNum)
return - 3; return - 3;
return 1; return 1;
} }
IsValidTransaction(Tr, BlockNum) { IsValidTransaction(Tr, BlockNum) {
if (!Tr.body || Tr.body.length < MIN_TRANSACTION_SIZE || Tr.body.length > MAX_TRANSACTION_SIZE) if (!Tr.body || Tr.body.length < global.MIN_TRANSACTION_SIZE || Tr.body.length > global.MAX_TRANSACTION_SIZE)
return - 1; return - 1;
this.CheckCreateTransactionObject(Tr) this.CheckCreateTransactionObject(Tr)
if (Tr.power - Math.log2(Tr.body.length / 128) < MIN_POWER_POW_TR) if (Tr.power - Math.log2(Tr.body.length / 128) < global.MIN_POWER_POW_TR)
return - 2; return - 2;
if (Tr.num !== BlockNum) if (Tr.num !== BlockNum)
return - 3; return - 3;
if (Tr.body[0] === TYPE_TRANSACTION_ACC_HASH) if (Tr.body[0] === global.TYPE_TRANSACTION_ACC_HASH)
return - 4; return - 4;
return 1; return 1;
} }
ReWriteDAppTransactions(Length) { ReWriteDAppTransactions(Length) {
if (!TX_PROCESS.Worker) if (!global.TX_PROCESS.Worker)
return 0; return 0;
if (!Length) if (!Length)
return 0; return 0;
@@ -188,22 +189,22 @@ module.exports = class CSmartContract extends require("./block-exchange")
return 1; return 1;
} }
AddDAppTransactions(BlockNum, Arr) { AddDAppTransactions(BlockNum, Arr) {
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0) if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
return; return;
var BlockNumHash = BlockNum - DELTA_BLOCK_ACCOUNT_HASH; var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH;
if (BlockNumHash < 0) if (BlockNumHash < 0)
return; return;
var Item = global.DApps.Accounts.GetAccountHashItem(BlockNumHash); var Item = global.DApps.Accounts.GetAccountHashItem(BlockNumHash);
if (Item) { if (Item) {
var Body = [TYPE_TRANSACTION_ACC_HASH]; var Body = [global.TYPE_TRANSACTION_ACC_HASH];
WriteUintToArr(Body, BlockNumHash) global.WriteUintToArr(Body, BlockNumHash)
WriteArrToArr(Body, Item.AccHash, 32) global.WriteArrToArr(Body, Item.AccHash, 32)
if (BlockNumHash >= START_BLOCK_ACCOUNT_HASH3) { if (BlockNumHash >= global.START_BLOCK_ACCOUNT_HASH3) {
WriteUintToArr(Body, Item.AccountMax) global.WriteUintToArr(Body, Item.AccountMax)
WriteArrToArr(Body, Item.SmartHash, 32) global.WriteArrToArr(Body, Item.SmartHash, 32)
WriteUintToArr(Body, Item.SmartCount) global.WriteUintToArr(Body, Item.SmartCount)
WriteUintToArr(Body, BlockNum) global.WriteUintToArr(Body, BlockNum)
WriteUintToArr(Body, 0) global.WriteUintToArr(Body, 0)
} }
var Tr = { body: Body }; var Tr = { body: Body };
this.CheckCreateTransactionObject(Tr) this.CheckCreateTransactionObject(Tr)
@@ -213,7 +214,7 @@ module.exports = class CSmartContract extends require("./block-exchange")
AddTransactionOwn(Tr) { AddTransactionOwn(Tr) {
if (!global.TX_PROCESS.Worker) if (!global.TX_PROCESS.Worker)
return - 6; return - 6;
var StrHex = global.GetHexFromArr(sha3(Tr.body)); var StrHex = global.GetHexFromArr(global.sha3(Tr.body));
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex }) global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex })
return this.AddTransaction(Tr, 1); return this.AddTransaction(Tr, 1);
} }

View File

@@ -12,17 +12,19 @@
const MAX_MESSAGE_COUNT = 1000; const MAX_MESSAGE_COUNT = 1000;
module.exports = class CMessages extends require("./transaction-validator") module.exports = class CMessages extends require("./transaction-validator")
{ {
MemPoolMsg
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) { constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
this.MemPoolMsg = [] this.MemPoolMsg = []
for (var i = 0; i <= MAX_LEVEL_SPECIALIZATION; i++) for (var i = 0; i <= global.MAX_LEVEL_SPECIALIZATION; i++)
this.MemPoolMsg[i] = new RBTree(CompareItemTimePow) this.MemPoolMsg[i] = new RBTree(global.CompareItemTimePow)
} }
AddMsgToQuote(Msg) { AddMsgToQuote(Msg) {
var Tree = this.MemPoolMsg[Msg.Level]; var Tree = this.MemPoolMsg[Msg.Level];
if (Tree) { if (Tree) {
if (Tree.insert(Msg)) { if (Tree.insert(Msg)) {
if (Tree.size > MEM_POOL_MSG_COUNT) { if (Tree.size > global.MEM_POOL_MSG_COUNT) {
var maxitem = Tree.max(); var maxitem = Tree.max();
Tree.remove(maxitem) Tree.remove(maxitem)
if (maxitem === Msg) if (maxitem === Msg)
@@ -38,7 +40,7 @@ module.exports = class CMessages extends require("./transaction-validator")
} }
IsValidMsg(Msg) { IsValidMsg(Msg) {
this.CheckCreateMsgHASH(Msg) this.CheckCreateMsgHASH(Msg)
if (Msg.power < MIN_POWER_POW_MSG) if (Msg.power < global.MIN_POWER_POW_MSG)
return - 1; return - 1;
if (Msg.time > this.CurrentBlockNum) if (Msg.time > this.CurrentBlockNum)
return - 1; return - 1;
@@ -47,18 +49,18 @@ module.exports = class CMessages extends require("./transaction-validator")
CheckCreateMsgHASH(Msg) { CheckCreateMsgHASH(Msg) {
if (!Msg.HashPow) { if (!Msg.HashPow) {
Msg.HASH = global.sha3(Msg.body) Msg.HASH = global.sha3(Msg.body)
Msg.HashPow = GetHashWithValues(Msg.HASH, Msg.nonce, Msg.time) Msg.HashPow = global.GetHashWithValues(Msg.HASH, Msg.nonce, Msg.time)
Msg.power = GetPowPower(Msg.HashPow) Msg.power = global.GetPowPower(Msg.HashPow)
Msg.TimePow = Msg.time + Msg.power - Math.log2(Msg.body.length / 128) Msg.TimePow = Msg.time + Msg.power - Math.log2(Msg.body.length / 128)
Msg.Level = AddrLevelArr(this.addrArr, Msg.addrArr) Msg.Level = global.AddrLevelArr(this.addrArr, Msg.addrArr)
if (Msg.Level >= MAX_LEVEL_SPECIALIZATION) if (Msg.Level >= global.MAX_LEVEL_SPECIALIZATION)
Msg.Level = MAX_LEVEL_SPECIALIZATION Msg.Level = global.MAX_LEVEL_SPECIALIZATION
} }
} }
CreateMsgFromBody(Body, ToAddr) { CreateMsgFromBody(Body, ToAddr) {
var HASH = global.sha3(Body); var HASH = global.sha3(Body);
var Msg = { var Msg = {
HASH: HASH, body: Body, addrArr: ToAddr, nonce: CreateNoncePOWExtern(HASH, this.CurrentBlockNum, 3 * (1 << MIN_POWER_POW_MSG)), HASH: HASH, body: Body, addrArr: ToAddr, nonce: global.CreateNoncePOWExtern(HASH, this.CurrentBlockNum, 3 * (1 << global.MIN_POWER_POW_MSG)),
time: this.CurrentBlockNum, time: this.CurrentBlockNum,
}; };
this.CheckCreateMsgHASH(Msg) this.CheckCreateMsgHASH(Msg)
@@ -97,8 +99,9 @@ module.exports = class CMessages extends require("./transaction-validator")
var Msg = arr[i]; var Msg = arr[i];
if (this.IsValidMsg(Msg)) { if (this.IsValidMsg(Msg)) {
if (global.CompareArr(this.addrArr, Msg.addrArr) === 0) { if (global.CompareArr(this.addrArr, Msg.addrArr) === 0) {
var App = DAppByType[Msg.body[0]]; var App = global.DAppByType[Msg.body[0]];
if (App) { if (App) {
//@ts-ignore
App.OnMessage(Msg, BlockNum, i) App.OnMessage(Msg, BlockNum, i)
} }
} }
@@ -117,7 +120,7 @@ module.exports = class CMessages extends require("./transaction-validator")
GETMESSAGE(Info, CurTime) { GETMESSAGE(Info, CurTime) {
var arr = []; var arr = [];
var BufLength = 300; var BufLength = 300;
var Level = AddrLevelArr(this.addrArr, Info.Node.addrArr); var Level = global.AddrLevelArr(this.addrArr, Info.Node.addrArr);
var Tree = this.MemPoolMsg[Level]; var Tree = this.MemPoolMsg[Level];
if (Tree) { if (Tree) {
var it = Tree.iterator(), Item; var it = Tree.iterator(), Item;
@@ -145,10 +148,10 @@ module.exports = class CMessages extends require("./transaction-validator")
setTimeout(function() { setTimeout(function() {
var Res = SELF.AddTransaction(TR, TR.ToAll); var Res = SELF.AddTransaction(TR, TR.ToAll);
if (TR.ToAll) if (TR.ToAll)
ToLogClient("#3 Added " + TrName(TR) + " for block: " + TR.num + " on timer Res=" + Res) global.ToLogClient("#3 Added " + TrName(TR) + " for block: " + TR.num + " on timer Res=" + Res)
}, (delta - 3) * 1000) }, (delta - 3) * 1000)
if (Tr.ToAll) if (Tr.ToAll)
ToLogClient("#2 Added " + TrName(Tr) + " for block: " + Tr.num + " to timer. Send transaction after " + (delta - 3) + " sec") global.ToLogClient("#2 Added " + TrName(Tr) + " for block: " + Tr.num + " to timer. Send transaction after " + (delta - 3) + " sec")
return 4; return 4;
} }
return - 3; return - 3;
@@ -170,10 +173,10 @@ module.exports = class CMessages extends require("./transaction-validator")
SendTransaction(Tr) { SendTransaction(Tr) {
if (!Tr.ToAll) if (!Tr.ToAll)
return; return;
var CurTime = GetCurrentTime(0) - 0; var CurTime = global.GetCurrentTime(0) - 0;
var Count; var Count;
if (GrayConnect()) if (global.GrayConnect())
Count = Math.trunc(MAX_GRAY_CONNECTIONS_TO_SERVER / 2) Count = Math.trunc(global.MAX_GRAY_CONNECTIONS_TO_SERVER / 2)
else else
Count = Math.min(this.ActualNodes.size, 16) Count = Math.min(this.ActualNodes.size, 16)
if (Count < 2) if (Count < 2)

View File

@@ -12,14 +12,14 @@ global.RunOnUpdate = RunOnUpdate;
function RunOnUpdate() { function RunOnUpdate() {
var fname = global.GetDataPath("DB/update.lst"); var fname = global.GetDataPath("DB/update.lst");
var UpdateInfo = LoadParams(fname, { UPDATE_NUM_COMPLETE: 1071 }); var UpdateInfo = global.LoadParams(fname, { UPDATE_NUM_COMPLETE: 1071 });
if (!UpdateInfo.UPDATE_NUM_COMPLETE) if (!UpdateInfo.UPDATE_NUM_COMPLETE)
UpdateInfo.UPDATE_NUM_COMPLETE = 0; UpdateInfo.UPDATE_NUM_COMPLETE = 0;
var CurNum = UpdateInfo.UPDATE_NUM_COMPLETE; var CurNum = UpdateInfo.UPDATE_NUM_COMPLETE;
if (CurNum !== UPDATE_CODE_VERSION_NUM) { if (CurNum !== global.UPDATE_CODE_VERSION_NUM) {
UpdateInfo.UPDATE_NUM_COMPLETE = UPDATE_CODE_VERSION_NUM; UpdateInfo.UPDATE_NUM_COMPLETE = global.UPDATE_CODE_VERSION_NUM;
global.ToLog("UPDATER Start"); global.ToLog("UPDATER Start");
SaveParams(fname, UpdateInfo); global.SaveParams(fname, UpdateInfo);
if (global.TEST_NETWORK || global.LOCAL_RUN) { if (global.TEST_NETWORK || global.LOCAL_RUN) {
} }
else { else {
@@ -43,7 +43,7 @@ function CreateHeadersHash100() {
if (Num === 0) if (Num === 0)
Hash100 = []; Hash100 = [];
else else
Hash100 = sha3arr2(PrevHash100, Block.Hash); Hash100 = global.sha3arr2(PrevHash100, Block.Hash);
DB.Write({ Num: Num / 100, Hash100: Hash100, Hash: Block.Hash }); DB.Write({ Num: Num / 100, Hash100: Hash100, Hash: Block.Hash });
if (Num % 1000000 === 0) if (Num % 1000000 === 0)
global.ToLog("Create Hash100:" + Num); global.ToLog("Create Hash100:" + Num);
@@ -54,12 +54,12 @@ function CreateHeadersHash100() {
}; };
function CheckRewriteTr(Num, StrHash, StartRewrite) { function CheckRewriteTr(Num, StrHash, StartRewrite) {
if (SERVER.BlockNumDB < StartRewrite) if (global.SERVER.BlockNumDB < StartRewrite)
return "NO"; return "NO";
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num); var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
if (!AccountsHash || global.GetHexFromArr(AccountsHash) !== StrHash) { if (!AccountsHash || global.GetHexFromArr(AccountsHash) !== StrHash) {
global.ToLog("START REWRITE ERR ACTS TRANSACTIONS"); global.ToLog("START REWRITE ERR ACTS TRANSACTIONS");
global.SERVER.ReWriteDAppTransactions(SERVER.BlockNumDB - StartRewrite); global.SERVER.ReWriteDAppTransactions(global.SERVER.BlockNumDB - StartRewrite);
return "Rewrite"; return "Rewrite";
} }
else { else {
@@ -71,7 +71,7 @@ function CheckRewriteAllTr2(Num, StrHash, Num2, StrHash2) {
if (global.LOCAL_RUN || global.TEST_NETWORK) if (global.LOCAL_RUN || global.TEST_NETWORK)
return "NONE"; return "NONE";
var MaxNum = global.SERVER.GetMaxNumBlockDB(); var MaxNum = global.SERVER.GetMaxNumBlockDB();
if (MaxNum < START_BLOCK_ACCOUNT_HASH) if (MaxNum < global.START_BLOCK_ACCOUNT_HASH)
return "NONE"; return "NONE";
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num); var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
var AccountsHash2 = global.DApps.Accounts.GetHashOrUndefined(Num2); var AccountsHash2 = global.DApps.Accounts.GetHashOrUndefined(Num2);
@@ -80,8 +80,8 @@ function CheckRewriteAllTr2(Num, StrHash, Num2, StrHash2) {
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) { if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
global.ToLog("***************** START REWRITE ALL DAPPS"); global.ToLog("***************** START REWRITE ALL DAPPS");
global.UpdateMode = 1; global.UpdateMode = 1;
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].ClearDataBase(); global.DApps[key].ClearDataBase();
} }
global.UpdateMode = 0; global.UpdateMode = 0;
return "Rewrite"; return "Rewrite";
@@ -95,14 +95,14 @@ function CheckRewriteAllTr(Num, StrHash, Num2, StrHash2) {
if (global.LOCAL_RUN || global.TEST_NETWORK) if (global.LOCAL_RUN || global.TEST_NETWORK)
return "NONE"; return "NONE";
var MaxNum = global.SERVER.GetMaxNumBlockDB(); var MaxNum = global.SERVER.GetMaxNumBlockDB();
if (MaxNum < START_BLOCK_ACCOUNT_HASH) if (MaxNum < global.START_BLOCK_ACCOUNT_HASH)
return "NONE"; return "NONE";
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num); var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) { if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
global.ToLog("***************** START REWRITE ALL DAPPS"); global.ToLog("***************** START REWRITE ALL DAPPS");
global.UpdateMode = 1; global.UpdateMode = 1;
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].ClearDataBase(); global.DApps[key].ClearDataBase();
} }
global.UpdateMode = 0; global.UpdateMode = 0;
return "Rewrite"; return "Rewrite";
@@ -154,7 +154,7 @@ function ReWriteDBSmartWrite() {
var Item = global.DApps.Smart.DBSmart.Read(num); var Item = global.DApps.Smart.DBSmart.Read(num);
if (!Item) if (!Item)
break; break;
var Body = (global.GetArrFromHex(GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, {}); var Body = global.GetArrFromHex(GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, {}));
if (Body.length > 15000) if (Body.length > 15000)
global.ToLog("Smart " + Item.Num + ". " + Item.Name + " length=" + Body.length); global.ToLog("Smart " + Item.Num + ". " + Item.Name + " length=" + Body.length);
global.DApps.Smart.DBSmartWrite(Item); global.DApps.Smart.DBSmartWrite(Item);

View File

@@ -17,12 +17,18 @@ const WalletPath = "WALLET";
const DBRow = require("./db/db-row"); const DBRow = require("./db/db-row");
const CONFIG_NAME = global.GetDataPath(WalletPath + "/config.lst"); const CONFIG_NAME = global.GetDataPath(WalletPath + "/config.lst");
class CApp { class CApp {
Password
WalletOpen
AccountMap
KeyPair
KeyXOR
PubKeyArr
constructor() { constructor() {
CheckCreateDir(global.GetDataPath(WalletPath)) global.CheckCreateDir(global.GetDataPath(WalletPath))
var bReadOnly = (global.PROCESS_NAME !== "TX"); var bReadOnly = (global.PROCESS_NAME !== "TX");
this.Password = "" this.Password = ""
this.WalletOpen = undefined this.WalletOpen = undefined
var Params = LoadParams(CONFIG_NAME, undefined); var Params = global.LoadParams(CONFIG_NAME, undefined);
if (!Params) { if (!Params) {
Params = {} Params = {}
if (global.TEST_NETWORK) { if (global.TEST_NETWORK) {
@@ -39,7 +45,7 @@ class CApp {
this.AccountMap = Params.AccountMap this.AccountMap = Params.AccountMap
this.KeyPair = crypto.createECDH('secp256k1') this.KeyPair = crypto.createECDH('secp256k1')
if (Params.Protect) { if (Params.Protect) {
ToLogClient("Wallet protect by password") global.ToLogClient("Wallet protect by password")
this.KeyXOR = global.GetArrFromHex(Params.KeyXOR) this.KeyXOR = global.GetArrFromHex(Params.KeyXOR)
this.WalletOpen = false this.WalletOpen = false
this.SetPrivateKey(Params.PubKey) this.SetPrivateKey(Params.PubKey)
@@ -55,22 +61,22 @@ class CApp {
AddTransaction(Tr) { AddTransaction(Tr) {
if (!global.TX_PROCESS.Worker) if (!global.TX_PROCESS.Worker)
return 0; return 0;
var StrHex = global.GetHexFromArr(sha3(Tr.body)); var StrHex = global.GetHexFromArr(global.sha3(Tr.body));
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex }) global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex })
return global.SERVER.AddTransaction(Tr, 1); return global.SERVER.AddTransaction(Tr, 1);
} }
SetPrivateKey(KeyStr, bSetNew) { SetPrivateKey(KeyStr, bSetNew?) {
var bGo = 1; var bGo = 1;
if (this.WalletOpen === false) { if (this.WalletOpen === false) {
bGo = 0 bGo = 0
} }
if (KeyStr && KeyStr.length === 64 && bGo) { if (KeyStr && KeyStr.length === 64 && bGo) {
this.KeyPair.setPrivateKey(GetArr32FromHex(KeyStr)) this.KeyPair.setPrivateKey(global.GetArr32FromHex(KeyStr))
this.KeyPair.PubKeyArr = this.KeyPair.getPublicKey('', 'compressed') this.KeyPair.PubKeyArr = this.KeyPair.getPublicKey('', 'compressed')
this.KeyPair.PubKeyStr = global.GetHexFromArr(this.KeyPair.PubKeyArr) this.KeyPair.PubKeyStr = global.GetHexFromArr(this.KeyPair.PubKeyArr)
this.KeyPair.PrivKeyStr = KeyStr.toUpperCase() this.KeyPair.PrivKeyStr = KeyStr.toUpperCase()
this.KeyPair.addrArr = this.KeyPair.PubKeyArr.slice(1) this.KeyPair.addrArr = this.KeyPair.PubKeyArr.slice(1)
this.KeyPair.addrStr = GetHexAddresFromPublicKey(this.KeyPair.addrArr) this.KeyPair.addrStr = global.GetHexAddresFromPublicKey(this.KeyPair.addrArr)
this.KeyPair.addr = this.KeyPair.addrArr this.KeyPair.addr = this.KeyPair.addrArr
this.KeyPair.WasInit = 1 this.KeyPair.WasInit = 1
this.PubKeyArr = this.KeyPair.PubKeyArr this.PubKeyArr = this.KeyPair.PubKeyArr
@@ -98,38 +104,38 @@ class CApp {
this.Password = "" this.Password = ""
this.WalletOpen = false this.WalletOpen = false
this.KeyPair = crypto.createECDH('secp256k1') this.KeyPair = crypto.createECDH('secp256k1')
this.SetPrivateKey(GetHexFromArr(this.PubKeyArr), false) this.SetPrivateKey(global.GetHexFromArr(this.PubKeyArr), false)
ToLogClient("Wallet close") global.ToLogClient("Wallet close")
return 1; return 1;
} }
OpenWallet(StrPassword) { OpenWallet(StrPassword) {
if (this.WalletOpen !== false) { if (this.WalletOpen !== false) {
ToLogClient("Wallet was open") global.ToLogClient("Wallet was open")
} }
var Hash = this.HashProtect(StrPassword); var Hash = this.HashProtect(StrPassword);
var TestPrivKey = this.XORHash(this.KeyXOR, Hash, 32); var TestPrivKey = this.XORHash(this.KeyXOR, Hash, 32);
if (!IsZeroArr(TestPrivKey)) { if (!global.IsZeroArr(TestPrivKey)) {
this.KeyPair.setPrivateKey(Buffer.from(TestPrivKey)) this.KeyPair.setPrivateKey(Buffer.from(TestPrivKey))
var TestPubKey = this.KeyPair.getPublicKey('', 'compressed'); var TestPubKey = this.KeyPair.getPublicKey('', 'compressed');
if (global.CompareArr(TestPubKey, this.PubKeyArr) !== 0) { if (global.CompareArr(TestPubKey, this.PubKeyArr) !== 0) {
ToLogClient("Wrong password") global.ToLogClient("Wrong password")
return 0; return 0;
} }
this.Password = StrPassword this.Password = StrPassword
this.WalletOpen = true this.WalletOpen = true
this.SetPrivateKey(GetHexFromArr(TestPrivKey), false) this.SetPrivateKey(global.GetHexFromArr(TestPrivKey), false)
} }
else { else {
this.Password = StrPassword this.Password = StrPassword
this.WalletOpen = true this.WalletOpen = true
this.SetPrivateKey(GetHexFromArr(this.PubKeyArr), false) this.SetPrivateKey(global.GetHexFromArr(this.PubKeyArr), false)
} }
ToLogClient("Wallet open") global.ToLogClient("Wallet open")
return 1; return 1;
} }
SetPasswordNew(StrPassword) { SetPasswordNew(StrPassword) {
if (this.WalletOpen === false) { if (this.WalletOpen === false) {
ToLogClient("Wallet is close by password") global.ToLogClient("Wallet is close by password")
return; return;
} }
this.Password = StrPassword this.Password = StrPassword
@@ -157,7 +163,7 @@ class CApp {
if (this.WalletOpen === false) { if (this.WalletOpen === false) {
return; return;
} }
var Params = {}; var Params: any = {};
if (this.Password) { if (this.Password) {
Params.Protect = true Params.Protect = true
var Hash = this.HashProtect(this.Password); var Hash = this.HashProtect(this.Password);
@@ -179,13 +185,13 @@ class CApp {
} }
Params.AccountMap = this.AccountMap Params.AccountMap = this.AccountMap
Params.MiningAccount = global.GENERATE_BLOCK_ACCOUNT Params.MiningAccount = global.GENERATE_BLOCK_ACCOUNT
SaveParams(CONFIG_NAME, Params) global.SaveParams(CONFIG_NAME, Params)
} }
OnCreateAccount(Data) { OnCreateAccount(Data) {
this.AccountMap[Data.Num] = 0 this.AccountMap[Data.Num] = 0
} }
FindMyAccounts(bClean) { FindMyAccounts(bClean) {
if (IsZeroArr(this.PubKeyArr)) if (global.IsZeroArr(this.PubKeyArr))
return; return;
if (bClean) if (bClean)
this.AccountMap = {} this.AccountMap = {}
@@ -212,15 +218,15 @@ class CApp {
if (!this.KeyPair.WasInit) if (!this.KeyPair.WasInit)
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
var PrivKey = this.GetPrivateKey(Num); var PrivKey = this.GetPrivateKey(Num);
var sigObj = secp256k1.sign(SHA3BUF(Arr), Buffer.from(PrivKey)); var sigObj = global.secp256k1.sign(global.SHA3BUF(Arr), Buffer.from(PrivKey));
returnglobal.GetHexFromArr(sigObj.signature); return global.GetHexFromArr(sigObj.signature);
} }
GetSignTransaction(TR) { GetSignTransaction(TR) {
if (!this.KeyPair.WasInit) if (!this.KeyPair.WasInit)
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
var PrivKey = this.GetPrivateKey(this.AccountMap[TR.FromID]); var PrivKey = this.GetPrivateKey(this.AccountMap[TR.FromID]);
var Arr = global.DApps.Accounts.GetSignTransferTx(TR, PrivKey); var Arr = global.DApps.Accounts.GetSignTransferTx(TR, PrivKey);
returnglobal.GetHexFromArr(Arr); return global.GetHexFromArr(Arr);
} }
}; };
global.WALLET = new CApp; global.WALLET = new CApp;

207
src/global.d.ts vendored
View File

@@ -18,15 +18,25 @@ declare global {
HTTP_PORT_NUMBER: number; HTTP_PORT_NUMBER: number;
LOCAL_RUN: number; LOCAL_RUN: number;
//#endregion //#endregion
//#region main-process.ts //#region main-process.ts
PROCESS_NAME: string; PROCESS_NAME: string;
POWPROCESS: number; POWPROCESS: number;
DEBUGPROCESS: any; DEBUGPROCESS: any;
START_SERVER: number;
SetCalcPOW: Function;
RunStopPOWProcess: Function;
NEW_SERVER_PRIVATE_KEY: number;
//#endregion
//#region constant.ts
UPDATE_CODE_VERSION_NUM: number; UPDATE_CODE_VERSION_NUM: number;
MIN_CODE_VERSION_NUM: number; MIN_CODE_VERSION_NUM: number;
MINING_VERSION_NUM: number; MINING_VERSION_NUM: number;
InitParamsArg: Function; InitParamsArg: Function;
CONST_NAME_ARR: string[]; CONST_NAME_ARR: string[];
MAX_LENGTH_SENDER_MAP: number;
DELTA_START_SENDER_MAP: number;
NODES_DELTA_CALC_HOUR: number; NODES_DELTA_CALC_HOUR: number;
USE_HARD_API_V2: number; USE_HARD_API_V2: number;
USE_TICKET: number; USE_TICKET: number;
@@ -49,11 +59,11 @@ declare global {
SERVER_PRIVATE_KEY_HEX: string; SERVER_PRIVATE_KEY_HEX: string;
USE_NET_FOR_SERVER_ADDRES: number; USE_NET_FOR_SERVER_ADDRES: number;
NET_WORK_MODE: { NET_WORK_MODE: {
ip: string; ip?: string;
port: number; port?: number | string;
UseDirectIP: boolean; UseDirectIP?: boolean | number;
NodeWhiteList: string; NodeWhiteList?: string;
DoRestartNode: number; DoRestartNode?: number;
} }
STAT_MODE: number; STAT_MODE: number;
MAX_STAT_PERIOD: number; MAX_STAT_PERIOD: number;
@@ -140,7 +150,7 @@ declare global {
NEW_SIGN_TIME: number; NEW_SIGN_TIME: number;
TEST_TRANSACTION_GENERATE: number; TEST_TRANSACTION_GENERATE: number;
TEST_NETWORK: boolean | number; TEST_NETWORK: boolean | number;
START_PORT_NUMBER: number; START_PORT_NUMBER: number | string;
GetNetworkName: Function; GetNetworkName: Function;
DEF_VERSION: string; DEF_VERSION: string;
DEF_CLIENT: string; DEF_CLIENT: string;
@@ -161,10 +171,6 @@ declare global {
NWMODE: number; NWMODE: number;
NOALIVE: number; NOALIVE: number;
DEV_MODE: number; DEV_MODE: number;
START_SERVER: number;
SetCalcPOW: Function;
RunStopPOWProcess: Function;
NEW_SERVER_PRIVATE_KEY: number;
//#endregion //#endregion
//#region startlib.ts //#region startlib.ts
@@ -180,8 +186,8 @@ declare global {
ToLogClient: Function; ToLogClient: Function;
glCurNumFindArr: number; glCurNumFindArr: number;
ArrReconnect: []; ArrReconnect: any[];
ArrConnect: []; ArrConnect: any[];
//#region main-process.ts:51 //#region main-process.ts:51
SERVER: any; SERVER: any;
@@ -192,7 +198,7 @@ declare global {
//#region main-process.ts:100 //#region main-process.ts:100
GetCurrentTime: Function; GetCurrentTime: Function;
//#region main-process.ts:100 //#endregion
//#region //#region
SpeedSignLib: number; SpeedSignLib: number;
@@ -269,7 +275,8 @@ declare global {
//#region run-nw.ts //#region run-nw.ts
NWVERSION: string; NWVERSION: string;
HTTP_SERVER_START_OK: boolean; HTTP_SERVER_START_OK: boolean | number;
NO_HISTORY_MODE: boolean;
//#endregion //#endregion
//#region crypto-library.ts //#region crypto-library.ts
@@ -367,15 +374,28 @@ declare global {
//#region base.ts //#region base.ts
glStopNode: any; glStopNode: any;
GetCheckAccHash: Function;
ReadHashFromBufDB: Function;
STreeBuffer: any;
TestCreateTr: Function;
//#endregion //#endregion
//#region html-server.ts //#region html-server.ts
HTTPCaller: any; HTTPCaller: any;
DappTemplateFile: Function; DappTemplateFile: Function;
DappSmartCodeFile: Function; DappSmartCodeFile: Function;
DappClientCodeFile DappClientCodeFile: Function;
SendBlockFile SendBlockFile: Function;
SetCheckPointOnBlock: Function;
SendHTMLMap: any;
SendWebFile: Function;
GetFileHTMLWithParsing: Function;
GetFileHTMLFromMarkdown: Function;
GetFileSimple: Function;
SaveFileSimple: Function; SetSafeResponce: Function;
GetUserContext: Function;
EventNum: number;
EventMap: any;
AddDappEventToGlobalMap: Function; AddDappEventToGlobalMap: Function;
//#endregion //#endregion
@@ -397,10 +417,13 @@ declare global {
//#region block-db.ts //#region block-db.ts
BlockDB: any; BlockDB: any;
BLOCK_HEADER_SIZE BLOCK_HEADER_SIZE: number;
BLOCK_HEADER_SIZE2 BLOCK_HEADER_SIZE2: number;
DB_VERSION DB_VERSION: number;
AddInfoChain: Function;
AddInfoBlock: Function;
GetNodeStrPort: Function;
NO_CHECK_BLOCKNUM_ONSTART: number;
//#endregion //#endregion
//#region db.ts //#region db.ts
@@ -436,6 +459,7 @@ declare global {
//#endregion //#endregion
//#region transaction-validator.ts //#region transaction-validator.ts
CurTrItem: any;
//#endregion //#endregion
//#region connect.ts //#region connect.ts
@@ -448,10 +472,28 @@ declare global {
MIN_PERIOD_PING: number; MIN_PERIOD_PING: number;
MAX_PING_FOR_CONNECT: number; MAX_PING_FOR_CONNECT: number;
MAX_WAIT_PERIOD_FOR_HOT: number; MAX_WAIT_PERIOD_FOR_HOT: number;
GetGrayServerConnections: Function;
SortNodeBlockProcessCount: Function;
//#endregion //#endregion
//#region code.ts //#region code.ts
RestartNode: Function;
UnpackCodeFile: Function;
//#endregion
//#region node.ts
SocketStatistic: Function;
GetSocketStatus: Function;
SetSocketStatus: Function;
NodeInfo: Function;
NodeName: Function;
SocketInfo: Function;
FindNodeByAddr: Function;
AddNodeInfo: Function;
socketInit: Function;
socketRead: Function;
socketWrite: Function;
CloseSocket: Function;
//#endregion //#endregion
//#region terahashlib.js //#region terahashlib.js
@@ -486,12 +528,125 @@ declare global {
shaarrblock2: Function; shaarrblock2: Function;
//#endregion //#endregion
SendWebFile: Function; //#region wallet-node.js
CleanChain: Function;
//#endregion
//#region lexer.js
LexerJS: any;
//#endregion
//#region coinlib.js
ADD: Function;
SUB: Function;
DIV: Function;
ISZERO: Function;
FLOAT_FROM_COIN: Function;
COIN_FROM_FLOAT: Function;
COIN_FROM_STRING: Function;
//#endregion
//#region block-exchange.ts
CAN_START: boolean;
StrWarn: string;
SUM_LIST_LENGTH: number;
CONSENSUS_TIK_TIME: number;
CONSENSUS_CHECK_TIME: number;
PERIOD_FOR_NEXT_SEND: number;
BLOCK_DELTA_ACTIVATE: number;
TIME_END_EXCHANGE: number;
TIME_START_POW: number;
TIME_START_SAVE: number;
TIME_START_LOAD: number;
TreeBlockBuf: any;
DoTxLog: boolean;
//#endregion
//#region block-loader.ts
HistoryBlockBuf: any
//#endregion
//#region block-loader-const.ts
PERIOD_GET_BLOCK: number;
COUNT_HISTORY_BLOCKS_FOR_LOAD: number;
COUNT_BLOCKS_FOR_CHECK_POW: number;
MAX_DELTA_COUNT_SUM_FOR_LOAD: number;
MAX_COUNT_CHAIN_LOAD: number;
PACKET_ALIVE_PERIOD: number;
PACKET_ALIVE_PERIOD_NEXT_NODE: number;
MAX_BLOCK_SEND: number;
COUNT_TASK_FOR_NODE: number;
FORMAT_BLOCK_TRANSFER: string;
WRK_BLOCK_TRANSFER: any;
MAX_ACCOUNTS_TRANSFER: number;
MAX_SMARTS_TRANSFER: number;
FORMAT_REST_TRANSFER: string;
FORMAT_SMART_TRANSFER: string;
//#endregion
//#region server.ts
BUF_TYPE: number;
STR_TYPE: number;
MAX_STR_BUF_DATA: number;
MAX_CONNECTION_ACTIVE: number;
STAT_PERIOD: number;
FORMAT_POW_TO_CLIENT: string;
FORMAT_POW_TO_SERVER: string;
INTERNET_IP_FROM_STUN: string;
ContextPackets: any;
//#endregion
//#region terahashmining.ts
CreateHashMinimal: Function;
CreatePOWVersionX: Function;
GetNonceHashArr: Function;
//#endregion
//#region pow-process.ts
BlockPump: any;
//#endregion
//#region tx-process.ts
SetStatMode: Function;
TreeFindTX
bShowDetail: number;
ClearDataBase: Function;
RewriteAllTransactions: Function;
ReWriteDAppTransactions: Function;
TXPrepareLoadRest: Function;
TXWriteAccArr: Function;
TXWriteSmartArr: Function;
TXWriteAccHash: Function;
EvalCode: Function;
//#endregion
//#region messager.ts
MESSAGER: any;
//#endregion
//#region update.ts
RunOnUpdate: Function;
CheckRewriteTr: Function;
//#endregion
//#region transfer-msg.ts
TrName: Function;
//#endregion
//#region rest_tables.ts
DoRest: Function;
GetRestArr: Function;
GetCurrentRestArr: Function;
GetCurrentRestNum: Function;
//#endregion
nw: any;
GlobalRunMap: any; GlobalRunMap: any;
sha3: any; sha3: any;
SHA3BUF: any; SHA3BUF: any;
shaarr: any; shaarr: any;
ELECTRON: any;
TestTestWaletMode: any;
} }
interface Process { interface Process {
RunRPC: Function; RunRPC: Function;
@@ -507,6 +662,7 @@ declare global {
Path: string; Path: string;
OnMessage: Function; OnMessage: Function;
PeriodAlive: number; PeriodAlive: number;
RunRPC?: Function;
} }
interface Worker { interface Worker {
connected: boolean; connected: boolean;
@@ -542,7 +698,12 @@ declare global {
DappTransactionList?: Function; DappTransactionList?: Function;
DappStaticCall?: Function; DappStaticCall?: Function;
GetHistoryTransactions?: Function; GetHistoryTransactions?: Function;
GetSupply?: Function;
GetTotalSupply?: Function; GetTotalSupply?: Function;
} }
interface Buffer {
Read,
Write,
len
}
} }

View File

@@ -26,7 +26,7 @@ WebApi2.CreateAccount = function(Params, response) {
Body = Body.slice(0, Body.len + 12); Body = Body.slice(0, Body.len + 12);
SendTransaction(Body, TR as any, Params.Wait, function(result, text) { SendTransaction(Body, TR as any, Params.Wait, function(result, text) {
var Result = { 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, Meta: Params.Meta,
}; };
var Str = JSON.stringify(Result); var Str = JSON.stringify(Result);
@@ -42,10 +42,10 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
return { result: 0 }; return { result: 0 };
var Coin; var Coin;
if (typeof Params.Amount === "number") if (typeof Params.Amount === "number")
Coin = COIN_FROM_FLOAT(Params.Amount); Coin = global.COIN_FROM_FLOAT(Params.Amount);
else else
Coin = Params.Amount; Coin = Params.Amount;
var FromNum = ParseNum(Params.FromID); var FromNum = global.ParseNum(Params.FromID);
if (!Coin) if (!Coin)
return { result: 0, Meta: Params.Meta, text: "Params.Amount required" }; return { result: 0, Meta: Params.Meta, text: "Params.Amount required" };
if (!FromNum) if (!FromNum)
@@ -57,7 +57,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
if (typeof Params.ToID === "string" && Params.ToID.length === 66) if (typeof Params.ToID === "string" && Params.ToID.length === 66)
ToPubKeyArr = global.GetArrFromHex(Params.ToID); ToPubKeyArr = global.GetArrFromHex(Params.ToID);
else else
ToID = ParseNum(Params.ToID); ToID = global.ParseNum(Params.ToID);
var DataFrom = global.DApps.Accounts.ReadState(FromNum); var DataFrom = global.DApps.Accounts.ReadState(FromNum);
if (!DataFrom) if (!DataFrom)
return { result: 0, Meta: Params.Meta, text: "Error read account: " + FromNum }; return { result: 0, Meta: Params.Meta, text: "Error read account: " + FromNum };
@@ -68,14 +68,14 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
} }
else { else {
OperationID = MapSendID[FromNum].OperationID; 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 += 20;
} }
} }
OperationID++; OperationID++;
MapSendID[FromNum].OperationID = OperationID; MapSendID[FromNum].OperationID = OperationID;
MapSendID[FromNum].Date = Date.now(); MapSendID[FromNum].Date = Date.now();
var TR = { var TR: any = {
Type: 111, Version: 3, Reserve: 0, FromID: FromNum, OperationID: OperationID, To: [{ Type: 111, Version: 3, Reserve: 0, FromID: FromNum, OperationID: OperationID, To: [{
PubKey: ToPubKeyArr, ID: ToID, SumCOIN: Coin.SumCOIN, PubKey: ToPubKeyArr, ID: ToID, SumCOIN: Coin.SumCOIN,
SumCENT: Coin.SumCENT SumCENT: Coin.SumCENT
@@ -86,11 +86,11 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
if (!Params.FromPrivKey) if (!Params.FromPrivKey)
return { result: 0, Meta: Params.Meta, text: "Params.FromPrivKey required" }; return { result: 0, Meta: Params.Meta, text: "Params.FromPrivKey required" };
TR.Sign = global.DApps.Accounts.GetSignTransferTx(TR, global.GetArrFromHex(Params.FromPrivKey)); 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); Body = Body.slice(0, Body.len + 12);
SendTransaction(Body, TR, Params.Wait, function(result, text) { SendTransaction(Body, TR, Params.Wait, function(result, text) {
var Result = { 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, Meta: Params.Meta,
}; };
var Str = JSON.stringify(Result); var Str = JSON.stringify(Result);
@@ -100,7 +100,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
}; };
WebApi2.GetBalance = function(Params, response) { WebApi2.GetBalance = function(Params, response) {
if (typeof Params === "object") { 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) { if (arr.length) {
var Account = arr[0]; var Account = arr[0];
var Value = Account.Value; var Value = Account.Value;
@@ -116,7 +116,7 @@ WebApi2.GetBalance = function(Params, response) {
WebApi2.GetTransaction = function(Params) { WebApi2.GetTransaction = function(Params) {
if (typeof Params === "object" && Params.TxID) { if (typeof Params === "object" && Params.TxID) {
var Arr = global.GetArrFromHex(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); var Block = global.SERVER.ReadBlockDB(BlockNum);
if (Block && Block.arrContent) { if (Block && Block.arrContent) {
for (var i = 0; i < Block.arrContent.length; i++) { 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" }; return { result: 0, Meta: Params.Meta, text: "Params.Tx.Sign required" };
var TR = Params.Tx; var TR = Params.Tx;
TxHexToArr(TR); 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); Body = Body.slice(0, Body.len + 12);
SendTransaction(Body, TR, Params.Wait, function(result, text) { SendTransaction(Body, TR, Params.Wait, function(result, text) {
var Result = { 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, Meta: Params.Meta,
}; };
var Str = JSON.stringify(Result); var Str = JSON.stringify(Result);
@@ -252,9 +252,9 @@ function TxHexToArr(TR) {
var DELTA_FOR_TIME_TX = 1; var DELTA_FOR_TIME_TX = 1;
function GetTxID(BlockNum, Body) { 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); 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) { function CreateTxID(body, BlockNum, Nonce) {
@@ -262,14 +262,14 @@ function CreateTxID(body, BlockNum, Nonce) {
body.writeUIntLE(Nonce, body.length - 6, 6); body.writeUIntLE(Nonce, body.length - 6, 6);
var HASH = global.sha3(body); 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]; 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]; FullHashTicket[i] = HASH[i];
WriteUintToArrOnPos(FullHashTicket, BlockNum, TR_TICKET_HASH_LENGTH); global.WriteUintToArrOnPos(FullHashTicket, BlockNum, global.TR_TICKET_HASH_LENGTH);
return FullHashTicket; return FullHashTicket;
}; };
function GetBlockNumTr(arr) { 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) { if (arr[0] === global.TYPE_TRANSACTION_CREATE) {
var BlockNum2 = Math.floor(BlockNum / 10) * 10; var BlockNum2 = Math.floor(BlockNum / 10) * 10;
if (BlockNum2 < BlockNum) if (BlockNum2 < BlockNum)
@@ -282,12 +282,12 @@ function GetBlockNumTr(arr) {
function CreateHashBodyPOWInnerMinPower(TR, arr, MinPow, startnonce) { function CreateHashBodyPOWInnerMinPower(TR, arr, MinPow, startnonce) {
var BlockNum = GetBlockNumTr(arr); var BlockNum = GetBlockNumTr(arr);
if (MinPow === undefined) { 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; var nonce = startnonce;
while (1) { while (1) {
var TxID = CreateTxID(arr, BlockNum, nonce); var TxID = CreateTxID(arr, BlockNum, nonce);
var power = GetPowPower(sha3(TxID)); var power = global.GetPowPower(global.sha3(TxID));
if (power >= MinPow) { if (power >= MinPow) {
TR._TxID = TxID; TR._TxID = TxID;
TR._BlockNum = BlockNum; TR._BlockNum = BlockNum;
@@ -349,7 +349,7 @@ function SendTransaction(Body, TR, Wait, F) {
function GetTransactionFromBody(Params, Block, TrNum, Body) { function GetTransactionFromBody(Params, Block, TrNum, Body) {
var TR = global.DApps.Accounts.GetObjectTransaction(Body); var TR = global.DApps.Accounts.GetObjectTransaction(Body);
if (TR) { if (TR) {
ConvertBufferToStr(TR); global.ConvertBufferToStr(TR);
TR.result = 1; TR.result = 1;
TR.Meta = Params.Meta; TR.Meta = Params.Meta;
if (Block.VersionBody === 1 && Block.arrContentResult) { if (Block.VersionBody === 1 && Block.arrContentResult) {

View File

@@ -14,16 +14,9 @@ const fs = require('fs');
const os = require('os'); const os = require('os');
import * as crypto from 'crypto'; import * as crypto from 'crypto';
let {
GetNormalPathString,
sha3,
AddTrMap,
ADD_HASH_RATE
} = global
global.START_SERVER = 1; global.START_SERVER = 1;
global.DATA_PATH = GetNormalPathString(global.DATA_PATH); global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
global.CODE_PATH = GetNormalPathString(global.CODE_PATH); global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
console.log("DATA DIR: " + global.DATA_PATH); console.log("DATA DIR: " + global.DATA_PATH);
console.log("PROGRAM DIR: " + global.CODE_PATH); console.log("PROGRAM DIR: " + global.CODE_PATH);
require("../core/library"); require("../core/library");
@@ -31,7 +24,7 @@ global.ToLog(os.platform() + " (" + os.arch() + ") " + os.release());
var VerArr = process.versions.node.split('.'); var VerArr = process.versions.node.split('.');
global.ToLog("nodejs: " + process.versions.node); global.ToLog("nodejs: " + process.versions.node);
if ((VerArr[0] as any as number) < 8) { 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(); process.exit();
} }
var CServer = require("../core/server"); var CServer = require("../core/server");
@@ -62,7 +55,7 @@ process.on('uncaughtException' as any, function(err: TeraError) {
if (global.PROCESS_NAME !== "MAIN") { if (global.PROCESS_NAME !== "MAIN") {
process.send({ cmd: "log", message: err }); process.send({ cmd: "log", message: err });
} }
global.global.ToError(err.stack); global.ToError(err.stack);
global.ToLog(err.stack); global.ToLog(err.stack);
if (err.code === "ENOTFOUND" || err.code === "ECONNRESET" || err.code === "EPIPE") { 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) { process.on('error' as any, function(err: TeraError) {
global.global.ToError(err.stack); global.ToError(err.stack);
global.ToLog(err.stack); global.ToLog(err.stack);
}); });
var ArrChildProcess = []; var ArrChildProcess = [];
@@ -134,15 +127,15 @@ function OnMessageWeb(msg) {
function AddTransactionFromWeb(Params) { function AddTransactionFromWeb(Params) {
var body = global.GetArrFromHex(Params.HexValue); var body = global.GetArrFromHex(Params.HexValue);
if (global.TX_PROCESS && global.TX_PROCESS.Worker) { 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 }); global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex, Web: 1, WebID: Params.WebID });
} }
var Res = global.SERVER.AddTransaction({ body: body }, 1); var Res = global.SERVER.AddTransaction({ body: body }, 1);
var text = AddTrMap[Res]; var text = global.AddTrMap[Res];
var final = false; var final = false;
if (Res <= 0 && Res !== - 3) if (Res <= 0 && Res !== - 3)
final = true; final = true;
global.ToLogClient("Send: " + text, global.GetHexFromArr(sha3(body)), final); global.ToLogClient("Send: " + text, global.GetHexFromArr(global.sha3(body)), final);
return text; return text;
}; };
global.AddTransactionFromWeb = AddTransactionFromWeb; global.AddTransactionFromWeb = AddTransactionFromWeb;
@@ -311,7 +304,7 @@ function StartChildProcess(Item) {
ITEM.Worker.on('error', function(err) { ITEM.Worker.on('error', function(err) {
}); });
ITEM.Worker.on('close', function(code) { 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; return;
if (GENERATE_BLOCK_ACCOUNT < 8) if (GENERATE_BLOCK_ACCOUNT < 8)
return; return;
var PathMiner = GetCodePath("../miner.js"); var PathMiner = global.GetCodePath("../miner.js");
if (!fs.existsSync(PathMiner)) if (!fs.existsSync(PathMiner))
PathMiner = "./process/pow-process.js"; PathMiner = "./process/pow-process.js";
if (ArrMiningWrk.length >= GetCountMiningCPU()) if (ArrMiningWrk.length >= GetCountMiningCPU())
@@ -494,13 +487,13 @@ function RunStopPOWProcess(Mode) {
} }
else else
if (msg.cmd === "HASHRATE") { if (msg.cmd === "HASHRATE") {
ADD_HASH_RATE(msg.CountNonce); global.ADD_HASH_RATE(msg.CountNonce);
} }
}); });
Worker.on('error', function(err) { Worker.on('error', function(err) {
if (!ArrMiningWrk.length) if (!ArrMiningWrk.length)
return; return;
global.global.ToError('ERROR IN PROCESS: ' + err); global.ToError('ERROR IN PROCESS: ' + err);
}); });
Worker.on('close', function(code) { Worker.on('close', function(code) {
global.ToLog("STOP PROCESS: " + Worker.Num + " pid:" + Worker.pid); global.ToLog("STOP PROCESS: " + Worker.Num + " pid:" + Worker.pid);
@@ -533,9 +526,7 @@ function SetCalcPOW(Block, cmd) {
}; };
global.SetCalcPOW = SetCalcPOW; global.SetCalcPOW = SetCalcPOW;
global.RunStopPOWProcess = RunStopPOWProcess; global.RunStopPOWProcess = RunStopPOWProcess;
let {
glCurNumFindArr
} = global
function DoGetNodes() { function DoGetNodes() {
if (!SERVER) if (!SERVER)
return; return;
@@ -543,11 +534,11 @@ function DoGetNodes() {
return; return;
if (!SERVER.NodesArrUnSort || !SERVER.NodesArrUnSort.length) if (!SERVER.NodesArrUnSort || !SERVER.NodesArrUnSort.length)
return; return;
var Num = glCurNumFindArr % global.SERVER.NodesArrUnSort.length; var Num = global.glCurNumFindArr % global.SERVER.NodesArrUnSort.length;
var Node = global.SERVER.NodesArrUnSort[Num]; var Node = global.SERVER.NodesArrUnSort[Num];
if (Num === 0) if (Num === 0)
glCurNumFindArr = 0; global.glCurNumFindArr = 0;
glCurNumFindArr++; global.glCurNumFindArr++;
if (Node.Delete) if (Node.Delete)
return; return;
if (SERVER.NodeInBan(Node)) if (SERVER.NodeInBan(Node))
@@ -565,7 +556,7 @@ function DoConnectToNodes(Arr, Mode) {
if (!GrayConnect() && global.SERVER.CanSend < 2) { if (!GrayConnect() && global.SERVER.CanSend < 2) {
return; return;
} }
if (GrayConnect() && global.SERVER.ActualNodes.size > GetGrayServerConnections()) if (GrayConnect() && global.SERVER.ActualNodes.size > global.GetGrayServerConnections())
return; return;
if (Arr.length) { if (Arr.length) {
var MinProcessCount = global.SERVER.BusyLevel - 1; var MinProcessCount = global.SERVER.BusyLevel - 1;
@@ -592,16 +583,14 @@ var idRunOnce;
function RunServer() { function RunServer() {
let { let {
GetNetworkName, GetNetworkName,
DEF_VERSION,
NET_WORK_MODE, NET_WORK_MODE,
SAVE_CONST, SAVE_CONST,
ToLog,
START_IP, START_IP,
START_PORT_NUMBER START_PORT_NUMBER
} = global } = global
idRunOnce = setInterval(RunOnce, 1000); idRunOnce = setInterval(RunOnce, 1000);
global.ToLog("NETWORK: " + GetNetworkName()); global.ToLog("NETWORK: " + GetNetworkName());
global.ToLog("VERSION: " + DEF_VERSION); global.ToLog("VERSION: " + global.DEF_VERSION);
if (global.NET_WORK_MODE) { if (global.NET_WORK_MODE) {
global.START_IP = NET_WORK_MODE.ip; global.START_IP = NET_WORK_MODE.ip;
global.START_PORT_NUMBER = NET_WORK_MODE.port; global.START_PORT_NUMBER = NET_WORK_MODE.port;
@@ -666,7 +655,7 @@ function RunOnce() {
var Period = (global.random(600) + global.RESTART_PERIOD_SEC); var Period = (global.random(600) + global.RESTART_PERIOD_SEC);
global.ToLog("SET RESTART NODE AFTER: " + Period + " sec"); global.ToLog("SET RESTART NODE AFTER: " + Period + " sec");
setInterval(function() { setInterval(function() {
RestartNode(); global.RestartNode();
}, Period * 1000); }, Period * 1000);
} }
setTimeout(function() { setTimeout(function() {
@@ -713,7 +702,7 @@ function TestSignLib(MaxTime) {
for (var Num = 0; Num < 1000; Num++) { for (var Num = 0; Num < 1000; Num++) {
var Result = global.secp256k1.verify(hash, Sign, PubKey); var Result = global.secp256k1.verify(hash, Sign, PubKey);
if (!Result) { if (!Result) {
global.global.ToError("Error test sign"); global.ToError("Error test sign");
process.exit(0); process.exit(0);
} }
var Time = process.hrtime(startTime); var Time = process.hrtime(startTime);

View File

@@ -37,7 +37,7 @@ function CalcPOWHash() {
}); });
} }
catch (e) { catch (e) {
global.global.ToError(e); global.ToError(e);
} }
} }
}; };
@@ -52,7 +52,7 @@ PROCESS.on("message", function(e) {
}); });
} }
catch (e) { catch (e) {
global.global.ToError(e); global.ToError(e);
} }
} }
else else
@@ -80,12 +80,12 @@ function PumpHash() {
if (global.BlockPump) { if (global.BlockPump) {
var e = Date.now(); var e = Date.now();
if (EndTime < StartTime) { 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); return void (EndTime = e);
CreatePOWVersionX(BlockPump, 1); global.CreatePOWVersionX(global.BlockPump, 1);
} }
else { 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);
} }
} }
}; };

View File

@@ -10,15 +10,15 @@
global.PROCESS_NAME = "STATIC"; global.PROCESS_NAME = "STATIC";
import * as crypto from 'crypto'; import * as crypto from 'crypto';
const fs = require('fs'); import * as fs from 'fs'
require("../core/constant"); import "../core/constant"
require('../core/block-loader-const'); import '../core/block-loader-const'
require('../core/rest_tables.js'); import '../core/rest_tables'
require('../system/accounts.js'); import '../system/accounts'
require('../system/smart.js'); import '../system/smart'
global.DATA_PATH = GetNormalPathString(global.DATA_PATH); global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
global.CODE_PATH = GetNormalPathString(global.CODE_PATH); global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
require("../core/library"); import "../core/library"
global.READ_ONLY_DB = 1; global.READ_ONLY_DB = 1;
var LastAlive = Date.now(); var LastAlive = Date.now();
setTimeout(function() { setTimeout(function() {
@@ -74,7 +74,7 @@ function CheckAlive() {
if (global.NOALIVE) if (global.NOALIVE)
return; return;
var Delta = Date.now() - LastAlive; 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); global.ToLog("STATIC-DB: ALIVE TIMEOUT Stop and exit: " + Delta + "/" + global.CHECK_STOP_CHILD_PROCESS);
process.exit(0); process.exit(0);
return; return;
@@ -83,11 +83,11 @@ function CheckAlive() {
process.on('uncaughtException', function(err) { process.on('uncaughtException', function(err) {
global.ToError(err.stack); global.ToError(err.stack);
global.ToLog(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------------------"); global.ToLog("-----------------STATIC-DB EXIT------------------");
process.exit(); process.exit();
}); });
process.on('error', function(err) { process.on('error' as any, function(err: TeraError) {
global.ToError("STATIC-DB:\n" + err.stack); global.ToError("STATIC-DB:\n" + err.stack);
global.ToLog(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.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
global.HTTP_PORT_NUMBER = 0; global.HTTP_PORT_NUMBER = 0;
setInterval(function() { setInterval(function() {
if (SERVER) if (global.SERVER)
global.SERVER.Close(); global.SERVER.Close();
global.DApps.Accounts.Close(); global.DApps.Accounts.Close();
global.DApps.Smart.DBSmart.Close(); global.DApps.Smart.DBSmart.Close();
@@ -116,8 +116,8 @@ function GETBLOCKHEADER100(msg) {
var Count = Data.Count; var Count = Data.Count;
if (!Count || Count < 0 || !EndNum100) if (!Count || Count < 0 || !EndNum100)
return; return;
if (Count > COUNT_BLOCKS_FOR_LOAD) if (Count > global.COUNT_BLOCKS_FOR_LOAD)
Count = COUNT_BLOCKS_FOR_LOAD; Count = global.COUNT_BLOCKS_FOR_LOAD;
var Arr = []; var Arr = [];
var Data100 = global.SERVER.DBHeader100.Read(EndNum100); var Data100 = global.SERVER.DBHeader100.Read(EndNum100);
if (Data100 && global.CompareArr(Data100.Hash100, LoadHash100) === 0) { if (Data100 && global.CompareArr(Data100.Hash100, LoadHash100) === 0) {
@@ -131,7 +131,7 @@ function GETBLOCKHEADER100(msg) {
Arr.push(Data100.Hash); 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); global.ToLog("GETBLOCKHEADER100 Send Arr=" + Arr.length + " - " + BlockNum);
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETBLOCKHEADER100", Context: msg.Context, Data: BufWrite }); 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; var Foward = Data.Foward;
if (Foward) { if (Foward) {
var BlockDB = global.SERVER.ReadBlockHeaderDB(Data.BlockNum); 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; StartNum = Data.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
if (StartNum < 0) if (StartNum < 0)
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()) if (BlockNum > global.SERVER.GetMaxNumBlockDB())
BlockNum = global.SERVER.GetMaxNumBlockDB(); BlockNum = global.SERVER.GetMaxNumBlockDB();
} }
@@ -159,8 +159,8 @@ function GETBLOCKHEADER(msg) {
var Count = Data.Count; var Count = Data.Count;
if (!Count || Count < 0 || BlockNum < 0) if (!Count || Count < 0 || BlockNum < 0)
return; return;
if (Count > COUNT_BLOCKS_FOR_LOAD) if (Count > global.COUNT_BLOCKS_FOR_LOAD)
Count = COUNT_BLOCKS_FOR_LOAD; Count = global.COUNT_BLOCKS_FOR_LOAD;
Count += global.BLOCK_PROCESSING_LENGTH2; Count += global.BLOCK_PROCESSING_LENGTH2;
var BlockDB = global.SERVER.ReadBlockHeaderDB(BlockNum); 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, 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 BufWrite;
var BlockDB = global.SERVER.ReadBlockDB(BlockNum); var BlockDB = global.SERVER.ReadBlockDB(BlockNum);
var StrSend; var StrSend;
if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || IsZeroArr(TreeHash))) { if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || global.IsZeroArr(TreeHash))) {
var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, FORMAT_BLOCK_TRANSFER, MAX_PACKET_LENGTH, WRK_BLOCK_TRANSFER); var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, global.FORMAT_BLOCK_TRANSFER, global.MAX_PACKET_LENGTH, global.WRK_BLOCK_TRANSFER);
StrSend = "OK"; StrSend = "OK";
} }
if (StrSend === "OK") { if (StrSend === "OK") {
@@ -211,7 +211,7 @@ function GETREST(msg) {
var Data = msg.Data; var Data = msg.Data;
if (!Data.BlockNum) if (!Data.BlockNum)
return; return;
if (IsZeroArr(Data.AccHash)) { if (global.IsZeroArr(Data.AccHash)) {
return; return;
} }
var BlockNumRest = Data.BlockNum; var BlockNumRest = Data.BlockNum;
@@ -234,8 +234,8 @@ function GETREST(msg) {
var WorkFormatLength = global.DApps.Accounts.SIZE_ACCOUNT_ROW; var WorkFormatLength = global.DApps.Accounts.SIZE_ACCOUNT_ROW;
var Max = global.DApps.Accounts.DBState.GetMaxNum(); var Max = global.DApps.Accounts.DBState.GetMaxNum();
var LengthAccount = Data.Count; var LengthAccount = Data.Count;
if (LengthAccount > MAX_ACCOUNTS_TRANSFER) if (LengthAccount > global.MAX_ACCOUNTS_TRANSFER)
LengthAccount = MAX_ACCOUNTS_TRANSFER; LengthAccount = global.MAX_ACCOUNTS_TRANSFER;
var StartAccount = Data.AccNum; var StartAccount = Data.AccNum;
var EndAccount = StartAccount + LengthAccount - 1; var EndAccount = StartAccount + LengthAccount - 1;
if (EndAccount > Max) if (EndAccount > Max)
@@ -249,7 +249,7 @@ function GETREST(msg) {
else { else {
ArrRest = GetArrRest(BlockNumRest, StartAccount, EndAccount); ArrRest = GetArrRest(BlockNumRest, StartAccount, EndAccount);
ProofHash = Tree.Root; ProofHash = Tree.Root;
var RetProof = GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount); var RetProof = global.GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
ProofArrL = RetProof.ArrL; ProofArrL = RetProof.ArrL;
ProofArrR = RetProof.ArrR; ProofArrR = RetProof.ArrR;
BufLength = 1000 + ArrRest.length * WorkFormatLength; 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 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 }); process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETREST", Context: msg.Context, Data: BufWrite });
}; };
@@ -279,12 +279,12 @@ function GETSMART(msg) {
Arr.push(BufSmart); Arr.push(BufSmart);
} }
var Data2 = { Result: Arr.length ? 1 : 0, Arr: Arr }; 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 }); process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETSMART", Context: msg.Context, Data: BufWrite });
}; };
var glMapForHash = {}; var glMapForHash = {};
function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly) { function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly?) {
var ArrRest = []; var ArrRest = [];
var WorkStruct = {}; var WorkStruct = {};
var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW; var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW;
@@ -352,7 +352,7 @@ function GetRestMerkleTree(BlockNumRest, RestIndexArr) {
for (var Num = 0; Num < ArrHash.length; Num++) { for (var Num = 0; Num < ArrHash.length; Num++) {
MerkleCalc[Num] = 1; MerkleCalc[Num] = 1;
} }
UpdateMerklTree(MerkleTree, MerkleCalc, 0); global.UpdateMerklTree(MerkleTree, MerkleCalc, 0);
glMapRest[BlockNumRest] = MerkleTree; glMapRest[BlockNumRest] = MerkleTree;
var Time2 = process.hrtime(startTime); var Time2 = process.hrtime(startTime);
var deltaTime1 = (Time1[0] * 1000 + Time1[1] / 1e6) / 1000; var deltaTime1 = (Time1[0] * 1000 + Time1[1] / 1e6) / 1000;

View File

@@ -12,15 +12,15 @@ global.PROCESS_NAME = "TX";
import * as crypto from 'crypto'; import * as crypto from 'crypto';
const fs = require('fs'); const fs = require('fs');
require("../core/constant"); require("../core/constant");
global.DATA_PATH = GetNormalPathString(global.DATA_PATH); global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
global.CODE_PATH = GetNormalPathString(global.CODE_PATH); global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
require("../core/library"); require("../core/library");
global.READ_ONLY_DB = 0; global.READ_ONLY_DB = 0;
var LastAlive = Date.now(); var LastAlive = Date.now();
setTimeout(function() { setTimeout(function() {
setInterval(CheckAlive, 1000); setInterval(CheckAlive, 1000);
}, 20000); }, 20000);
setInterval(PrepareStatEverySecond, 1000); setInterval(global.PrepareStatEverySecond, 1000);
if (process.send) { if (process.send) {
setInterval(function() { setInterval(function() {
process.send({ cmd: "Alive" }); process.send({ cmd: "Alive" });
@@ -58,7 +58,7 @@ process.on('message', function(msg) {
global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1); global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
break; break;
case "Eval": case "Eval":
EvalCode(msg.Code); global.EvalCode(msg.Code);
break; break;
default: default:
break; break;
@@ -82,11 +82,11 @@ function CheckAlive() {
process.on('uncaughtException', function(err) { process.on('uncaughtException', function(err) {
global.ToError(err.stack); global.ToError(err.stack);
global.ToLog(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------------------"); global.ToLog("-----------------TX-PROCESS EXIT------------------");
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.ToError("TX-PROCESS:\n" + err.stack);
global.ToLog(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, 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])); 77, 77, 77, 77, 77, 77, 77, 77, 77, 77]));
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true); 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() { setInterval(function() {
if (SERVER) { if (global.SERVER) {
global.SERVER.Close(); global.SERVER.Close();
} }
DoTXProcess(); DoTXProcess();
}, 10); }, 10);
var BlockTree = new STreeBuffer(30 * 1000, CompareItemHashSimple, "number"); var BlockTree = new STreeBuffer(30 * 1000, global.CompareItemHashSimple, "number");
global.bShowDetail = 0; global.bShowDetail = 0;
var StopTxProcess = 0; var StopTxProcess = 0;
var MinimalValidBlock = 0; var MinimalValidBlock = 0;
@@ -116,12 +116,12 @@ function DoTXProcess() {
InitTXProcess(); InitTXProcess();
var BlockMin = FindMinimal(); var BlockMin = FindMinimal();
if (!BlockMin) { if (!BlockMin) {
if (bShowDetail) if (global.bShowDetail)
global.ToLog("!BlockMin"); global.ToLog("!BlockMin");
return; return;
} }
var StartTime = Date.now(); var StartTime = Date.now();
if (bShowDetail) if (global.bShowDetail)
global.ToLog("BlockMin: " + BlockMin.BlockNum + " LastBlockNum=" + LastBlockNum); global.ToLog("BlockMin: " + BlockMin.BlockNum + " LastBlockNum=" + LastBlockNum);
var CountTX = 0; var CountTX = 0;
for (var Num = BlockMin.BlockNum; Num < BlockMin.BlockNum + 200; Num++) { for (var Num = BlockMin.BlockNum; Num < BlockMin.BlockNum + 200; Num++) {
@@ -131,7 +131,7 @@ function DoTXProcess() {
break; break;
var Block = global.SERVER.ReadBlockDB(Num); var Block = global.SERVER.ReadBlockDB(Num);
if (!Block) { if (!Block) {
if (bShowDetail) if (global.bShowDetail)
global.ToLog("!Block"); global.ToLog("!Block");
break; break;
} }
@@ -140,7 +140,7 @@ function DoTXProcess() {
} }
var Item = BlockTree.LoadValue(Block.BlockNum, 1); var Item = BlockTree.LoadValue(Block.BlockNum, 1);
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0) { 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)); global.ToLog("WAS CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
continue; continue;
} }
@@ -157,7 +157,7 @@ function DoTXProcess() {
if (Num % 100000 === 0) if (Num % 100000 === 0)
global.ToLog("CALC: " + Num); global.ToLog("CALC: " + Num);
CountTX++; CountTX++;
if (bShowDetail) if (global.bShowDetail)
global.ToLog(" CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12)); global.ToLog(" CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
BlockTree.SaveValue(Block.BlockNum, { BlockNum: Block.BlockNum, SumHash: Block.SumHash }); BlockTree.SaveValue(Block.BlockNum, { BlockNum: Block.BlockNum, SumHash: Block.SumHash });
LastBlockNum = Block.BlockNum; LastBlockNum = Block.BlockNum;
@@ -167,14 +167,14 @@ function DoTXProcess() {
function FindMinimal() { function FindMinimal() {
var MaxNumBlockDB = global.SERVER.GetMaxNumBlockDB(); var MaxNumBlockDB = global.SERVER.GetMaxNumBlockDB();
if (MaxNumBlockDB && MaxNumBlockDB < LastBlockNum) { if (MaxNumBlockDB && MaxNumBlockDB < LastBlockNum) {
if (bShowDetail) if (global.bShowDetail)
global.ToLog("MaxNumBlockDB<LastBlockNum: " + MaxNumBlockDB + "<" + LastBlockNum); global.ToLog("MaxNumBlockDB<LastBlockNum: " + MaxNumBlockDB + "<" + LastBlockNum);
LastBlockNum = MaxNumBlockDB - 1; LastBlockNum = MaxNumBlockDB - 1;
BlockTree.Clear(); BlockTree.Clear();
} }
if (LastBlockNum < MinimalValidBlock) if (LastBlockNum < MinimalValidBlock)
LastBlockNum = MinimalValidBlock; LastBlockNum = MinimalValidBlock;
if (bShowDetail) if (global.bShowDetail)
global.ToLog("FindMinimal from LastBlockNum=" + LastBlockNum); global.ToLog("FindMinimal from LastBlockNum=" + LastBlockNum);
for (var Num = LastBlockNum; Num--; Num >= 0) { for (var Num = LastBlockNum; Num--; Num >= 0) {
if (Num < MinimalValidBlock) if (Num < MinimalValidBlock)
@@ -186,7 +186,7 @@ function FindMinimal() {
if (!IsValidSumHash(Block)) { if (!IsValidSumHash(Block)) {
continue; continue;
} }
if (Block.BlockNum % PERIOD_ACCOUNT_HASH === 0) { if (Block.BlockNum % global.PERIOD_ACCOUNT_HASH === 0) {
var Item = global.DApps.Accounts.GetAccountHashItem(Block.BlockNum); var Item = global.DApps.Accounts.GetAccountHashItem(Block.BlockNum);
if (Item) { if (Item) {
BlockTree.SaveValue(Block.BlockNum, Item); BlockTree.SaveValue(Block.BlockNum, Item);
@@ -195,10 +195,10 @@ function FindMinimal() {
var Item = BlockTree.LoadValue(Block.BlockNum, 1); var Item = BlockTree.LoadValue(Block.BlockNum, 1);
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0) if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0)
return Block; return Block;
if (bShowDetail) if (global.bShowDetail)
global.ToLog("" + Num + " " + Block.BlockNum + ". Item=" + JSON.stringify(Item) + " MinimalValidBlock=" + MinimalValidBlock); global.ToLog("" + Num + " " + Block.BlockNum + ". Item=" + JSON.stringify(Item) + " MinimalValidBlock=" + MinimalValidBlock);
} }
if (bShowDetail) if (global.bShowDetail)
global.ToLog("MinimalValidBlock:" + MinimalValidBlock); global.ToLog("MinimalValidBlock:" + MinimalValidBlock);
if (MinimalValidBlock === 0 && LastBlockNum > 0) { if (MinimalValidBlock === 0 && LastBlockNum > 0) {
RewriteAllTransactions(); RewriteAllTransactions();
@@ -212,12 +212,12 @@ function IsValidSumHash(Block) {
return 1; return 1;
if (Block.BlockNum < 16) if (Block.BlockNum < 16)
return 1; return 1;
if (IsZeroArr(Block.SumHash)) if (global.IsZeroArr(Block.SumHash))
return 0; return 0;
var PrevBlock = global.SERVER.ReadBlockHeaderDB(Block.BlockNum - 1); var PrevBlock = global.SERVER.ReadBlockHeaderDB(Block.BlockNum - 1);
if (!PrevBlock) if (!PrevBlock)
return 0; return 0;
var SumHash2 = shaarr2(PrevBlock.SumHash, Block.Hash); var SumHash2 = global.shaarr2(PrevBlock.SumHash, Block.Hash);
if (global.CompareArr(SumHash2, Block.SumHash) === 0) if (global.CompareArr(SumHash2, Block.SumHash) === 0)
return 1; return 1;
return 0; return 0;
@@ -240,7 +240,7 @@ function InitTXProcess() {
StateTX = global.DApps.Accounts.DBStateTX.Read(0); StateTX = global.DApps.Accounts.DBStateTX.Read(0);
LastBlockNum = StateTX.BlockNum; LastBlockNum = StateTX.BlockNum;
MinimalValidBlock = StateTX.BlockNumMin; 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) { if (LastBlockNum > 100) {
LastBlockNum = 1 + LastBlockNum - 100; LastBlockNum = 1 + LastBlockNum - 100;
} }
@@ -254,8 +254,8 @@ global.ClearDataBase = ClearDataBase;
function ClearDataBase() { function ClearDataBase() {
MinimalValidBlock = 0; MinimalValidBlock = 0;
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].ClearDataBase(); global.DApps[key].ClearDataBase();
} }
LastBlockNum = 0; LastBlockNum = 0;
BlockTree.Clear(); BlockTree.Clear();
@@ -268,8 +268,8 @@ function RewriteAllTransactions() {
return; return;
} }
global.ToLog("*************RewriteAllTransactions"); global.ToLog("*************RewriteAllTransactions");
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].ClearDataBase(); global.DApps[key].ClearDataBase();
} }
LastBlockNum = 0; LastBlockNum = 0;
BlockTree.Clear(); BlockTree.Clear();
@@ -291,8 +291,8 @@ function TXPrepareLoadRest(BlockNum) {
StopTxProcess = 1; StopTxProcess = 1;
MinimalValidBlock = BlockNum; MinimalValidBlock = BlockNum;
global.ToLog("*************TXPrepareLoadRest:" + BlockNum, 2); global.ToLog("*************TXPrepareLoadRest:" + BlockNum, 2);
for (var key in DApps) { for (var key in global.DApps) {
DApps[key].ClearDataBase(); global.DApps[key].ClearDataBase();
} }
LastBlockNum = BlockNum; LastBlockNum = BlockNum;
BlockTree.Clear(); BlockTree.Clear();
@@ -345,7 +345,7 @@ global.EvalCode = function(Code) {
var Result; var Result;
try { try {
var ret = eval(Code); var ret = eval(Code);
Result = JSON.stringify(ret, "", 4); Result = JSON.stringify(ret, undefined, 4);
} }
catch (e) { catch (e) {
Result = "" + e; Result = "" + e;

View File

@@ -80,7 +80,7 @@ process.on('message', function(msg) {
break; break;
case "DappEvent": case "DappEvent":
{ {
AddDappEventToGlobalMap(msg.Data); global.AddDappEventToGlobalMap(msg.Data);
break; break;
} }
case "ToLogClient": case "ToLogClient":
@@ -215,7 +215,7 @@ function MainHTTPFunction(request, response) {
return; return;
if (!request.socket || !request.socket.remoteAddress) if (!request.socket || !request.socket.remoteAddress)
return; return;
SetSafeResponce(response); global.SetSafeResponce(response);
var DataURL = url.parse(request.url); var DataURL = url.parse(request.url);
var Params = querystring.parse(DataURL.query); var Params = querystring.parse(DataURL.query);
var Path = querystring.unescape(DataURL.pathname); 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" })); response.end(JSON.stringify({ result: 0, text: "You must set const USE_HARD_API_V2:1" }));
return; return;
} }
Caller = WebApi2; Caller = global.WebApi2;
} }
Method = ArrPath[2]; Method = ArrPath[2];
} }
@@ -390,16 +390,16 @@ function DoCommandNew(response, Type, Path, Params) {
response.writeHead(301, { "Location": '/' }); response.writeHead(301, { "Location": '/' });
return response.end(); return response.end();
case "file": case "file":
SendBlockFile(response, ArrPath[1], ArrPath[2]); global.SendBlockFile(response, ArrPath[1], ArrPath[2]);
break; break;
case "DappTemplateFile": case "DappTemplateFile":
DappTemplateFile(response, ArrPath[1]); global.DappTemplateFile(response, ArrPath[1]);
break; break;
case "smart": case "smart":
DappSmartCodeFile(response, ArrPath[1]); global.DappSmartCodeFile(response, ArrPath[1]);
break; break;
case "client": case "client":
DappClientCodeFile(response, ArrPath[1]); global.DappClientCodeFile(response, ArrPath[1]);
default: default:
{ {
var Name = ArrPath[ArrPath.length - 1]; var Name = ArrPath[ArrPath.length - 1];
@@ -466,7 +466,7 @@ function DoCommandNew(response, Type, Path, Params) {
Name = PrefixPath + "/" + Name; Name = PrefixPath + "/" + Name;
break; break;
} }
SendWebFile(response, Name, "", 1); global.SendWebFile(response, Name, "", 1);
break; break;
} }
} }
@@ -506,24 +506,24 @@ HostingCaller.GetAccountList = function(Params) {
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
if (!Params.CountNum) if (!Params.CountNum)
Params.CountNum = 1; 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 }; return { result: 1, arr: arr };
}; };
HostingCaller.GetAccount = function(id) { HostingCaller.GetAccount = function(id) {
id = ParseNum(id); id = global.ParseNum(id);
var arr = global.DApps.Accounts.GetRowsAccounts(id, 1); var arr = global.DApps.Accounts.GetRowsAccounts(id, 1);
return { Item: arr[0], result: 1 }; return { Item: arr[0], result: 1 };
}; };
HostingCaller.GetBlockList = function(Params, response) { HostingCaller.GetBlockList = function(Params, response) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
Params.StartNum = ParseNum(Params.StartNum); Params.StartNum = global.ParseNum(Params.StartNum);
Params.CountNum = ParseNum(Params.CountNum); Params.CountNum = global.ParseNum(Params.CountNum);
if (Params.CountNum > MaxCountViewRows) if (Params.CountNum > MaxCountViewRows)
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
if (!Params.CountNum) if (!Params.CountNum)
Params.CountNum = 1; Params.CountNum = 1;
return HTTPCaller.GetBlockList(Params, response); return global.HTTPCaller.GetBlockList(Params, response);
}; };
HostingCaller.GetTransactionList = function(Params, response) { HostingCaller.GetTransactionList = function(Params, response) {
Params.Param3 = Params.BlockNum; Params.Param3 = Params.BlockNum;
@@ -532,12 +532,12 @@ HostingCaller.GetTransactionList = function(Params, response) {
HostingCaller.GetTransactionAll = function(Params, response) { HostingCaller.GetTransactionAll = function(Params, response) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
Params.Param3 = ParseNum(Params.Param3); Params.Param3 = global.ParseNum(Params.Param3);
Params.StartNum = ParseNum(Params.StartNum); Params.StartNum = global.ParseNum(Params.StartNum);
Params.CountNum = ParseNum(Params.CountNum); Params.CountNum = global.ParseNum(Params.CountNum);
if (Params.CountNum > MaxCountViewRows) if (Params.CountNum > MaxCountViewRows)
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
return HTTPCaller.GetTransactionAll(Params, response); return global.HTTPCaller.GetTransactionAll(Params, response);
}; };
HostingCaller.GetDappList = function(Params) { HostingCaller.GetDappList = function(Params) {
if (typeof Params !== "object") if (typeof Params !== "object")
@@ -546,7 +546,7 @@ HostingCaller.GetDappList = function(Params) {
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
if (!Params.CountNum) if (!Params.CountNum)
Params.CountNum = 1; 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 }; return { result: 1, arr: arr };
}; };
HostingCaller.GetNodeList = function(Params) { HostingCaller.GetNodeList = function(Params) {
@@ -640,7 +640,7 @@ HostingCaller.GetAccountListByKey = function(Params, ppp, bRet) {
var Ret = { result: 1, arr: arr }; var Ret = { result: 1, arr: arr };
if (bRet) if (bRet)
return Ret; return Ret;
var Context = GetUserContext(Params); var Context = global.GetUserContext(Params);
var StrInfo = JSON.stringify(Ret); var StrInfo = JSON.stringify(Ret);
if (!Params.AllData && Context.PrevAccountList === StrInfo) { if (!Params.AllData && Context.PrevAccountList === StrInfo) {
return { result: 0, cache: 1 }; return { result: 0, cache: 1 };
@@ -692,20 +692,20 @@ HostingCaller.SendTransactionHex = function(Params, response) {
HostingCaller.DappSmartHTMLFile = function(Params) { HostingCaller.DappSmartHTMLFile = function(Params) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
return HTTPCaller.DappSmartHTMLFile(Params); return global.HTTPCaller.DappSmartHTMLFile(Params);
}; };
HostingCaller.DappBlockFile = function(Params, responce) { HostingCaller.DappBlockFile = function(Params, responce) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
return HTTPCaller.DappBlockFile(Params, responce); return global.HTTPCaller.DappBlockFile(Params, responce);
}; };
HostingCaller.DappInfo = function(Params) { HostingCaller.DappInfo = function(Params) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
var SmartNum = ParseNum(Params.Smart); var SmartNum = global.ParseNum(Params.Smart);
process.send({ cmd: "SetSmartEvent", Smart: SmartNum }); process.send({ cmd: "SetSmartEvent", Smart: SmartNum });
var Context = GetUserContext(Params); var Context = global.GetUserContext(Params);
var Ret = HTTPCaller.DappInfo(Params, undefined, 1); var Ret = global.HTTPCaller.DappInfo(Params, undefined, 1);
Ret.PubKey = undefined; Ret.PubKey = undefined;
var StrInfo = JSON.stringify(Ret); var StrInfo = JSON.stringify(Ret);
if (!Params.AllData && Context.PrevDappInfo === StrInfo) { if (!Params.AllData && Context.PrevDappInfo === StrInfo) {
@@ -726,7 +726,7 @@ HostingCaller.DappWalletList = function(Params) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
var Ret = HostingCaller.GetAccountListByKey(Params, undefined, 1); var Ret = HostingCaller.GetAccountListByKey(Params, undefined, 1);
var Smart = ParseNum(Params.Smart); var Smart = global.ParseNum(Params.Smart);
var arr = []; var arr = [];
for (var i = 0; i < Ret.arr.length; i++) { for (var i = 0; i < Ret.arr.length; i++) {
if (Params.AllAccounts || Ret.arr[i].Value.Smart === Smart) { if (Params.AllAccounts || Ret.arr[i].Value.Smart === Smart) {
@@ -736,7 +736,7 @@ HostingCaller.DappWalletList = function(Params) {
Ret.arr = arr; Ret.arr = arr;
return Ret; return Ret;
}; };
HTTPCaller.DappWalletList = HostingCaller.DappWalletList; global.HTTPCaller.DappWalletList = HostingCaller.DappWalletList;
HostingCaller.DappAccountList = function(Params) { HostingCaller.DappAccountList = function(Params) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
@@ -744,7 +744,7 @@ HostingCaller.DappAccountList = function(Params) {
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
if (!Params.CountNum) if (!Params.CountNum)
Params.CountNum = 1; 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 }; return { arr: arr, result: 1 };
}; };
HostingCaller.DappSmartList = function(Params) { HostingCaller.DappSmartList = function(Params) {
@@ -754,42 +754,42 @@ HostingCaller.DappSmartList = function(Params) {
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
if (!Params.CountNum) if (!Params.CountNum)
Params.CountNum = 1; 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); Params.TokenGenerate);
return { arr: arr, result: 1 }; return { arr: arr, result: 1 };
}; };
HostingCaller.DappBlockList = function(Params, response) { HostingCaller.DappBlockList = function(Params, response) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
Params.StartNum = ParseNum(Params.StartNum); Params.StartNum = global.ParseNum(Params.StartNum);
Params.CountNum = ParseNum(Params.CountNum); Params.CountNum = global.ParseNum(Params.CountNum);
if (Params.CountNum > MaxCountViewRows) if (Params.CountNum > MaxCountViewRows)
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
if (!Params.CountNum) if (!Params.CountNum)
Params.CountNum = 1; Params.CountNum = 1;
return HTTPCaller.DappBlockList(Params, response); return global.HTTPCaller.DappBlockList(Params, response);
}; };
HostingCaller.DappTransactionList = function(Params, response) { HostingCaller.DappTransactionList = function(Params, response) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
Params.BlockNum = ParseNum(Params.BlockNum); Params.BlockNum = global.ParseNum(Params.BlockNum);
Params.StartNum = ParseNum(Params.StartNum); Params.StartNum = global.ParseNum(Params.StartNum);
Params.CountNum = ParseNum(Params.CountNum); Params.CountNum = global.ParseNum(Params.CountNum);
if (Params.CountNum > MaxCountViewRows) if (Params.CountNum > MaxCountViewRows)
Params.CountNum = MaxCountViewRows; Params.CountNum = MaxCountViewRows;
if (!Params.CountNum) if (!Params.CountNum)
Params.CountNum = 1; Params.CountNum = 1;
return HTTPCaller.DappTransactionList(Params, response); return global.HTTPCaller.DappTransactionList(Params, response);
}; };
HostingCaller.DappStaticCall = function(Params, response) { HostingCaller.DappStaticCall = function(Params, response) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
return HTTPCaller.DappStaticCall(Params, response); return global.HTTPCaller.DappStaticCall(Params, response);
}; };
HostingCaller.GetHistoryTransactions = function(Params) { HostingCaller.GetHistoryTransactions = function(Params) {
if (typeof Params !== "object") if (typeof Params !== "object")
return { result: 0 }; return { result: 0 };
return HTTPCaller.GetHistoryTransactions(Params); return global.HTTPCaller.GetHistoryTransactions(Params);
}; };
HostingCaller.GetSupply = function(Params) { HostingCaller.GetSupply = function(Params) {
var Data = global.DApps.Accounts.ReadState(0); var Data = global.DApps.Accounts.ReadState(0);
@@ -843,7 +843,7 @@ setInterval(function() {
var AvgPow = SumPow / Count; var AvgPow = SumPow / Count;
ADD_TO_STAT("MAX:HASH_RATE_B", AvgPow); 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) { if (MaxNumBlockDB > Count) {
var StartNum = MaxNumBlockDB - Count; var StartNum = MaxNumBlockDB - Count;
NodeBlockChain = global.SERVER.BlockChainToBuf(StartNum, StartNum, MaxNumBlockDB); NodeBlockChain = global.SERVER.BlockChainToBuf(StartNum, StartNum, MaxNumBlockDB);

View File

@@ -74,7 +74,7 @@ global.FORMAT_ACCOUNT_HASH = "{\
BlockNum:uint,\ BlockNum:uint,\
AccHash:buffer32,\ AccHash:buffer32,\
}"; }";
global.FORMAT_ACCOUNT_HASH3 = "{\ global.global.FORMAT_ACCOUNT_HASH3 = "{\
Type:byte,\ Type:byte,\
BlockNum:uint,\ BlockNum:uint,\
AccHash:buffer32,\ AccHash:buffer32,\
@@ -144,22 +144,23 @@ class MerkleDBRow extends DBRow {
}; };
class AccountApp extends require("./dapp") class AccountApp extends require("./dapp")
{ {
private CreateTrCount CreateTrCount
private FORMAT_ACCOUNT_ROW FORMAT_ACCOUNT_ROW
private SIZE_ACCOUNT_ROW SIZE_ACCOUNT_ROW
private DBState DBState
private FORMAT_ACCOUNT_ROW_REST FORMAT_ACCOUNT_ROW_REST
private SIZE_ACCOUNT_ROW_REST SIZE_ACCOUNT_ROW_REST
private DBRest DBRest
private DBAct DBAct
private DBActPrev DBActPrev
private FORMAT_STATE_HISTORY FORMAT_STATE_HISTORY
private DBStateHistory DBStateHistory
private HistoryFormatArr HistoryFormatArr
private DBStateTX DBStateTX
private DBAccountsHash DBAccountsHash
private WasCheckRestDB WasCheckRestDB
private ResultTx ResultTx
DBChanges
constructor() { constructor() {
super() super()
var bReadOnly = (global.PROCESS_NAME !== "TX"); var bReadOnly = (global.PROCESS_NAME !== "TX");
@@ -205,7 +206,7 @@ class AccountApp extends require("./dapp")
Start(bClean?) { Start(bClean?) {
if (global.LOCAL_RUN) if (global.LOCAL_RUN)
bClean = 1 bClean = 1
if (!bClean && this.DBState.GetMaxNum() + 1 >= global.global.BLOCK_PROCESSING_LENGTH2) if (!bClean && this.DBState.GetMaxNum() + 1 >= global.BLOCK_PROCESSING_LENGTH2)
return; return;
this.DBState.MerkleTree = undefined this.DBState.MerkleTree = undefined
this.DBState.Truncate(- 1) this.DBState.Truncate(- 1)
@@ -267,7 +268,7 @@ class AccountApp extends require("./dapp")
} }
global.ToLog("******************************FINISH FillRestDB") global.ToLog("******************************FINISH FillRestDB")
} }
_DBStateWrite(Data?, BlockNum?) { _DBStateWrite(Data?, BlockNum?, b?) {
this.CheckRestDB() this.CheckRestDB()
this.DBState.Write(Data) this.DBState.Write(Data)
if (Data.Num === undefined) if (Data.Num === undefined)
@@ -330,7 +331,7 @@ class AccountApp extends require("./dapp")
return Num; return Num;
} }
case TYPE_TRANSACTION_TRANSFER: case TYPE_TRANSACTION_TRANSFER:
var Num = ReadUintFromArr(Body, 1 + 1 + 6); var Num = global.ReadUintFromArr(Body, 1 + 1 + 6);
return Num; return Num;
} }
} }
@@ -400,10 +401,13 @@ class AccountApp extends require("./dapp")
case global.TYPE_TRANSACTION_ACC_HASH: case global.TYPE_TRANSACTION_ACC_HASH:
{ {
Result = 1 Result = 1
if (global.LOCAL_RUN || global.TEST_NETWORK); if (global.LOCAL_RUN || global.TEST_NETWORK) {
else
if (BlockNum < global.START_BLOCK_ACCOUNT_HASH + 200000) }
else {
if (BlockNum < global.global.START_BLOCK_ACCOUNT_HASH + 200000)
break; break;
}
var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH; var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH;
if (!this.TRCheckAccountHash(Body, BlockNum, TrNum)) { if (!this.TRCheckAccountHash(Body, BlockNum, TrNum)) {
Result = "BAD ACCOUNT HASH" Result = "BAD ACCOUNT HASH"
@@ -426,7 +430,7 @@ class AccountApp extends require("./dapp")
var SysBalance = SysData.Value.SumCOIN; var SysBalance = SysData.Value.SumCOIN;
const REF_PERIOD_START = global.START_MINING; const REF_PERIOD_START = global.START_MINING;
const REF_PERIOD_END = 30 * 1000 * 1000; const REF_PERIOD_END = 30 * 1000 * 1000;
var AccountID = ReadUintFromArr(Block.AddrHash, 0); var AccountID = global.ReadUintFromArr(Block.AddrHash, 0);
if (AccountID < 8) if (AccountID < 8)
return; return;
var Data = this.ReadStateTR(AccountID); var Data = this.ReadStateTR(AccountID);
@@ -444,29 +448,29 @@ class AccountApp extends require("./dapp")
} }
} }
else { else {
var Power = GetPowPower(Block.PowHash); var Power = global.GetPowPower(Block.PowHash);
if (Block.BlockNum >= global.NEW_BLOCK_REWARD1) if (Block.BlockNum >= global.NEW_BLOCK_REWARD1)
Power = 43 Power = 43
Sum = Power * Power * SysBalance / global.TOTAL_SUPPLY_TERA / 100 Sum = Power * Power * SysBalance / global.TOTAL_SUPPLY_TERA / 100
} }
var CoinTotal = { SumCOIN: 0, SumCENT: 0 }; var CoinTotal = { SumCOIN: 0, SumCENT: 0 };
var CoinSum = COIN_FROM_FLOAT(Sum); var CoinSum = global.COIN_FROM_FLOAT(Sum);
if (!ISZERO(CoinSum)) { if (!global.ISZERO(CoinSum)) {
if (Data.Adviser >= 8 && Block.BlockNum < REF_PERIOD_END) { if (Data.Adviser >= 8 && Block.BlockNum < REF_PERIOD_END) {
var RefData = this.ReadStateTR(Data.Adviser); var RefData = this.ReadStateTR(Data.Adviser);
if (RefData && RefData.BlockNumCreate < Block.BlockNum - REF_PERIOD_MINING) { if (RefData && RefData.BlockNumCreate < Block.BlockNum - global.REF_PERIOD_MINING) {
var K = (REF_PERIOD_END - Block.BlockNum) / (REF_PERIOD_END - REF_PERIOD_START); var K = (REF_PERIOD_END - Block.BlockNum) / (REF_PERIOD_END - REF_PERIOD_START);
var CoinAdv = COIN_FROM_FLOAT(Sum * K); var CoinAdv = global.COIN_FROM_FLOAT(Sum * K);
this.SendMoneyTR(Block, 0, Data.Adviser, CoinAdv, Block.BlockNum, 0xFFFF, "", "Adviser coin base [" + AccountID + "]", 1) this.SendMoneyTR(Block, 0, Data.Adviser, CoinAdv, Block.BlockNum, 0xFFFF, "", "Adviser coin base [" + AccountID + "]", 1)
ADD(CoinTotal, CoinAdv) global.ADD(CoinTotal, CoinAdv)
ADD(CoinSum, CoinAdv) global.ADD(CoinSum, CoinAdv)
} }
} }
this.SendMoneyTR(Block, 0, AccountID, CoinSum, Block.BlockNum, 0xFFFF, "", "Coin base", 1) this.SendMoneyTR(Block, 0, AccountID, CoinSum, Block.BlockNum, 0xFFFF, "", "Coin base", 1)
ADD(CoinTotal, CoinSum) global.ADD(CoinTotal, CoinSum)
var CoinDevelop = CopyObjValue(CoinTotal); var CoinDevelop = global.CopyObjValue(CoinTotal);
DIV(CoinDevelop, 100) global.DIV(CoinDevelop, 100)
if (!ISZERO(CoinDevelop)) if (!global.ISZERO(CoinDevelop))
this.SendMoneyTR(Block, 0, 9, CoinDevelop, Block.BlockNum, 0xFFFF, "", "Developers support", 1) this.SendMoneyTR(Block, 0, 9, CoinDevelop, Block.BlockNum, 0xFFFF, "", "Developers support", 1)
} }
} }
@@ -492,22 +496,22 @@ class AccountApp extends require("./dapp")
} }
case TYPE_DEPRECATED_TRANSFER1: case TYPE_DEPRECATED_TRANSFER1:
{ {
format = FORMAT_MONEY_TRANSFER format = global.FORMAT_MONEY_TRANSFER
break; break;
} }
case TYPE_DEPRECATED_TRANSFER2: case TYPE_DEPRECATED_TRANSFER2:
{ {
format = FORMAT_MONEY_TRANSFER2 format = global.FORMAT_MONEY_TRANSFER2
break; break;
} }
case TYPE_TRANSACTION_TRANSFER: case TYPE_TRANSACTION_TRANSFER:
{ {
format = FORMAT_MONEY_TRANSFER3 format = global.FORMAT_MONEY_TRANSFER3
break; break;
} }
case TYPE_TRANSACTION_ACC_HASH: case global.TYPE_TRANSACTION_ACC_HASH:
{ {
format = FORMAT_ACCOUNT_HASH3 format = global.global.FORMAT_ACCOUNT_HASH3
break; break;
} }
default: default:
@@ -526,30 +530,30 @@ class AccountApp extends require("./dapp")
if (!TR) if (!TR)
return ""; return "";
if (TR.Body && TR.Body.length) { if (TR.Body && TR.Body.length) {
var App = DAppByType[TR.Body[0]]; var App = global.DAppByType[TR.Body[0]];
if (App) { if (App) {
TR.Body = JSON.parse(App.GetScriptTransaction(TR.Body)) TR.Body = JSON.parse(App.GetScriptTransaction(TR.Body))
} }
} }
ConvertBufferToStr(TR) global.ConvertBufferToStr(TR)
return JSON.stringify(TR, "", 2); return JSON.stringify(TR, undefined, 2);
} }
TRCheckAccountHash(Body, BlockNum, TrNum) { TRCheckAccountHash(Body, BlockNum, TrNum) {
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0) if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
return 1; return 1;
try { try {
var TR = global.BufLib.GetObjectFromBuffer(Body, FORMAT_ACCOUNT_HASH3, {}); var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_ACCOUNT_HASH3, {});
} }
catch (e) { catch (e) {
return 0; return 0;
} }
if (BlockNum < START_BLOCK_ACCOUNT_HASH + 200000) if (BlockNum < global.START_BLOCK_ACCOUNT_HASH + 200000)
return 1; return 1;
var Item = this.GetAccountHashItem(TR.BlockNum); var Item = this.GetAccountHashItem(TR.BlockNum);
if (Item && Item.BlockNum === TR.BlockNum) { if (Item && Item.BlockNum === TR.BlockNum) {
if (CompareArr(Item.AccHash, TR.AccHash) === 0) { if (global.CompareArr(Item.AccHash, TR.AccHash) === 0) {
if (TR.BlockNum >= START_BLOCK_ACCOUNT_HASH3) { if (TR.BlockNum >= global.START_BLOCK_ACCOUNT_HASH3) {
if (CompareArr(Item.SmartHash, TR.SmartHash) === 0 && Item.AccountMax === TR.AccountMax && Item.SmartCount === TR.SmartCount) { if (global.CompareArr(Item.SmartHash, TR.SmartHash) === 0 && Item.AccountMax === TR.AccountMax && Item.SmartCount === TR.SmartCount) {
return 1; return 1;
} }
else else
@@ -568,7 +572,7 @@ class AccountApp extends require("./dapp")
return "Error length transaction"; return "Error length transaction";
var CheckMinPower = 1; var CheckMinPower = 1;
if (BlockNum >= 7000000 || global.LOCAL_RUN || global.TEST_NETWORK) { if (BlockNum >= 7000000 || global.LOCAL_RUN || global.TEST_NETWORK) {
if (ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= PRICE_DAO(BlockNum).NewAccount) { if (ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= global.PRICE_DAO(BlockNum).NewAccount) {
CheckMinPower = 0 CheckMinPower = 0
} }
else { else {
@@ -581,12 +585,12 @@ class AccountApp extends require("./dapp")
this.CreateTrCount++ this.CreateTrCount++
var power; var power;
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO) { if (BlockNum >= global.BLOCKNUM_TICKET_ALGO) {
var Tr = { body: Body }; var Tr: any = { body: Body };
global.SERVER.CheckCreateTransactionObject(Tr) global.SERVER.CheckCreateTransactionObject(Tr)
power = Tr.power power = Tr.power
} }
else { else {
power = GetPowPower(shaarr(Body)) power = global.GetPowPower(shaarr(Body))
} }
if (global.TEST_NETWORK && BlockNum >= 3290000) { if (global.TEST_NETWORK && BlockNum >= 3290000) {
CheckMinPower = 0 CheckMinPower = 0
@@ -604,7 +608,7 @@ class AccountApp extends require("./dapp")
return "Error min power POW for create account (update client)"; return "Error min power POW for create account (update client)";
} }
try { try {
var TR = global.BufLib.GetObjectFromBuffer(Body, global.global.FORMAT_CREATE, {}); var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_CREATE, {});
} }
catch (e) { catch (e) {
return "Error transaction format"; return "Error transaction format";
@@ -620,7 +624,7 @@ class AccountApp extends require("./dapp")
Account.Adviser = TR.Adviser Account.Adviser = TR.Adviser
Account.Value.Smart = TR.Smart Account.Value.Smart = TR.Smart
this.WriteStateTR(Account, TrNum) this.WriteStateTR(Account, TrNum)
if (CompareArr(Account.PubKey, global.WALLET.PubKeyArr) === 0) { if (global.CompareArr(Account.PubKey, global.WALLET.PubKeyArr) === 0) {
global.WALLET.OnCreateAccount(Account) global.WALLET.OnCreateAccount(Account)
} }
this.ResultTx = Account.Num this.ResultTx = Account.Num
@@ -677,7 +681,7 @@ class AccountApp extends require("./dapp")
MapItem[Item.ID] = 1 MapItem[Item.ID] = 1
} }
bWas = 1 bWas = 1
ADD(TotalSum, Item) global.ADD(TotalSum, Item)
} }
if (!bWas && TR.Version < 3) if (!bWas && TR.Version < 3)
return "No significant recipients"; return "No significant recipients";
@@ -711,7 +715,7 @@ class AccountApp extends require("./dapp")
return "Error - smart accounts can not be used in a multiple transaction"; return "Error - smart accounts can not be used in a multiple transaction";
} }
if (TR.Version === 3 && Item.ID === 0 && Item.PubKey && Item.PubKey.length === 33) { if (TR.Version === 3 && Item.ID === 0 && Item.PubKey && Item.PubKey.length === 33) {
if (Item.SumCOIN < PRICE_DAO(BlockNum).NewAccount) if (Item.SumCOIN < global.PRICE_DAO(BlockNum).NewAccount)
return "Not enough money for create account with index: " + i; return "Not enough money for create account with index: " + i;
var name = TR.Description; var name = TR.Description;
var index = name.indexOf("\n"); var index = name.indexOf("\n");
@@ -725,7 +729,7 @@ class AccountApp extends require("./dapp")
Item.ID = Account.Num Item.ID = Account.Num
this.SendMoneyTR(Block, Data.Num, Account.Num, { SumCOIN: Item.SumCOIN, SumCENT: Item.SumCENT }, BlockNum, TrNum, TR.Description, this.SendMoneyTR(Block, Data.Num, Account.Num, { SumCOIN: Item.SumCOIN, SumCENT: Item.SumCENT }, BlockNum, TrNum, TR.Description,
TR.Description, 1) TR.Description, 1)
this.SendMoneyTR(Block, Account.Num, 0, { SumCOIN: PRICE_DAO(BlockNum).NewAccount, SumCENT: 0 }, BlockNum, TrNum, "Fee for create account", this.SendMoneyTR(Block, Account.Num, 0, { SumCOIN: global.PRICE_DAO(BlockNum).NewAccount, SumCENT: 0 }, BlockNum, TrNum, "Fee for create account",
"", 1) "", 1)
} }
else { else {
@@ -765,11 +769,11 @@ class AccountApp extends require("./dapp")
return "Error sign transaction"; return "Error sign transaction";
} }
if (TR.Body && TR.Body.length) { if (TR.Body && TR.Body.length) {
var App = DAppByType[TR.Body[0]]; var App = global.DAppByType[TR.Body[0]];
if (App) { if (App) {
TR.FromPubKey = Data.PubKey TR.FromPubKey = Data.PubKey
var Result = App.OnWriteTransaction(Block, TR.Body, BlockNum, TrNum, TR); Result = App.OnWriteTransaction(Block, TR.Body, BlockNum, TrNum, TR);
if (Result !== true) if (Result as any !== true)
return Result; return Result;
} }
} }
@@ -804,7 +808,7 @@ class AccountApp extends require("./dapp")
} }
this.DeleteActOneDB(this.DBAct, BlockNumFrom) this.DeleteActOneDB(this.DBAct, BlockNumFrom)
this.DeleteActOneDB(this.DBActPrev, BlockNumFrom) this.DeleteActOneDB(this.DBActPrev, BlockNumFrom)
this.DBAccountsHash.Truncate(Math.trunc(BlockNumFrom / PERIOD_ACCOUNT_HASH)) this.DBAccountsHash.Truncate(Math.trunc(BlockNumFrom / global.PERIOD_ACCOUNT_HASH))
} }
DeleteActOneDB(DBAct, BlockNum) { DeleteActOneDB(DBAct, BlockNum) {
var MaxNum = DBAct.GetMaxNum(); var MaxNum = DBAct.GetMaxNum();
@@ -813,7 +817,7 @@ class AccountApp extends require("./dapp")
for (var num = MaxNum; num >= 0; num--) { for (var num = MaxNum; num >= 0; num--) {
var ItemCheck = DBAct.Read(num); var ItemCheck = DBAct.Read(num);
if (!ItemCheck) { if (!ItemCheck) {
ToLogTrace("!ItemCheck") global.ToLogTrace("!ItemCheck")
throw "ERRR DeleteActOneDB"; throw "ERRR DeleteActOneDB";
} }
if (ItemCheck.BlockNum < BlockNum) { if (ItemCheck.BlockNum < BlockNum) {
@@ -882,7 +886,7 @@ class AccountApp extends require("./dapp")
if (!Data) if (!Data)
break; break;
for (var i = 0; i < PubKeyArr.length; i++) for (var i = 0; i < PubKeyArr.length; i++)
if (CompareArr(Data.PubKey, PubKeyArr[i]) === 0) { if (global.CompareArr(Data.PubKey, PubKeyArr[i]) === 0) {
map[Data.Num] = i map[Data.Num] = i
Count++ Count++
} }
@@ -899,7 +903,7 @@ class AccountApp extends require("./dapp")
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey) Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
arr.push(Data) arr.push(Data)
Data.WN = map[key] Data.WN = map[key]
Data.Name = NormalizeName(Data.Name) Data.Name = global.NormalizeName(Data.Name)
if (Data.Currency) if (Data.Currency)
Data.CurrencyObj = global.DApps.Smart.ReadSimple(Data.Currency) Data.CurrencyObj = global.DApps.Smart.ReadSimple(Data.Currency)
if (Data.Value.Smart) { if (Data.Value.Smart) {
@@ -925,7 +929,7 @@ class AccountApp extends require("./dapp")
if (Filter.substring(0, 1) === "=") { if (Filter.substring(0, 1) === "=") {
Filter = Filter.substring(1) Filter = Filter.substring(1)
try { try {
F = CreateEval(Filter, "Cur,Currency,ID,Operation,Amount,Adviser,Name,PubKey,Smart,BlockNum") F = global.CreateEval(Filter, "Cur,Currency,ID,Operation,Amount,Adviser,Name,PubKey,Smart,BlockNum")
} }
catch (e) { catch (e) {
F = undefined F = undefined
@@ -946,13 +950,13 @@ class AccountApp extends require("./dapp")
break; break;
if (!Data.PubKeyStr) if (!Data.PubKeyStr)
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey) Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
Data.Name = NormalizeName(Data.Name) Data.Name = global.NormalizeName(Data.Name)
if (F) { if (F) {
var Cur = Data.Currency; var Cur = Data.Currency;
var Currency = Data.Currency; var Currency = Data.Currency;
var ID = Data.Num; var ID = Data.Num;
var Operation = Data.Value.OperationID; var Operation = Data.Value.OperationID;
var Amount = FLOAT_FROM_COIN(Data.Value); var Amount = global.FLOAT_FROM_COIN(Data.Value);
var Adviser = Data.Adviser; var Adviser = Data.Adviser;
var Name = Data.Name; var Name = Data.Name;
var PubKey = global.GetHexFromArr(Data.PubKey); var PubKey = global.GetHexFromArr(Data.PubKey);
@@ -969,7 +973,7 @@ class AccountApp extends require("./dapp")
} }
else else
if (Filter) { if (Filter) {
var Amount = FLOAT_FROM_COIN(Data.Value); var Amount = global.FLOAT_FROM_COIN(Data.Value);
var PubKey = global.GetHexFromArr(Data.PubKey); var PubKey = global.GetHexFromArr(Data.PubKey);
var Str = "" + Data.Num + " " + Data.Value.OperationID + " " + Data.Name.toUpperCase() + " " + Data.Adviser + " " + Amount + " " + PubKey + " " + Smart + " " + Data.BlockNumCreate; var Str = "" + Data.Num + " " + Data.Value.OperationID + " " + Data.Name.toUpperCase() + " " + Data.Adviser + " " + Amount + " " + PubKey + " " + Smart + " " + Data.BlockNumCreate;
if (Str.indexOf(Filter) < 0) if (Str.indexOf(Filter) < 0)
@@ -1037,7 +1041,7 @@ class AccountApp extends require("./dapp")
return arr; return arr;
} }
GetHashOrUndefined(BlockNum) { GetHashOrUndefined(BlockNum) {
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0) if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
return undefined; return undefined;
var Item = this.GetAccountHashItem(BlockNum); var Item = this.GetAccountHashItem(BlockNum);
if (Item) if (Item)
@@ -1046,7 +1050,7 @@ class AccountApp extends require("./dapp")
return undefined; return undefined;
} }
GetAccountHashItem(BlockNum) { GetAccountHashItem(BlockNum) {
var Item = this.DBAccountsHash.Read(Math.trunc(BlockNum / PERIOD_ACCOUNT_HASH)); var Item = this.DBAccountsHash.Read(Math.trunc(BlockNum / global.PERIOD_ACCOUNT_HASH));
return Item; return Item;
} }
GetHashedMaxBlockNum() { GetHashedMaxBlockNum() {
@@ -1059,7 +1063,7 @@ class AccountApp extends require("./dapp")
return 0; return 0;
} }
CalcHash(Block, BlockMaxAccount) { CalcHash(Block, BlockMaxAccount) {
if (Block.BlockNum % PERIOD_ACCOUNT_HASH !== 0) if (Block.BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
return; return;
if (this.DBState.WasUpdate) { if (this.DBState.WasUpdate) {
this.CalcMerkleTree() this.CalcMerkleTree()
@@ -1075,14 +1079,14 @@ class AccountApp extends require("./dapp")
SmartHash = [] SmartHash = []
} }
var Data = { var Data = {
Num: Block.BlockNum / PERIOD_ACCOUNT_HASH, BlockNum: Block.BlockNum, AccHash: Hash, SumHash: Block.SumHash, AccountMax: BlockMaxAccount, Num: Block.BlockNum / global.PERIOD_ACCOUNT_HASH, BlockNum: Block.BlockNum, AccHash: Hash, SumHash: Block.SumHash, AccountMax: BlockMaxAccount,
SmartHash: SmartHash, SmartCount: SmartCount SmartHash: SmartHash, SmartCount: SmartCount
}; };
this.DBAccountsHash.Write(Data) this.DBAccountsHash.Write(Data)
this.DBAccountsHash.Truncate(Block.BlockNum / PERIOD_ACCOUNT_HASH) this.DBAccountsHash.Truncate(Block.BlockNum / global.PERIOD_ACCOUNT_HASH)
return Data; return Data;
} }
CalcMerkleTree(bForce) { CalcMerkleTree(bForce?) {
this.DBState.MerkleHash = this.DBState.CalcMerkleTree(bForce) this.DBState.MerkleHash = this.DBState.CalcMerkleTree(bForce)
this.DBState.WasUpdate = 0 this.DBState.WasUpdate = 0
} }
@@ -1124,7 +1128,7 @@ class AccountApp extends require("./dapp")
} }
var arr = []; var arr = [];
for (var key in DBChanges.BlockMap) { for (var key in DBChanges.BlockMap) {
key = ParseNum(key) key = global.ParseNum(key)
var Data = DBChanges.BlockMap[key]; var Data = DBChanges.BlockMap[key];
if (Data.Changed) { if (Data.Changed) {
arr.push(Data) arr.push(Data)
@@ -1170,7 +1174,7 @@ class AccountApp extends require("./dapp")
return false; return false;
DBChanges.BlockMaxAccount = DBChanges.TRMaxAccount DBChanges.BlockMaxAccount = DBChanges.TRMaxAccount
for (var key in DBChanges.TRMap) { for (var key in DBChanges.TRMap) {
key = ParseNum(key) key = global.ParseNum(key)
var Data = DBChanges.TRMap[key]; var Data = DBChanges.TRMap[key];
if (Data.Changed) { if (Data.Changed) {
DBChanges.BlockMap[key] = Data DBChanges.BlockMap[key] = Data
@@ -1213,7 +1217,7 @@ class AccountApp extends require("./dapp")
return Data; return Data;
} }
ReadStateTR(Num) { ReadStateTR(Num) {
Num = ParseNum(Num) Num = global.ParseNum(Num)
var TRMap = this.DBChanges.TRMap; var TRMap = this.DBChanges.TRMap;
var Data = TRMap[Num]; var Data = TRMap[Num];
if (!Data) { if (!Data) {
@@ -1239,7 +1243,7 @@ class AccountApp extends require("./dapp")
Data = { Data = {
Num: Num, Currency: BData.Currency, PubKey: BData.PubKey, Name: BData.Name, BlockNumCreate: BData.BlockNumCreate, Adviser: BData.Adviser, Num: Num, Currency: BData.Currency, PubKey: BData.PubKey, Name: BData.Name, BlockNumCreate: BData.BlockNumCreate, Adviser: BData.Adviser,
Value: { Value: {
SumCOIN: Value.SumCOIN, SumCENT: Value.SumCENT, OperationID: Value.OperationID, Smart: Value.Smart, Data: CopyArr(Value.Data), SumCOIN: Value.SumCOIN, SumCENT: Value.SumCENT, OperationID: Value.OperationID, Smart: Value.Smart, Data: global.CopyArr(Value.Data),
NextPos: Value.NextPos NextPos: Value.NextPos
}, BackupValue: BData.BackupValue }, BackupValue: BData.BackupValue
} }
@@ -1252,8 +1256,8 @@ class AccountApp extends require("./dapp")
Data.ChangeTrNum = TrNum Data.ChangeTrNum = TrNum
} }
SendMoneyTR(Block, FromID, ToID, CoinSum, BlockNum, TrNum, DescriptionFrom, DescriptionTo, OperationCount) { SendMoneyTR(Block, FromID, ToID, CoinSum, BlockNum, TrNum, DescriptionFrom, DescriptionTo, OperationCount) {
FromID = ParseNum(FromID) FromID = global.ParseNum(FromID)
ToID = ParseNum(ToID) ToID = global.ParseNum(ToID)
if (CoinSum.SumCENT >= 1e9) { if (CoinSum.SumCENT >= 1e9) {
throw "ERROR SumCENT>=1e9"; throw "ERROR SumCENT>=1e9";
} }
@@ -1261,7 +1265,7 @@ class AccountApp extends require("./dapp")
if (!FromData) { if (!FromData) {
throw "Send: Error account FromNum: " + FromID; throw "Send: Error account FromNum: " + FromID;
} }
if (!SUB(FromData.Value, CoinSum)) { if (!global.SUB(FromData.Value, CoinSum)) {
throw "Not enough money on the account ID:" + FromID; throw "Not enough money on the account ID:" + FromID;
} }
this.WriteStateTR(FromData, TrNum) this.WriteStateTR(FromData, TrNum)
@@ -1276,7 +1280,7 @@ class AccountApp extends require("./dapp")
if (!ToData) { if (!ToData) {
throw "Send: Error account ToNum: " + ToID; throw "Send: Error account ToNum: " + ToID;
} }
ADD(ToData.Value, CoinSum) global.ADD(ToData.Value, CoinSum)
this.WriteStateTR(ToData, TrNum) this.WriteStateTR(ToData, TrNum)
if (ToID > 15) { if (ToID > 15) {
this.DBChanges.TRHistory.push({ this.DBChanges.TRHistory.push({
@@ -1288,11 +1292,11 @@ class AccountApp extends require("./dapp")
FromData.Value.OperationID += OperationCount FromData.Value.OperationID += OperationCount
if (FromData.Value.Smart) { if (FromData.Value.Smart) {
var Context = { FromID: FromID, ToID: ToID, Description: DescriptionFrom, Value: CoinSum }; var Context = { FromID: FromID, ToID: ToID, Description: DescriptionFrom, Value: CoinSum };
RunSmartMethod(Block, FromData.Value.Smart, FromData, BlockNum, TrNum, Context, "OnSend") global.RunSmartMethod(Block, FromData.Value.Smart, FromData, BlockNum, TrNum, Context, "OnSend")
} }
if (ToData.Value.Smart) { if (ToData.Value.Smart) {
var Context = { FromID: FromID, ToID: ToID, Description: DescriptionTo, Value: CoinSum }; var Context = { FromID: FromID, ToID: ToID, Description: DescriptionTo, Value: CoinSum };
RunSmartMethod(Block, ToData.Value.Smart, ToData, BlockNum, TrNum, Context, "OnGet") global.RunSmartMethod(Block, ToData.Value.Smart, ToData, BlockNum, TrNum, Context, "OnGet")
} }
} }
GetSignTransferTx(TR, PrivKey) { GetSignTransferTx(TR, PrivKey) {
@@ -1300,9 +1304,9 @@ class AccountApp extends require("./dapp")
if (TR.Version === 2 || TR.Version === 3) { if (TR.Version === 2 || TR.Version === 3) {
var format; var format;
if (TR.Version === 2) if (TR.Version === 2)
format = FORMAT_MONEY_TRANSFER_BODY2 format = global.FORMAT_MONEY_TRANSFER_BODY2
else else
format = FORMAT_MONEY_TRANSFER_BODY3 format = global.FORMAT_MONEY_TRANSFER_BODY3
Arr = [] Arr = []
for (var i = 0; i < TR.To.length; i++) { for (var i = 0; i < TR.To.length; i++) {
var Item = TR.To[i]; var Item = TR.To[i];
@@ -1313,14 +1317,14 @@ class AccountApp extends require("./dapp")
for (var j = 0; j < 33; j++) for (var j = 0; j < 33; j++)
Arr[Arr.length] = DataTo.PubKey[j] Arr[Arr.length] = DataTo.PubKey[j]
} }
var Body = global.BufLib.GetBufferFromObject(TR, format, MAX_TRANSACTION_SIZE, {}); var Body = global.BufLib.GetBufferFromObject(TR, format, global.MAX_TRANSACTION_SIZE, {});
for (var j = 0; j < Body.length; j++) for (var j = 0; j < Body.length; j++)
Arr[Arr.length] = Body[j] Arr[Arr.length] = Body[j]
} }
else { else {
Arr = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER_BODY, MAX_TRANSACTION_SIZE, {}) Arr = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER_BODY, global.MAX_TRANSACTION_SIZE, {})
} }
var sigObj = global.secp256k1.sign(SHA3BUF(Arr), Buffer.from(PrivKey)); var sigObj = global.secp256k1.sign(global.SHA3BUF(Arr), Buffer.from(PrivKey));
return sigObj.signature; return sigObj.signature;
} }
SaveHistory(Data) { SaveHistory(Data) {
@@ -1332,7 +1336,7 @@ class AccountApp extends require("./dapp")
var BufWrite = global.BufLib.GetBufferFromObject(Data, this.HistoryFormatArr[Data.Type], 100, WorkStructHistory); var BufWrite = global.BufLib.GetBufferFromObject(Data, this.HistoryFormatArr[Data.Type], 100, WorkStructHistory);
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position); var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
if (written !== BufWrite.length) { if (written !== BufWrite.length) {
TO_ERROR_LOG("DB-HISTORY", 10, "Error write to file:" + written + " <> " + BufWrite.length) global.TO_ERROR_LOG("DB-HISTORY", 10, "Error write to file:" + written + " <> " + BufWrite.length)
throw "Error write to FILE_NAME_HISTORY"; throw "Error write to FILE_NAME_HISTORY";
return false; return false;
} }
@@ -1389,20 +1393,20 @@ class AccountApp extends require("./dapp")
if (!Data) if (!Data)
break; break;
if (Data.Currency === Currency) { if (Data.Currency === Currency) {
ADD(SumCoin, Data.Value) global.ADD(SumCoin, Data.Value)
} }
} }
return FLOAT_FROM_COIN(SumCoin); return global.FLOAT_FROM_COIN(SumCoin);
} }
}; };
module.exports = AccountApp; module.exports = AccountApp;
var App = new AccountApp; var App = new AccountApp;
DApps["Accounts"] = App; global.DApps["Accounts"] = App;
DAppByType[TYPE_TRANSACTION_CREATE] = App; global.DAppByType[global.TYPE_TRANSACTION_CREATE] = App;
DAppByType[TYPE_DEPRECATED_TRANSFER1] = App; global.DAppByType[TYPE_DEPRECATED_TRANSFER1] = App;
DAppByType[TYPE_DEPRECATED_TRANSFER2] = App; global.DAppByType[TYPE_DEPRECATED_TRANSFER2] = App;
DAppByType[TYPE_TRANSACTION_TRANSFER] = App; global.DAppByType[TYPE_TRANSACTION_TRANSFER] = App;
DAppByType[TYPE_TRANSACTION_ACC_HASH] = App; global.DAppByType[global.TYPE_TRANSACTION_ACC_HASH] = App;
function TestStateFiles(Size, Format) { function TestStateFiles(Size, Format) {
return; return;

View File

@@ -27,7 +27,7 @@ class FileApp extends require("./dapp")
} }
GetScriptTransaction(Body) { GetScriptTransaction(Body) {
var TR = this.GetObjectTransaction(Body); var TR = this.GetObjectTransaction(Body);
ConvertBufferToStr(TR) global.ConvertBufferToStr(TR)
return JSON.stringify(TR, undefined, 2); return JSON.stringify(TR, undefined, 2);
} }
GetVerifyTransaction(Block, BlockNum, TrNum, Body) { GetVerifyTransaction(Block, BlockNum, TrNum, Body) {

View File

@@ -19,18 +19,20 @@ const MESSAGE_END = MAX_MSG_SIZE - 5;
require("./names"); require("./names");
class CApp extends require("./dapp") class CApp extends require("./dapp")
{ {
Channels
NamesMap
constructor() { constructor() {
super() super()
this.Channels = {} this.Channels = {}
this.NamesMap = NAMES.KeyValueMap this.NamesMap = global.NAMES.KeyValueMap
global.MESSAGER = this global.MESSAGER = this
} }
Decrypt(Body) { Decrypt(Body) {
for (var key in this.Channels) { for (var key in this.Channels) {
var Node = this.Channels[key]; var Node = this.Channels[key];
Decrypt(Body, TempArrayTr, Node.Secret) global.Decrypt(Body, TempArrayTr, Node.Secret)
if (IsZeroArr(TempArrayTr.slice(MESSAGE_END))) { if (global.IsZeroArr(TempArrayTr.slice(MESSAGE_END))) {
var Str = Utf8ArrayToStr(TempArrayTr.slice(MESSAGE_START)); var Str = global.Utf8ArrayToStr(TempArrayTr.slice(MESSAGE_START));
return Str; return Str;
} }
} }
@@ -39,12 +41,11 @@ class CApp extends require("./dapp")
Encrypt(StrMessage, StrTo) { Encrypt(StrMessage, StrTo) {
var NameArr; var NameArr;
if (typeof StrTo === "string") { if (typeof StrTo === "string") {
NameArr = GetArrFromStr(StrTo, 32) NameArr = global.GetArrFromStr(StrTo, 32)
} else {
NameArr = StrTo
} }
else { var arrMessage = global.GetArrFromStr(StrMessage, MESSAGE_END);
NameArr = Str
}
var arrMessage = GetArrFromStr(StrMessage, MESSAGE_END);
var ArrayTr = new Uint8Array(MAX_MSG_SIZE); var ArrayTr = new Uint8Array(MAX_MSG_SIZE);
ArrayTr[0] = MESSAGE_TYPE_TRANSACTION ArrayTr[0] = MESSAGE_TYPE_TRANSACTION
for (var i = 5; i < MAX_MSG_SIZE; i++) { for (var i = 5; i < MAX_MSG_SIZE; i++) {
@@ -52,23 +53,23 @@ class CApp extends require("./dapp")
} }
var Body = new Uint8Array(MAX_MSG_SIZE); var Body = new Uint8Array(MAX_MSG_SIZE);
var Node = this.OpenChannel(NameArr); var Node = this.OpenChannel(NameArr);
Encrypt(ArrayTr, Body, Node.Secret) global.Encrypt(ArrayTr, Body, Node.Secret)
return Body; return Body;
} }
OpenChannel(FromNameArr) { OpenChannel(FromNameArr) {
var FromArr; var FromArr;
var StrKeyFrom = GetHexFromAddres(FromNameArr); var StrKeyFrom = global.GetHexFromAddres(FromNameArr);
if (this.NamesMap[StrKeyFrom]) { if (this.NamesMap[StrKeyFrom]) {
FromArr = this.NamesMap[StrKeyFrom] FromArr = this.NamesMap[StrKeyFrom]
} }
else { else {
FromArr = FromNameArr FromArr = FromNameArr
} }
var StrKey = GetHexFromAddres(FromArr); var StrKey = global.GetHexFromAddres(FromArr);
var Node = this.Channels[StrKey]; var Node = this.Channels[StrKey];
if (!Node) { if (!Node) {
Node = { addrArr: FromArr } Node = { addrArr: FromArr }
CheckContextSecret(this.Server, Node) global.CheckContextSecret(this.Server, Node)
this.Channels[StrKey] = Node this.Channels[StrKey] = Node
} }
return Node; return Node;
@@ -77,7 +78,7 @@ class CApp extends require("./dapp")
var Type = Body[0]; var Type = Body[0];
if (Type === OPEN_TYPE_TRANSACTION) { if (Type === OPEN_TYPE_TRANSACTION) {
var ToArr = Body.slice(33); var ToArr = Body.slice(33);
if (global.CompareArr(ToArr, NAMES.CurrentNameArr) === 0 || global.CompareArr(ToArr, this.Server.addrArr) === 0) { if (global.CompareArr(ToArr, global.NAMES.CurrentNameArr) === 0 || global.CompareArr(ToArr, this.Server.addrArr) === 0) {
var FromNameArr = Body.slice(1, 33); var FromNameArr = Body.slice(1, 33);
this.OpenChannel(FromNameArr) this.OpenChannel(FromNameArr)
} }
@@ -105,19 +106,19 @@ class CApp extends require("./dapp")
function TestEncryptDecrypt() { function TestEncryptDecrypt() {
const CMessager = module.exports; const CMessager = module.exports;
var Server = { KeyPair: GetKeyPairTest("Test"), DApp: { Names: { KeyValueMap: {} } }, }; var Server = { KeyPair: global.GetKeyPairTest("Test"), DApp: { Names: { KeyValueMap: {} } }, };
var Test = new CMessager(Server); var Test = new CMessager(Server);
var KeyPair2 = GetKeyPairTest("Test2"); var KeyPair2 = global.GetKeyPairTest("Test2");
var StrTest1 = GetArrFromStr("Test2", 32); var StrTest1 = global.GetArrFromStr("Test2", 32);
var StrKey = GetHexFromAddres(StrTest1); var StrKey = global.GetHexFromAddres(StrTest1);
MESSAGER.NamesMap[StrKey] = KeyPair2.addrArr; global.MESSAGER.NamesMap[StrKey] = KeyPair2.addrArr;
var Body = MESSAGER.Encrypt("This is a test message!", "Test2"); var Body = global.MESSAGER.Encrypt("This is a test message!", "Test2");
var Str2 = MESSAGER.Decrypt(Body); var Str2 = global.MESSAGER.Decrypt(Body);
console.log("Decrypt:"); console.log("Decrypt:");
console.log(Str2); console.log(Str2);
}; };
module.exports = CApp; module.exports = CApp;
var App = new CApp; var Messager = new CApp;
DApps["Messager"] = App; global.DApps["Messager"] = Messager;
DAppByType[OPEN_TYPE_TRANSACTION] = App; global.DAppByType[OPEN_TYPE_TRANSACTION] = Messager;
DAppByType[MESSAGE_TYPE_TRANSACTION] = App; global.DAppByType[MESSAGE_TYPE_TRANSACTION] = Messager;

View File

@@ -26,7 +26,7 @@ class NameApp extends require("./dapp")
var StrKey = global.GetHexFromAddres(Body.slice(1, 33)); var StrKey = global.GetHexFromAddres(Body.slice(1, 33));
if (!this.KeyValueMap[StrKey]) { if (!this.KeyValueMap[StrKey]) {
this.KeyValueMap[StrKey] = Body.slice(33) this.KeyValueMap[StrKey] = Body.slice(33)
if (CompareArr(Body.slice(33), this.Server.addrArr) === 0) if (global.CompareArr(Body.slice(33), this.Server.addrArr) === 0)
this.CurrentNameArr = Body.slice(1, 33) this.CurrentNameArr = Body.slice(1, 33)
} }
} }

View File

@@ -66,6 +66,7 @@ class SmartApp extends require("./dapp")
FORMAT_ROW FORMAT_ROW
ROW_SIZE ROW_SIZE
DBSmart DBSmart
RowHole
constructor() { constructor() {
super() super()
var bReadOnly = (global.PROCESS_NAME !== "TX"); var bReadOnly = (global.PROCESS_NAME !== "TX");
@@ -125,10 +126,10 @@ class SmartApp extends require("./dapp")
len += 2 + Body[len] + Body[len + 1] * 256 len += 2 + Body[len] + Body[len + 1] * 256
if (len + 64 > Body.length) if (len + 64 > Body.length)
return 0; return 0;
var Num = ReadUintFromArr(Body, len); var Num = global.ReadUintFromArr(Body, len);
return Num; return Num;
case TYPE_TRANSACTION_SMART_CHANGE: case TYPE_TRANSACTION_SMART_CHANGE:
var Num = ReadUintFromArr(Body, 1); var Num = global.ReadUintFromArr(Body, 1);
return Num; return Num;
} }
} }
@@ -184,7 +185,7 @@ class SmartApp extends require("./dapp")
if (!format) if (!format)
return ""; return "";
var TR = global.BufLib.GetObjectFromBuffer(Body, format, {}); var TR = global.BufLib.GetObjectFromBuffer(Body, format, {});
ConvertBufferToStr(TR) global.ConvertBufferToStr(TR)
return JSON.stringify(TR, undefined, 2); return JSON.stringify(TR, undefined, 2);
} }
GetVerifyTransaction(Block, BlockNum, TrNum, Body) { GetVerifyTransaction(Block, BlockNum, TrNum, Body) {
@@ -199,7 +200,7 @@ class SmartApp extends require("./dapp")
return "Error length transaction (max size)"; return "Error length transaction (max size)";
if (BlockNum < global.SMART_BLOCKNUM_START) if (BlockNum < global.SMART_BLOCKNUM_START)
return "Error block num"; return "Error block num";
var TR = global.BufLib.GetObjectFromBuffer(Body, FORMAT_SMART_CREATE, WorkStructCreate); var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_SMART_CREATE, WorkStructCreate);
if (!TR.Name.trim()) if (!TR.Name.trim())
return "Name required"; return "Name required";
if (TR.AccountLength > 50) if (TR.AccountLength > 50)
@@ -209,10 +210,10 @@ class SmartApp extends require("./dapp")
var AddAccount = TR.AccountLength - 1; var AddAccount = TR.AccountLength - 1;
var Price; var Price;
if (TR.TokenGenerate) if (TR.TokenGenerate)
Price = PRICE_DAO(BlockNum).NewTokenSmart Price = global.PRICE_DAO(BlockNum).NewTokenSmart
else else
Price = PRICE_DAO(BlockNum).NewSmart Price = global.PRICE_DAO(BlockNum).NewSmart
Price += AddAccount * PRICE_DAO(BlockNum).NewAccount Price += AddAccount * global.PRICE_DAO(BlockNum).NewAccount
if (!(ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= Price)) { if (!(ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= Price)) {
return "Not money in the transaction"; return "Not money in the transaction";
} }
@@ -270,11 +271,11 @@ class SmartApp extends require("./dapp")
MaxCountOperationID = 1000000 MaxCountOperationID = 1000000
if (TR.OperationID > AccountFrom.Value.OperationID + MaxCountOperationID) if (TR.OperationID > AccountFrom.Value.OperationID + MaxCountOperationID)
return "Error too much OperationID (expected max: " + (AccountFrom.Value.OperationID + MaxCountOperationID) + " for ID: " + TR.FromNum + ")"; return "Error too much OperationID (expected max: " + (AccountFrom.Value.OperationID + MaxCountOperationID) + " for ID: " + TR.FromNum + ")";
var hash = SHA3BUF(Body.slice(0, Body.length - 64 - 12), BlockNum); var hash = global.SHA3BUF(Body.slice(0, Body.length - 64 - 12), BlockNum);
var Result = 0; var Result = 0;
if (AccountFrom.PubKey[0] === 2 || AccountFrom.PubKey[0] === 3) if (AccountFrom.PubKey[0] === 2 || AccountFrom.PubKey[0] === 3)
try { try {
Result = secp256k1.verify(hash, TR.Sign, AccountFrom.PubKey) Result = global.secp256k1.verify(hash, TR.Sign, AccountFrom.PubKey)
} }
catch (e) { catch (e) {
} }
@@ -297,7 +298,7 @@ class SmartApp extends require("./dapp")
return "Error length transaction (min size)"; return "Error length transaction (min size)";
if (BlockNum < global.SMART_BLOCKNUM_START) if (BlockNum < global.SMART_BLOCKNUM_START)
return "Error block num"; return "Error block num";
var TR = global.BufLib.GetObjectFromBuffer(Body, FORMAT_SMART_RUN, WorkStructRun); var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_SMART_RUN, WorkStructRun);
var Account = global.DApps.Accounts.ReadStateTR(TR.Account); var Account = global.DApps.Accounts.ReadStateTR(TR.Account);
if (!Account) if (!Account)
return "RunSmart: Error account Num: " + TR.Account; return "RunSmart: Error account Num: " + TR.Account;
@@ -369,7 +370,7 @@ class SmartApp extends require("./dapp")
Filter = Filter.toUpperCase() Filter = Filter.toUpperCase()
} }
if (Category) if (Category)
Category = ParseNum(Category) Category = global.global.ParseNum(Category)
var WasError = 0; var WasError = 0;
var arr = []; var arr = [];
var Data; var Data;
@@ -430,12 +431,12 @@ class SmartApp extends require("./dapp")
if (!PrevItem) { if (!PrevItem) {
throw "!PrevItem of Smart num = " + PrevNum; throw "!PrevItem of Smart num = " + PrevNum;
} }
Item.SumHash = sha3arr2(PrevItem.SumHash, Hash) Item.SumHash = global.sha3arr2(PrevItem.SumHash, Hash)
} }
this.DBSmart.Write(Item) this.DBSmart.Write(Item)
} }
ReadSmart(Num) { ReadSmart(Num) {
Num = ParseNum(Num) Num = global.global.ParseNum(Num)
var Smart = this.DBSmart.GetMap("ITEM" + Num); var Smart = this.DBSmart.GetMap("ITEM" + Num);
if (!Smart) { if (!Smart) {
Smart = this.DBSmart.Read(Num) Smart = this.DBSmart.Read(Num)
@@ -480,12 +481,12 @@ class SmartApp extends require("./dapp")
}; };
function GetParsing(Str) { function GetParsing(Str) {
LexerJS.ParseCode(Str); global.LexerJS.ParseCode(Str);
var Code = LexerJS.stream; var Code = global.LexerJS.stream;
for (var key in LexerJS.FunctionMap) { for (var key in global.LexerJS.FunctionMap) {
Code += ";\nfunclist." + key + "=" + LOC_ADD_NAME + key; Code += ";\nfunclist." + key + "=" + LOC_ADD_NAME + key;
} }
for (var key in LexerJS.ExternMap) { for (var key in global.LexerJS.ExternMap) {
Code += ";\npublist." + key + "=" + LOC_ADD_NAME + key; Code += ";\npublist." + key + "=" + LOC_ADD_NAME + key;
} }
Code += "\n\ Code += "\n\
@@ -522,7 +523,7 @@ function GetSmartEvalContext(Smart) {
var RunContext = undefined; var RunContext = undefined;
global.RunSmartMethod = RunSmartMethod; global.RunSmartMethod = RunSmartMethod;
function RunSmartMethod(Block, SmartOrSmartID, Account, BlockNum, TrNum, PayContext, MethodName, Params, bPublic) { function RunSmartMethod(Block, SmartOrSmartID, Account, BlockNum?, TrNum?, PayContext?, MethodName?, Params?, bPublic?) {
var Smart = SmartOrSmartID; var Smart = SmartOrSmartID;
if (typeof SmartOrSmartID === "number") { if (typeof SmartOrSmartID === "number") {
Smart = global.DApps.Smart.ReadSmart(SmartOrSmartID); Smart = global.DApps.Smart.ReadSmart(SmartOrSmartID);
@@ -540,11 +541,11 @@ function RunSmartMethod(Block, SmartOrSmartID, Account, BlockNum, TrNum, PayCont
else else
return; return;
} }
var context = {}; var context: any = {};
if (PayContext) { if (PayContext) {
context.BlockNum = BlockNum; context.BlockNum = BlockNum;
context.BlockHash = CopyArr(Block.Hash); context.BlockHash = global.CopyArr(Block.Hash);
context.BlockAddrHash = CopyArr(Block.AddrHash); context.BlockAddrHash = global.CopyArr(Block.AddrHash);
context.TrNum = TrNum; context.TrNum = TrNum;
context.Account = GET_ACCOUNT(Account); context.Account = GET_ACCOUNT(Account);
context.Smart = GET_SMART(Smart); context.Smart = GET_SMART(Smart);
@@ -584,7 +585,7 @@ function GET_ACCOUNT(Obj) {
}, get Currency() { }, get Currency() {
return Data.Currency; return Data.Currency;
}, get PubKey() { }, get PubKey() {
return CopyArr(Data.PubKey); return global.CopyArr(Data.PubKey);
}, get Name() { }, get Name() {
return Data.Name; return Data.Name;
}, get BlockNumCreate() { }, get BlockNumCreate() {
@@ -912,7 +913,7 @@ function DO(Count) {
function $SetValue(ID, CoinSum) { function $SetValue(ID, CoinSum) {
DO(3000); DO(3000);
ID = ParseNum(ID); ID = global.ParseNum(ID);
if (!RunContext.Smart.TokenGenerate) { if (!RunContext.Smart.TokenGenerate) {
throw "The smart-contract is not token generate, access to change values is denied"; throw "The smart-contract is not token generate, access to change values is denied";
} }
@@ -924,7 +925,7 @@ function $SetValue(ID, CoinSum) {
throw "The account currency does not belong to the smart-contract, access to change values is denied"; throw "The account currency does not belong to the smart-contract, access to change values is denied";
} }
if (typeof CoinSum === "number") { if (typeof CoinSum === "number") {
CoinSum = COIN_FROM_FLOAT(CoinSum); CoinSum = global.COIN_FROM_FLOAT(CoinSum);
} }
if (CoinSum.SumCENT >= 1e9) { if (CoinSum.SumCENT >= 1e9) {
throw "ERROR SumCENT>=1e9"; throw "ERROR SumCENT>=1e9";
@@ -940,9 +941,9 @@ function $SetValue(ID, CoinSum) {
function $Send(ToID, CoinSum, Description) { function $Send(ToID, CoinSum, Description) {
DO(3000); DO(3000);
ToID = ParseNum(ToID); ToID = global.ParseNum(ToID);
if (typeof CoinSum === "number") if (typeof CoinSum === "number")
CoinSum = COIN_FROM_FLOAT(CoinSum); CoinSum = global.COIN_FROM_FLOAT(CoinSum);
if (CoinSum.SumCENT >= 1e9) { if (CoinSum.SumCENT >= 1e9) {
throw "ERROR SumCENT>=1e9"; throw "ERROR SumCENT>=1e9";
} }
@@ -959,8 +960,8 @@ function $Send(ToID, CoinSum, Description) {
function $Move(FromID, ToID, CoinSum, Description) { function $Move(FromID, ToID, CoinSum, Description) {
DO(3000); DO(3000);
FromID = ParseNum(FromID); FromID = global.ParseNum(FromID);
ToID = ParseNum(ToID); ToID = global.ParseNum(ToID);
var FromData = global.DApps.Accounts.ReadStateTR(FromID); var FromData = global.DApps.Accounts.ReadStateTR(FromID);
var ToData = global.DApps.Accounts.ReadStateTR(ToID); var ToData = global.DApps.Accounts.ReadStateTR(ToID);
if (FromData.Currency !== ToData.Currency) { if (FromData.Currency !== ToData.Currency) {
@@ -970,7 +971,7 @@ function $Move(FromID, ToID, CoinSum, Description) {
throw "The account smart does not belong to the smart-contract, access is denied"; throw "The account smart does not belong to the smart-contract, access is denied";
} }
if (typeof CoinSum === "number") { if (typeof CoinSum === "number") {
CoinSum = COIN_FROM_FLOAT(CoinSum); CoinSum = global.COIN_FROM_FLOAT(CoinSum);
} }
if (CoinSum.SumCENT >= 1e9) { if (CoinSum.SumCENT >= 1e9) {
throw "ERROR SumCENT>=1e9"; throw "ERROR SumCENT>=1e9";
@@ -999,7 +1000,7 @@ function $Event(Description) {
function $ReadAccount(ID) { function $ReadAccount(ID) {
DO(900); DO(900);
ID = ParseNum(ID); ID = global.ParseNum(ID);
var Account = global.DApps.Accounts.ReadStateTR(ID); var Account = global.DApps.Accounts.ReadStateTR(ID);
if (!Account) if (!Account)
throw "Error read account Num: " + ID; throw "Error read account Num: " + ID;
@@ -1008,7 +1009,7 @@ function $ReadAccount(ID) {
function $ReadState(ID) { function $ReadState(ID) {
DO(900); DO(900);
ID = ParseNum(ID); ID = global.ParseNum(ID);
var Account = global.DApps.Accounts.ReadStateTR(ID); var Account = global.DApps.Accounts.ReadStateTR(ID);
if (!Account) if (!Account)
throw "Error read state account Num: " + ID; throw "Error read state account Num: " + ID;
@@ -1037,7 +1038,7 @@ function $WriteState(Obj, ID) {
DO(3000); DO(3000);
if (ID === undefined) if (ID === undefined)
ID = Obj.Num; ID = Obj.Num;
ID = ParseNum(ID); ID = global.ParseNum(ID);
var Account = global.DApps.Accounts.ReadStateTR(ID); var Account = global.DApps.Accounts.ReadStateTR(ID);
if (!Account) if (!Account)
throw "Error write account Num: " + ID; throw "Error write account Num: " + ID;
@@ -1056,12 +1057,12 @@ function $GetMaxAccount() {
function $ADD(Coin, Value2) { function $ADD(Coin, Value2) {
DO(5); DO(5);
return ADD(Coin, Value2); return global.ADD(Coin, Value2);
}; };
function $SUB(Coin, Value2) { function $SUB(Coin, Value2) {
DO(5); DO(5);
return SUB(Coin, Value2); return global.SUB(Coin, Value2);
}; };
function $ISZERO(Coin) { function $ISZERO(Coin) {
@@ -1074,22 +1075,22 @@ function $ISZERO(Coin) {
function $FLOAT_FROM_COIN(Coin) { function $FLOAT_FROM_COIN(Coin) {
DO(5); DO(5);
return FLOAT_FROM_COIN(Coin); return global.FLOAT_FROM_COIN(Coin);
}; };
function $COIN_FROM_FLOAT(Sum) { function $COIN_FROM_FLOAT(Sum) {
DO(20); DO(20);
return COIN_FROM_FLOAT(Sum); return global.COIN_FROM_FLOAT(Sum);
}; };
function $COIN_FROM_STRING(Sum) { function $COIN_FROM_STRING(Sum) {
DO(20); DO(20);
return COIN_FROM_STRING(Sum); return global.COIN_FROM_STRING(Sum);
}; };
function $require(SmartNum) { function $require(SmartNum) {
DO(2000); DO(2000);
SmartNum = ParseNum(SmartNum); SmartNum = global.ParseNum(SmartNum);
var Smart = global.DApps.Smart.ReadSmart(SmartNum); var Smart = global.DApps.Smart.ReadSmart(SmartNum);
if (!Smart) { if (!Smart) {
throw "Smart does not exist. Error id number: " + SmartNum; throw "Smart does not exist. Error id number: " + SmartNum;
@@ -1146,7 +1147,7 @@ function $parseInt(a) {
function $parseUint(a) { function $parseUint(a) {
DO(10); DO(10);
return ParseNum(a); return global.ParseNum(a);
}; };
function $String(a) { function $String(a) {