forked from circlecloud/tera
@@ -11,97 +11,82 @@
|
||||
var MAX_SUM_TER = 1e9;
|
||||
var MAX_SUM_CENT = 1e9;
|
||||
|
||||
function ADD(Coin,Value2)
|
||||
{
|
||||
function ADD(Coin, Value2) {
|
||||
Coin.SumCOIN += Value2.SumCOIN;
|
||||
Coin.SumCENT += Value2.SumCENT;
|
||||
if(Coin.SumCENT >= MAX_SUM_CENT)
|
||||
{
|
||||
if (Coin.SumCENT >= MAX_SUM_CENT) {
|
||||
Coin.SumCENT -= MAX_SUM_CENT;
|
||||
Coin.SumCOIN++;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
function SUB(Coin,Value2)
|
||||
{
|
||||
function SUB(Coin, Value2) {
|
||||
Coin.SumCOIN -= Value2.SumCOIN;
|
||||
if(Coin.SumCENT >= Value2.SumCENT)
|
||||
{
|
||||
if (Coin.SumCENT >= Value2.SumCENT) {
|
||||
Coin.SumCENT -= Value2.SumCENT;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
Coin.SumCENT = MAX_SUM_CENT + Coin.SumCENT - Value2.SumCENT;
|
||||
Coin.SumCOIN--;
|
||||
}
|
||||
if(Coin.SumCOIN < 0)
|
||||
{
|
||||
if (Coin.SumCOIN < 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
function DIV(Coin,Value)
|
||||
{
|
||||
function DIV(Coin, Value) {
|
||||
Coin.SumCOIN = Coin.SumCOIN / Value;
|
||||
Coin.SumCENT = Math.floor(Coin.SumCENT / Value);
|
||||
var SumCOIN = Math.floor(Coin.SumCOIN);
|
||||
var SumCENT = Math.floor((Coin.SumCOIN - SumCOIN) * MAX_SUM_CENT);
|
||||
Coin.SumCOIN = SumCOIN;
|
||||
Coin.SumCENT = Coin.SumCENT + SumCENT;
|
||||
if(Coin.SumCENT >= MAX_SUM_CENT)
|
||||
{
|
||||
if (Coin.SumCENT >= MAX_SUM_CENT) {
|
||||
Coin.SumCENT -= MAX_SUM_CENT;
|
||||
Coin.SumCOIN++;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
function FLOAT_FROM_COIN(Coin)
|
||||
{
|
||||
function FLOAT_FROM_COIN(Coin) {
|
||||
var Sum = Coin.SumCOIN + Coin.SumCENT / MAX_SUM_CENT;
|
||||
return Sum;
|
||||
};
|
||||
|
||||
function STRING_FROM_COIN(Coin)
|
||||
{
|
||||
function STRING_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 SumCENT = Math.floor((Sum - SumCOIN) * MAX_SUM_CENT);
|
||||
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT};
|
||||
var Coin = { SumCOIN: SumCOIN, SumCENT: SumCENT };
|
||||
return Coin;
|
||||
};
|
||||
|
||||
function COIN_FROM_FLOAT2(Sum)
|
||||
{
|
||||
function COIN_FROM_FLOAT2(Sum) {
|
||||
var SumCOIN = Math.floor(Sum);
|
||||
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;
|
||||
};
|
||||
if(typeof window === "object")
|
||||
if (typeof window === "object")
|
||||
window.COIN_FROM_FLOAT = COIN_FROM_FLOAT2;
|
||||
|
||||
function ISZERO(Coin)
|
||||
{
|
||||
if(Coin.SumCOIN === 0 && Coin.SumCENT === 0)
|
||||
function ISZERO(Coin) {
|
||||
if (Coin.SumCOIN === 0 && Coin.SumCENT === 0)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
};
|
||||
|
||||
function COIN_FROM_STRING(Str)
|
||||
{
|
||||
function COIN_FROM_STRING(Str) {
|
||||
throw "TODO: COIN_FROM_STRING";
|
||||
};
|
||||
if(typeof global === "object")
|
||||
{
|
||||
if (typeof global === "object") {
|
||||
global.ADD = ADD;
|
||||
global.SUB = SUB;
|
||||
global.DIV = DIV;
|
||||
|
||||
@@ -9,40 +9,34 @@
|
||||
*/
|
||||
|
||||
|
||||
function SavePrivateKey()
|
||||
{
|
||||
function SavePrivateKey() {
|
||||
var Select = document.getElementById("idTypeKey");
|
||||
if(Select.value === "brain")
|
||||
{
|
||||
if (Select.value === "brain") {
|
||||
ConvertToPrivateKey();
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
var Str = document.getElementById("idKeyNew").value;
|
||||
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 + ")");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
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 + ")");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
if(Select.value === "private" && PrivKeyStr !== Str)
|
||||
if (Select.value === "private" && PrivKeyStr !== Str)
|
||||
SetStatus("Changed privat key");
|
||||
else
|
||||
if(Select.value === "public" && PubKeyStr !== Str)
|
||||
if (Select.value === "public" && PubKeyStr !== Str)
|
||||
SetStatus("Changed public key");
|
||||
GetData("SetWalletKey", Str, function (Data)
|
||||
{
|
||||
if(Data && Data.result === 1)
|
||||
{
|
||||
if(Select.value === "private")
|
||||
GetData("SetWalletKey", Str, function(Data) {
|
||||
if (Data && Data.result === 1) {
|
||||
if (Select.value === "private")
|
||||
SelectStyle("styleContrast1");
|
||||
else
|
||||
if(Select.value === "public")
|
||||
if (Select.value === "public")
|
||||
SelectStyle("styleContrast2");
|
||||
SetVisibleEditKeys(0);
|
||||
UpdatesData();
|
||||
@@ -50,46 +44,36 @@ function SavePrivateKey()
|
||||
});
|
||||
};
|
||||
|
||||
function CreateCheckPoint()
|
||||
{
|
||||
if(!ServerBlockNumDB || ServerBlockNumDB < 16)
|
||||
{
|
||||
function CreateCheckPoint() {
|
||||
if (!ServerBlockNumDB || ServerBlockNumDB < 16) {
|
||||
SetError("Not set ServerBlockNumDB");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
var BlockNum = ServerBlockNumDB - 10;
|
||||
SetCheckPoint(BlockNum);
|
||||
};
|
||||
|
||||
function UseAutoCheckPoint()
|
||||
{
|
||||
function UseAutoCheckPoint() {
|
||||
var Set = $("idUseAutoCheckPoint").checked;
|
||||
var Period = ParseNum($("idPeriodAutoCheckPoint").value);
|
||||
GetData("SetAutoCheckPoint", {Set:Set, Period:Period}, function (Data)
|
||||
{
|
||||
if(Data)
|
||||
{
|
||||
GetData("SetAutoCheckPoint", { Set: Set, Period: Period }, function(Data) {
|
||||
if (Data) {
|
||||
SetStatus(Data.text, !Data.result);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function UseAutoCorrTime()
|
||||
{
|
||||
GetData("SetAutoCorrTime", document.getElementById("idUseAutoCorrTime").checked, function (Data)
|
||||
{
|
||||
if(Data)
|
||||
{
|
||||
function UseAutoCorrTime() {
|
||||
GetData("SetAutoCorrTime", document.getElementById("idUseAutoCorrTime").checked, function(Data) {
|
||||
if (Data) {
|
||||
SetStatus(Data.text, !Data.result);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function SetCodeVersionJSON()
|
||||
{
|
||||
function SetCodeVersionJSON() {
|
||||
var Data = JSON.parse(JSON.stringify(CONFIG_DATA.CODE_VERSION));
|
||||
if(!Data.BlockNum)
|
||||
{
|
||||
if (!Data.BlockNum) {
|
||||
Data.LevelUpdate = 160;
|
||||
}
|
||||
Data.BlockNum = CONFIG_DATA.CurBlockNum;
|
||||
@@ -103,13 +87,11 @@ function SetCodeVersionJSON()
|
||||
document.getElementById("idDevService").value = Str;
|
||||
};
|
||||
|
||||
function SetCorrTimeJSON()
|
||||
{
|
||||
function SetCorrTimeJSON() {
|
||||
var AutoDelta = parseInt(document.getElementById("idDevValue").value);
|
||||
var Data = {Num:CONFIG_DATA.CurBlockNum, bUse:1, bAddTime:1};
|
||||
if(AutoDelta < 0)
|
||||
{
|
||||
AutoDelta = - AutoDelta;
|
||||
var Data = { Num: CONFIG_DATA.CurBlockNum, bUse: 1, bAddTime: 1 };
|
||||
if (AutoDelta < 0) {
|
||||
AutoDelta = - AutoDelta;
|
||||
Data.bAddTime = 0;
|
||||
}
|
||||
Data.DeltaTime = 40;
|
||||
@@ -119,180 +101,140 @@ function SetCorrTimeJSON()
|
||||
document.getElementById("idDevService").value = Str;
|
||||
};
|
||||
|
||||
function SetNetConstJSON()
|
||||
{
|
||||
function SetNetConstJSON() {
|
||||
var Str = JSON.stringify(Data, "", 2);
|
||||
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);
|
||||
document.getElementById("idDevService").value = Str;
|
||||
};
|
||||
|
||||
function SetNewCodeVersion()
|
||||
{
|
||||
try
|
||||
{
|
||||
function SetNewCodeVersion() {
|
||||
try {
|
||||
var Data = JSON.parse(document.getElementById("idDevService").value);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
catch (e) {
|
||||
SetError("Error format setting data");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
Data.addrArr = GetArrFromHex(Data.addrArr);
|
||||
GetData("SetNewCodeVersion", Data, function (Data)
|
||||
{
|
||||
if(Data)
|
||||
{
|
||||
GetData("SetNewCodeVersion", Data, function(Data) {
|
||||
if (Data) {
|
||||
SetStatus(Data.text, !Data.result);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function StartTimeCorrect()
|
||||
{
|
||||
try
|
||||
{
|
||||
function StartTimeCorrect() {
|
||||
try {
|
||||
var Data = JSON.parse(document.getElementById("idDevService").value);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
catch (e) {
|
||||
SetError("Error format setting data");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
GetData("SetCheckDeltaTime", Data, function (Data)
|
||||
{
|
||||
if(Data)
|
||||
{
|
||||
GetData("SetCheckDeltaTime", Data, function(Data) {
|
||||
if (Data) {
|
||||
SetStatus(Data.text, !Data.result);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function StartNetConst()
|
||||
{
|
||||
try
|
||||
{
|
||||
function StartNetConst() {
|
||||
try {
|
||||
var Data = JSON.parse(document.getElementById("idDevService").value);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
catch (e) {
|
||||
SetError("Error format setting data");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
GetData("SetCheckNetConstant", Data, function (Data)
|
||||
{
|
||||
if(Data)
|
||||
{
|
||||
GetData("SetCheckNetConstant", Data, function(Data) {
|
||||
if (Data) {
|
||||
SetStatus(Data.text, !Data.result);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function RestartNode()
|
||||
{
|
||||
function RestartNode() {
|
||||
GetData("RestartNode", {});
|
||||
DoRestartWallet();
|
||||
};
|
||||
|
||||
function UseAutoUpdate()
|
||||
{
|
||||
var Data = {USE_AUTO_UPDATE:document.getElementById("idAutoUpdate").checked, DoMining:1};
|
||||
GetData("SaveConstant", Data, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
function UseAutoUpdate() {
|
||||
var Data = { USE_AUTO_UPDATE: document.getElementById("idAutoUpdate").checked, DoMining: 1 };
|
||||
GetData("SaveConstant", Data, function(Data) {
|
||||
if (Data && Data.result) {
|
||||
SetStatus("Save AutoUpdate: " + document.getElementById("idAutoUpdate").checked);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function UseMining()
|
||||
{
|
||||
if(!MiningAccount)
|
||||
{
|
||||
function UseMining() {
|
||||
if (!MiningAccount) {
|
||||
SetError("Not set mining account");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
var Data = {USE_MINING:document.getElementById("idUseMining").checked, DoMining:1};
|
||||
GetData("SaveConstant", Data, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
var Data = { USE_MINING: document.getElementById("idUseMining").checked, DoMining: 1 };
|
||||
GetData("SaveConstant", Data, function(Data) {
|
||||
if (Data && Data.result) {
|
||||
SetStatus("Save Mining: " + document.getElementById("idUseMining").checked);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function SetPercentMining()
|
||||
{
|
||||
var Data = {POW_MAX_PERCENT:document.getElementById("idPercentMining").value};
|
||||
GetData("SaveConstant", Data, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
function SetPercentMining() {
|
||||
var Data = { POW_MAX_PERCENT: document.getElementById("idPercentMining").value };
|
||||
GetData("SaveConstant", Data, function(Data) {
|
||||
if (Data && Data.result) {
|
||||
SetStatus("Save Mining percent: " + document.getElementById("idPercentMining").value + " %");
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function MiningSets()
|
||||
{
|
||||
function MiningSets() {
|
||||
var name = "edit_mining_set";
|
||||
if(IsVisibleBlock(name))
|
||||
{
|
||||
if (IsVisibleBlock(name)) {
|
||||
SetVisibleBlock(name, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SetVisibleBlock(name, true);
|
||||
document.getElementById("idMiningAccount").value = MiningAccount;
|
||||
document.getElementById("idMiningAccount").focus();
|
||||
}
|
||||
};
|
||||
|
||||
function SaveMiningSet(Value)
|
||||
{
|
||||
function SaveMiningSet(Value) {
|
||||
SetVisibleBlock("edit_mining_set", false);
|
||||
if(Value)
|
||||
{
|
||||
if (Value) {
|
||||
MiningAccount = Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
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";
|
||||
SetVisibleBlock(name, false);
|
||||
};
|
||||
var WasHistoryMaxNum;
|
||||
var WasLastNumSound = 0;
|
||||
|
||||
function CheckNewMoney()
|
||||
{
|
||||
return ;
|
||||
if(!$("idUseSoundHistory").checked)
|
||||
return ;
|
||||
if(WasHistoryMaxNum === HistoryMaxNum || !ServerBlockNumDB)
|
||||
return ;
|
||||
function CheckNewMoney() {
|
||||
return;
|
||||
if (!$("idUseSoundHistory").checked)
|
||||
return;
|
||||
if (WasHistoryMaxNum === HistoryMaxNum || !ServerBlockNumDB)
|
||||
return;
|
||||
WasHistoryMaxNum = HistoryMaxNum;
|
||||
GetData("GetHistoryAct", {StartNum:HistoryMaxNum - 40, CountNum:40}, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
GetData("GetHistoryAct", { StartNum: HistoryMaxNum - 40, CountNum: 40 }, function(Data) {
|
||||
if (Data && Data.result) {
|
||||
var arr = Data.arr;
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < arr.length; 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;
|
||||
$("sound_coin").play();
|
||||
}
|
||||
@@ -301,52 +243,41 @@ function CheckNewMoney()
|
||||
});
|
||||
};
|
||||
|
||||
function DoRestartWallet()
|
||||
{
|
||||
function DoRestartWallet() {
|
||||
SetStatus("<H1 align='center' style='color:blue'>Restarting program...</H1>");
|
||||
if(!WasSetRestart)
|
||||
{
|
||||
if (!WasSetRestart) {
|
||||
WasSetRestart = 1;
|
||||
setTimeout(function ()
|
||||
{
|
||||
setTimeout(function() {
|
||||
window.location.reload();
|
||||
}, 10 * 1000);
|
||||
}
|
||||
};
|
||||
|
||||
function SetArrLog(arr)
|
||||
{
|
||||
function SetArrLog(arr) {
|
||||
var Str = "";
|
||||
var bFindAccount = 0;
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var Item = arr[i];
|
||||
var tr_text = GetTransactionText(MapSendTransaction[Item.key], Item.key.substr(0, 16));
|
||||
var info = Item.text;
|
||||
if(tr_text)
|
||||
if (tr_text)
|
||||
info += " (" + tr_text + ")";
|
||||
if(Item.final)
|
||||
{
|
||||
if (Item.final) {
|
||||
var TR = MapSendTransaction[Item.key];
|
||||
if(TR)
|
||||
{
|
||||
if(Item.text.indexOf("Add to blockchain") >= 0)
|
||||
{
|
||||
if(TR.bFindAcc)
|
||||
{
|
||||
if (TR) {
|
||||
if (Item.text.indexOf("Add to blockchain") >= 0) {
|
||||
if (TR.bFindAcc) {
|
||||
bFindAccount = 1;
|
||||
TR.bFindAcc = 0;
|
||||
}
|
||||
if(TR.Run)
|
||||
{
|
||||
if (TR.Run) {
|
||||
TR.Run(TR);
|
||||
TR.Run = undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
var Account = MapCheckTransaction[Item.key];
|
||||
if(Account)
|
||||
{
|
||||
if (Account) {
|
||||
delete MapCheckTransaction[Item.key];
|
||||
Account.NextSendTime = 0;
|
||||
}
|
||||
@@ -355,39 +286,31 @@ function SetArrLog(arr)
|
||||
}
|
||||
SetStatusFromServer(Str);
|
||||
CheckSending();
|
||||
if(bFindAccount)
|
||||
{
|
||||
if (bFindAccount) {
|
||||
FindMyAccounts();
|
||||
}
|
||||
};
|
||||
|
||||
function SetAutoMining()
|
||||
{
|
||||
setTimeout(function ()
|
||||
{
|
||||
function SetAutoMining() {
|
||||
setTimeout(function() {
|
||||
var Select = $("idAccount");
|
||||
if(Select.options.length)
|
||||
{
|
||||
if (Select.options.length) {
|
||||
SaveMiningSet(Select.options[Select.options.length - 1].value);
|
||||
}
|
||||
}, 100);
|
||||
};
|
||||
|
||||
function ViewNetworkMode()
|
||||
{
|
||||
if(IsVisibleBlock('idNetworkView'))
|
||||
{
|
||||
function ViewNetworkMode() {
|
||||
if (IsVisibleBlock('idNetworkView')) {
|
||||
SetVisibleBlock('idNetworkView', false);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SetVisibleBlock('idNetworkView', true);
|
||||
var Mode = CONFIG_DATA.CONSTANTS.NET_WORK_MODE;
|
||||
if(!Mode)
|
||||
{
|
||||
if (!Mode) {
|
||||
Mode = {};
|
||||
Mode.UseDirectIP = true;
|
||||
if(INTERNET_IP_FROM_STUN)
|
||||
if (INTERNET_IP_FROM_STUN)
|
||||
Mode.ip = INTERNET_IP_FROM_STUN;
|
||||
else
|
||||
Mode.ip = SERVER_IP;
|
||||
@@ -396,146 +319,120 @@ function ViewNetworkMode()
|
||||
document.getElementById("idUseDirectIP").checked = Mode.UseDirectIP;
|
||||
document.getElementById("idIP").value = Mode.ip;
|
||||
document.getElementById("idPort").value = Mode.port;
|
||||
if(!Mode.NodeWhiteList)
|
||||
if (!Mode.NodeWhiteList)
|
||||
Mode.NodeWhiteList = "";
|
||||
document.getElementById("idNodeWhiteList").value = Mode.NodeWhiteList;
|
||||
}
|
||||
};
|
||||
|
||||
function SetNetworkParams(bRestart)
|
||||
{
|
||||
function SetNetworkParams(bRestart) {
|
||||
var Mode = {};
|
||||
Mode.UseDirectIP = document.getElementById("idUseDirectIP").checked;
|
||||
Mode.ip = document.getElementById("idIP").value;
|
||||
Mode.port = ParseNum(document.getElementById("idPort").value);
|
||||
Mode.NodeWhiteList = document.getElementById("idNodeWhiteList").value;
|
||||
Mode.DoRestartNode = bRestart;
|
||||
GetData("SetNetMode", Mode, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
GetData("SetNetMode", Mode, function(Data) {
|
||||
if (Data && Data.result) {
|
||||
SetStatus("Set net work params OK");
|
||||
SetVisibleBlock('idNetworkView', false);
|
||||
}
|
||||
});
|
||||
if(bRestart)
|
||||
if (bRestart)
|
||||
DoRestartWallet();
|
||||
};
|
||||
|
||||
function ViewConstant()
|
||||
{
|
||||
if(IsVisibleBlock('idConstantView'))
|
||||
{
|
||||
function ViewConstant() {
|
||||
if (IsVisibleBlock('idConstantView')) {
|
||||
SetVisibleBlock('idConstantView', false);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SetVisibleBlock('idConstantView', true);
|
||||
document.getElementById("idConstant").value = JSON.stringify(CONFIG_DATA.CONSTANTS, "", 2);
|
||||
}
|
||||
};
|
||||
|
||||
function SaveConstant(bRestart)
|
||||
{
|
||||
try
|
||||
{
|
||||
function SaveConstant(bRestart) {
|
||||
try {
|
||||
var Data = JSON.parse(document.getElementById("idConstant").value);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
catch (e) {
|
||||
SetError("Error JSON format setting constant");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
Data.DoRestartNode = bRestart;
|
||||
GetData("SaveConstant", Data, function (Data)
|
||||
{
|
||||
if(Data && Data.result)
|
||||
{
|
||||
GetData("SaveConstant", Data, function(Data) {
|
||||
if (Data && Data.result) {
|
||||
SetStatus("Save Constant OK");
|
||||
SetVisibleBlock('idConstantView', false);
|
||||
}
|
||||
});
|
||||
if(bRestart)
|
||||
if (bRestart)
|
||||
DoRestartWallet();
|
||||
};
|
||||
|
||||
function ViewRemoteParams()
|
||||
{
|
||||
if(IsVisibleBlock('idRemoteView'))
|
||||
{
|
||||
function ViewRemoteParams() {
|
||||
if (IsVisibleBlock('idRemoteView')) {
|
||||
SetVisibleBlock('idRemoteView', false);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SetVisibleBlock('idRemoteView', true);
|
||||
if(CONFIG_DATA.HTTPPort)
|
||||
if (CONFIG_DATA.HTTPPort)
|
||||
document.getElementById("idHTTPPort").value = CONFIG_DATA.HTTPPort;
|
||||
document.getElementById("idHTTPPassword").value = CONFIG_DATA.HTTPPassword;
|
||||
}
|
||||
};
|
||||
|
||||
function SetRemoteParams(bRestart)
|
||||
{
|
||||
function SetRemoteParams(bRestart) {
|
||||
var PrevHTTPPassword = HTTPPassword;
|
||||
var HTTPPort = ParseNum(document.getElementById("idHTTPPort").value);
|
||||
var HTTPPassword = document.getElementById("idHTTPPassword").value;
|
||||
GetData("SetHTTPParams", {HTTPPort:HTTPPort, HTTPPassword:HTTPPassword, DoRestartNode:bRestart}, function (Data)
|
||||
{
|
||||
if(!PrevHTTPPassword && HTTPPassword)
|
||||
GetData("SetHTTPParams", { HTTPPort: HTTPPort, HTTPPassword: HTTPPassword, DoRestartNode: bRestart }, function(Data) {
|
||||
if (!PrevHTTPPassword && HTTPPassword)
|
||||
window.location.reload();
|
||||
else
|
||||
{
|
||||
else {
|
||||
SetVisibleBlock('idRemoteView', false);
|
||||
SetStatus("Set HTTP params OK");
|
||||
}
|
||||
});
|
||||
if(bRestart)
|
||||
if (bRestart)
|
||||
DoRestartWallet();
|
||||
};
|
||||
|
||||
function RewriteAllTransactions()
|
||||
{
|
||||
function RewriteAllTransactions() {
|
||||
DoBlockChainProcess("RewriteAllTransactions", "Rewrite all transactions", 0);
|
||||
};
|
||||
|
||||
function RewriteTransactions()
|
||||
{
|
||||
function RewriteTransactions() {
|
||||
DoBlockChainProcess("RewriteTransactions", "Rewrite transactions on last %1 blocks", 1);
|
||||
};
|
||||
|
||||
function TruncateBlockChain()
|
||||
{
|
||||
function TruncateBlockChain() {
|
||||
DoBlockChainProcess("TruncateBlockChain", "Truncate last %1 blocks", 1);
|
||||
};
|
||||
|
||||
function ClearDataBase()
|
||||
{
|
||||
function ClearDataBase() {
|
||||
DoBlockChainProcess("ClearDataBase", "Clear DataBase", 0);
|
||||
};
|
||||
|
||||
function CleanChain()
|
||||
{
|
||||
function CleanChain() {
|
||||
DoBlockChainProcess("CleanChain", "Clean chain on last %1 blocks", 1);
|
||||
};
|
||||
|
||||
function DoBlockChainProcess(FuncName,Text,LastBlock)
|
||||
{
|
||||
function DoBlockChainProcess(FuncName, Text, LastBlock) {
|
||||
SaveValues();
|
||||
var Params = {};
|
||||
if(LastBlock)
|
||||
{
|
||||
if (LastBlock) {
|
||||
Params.BlockCount = ParseNum(document.getElementById("idBlockCount").value);
|
||||
Text = Text.replace("%1", Params.BlockCount);
|
||||
}
|
||||
var result = confirm(Text + "?");
|
||||
if(!result)
|
||||
return ;
|
||||
if (!result)
|
||||
return;
|
||||
SetVisibleBlock("idServerBlock", 1);
|
||||
SetStatus("START: " + Text);
|
||||
GetData(FuncName, Params, function (Data)
|
||||
{
|
||||
if(Data)
|
||||
{
|
||||
GetData(FuncName, Params, function(Data) {
|
||||
if (Data) {
|
||||
SetStatus("FINISH: " + Text, !Data.result);
|
||||
}
|
||||
});
|
||||
|
||||
7
src/a.sh
7
src/a.sh
@@ -4,3 +4,10 @@ DIST=ts
|
||||
for name in `ls *.${EXT}`; do
|
||||
mv $name ${name%.${EXT}}.${DIST}
|
||||
done
|
||||
: Function;
|
||||
global.
|
||||
|
||||
BlockNumDB
|
||||
RelayMode
|
||||
LoadHistoryMessage
|
||||
LastLoadedBlockNum
|
||||
@@ -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,
|
||||
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: 0 };
|
||||
|
||||
@@ -9,18 +9,34 @@
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
require("./library.js");
|
||||
require("./crypto-library");
|
||||
require("./terahashmining");
|
||||
import "./library"
|
||||
import "./crypto-library"
|
||||
import "./terahashmining"
|
||||
import * as crypto from 'crypto';
|
||||
const os = require('os');
|
||||
import * as os from 'os'
|
||||
|
||||
global.glStopNode = false;
|
||||
const MAX_TIME_NETWORK_TRANSPORT = 1 * 1000;
|
||||
var GlSumUser;
|
||||
var GlSumSys;
|
||||
var GlSumIdle;
|
||||
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) {
|
||||
global.SERVER = this
|
||||
this.VirtualMode = bVirtual
|
||||
@@ -29,7 +45,7 @@ module.exports = class CCommon importasdasd {
|
||||
this.PubKeyType = PubKey[0]
|
||||
this.addrArr = PubKey.slice(1)
|
||||
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 = []
|
||||
}
|
||||
AddStatOnTimer() {
|
||||
@@ -37,10 +53,10 @@ module.exports = class CCommon importasdasd {
|
||||
var CurTime = global.GetCurrentTime() - 0;
|
||||
for (var i = 0; i < this.NodesArr.length; 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++
|
||||
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++
|
||||
}
|
||||
global.CountAllNode = CountAll
|
||||
@@ -52,9 +68,9 @@ module.exports = class CCommon importasdasd {
|
||||
global.ADD_TO_STAT("MAX:DELTA_TX", Delta)
|
||||
}
|
||||
var bHasCP = 0;
|
||||
if (CHECK_POINT.BlockNum) {
|
||||
var Block = this.ReadBlockHeaderDB(CHECK_POINT.BlockNum);
|
||||
if (Block && global.CompareArr(CHECK_POINT.Hash, Block.Hash) === 0)
|
||||
if (global.CHECK_POINT.BlockNum) {
|
||||
var Block = this.ReadBlockHeaderDB(global.CHECK_POINT.BlockNum);
|
||||
if (Block && global.CompareArr(global.CHECK_POINT.Hash, Block.Hash) === 0)
|
||||
bHasCP = 1
|
||||
}
|
||||
var MinVer = global.MIN_VER_STAT;
|
||||
@@ -73,7 +89,7 @@ module.exports = class CCommon importasdasd {
|
||||
var INFO = Node.INFO;
|
||||
if (!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++
|
||||
}
|
||||
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:STOP_GET", CountStop)
|
||||
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)
|
||||
Count = 1
|
||||
if (!CountHot)
|
||||
@@ -202,7 +218,7 @@ class SMemBuffer {
|
||||
if (typeof Arr === "number" || typeof Arr === "string") {
|
||||
return Arr;
|
||||
} else {
|
||||
return GetHexFromAddres(Arr);
|
||||
return global.GetHexFromAddres(Arr);
|
||||
}
|
||||
throw "NOT RET!";
|
||||
}
|
||||
@@ -229,7 +245,7 @@ class SMemBuffer {
|
||||
this.MetaMap1[Key] = Value
|
||||
}
|
||||
ShiftMapDirect() {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
if (this.CheckName) {
|
||||
var Count = 0;
|
||||
@@ -249,6 +265,10 @@ class SMemBuffer {
|
||||
}
|
||||
};
|
||||
class STreeBuffer {
|
||||
KeyType
|
||||
MetaTree1
|
||||
MetaTree2
|
||||
CheckName
|
||||
constructor(MaxTime, CompareFunction?, KeyType?, CheckName?) {
|
||||
this.KeyType = KeyType
|
||||
this.MetaTree1 = new RBTree(CompareFunction)
|
||||
@@ -364,9 +384,9 @@ function TestCreateTr() {
|
||||
var StartData = Date.now();
|
||||
var nonce = CreateHashBodyPOWInnerMinPower(Body, 1000, 17);
|
||||
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 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");
|
||||
return { time1: deltaTime, time2: DeltaData };
|
||||
};
|
||||
@@ -381,7 +401,7 @@ function CreateHashBodyPOWInnerMinPower(arr, BlockNum, MinPow) {
|
||||
var nonce = 0;
|
||||
while (1) {
|
||||
var arrhash = CreateHashBody(arr, BlockNum, nonce);
|
||||
var power = GetPowPower(arrhash);
|
||||
var power = global.GetPowPower(arrhash);
|
||||
if (power >= MinPow) {
|
||||
return nonce;
|
||||
}
|
||||
|
||||
@@ -15,10 +15,10 @@ const TX_PROCESS_TIME = 100;
|
||||
const TX_DELTA_PROCESS_TIME = 300;
|
||||
global.CAN_START = false;
|
||||
global.StrWarn = "";
|
||||
global.SUM_LIST_LENGTH = 2 * BLOCK_PROCESSING_LENGTH;
|
||||
global.CONSENSUS_TIK_TIME = CONSENSUS_PERIOD_TIME / 10;
|
||||
global.CONSENSUS_CHECK_TIME = CONSENSUS_PERIOD_TIME / 20;
|
||||
const PERIOD_FOR_NEXT_SEND = CONSENSUS_TIK_TIME * 3;
|
||||
global.SUM_LIST_LENGTH = 2 * global.BLOCK_PROCESSING_LENGTH;
|
||||
global.CONSENSUS_TIK_TIME = global.CONSENSUS_PERIOD_TIME / 10;
|
||||
global.CONSENSUS_CHECK_TIME = global.CONSENSUS_PERIOD_TIME / 20;
|
||||
const PERIOD_FOR_NEXT_SEND = global.CONSENSUS_TIK_TIME * 3;
|
||||
global.BLOCK_DELTA_ACTIVATE = 0;
|
||||
global.TIME_END_EXCHANGE = - 3;
|
||||
global.TIME_START_POW = - 4;
|
||||
@@ -40,47 +40,53 @@ var FORMAT_DATA_TRANSFER = "{\
|
||||
const WorkStructSend = {};
|
||||
module.exports = class CConsensus extends require("./block-loader")
|
||||
{
|
||||
CurrentBlockNum
|
||||
SendBlockID
|
||||
RelayMode
|
||||
TreeSendPacket
|
||||
idBlockChainTimer
|
||||
OwnBlockCount
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.CurrentBlockNum = 0
|
||||
this.SendBlockID = 0
|
||||
this.RelayMode = false
|
||||
this.TreeSendPacket = new RBTree(CompareItemHash)
|
||||
this.TreeSendPacket = new RBTree(global.CompareItemHash)
|
||||
if (!global.ADDRLIST_MODE && !this.VirtualMode) {
|
||||
this.idBlockChainTimer = setInterval(this.StartBlockChain.bind(this), CONSENSUS_PERIOD_TIME - 5)
|
||||
setInterval(this.DoTransfer.bind(this), CONSENSUS_CHECK_TIME)
|
||||
this.idBlockChainTimer = setInterval(this.StartBlockChain.bind(this), global.CONSENSUS_PERIOD_TIME - 5)
|
||||
setInterval(this.DoTransfer.bind(this), global.CONSENSUS_CHECK_TIME)
|
||||
}
|
||||
}
|
||||
StartBlockChain() {
|
||||
this.OnStartSecond()
|
||||
var CurTimeNum = global.GetCurrentTime() - CONSENSUS_PERIOD_TIME / 2;
|
||||
var StartTimeNum = Math.floor((CurTimeNum + CONSENSUS_PERIOD_TIME) / CONSENSUS_PERIOD_TIME) * CONSENSUS_PERIOD_TIME;
|
||||
var CurTimeNum = global.GetCurrentTime() - global.CONSENSUS_PERIOD_TIME / 2;
|
||||
var StartTimeNum = Math.floor((CurTimeNum + global.CONSENSUS_PERIOD_TIME) / global.CONSENSUS_PERIOD_TIME) * global.CONSENSUS_PERIOD_TIME;
|
||||
var DeltaForStart = StartTimeNum - CurTimeNum;
|
||||
if (DeltaForStart < (CONSENSUS_PERIOD_TIME - 5)) {
|
||||
if (DeltaForStart < (global.CONSENSUS_PERIOD_TIME - 5)) {
|
||||
var self = this;
|
||||
if (self.idBlockChainTimer)
|
||||
clearInterval(self.idBlockChainTimer)
|
||||
self.idBlockChainTimer = 0
|
||||
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()
|
||||
}, DeltaForStart)
|
||||
}
|
||||
}
|
||||
OnStartSecond() {
|
||||
PrepareStatEverySecond()
|
||||
global.PrepareStatEverySecond()
|
||||
this.AddStatOnTimer()
|
||||
this.DoBlockChain()
|
||||
}
|
||||
CreateBlockContext() {
|
||||
var Context = {};
|
||||
Context.AddInfo = AddInfoBlock.bind(Context)
|
||||
var Context: any = {};
|
||||
Context.AddInfo = global.AddInfoBlock.bind(Context)
|
||||
Context.Active = false
|
||||
Context.TransferFromAddr = {}
|
||||
Context.LevelsTransfer = []
|
||||
Context.ErrRun = ""
|
||||
Context.PowTxTree = new RBTree(CompareItemTimePow)
|
||||
Context.PowTicketTree = new RBTree(CompareItemTimePow)
|
||||
Context.PowTxTree = new RBTree(global.CompareItemTimePow)
|
||||
Context.PowTicketTree = new RBTree(global.CompareItemTimePow)
|
||||
Context.bSave = false
|
||||
Context.PrevHash = undefined
|
||||
Context.TreeHash = undefined
|
||||
@@ -91,7 +97,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
Context.TrCount = 0
|
||||
Context.TrDataPos = 0
|
||||
Context.TrDataLen = 0
|
||||
Context.Info = "Create at:" + GetStrOnlyTimeUTC()
|
||||
Context.Info = "Create at:" + global.GetStrOnlyTimeUTC()
|
||||
var Transfer;
|
||||
var TransferM2;
|
||||
var LocalLevel = 0;
|
||||
@@ -100,7 +106,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var arr = Levels[L];
|
||||
if (arr && arr.length > 0) {
|
||||
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++
|
||||
Context.LevelsTransfer.push(Transfer)
|
||||
@@ -109,7 +115,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var Node = arr[j];
|
||||
var Addr = Node.addrStr;
|
||||
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
|
||||
}
|
||||
Context.TransferFromAddr[Addr] = Transfer
|
||||
@@ -120,19 +126,19 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
return Context;
|
||||
}
|
||||
StartConsensus() {
|
||||
if (!CAN_START)
|
||||
if (!global.global.CAN_START)
|
||||
return;
|
||||
var StartBlockNum = GetCurrentBlockNumByTime();
|
||||
var StartBlockNum = global.GetCurrentBlockNumByTime();
|
||||
if (StartBlockNum < global.BLOCK_PROCESSING_LENGTH2)
|
||||
return;
|
||||
this.CurrentBlockNum = StartBlockNum
|
||||
var Block0 = this.GetBlockContext(StartBlockNum - BLOCK_DELTA_ACTIVATE);
|
||||
var Block0 = this.GetBlockContext(StartBlockNum - global.BLOCK_DELTA_ACTIVATE);
|
||||
if (!Block0.Active) {
|
||||
AddInfoBlock(Block0, "Activate")
|
||||
global.AddInfoBlock(Block0, "Activate")
|
||||
this.StartBlock(Block0)
|
||||
}
|
||||
else {
|
||||
AddInfoBlock(Block0, "Was Active")
|
||||
global.AddInfoBlock(Block0, "Was Active")
|
||||
}
|
||||
}
|
||||
TrToInfo(Block, Array, StrInfo) {
|
||||
@@ -140,9 +146,9 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
for (var i = 0; i < Array.length; i++) {
|
||||
var Item = Array[i];
|
||||
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) {
|
||||
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;
|
||||
if (Delta > 10 * 1000 && Node.TransferCount > 10) {
|
||||
Node.BlockProcessCount++
|
||||
@@ -211,19 +217,19 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
Node.TransferCount++
|
||||
Node.LastTimeTransfer = global.GetCurrentTime() - 0
|
||||
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)
|
||||
Block.TransferNodesCount = 0
|
||||
Block.TransferNodesCount++
|
||||
}
|
||||
DoTransfer() {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
if (!CAN_START)
|
||||
if (!global.CAN_START)
|
||||
return;
|
||||
var MaxPOWList;
|
||||
var MaxSumList;
|
||||
var start = this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH;
|
||||
var start = this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH;
|
||||
var finish = this.GetLastCorrectBlockNum();
|
||||
for (var b = start; b <= finish; b++) {
|
||||
var Block = this.GetBlock(b);
|
||||
@@ -257,7 +263,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
Transfer.WasSend = true
|
||||
var bNext = Transfer.WasGet;
|
||||
if (!bNext) {
|
||||
var CurTimeNum = GetCurrentTime(Block.DELTA_CURRENT_TIME) - 0;
|
||||
var CurTimeNum = global.GetCurrentTime(Block.DELTA_CURRENT_TIME) - 0;
|
||||
var DeltaTime = CurTimeNum - Block.StartTimeNum;
|
||||
if (DeltaTime > Transfer.MustDeltaTime) {
|
||||
bNext = true
|
||||
@@ -393,7 +399,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
if (this.CanSendTest())
|
||||
Arr.push(Tr0)
|
||||
BufLength += Tr0.body.length
|
||||
if (BufLength > MAX_BLOCK_SIZE)
|
||||
if (BufLength > global.MAX_BLOCK_SIZE)
|
||||
break;
|
||||
}
|
||||
else {
|
||||
@@ -479,7 +485,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
FilterArrForSendNode(Block, Node, ArrTx, bTt) {
|
||||
FilterArrForSendNode(Block, Node, ArrTx, bTt?) {
|
||||
var Arr = [];
|
||||
for (var t = 0; t < ArrTx.length; t++) {
|
||||
var Tr = ArrTx[t];
|
||||
@@ -521,7 +527,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
this.CheckTxExchange(Block, bSend)
|
||||
}
|
||||
}
|
||||
CheckTxExchange(Block) {
|
||||
CheckTxExchange(Block, b?) {
|
||||
return;
|
||||
if (Block.EndExchange)
|
||||
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,
|
||||
"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;
|
||||
}
|
||||
static
|
||||
@@ -642,11 +648,11 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var StrKey = this.GetStrFromHashShort(LoadHash);
|
||||
var StrHashWas = this.GetStrFromHashShort(Block.Hash);
|
||||
this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START OTHER:" + StrKey + " WAS:" + StrHashWas, false)
|
||||
AddInfoBlock(Block, "REQ H: " + StrKey)
|
||||
global.AddInfoBlock(Block, "REQ H: " + StrKey)
|
||||
}
|
||||
Block.CheckMaxPow = true
|
||||
}
|
||||
AddToMaxPOW(Block, item, Node) {
|
||||
AddToMaxPOW(Block, item, Node?) {
|
||||
if (Block && item) {
|
||||
if (!Block.MaxPOW)
|
||||
Block.MaxPOW = {}
|
||||
@@ -655,7 +661,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
return;
|
||||
item.BlockNum = Block.BlockNum
|
||||
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) {
|
||||
POW.AddrHash = item.AddrHash
|
||||
POW.Hash = item.Hash
|
||||
@@ -678,8 +684,8 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
if (wasLider) {
|
||||
var newLider = POW.MaxTree.min();
|
||||
if (newLider !== wasLider) {
|
||||
var Power = GetPowPower(newLider.PowHash);
|
||||
AddInfoBlock(Block, "MaxPOW: " + Power)
|
||||
var Power = global.GetPowPower(newLider.PowHash);
|
||||
global.AddInfoBlock(Block, "MaxPOW: " + Power)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -701,7 +707,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
GetMaxPOWList() {
|
||||
var arr = [];
|
||||
var start, finish;
|
||||
start = this.CurrentBlockNum + TIME_START_SAVE - 2
|
||||
start = this.CurrentBlockNum + global.TIME_START_SAVE - 2
|
||||
finish = this.CurrentBlockNum
|
||||
for (var b = start; b < finish; b++) {
|
||||
var Block = this.GetBlock(b);
|
||||
@@ -720,7 +726,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
ToMaxPOWList(Arr) {
|
||||
for (var i = 0; i < Arr.length; 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);
|
||||
this.AddToMaxPOW(Block, item)
|
||||
}
|
||||
@@ -750,7 +756,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var LoadHash = POW.SumHash;
|
||||
var StrKey = this.GetStrFromHashShort(LoadHash);
|
||||
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
|
||||
}
|
||||
@@ -764,7 +770,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
POW.SumPow = SumPow
|
||||
POW.SumHash = item.SumHash
|
||||
POW.SumList = item.SumList
|
||||
AddInfoBlock(Block, "SumPow:" + POW.SumPow)
|
||||
global.AddInfoBlock(Block, "SumPow:" + POW.SumPow)
|
||||
Block.CheckMaxSum = false
|
||||
}
|
||||
return SumPow;
|
||||
@@ -774,7 +780,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
GetMaxSumList() {
|
||||
var Arr = [];
|
||||
var start, finish;
|
||||
start = this.CurrentBlockNum + TIME_START_LOAD - 2
|
||||
start = this.CurrentBlockNum + global.TIME_START_LOAD - 2
|
||||
finish = this.CurrentBlockNum
|
||||
for (var b = start; b <= finish; b++) {
|
||||
var Block = this.GetBlock(b);
|
||||
@@ -788,7 +794,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
}
|
||||
ToMaxSumList(Arr) {
|
||||
var start, finish;
|
||||
start = this.CurrentBlockNum + TIME_START_LOAD - 2
|
||||
start = this.CurrentBlockNum + global.TIME_START_LOAD - 2
|
||||
finish = this.CurrentBlockNum
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
var item = Arr[i];
|
||||
@@ -803,7 +809,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
}
|
||||
GetBlockList(CurBlockNum) {
|
||||
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);
|
||||
if (Block && Block.bSave) {
|
||||
var item = { AddrHash: Block.AddrHash, SeqHash: Block.SeqHash, };
|
||||
@@ -817,7 +823,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
}
|
||||
GetSumFromList(arr, CurBlockNum) {
|
||||
var SumPow = 0;
|
||||
if (arr.length !== SUM_LIST_LENGTH)
|
||||
if (arr.length !== global.SUM_LIST_LENGTH)
|
||||
return SumPow;
|
||||
var CountLoad = 0;
|
||||
var BlockNumStart = CurBlockNum - arr.length + 1;
|
||||
@@ -825,8 +831,8 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var Item = arr[i];
|
||||
if (Item) {
|
||||
Item.BlockNum = BlockNumStart + i
|
||||
var Value = GetHashFromSeqAddr(Item.SeqHash, Item.AddrHash, Item.BlockNum, undefined, global.MINING_VERSION_NUM);
|
||||
SumPow += GetPowPower(Value.PowHash)
|
||||
var Value = global.GetHashFromSeqAddr(Item.SeqHash, Item.AddrHash, Item.BlockNum, undefined, global.MINING_VERSION_NUM);
|
||||
SumPow += global.GetPowPower(Value.PowHash)
|
||||
Item.Hash3 = Value.Hash
|
||||
}
|
||||
else {
|
||||
@@ -844,7 +850,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
while ((Item = it.next()) !== null) {
|
||||
arr.push(Item)
|
||||
BufLength += Item.body.length
|
||||
if (BufLength > MAX_BLOCK_SIZE)
|
||||
if (BufLength > global.MAX_BLOCK_SIZE)
|
||||
break;
|
||||
}
|
||||
return arr;
|
||||
@@ -866,7 +872,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
}
|
||||
else {
|
||||
Tree.insert(Tr)
|
||||
if (Tree.size > MAX_TRANSACTION_LIMIT) {
|
||||
if (Tree.size > global.MAX_TRANSACTION_LIMIT) {
|
||||
var maxitem = Tree.max();
|
||||
Tree.remove(maxitem)
|
||||
if (global.CompareArr(maxitem.HashPow, Tr.HashPow) === 0)
|
||||
@@ -886,7 +892,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
return null;
|
||||
}
|
||||
}
|
||||
AddTrToBlockQuote(Block, Tr, bTTAdd) {
|
||||
AddTrToBlockQuote(Block, Tr, bTTAdd?) {
|
||||
if (Block.PowTxTree) {
|
||||
var Res = this.IsValidTransaction(Tr, Block.BlockNum);
|
||||
if (Res >= 1) {
|
||||
@@ -907,8 +913,8 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
if (!Context || !Context.StartTimeNum) {
|
||||
Context = this.CreateBlockContext()
|
||||
Context.BlockNum = BlockNum
|
||||
Context.DELTA_CURRENT_TIME = GetDeltaCurrentTime()
|
||||
Context.StartTimeNum = (BlockNum - 1 + BLOCK_DELTA_ACTIVATE) * CONSENSUS_PERIOD_TIME + START_NETWORK_DATE
|
||||
Context.DELTA_CURRENT_TIME = global.GetDeltaCurrentTime()
|
||||
Context.StartTimeNum = (BlockNum - 1 + global.BLOCK_DELTA_ACTIVATE) * global.CONSENSUS_PERIOD_TIME + global.START_NETWORK_DATE
|
||||
this.BlockChain[BlockNum] = Context
|
||||
}
|
||||
if (!Context.TransferFromAddr) {
|
||||
@@ -921,7 +927,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
Block.Active = true
|
||||
}
|
||||
IsCorrectBlockNum(BlockNum) {
|
||||
var start = this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH;
|
||||
var start = this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH;
|
||||
var finish = this.GetLastCorrectBlockNum();
|
||||
if (BlockNum < start || BlockNum > finish) {
|
||||
return false;
|
||||
@@ -971,23 +977,23 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
hashStr = Block.ErrRun.substr(0, 5)
|
||||
else
|
||||
if (Block && Block.TreeHash)
|
||||
hashStr = "-" + GetHexFromAddres(Block.TreeHash).substr(0, 3) + "-"
|
||||
hashStr = "-" + global.GetHexFromAddres(Block.TreeHash).substr(0, 3) + "-"
|
||||
}
|
||||
else
|
||||
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.substr(1)
|
||||
ToInfo("" + finish + " -> " + Str + " " + DopStr)
|
||||
global.ToInfo("" + finish + " -> " + Str + " " + DopStr)
|
||||
}
|
||||
PreparePOWHash(Block) {
|
||||
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]
|
||||
var PrevHash = this.GetPrevHash(Block);
|
||||
if (!PrevHash) {
|
||||
AddInfoBlock(Block, "-err prev hash-")
|
||||
global.AddInfoBlock(Block, "-err prev hash-")
|
||||
return false;
|
||||
}
|
||||
Block.PrevHash = PrevHash
|
||||
@@ -996,7 +1002,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
Block.Prepared = true
|
||||
if (global.USE_MINING && !Block.StartMining) {
|
||||
Block.StartMining = true
|
||||
AddInfoBlock(Block, "-send mining-")
|
||||
global.AddInfoBlock(Block, "-send mining-")
|
||||
global.SetCalcPOW(Block, "FastCalcBlock")
|
||||
}
|
||||
return true;
|
||||
@@ -1007,7 +1013,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var Tr = arrTr[i];
|
||||
arrHASH.push(Tr.HASH)
|
||||
}
|
||||
var Tree = CalcMerklFromArray(BlockNum, arrHASH);
|
||||
var Tree = global.CalcMerklFromArray(BlockNum, arrHASH);
|
||||
return Tree.Root;
|
||||
}
|
||||
CreateTreeHash(Block) {
|
||||
@@ -1018,10 +1024,10 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
return;
|
||||
var PrevBlock = this.GetBlock(Block.BlockNum - 1);
|
||||
if (PrevBlock && !PrevBlock.EndExchange && !PrevBlock.bSave) {
|
||||
AddInfoBlock(Block, "Prev Not End Exchange")
|
||||
global.AddInfoBlock(Block, "Prev Not End Exchange")
|
||||
return;
|
||||
}
|
||||
AddInfoBlock(Block, "End Exchange,N=" + Block.TransferNodesCount)
|
||||
global.AddInfoBlock(Block, "End Exchange,N=" + Block.TransferNodesCount)
|
||||
var arrContent = [];
|
||||
var arrHASH = [];
|
||||
var arrTr = this.GetArrayFromTxTree(Block);
|
||||
@@ -1031,7 +1037,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
arrContent.push(Tr.body)
|
||||
arrHASH.push(Tr.HASH)
|
||||
}
|
||||
var Tree = CalcMerklFromArray(Block.BlockNum, arrHASH);
|
||||
var Tree = global.CalcMerklFromArray(Block.BlockNum, arrHASH);
|
||||
Block.TreeHash = Tree.Root
|
||||
Block.arrContent = arrContent
|
||||
Block.TrCount = Block.arrContent.length
|
||||
@@ -1049,49 +1055,49 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
return;
|
||||
}
|
||||
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)
|
||||
return;
|
||||
}
|
||||
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)
|
||||
return;
|
||||
}
|
||||
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)
|
||||
return;
|
||||
}
|
||||
var PrevHash = this.GetPrevHash(Block);
|
||||
if (!PrevHash) {
|
||||
AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||
global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||
global.ToLog("#6 WatchdogSaved: Error PrevHash on Num=" + BlockNum)
|
||||
return;
|
||||
}
|
||||
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
||||
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)
|
||||
return;
|
||||
}
|
||||
PrevHash = this.GetPrevHashDB(BlockDB)
|
||||
SeqHash = this.GetSeqHash(BlockDB.BlockNum, PrevHash, BlockDB.TreeHash)
|
||||
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)
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
DoBlockChain() {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
if (!CAN_START)
|
||||
if (!global.CAN_START)
|
||||
return;
|
||||
this.StartConsensus()
|
||||
var CURRENTBLOCKNUM = this.CurrentBlockNum;
|
||||
if (GrayConnect()) {
|
||||
if (global.GrayConnect()) {
|
||||
if (!this.LoadHistoryMode)
|
||||
this.StartSyncBlockchain(undefined, 1)
|
||||
return;
|
||||
@@ -1101,7 +1107,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var bWasSave = false;
|
||||
var LoadBlockNum;
|
||||
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++) {
|
||||
var Block = this.GetBlock(BlockNum);
|
||||
if (!Block) {
|
||||
@@ -1121,10 +1127,10 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
if (Block.bSave) {
|
||||
bWasSave = true
|
||||
if (Block.MaxSum && !Block.CheckMaxSum) {
|
||||
AddInfoBlock(Block, "CheckMaxSum")
|
||||
global.AddInfoBlock(Block, "CheckMaxSum")
|
||||
this.CheckMaxSum(Block)
|
||||
}
|
||||
if (BlockNum <= CURRENTBLOCKNUM - BLOCK_PROCESSING_LENGTH * 4) {
|
||||
if (BlockNum <= CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH * 4) {
|
||||
Block.TransferFromAddr = undefined
|
||||
Block.LevelsTransfer = undefined
|
||||
Block.mapData = undefined
|
||||
@@ -1141,39 +1147,39 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var PrevBlock = this.GetBlock(BlockNum - 1);
|
||||
if (!PrevBlock) {
|
||||
Block.HasErr = 1
|
||||
AddInfoBlock(Block, "!PrevBlock")
|
||||
global.AddInfoBlock(Block, "!PrevBlock")
|
||||
continue;
|
||||
}
|
||||
if (BlockNum >= CURRENTBLOCKNUM + TIME_END_EXCHANGE) {
|
||||
if (BlockNum >= CURRENTBLOCKNUM + global.TIME_END_EXCHANGE) {
|
||||
if (!Block.Active) {
|
||||
AddInfoBlock(Block, "WAIT ACTIVATE")
|
||||
global.AddInfoBlock(Block, "WAIT ACTIVATE")
|
||||
continue;
|
||||
}
|
||||
else
|
||||
if (!Block.EndExchange) {
|
||||
AddInfoBlock(Block, "WAIT EXCHANGE")
|
||||
global.AddInfoBlock(Block, "WAIT EXCHANGE")
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (BlockNum === CURRENTBLOCKNUM + TIME_START_POW || Block.EndExchange)
|
||||
if (BlockNum === CURRENTBLOCKNUM + global.TIME_START_POW || Block.EndExchange)
|
||||
if (!Block.Prepared) {
|
||||
if (!Block.EndExchange)
|
||||
this.CreateTreeHash(Block)
|
||||
AddInfoBlock(Block, "Start POW")
|
||||
global.AddInfoBlock(Block, "Start POW")
|
||||
this.PreparePOWHash(Block)
|
||||
if (!Block.Prepared)
|
||||
AddInfoBlock(Block, "!!Prepared")
|
||||
global.AddInfoBlock(Block, "!!Prepared")
|
||||
continue;
|
||||
}
|
||||
if (!Block.EndExchange) {
|
||||
AddInfoBlock(Block, "Not EndExchange")
|
||||
global.AddInfoBlock(Block, "Not EndExchange")
|
||||
Block.HasErr = 1
|
||||
Block.Prepared = 0
|
||||
this.CreateTreeHash(Block)
|
||||
}
|
||||
if (!Block.Prepared) {
|
||||
Block.HasErr = 1
|
||||
AddInfoBlock(Block, "Not was Prepared")
|
||||
global.AddInfoBlock(Block, "Not was Prepared")
|
||||
this.PreparePOWHash(Block)
|
||||
if (!Block.Prepared)
|
||||
continue;
|
||||
@@ -1187,53 +1193,53 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
||||
if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) {
|
||||
Block.HasErr = 1
|
||||
AddInfoBlock(Block, "New fast pow")
|
||||
global.AddInfoBlock(Block, "New fast pow")
|
||||
this.PreparePOWHash(Block)
|
||||
}
|
||||
if (Block.MaxPOW && Block.MaxPOW.SeqHash && Block.MaxPOW.AddrHash && Block.MaxPOW.LocalSeqHash && global.CompareArr(Block.SeqHash,
|
||||
Block.MaxPOW.LocalSeqHash) === 0) {
|
||||
if (global.CompareArr(Block.SeqHash, Block.MaxPOW.LocalSeqHash) === 0 && global.CompareArr(Block.MaxPOW.PowLocalHash, Block.PowHash) < 0) {
|
||||
Block.AddrHash = Block.MaxPOW.LocalAddrHash
|
||||
CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
||||
AddInfoBlock(Block, "->Local lider:" + GetPowPower(Block.PowHash))
|
||||
global.CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
||||
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,
|
||||
Block.PowHash) < 0) {
|
||||
Block.AddrHash = Block.MaxPOW.AddrHash
|
||||
CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
||||
AddInfoBlock(Block, "->Max lider")
|
||||
global.CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
||||
global.AddInfoBlock(Block, "->Max lider")
|
||||
}
|
||||
}
|
||||
else {
|
||||
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) {
|
||||
AddInfoBlock(Block, "CheckMaxPow")
|
||||
global.AddInfoBlock(Block, "CheckMaxPow")
|
||||
this.CheckingMaxPowOther(Block)
|
||||
}
|
||||
if (BlockNum > start_save)
|
||||
continue;
|
||||
if (PrevBlock.bSave && this.BlockNumDB + 1 >= Block.BlockNum) {
|
||||
this.AddToStatBlockConfirmation(Block)
|
||||
var Power = GetPowPower(Block.PowHash);
|
||||
var Power = global.GetPowPower(Block.PowHash);
|
||||
if (this.WriteBlockDB(Block)) {
|
||||
if (Block.arrContent && 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 {
|
||||
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), })
|
||||
if (typeof global.RESYNC_CONDITION === "object") {
|
||||
if (!this.OwnBlockCount)
|
||||
this.OwnBlockCount = 0
|
||||
var Miner = ReadUintFromArr(Block.AddrHash, 0);
|
||||
var MultK = RESYNC_CONDITION.K_POW;
|
||||
var MaxBlocks = RESYNC_CONDITION.OWN_BLOCKS;
|
||||
if (Miner === GENERATE_BLOCK_ACCOUNT) {
|
||||
var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||
var MultK = global.RESYNC_CONDITION.K_POW;
|
||||
var MaxBlocks = global.RESYNC_CONDITION.OWN_BLOCKS;
|
||||
if (Miner === global.GENERATE_BLOCK_ACCOUNT) {
|
||||
this.OwnBlockCount++
|
||||
if (this.OwnBlockCount >= MaxBlocks) {
|
||||
var PrevSumPow = this.GetAvgPowBlock(Block.BlockNum - 2 * MaxBlocks, MaxBlocks);
|
||||
@@ -1254,9 +1260,9 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
else {
|
||||
Block.HasErr = 1
|
||||
if (!PrevBlock.bSave)
|
||||
AddInfoBlock(Block, "Prev block not saved")
|
||||
global.AddInfoBlock(Block, "Prev block not saved")
|
||||
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)
|
||||
for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < start_save; 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)
|
||||
Block.WasSaveDataTree = 1
|
||||
AddInfoBlock(Block, "*PRESAVE DATA TREE*")
|
||||
global.AddInfoBlock(Block, "*PRESAVE DATA TREE*")
|
||||
global.ToLog("PRESAVE DATA: " + Block.BlockNum)
|
||||
}
|
||||
}
|
||||
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) {
|
||||
var Count = 0;
|
||||
@@ -1280,7 +1286,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
for (var Num = StartNum; Num < StartNum + CountNum; Num++) {
|
||||
var Block = this.GetBlock(Num);
|
||||
if (Block && Block.bSave) {
|
||||
var Power = GetPowPower(Block.PowHash);
|
||||
var Power = global.GetPowPower(Block.PowHash);
|
||||
SumPow += Power
|
||||
Count++
|
||||
}
|
||||
@@ -1291,7 +1297,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
return SumPow / Count;
|
||||
}
|
||||
CreatePOWNew(Block) {
|
||||
CreateHashMinimal(Block, GENERATE_BLOCK_ACCOUNT)
|
||||
CreateHashMinimal(Block, global.GENERATE_BLOCK_ACCOUNT)
|
||||
this.AddToMaxPOW(Block, {
|
||||
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];
|
||||
if (BlockMem) {
|
||||
if (BlockMem.Prepared) {
|
||||
AddInfoBlock(BlockMem, "-reset POW:" + RefBlockNum + "/" + bReload)
|
||||
global.AddInfoBlock(BlockMem, "-reset POW:" + RefBlockNum + "/" + bReload)
|
||||
BlockMem.bSave = false
|
||||
BlockMem.Prepared = false
|
||||
BlockMem.StartMining = false
|
||||
@@ -1324,36 +1330,36 @@ module.exports = class CConsensus extends require("./block-loader")
|
||||
if (!BlockMining.StartMining || BlockMining.bSave)
|
||||
return;
|
||||
if (BlockMining && BlockMining.Hash && BlockMining.SeqHash && global.CompareArr(BlockMining.SeqHash, msg.SeqHash) === 0) {
|
||||
var ValueOld = GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
|
||||
var ValueMsg = GetHashFromSeqAddr(msg.SeqHash, msg.AddrHash, BlockMining.BlockNum);
|
||||
var ValueOld = global.GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
|
||||
var ValueMsg = global.GetHashFromSeqAddr(msg.SeqHash, msg.AddrHash, BlockMining.BlockNum);
|
||||
var bWas = 0;
|
||||
if (global.CompareArr(ValueOld.Hash1, ValueMsg.Hash1) > 0) {
|
||||
var Nonce1 = ReadUintFromArr(msg.AddrHash, 12);
|
||||
var DeltaNum1 = ReadUint16FromArr(msg.AddrHash, 24);
|
||||
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce1, 12)
|
||||
WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum1, 24)
|
||||
var Nonce1 = global.ReadUintFromArr(msg.AddrHash, 12);
|
||||
var DeltaNum1 = global.ReadUint16FromArr(msg.AddrHash, 24);
|
||||
global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce1, 12)
|
||||
global.WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum1, 24)
|
||||
bWas += 1
|
||||
}
|
||||
if (global.CompareArr(ValueOld.Hash2, ValueMsg.Hash2) > 0) {
|
||||
var Nonce0 = ReadUintFromArr(msg.AddrHash, 6);
|
||||
var Nonce2 = ReadUintFromArr(msg.AddrHash, 18);
|
||||
var DeltaNum2 = ReadUint16FromArr(msg.AddrHash, 26);
|
||||
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce0, 6)
|
||||
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce2, 18)
|
||||
WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum2, 26)
|
||||
var Nonce0 = global.ReadUintFromArr(msg.AddrHash, 6);
|
||||
var Nonce2 = global.ReadUintFromArr(msg.AddrHash, 18);
|
||||
var DeltaNum2 = global.ReadUint16FromArr(msg.AddrHash, 26);
|
||||
global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce0, 6)
|
||||
global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce2, 18)
|
||||
global.WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum2, 26)
|
||||
bWas += 2
|
||||
}
|
||||
if (!bWas)
|
||||
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.PowHash = ValueNew.PowHash
|
||||
BlockMining.Power = GetPowPower(BlockMining.PowHash)
|
||||
BlockMining.Power = global.GetPowPower(BlockMining.PowHash)
|
||||
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);
|
||||
ADD_HASH_RATE(HashCount)
|
||||
AddInfoBlock(BlockMining, "Set POW: " + Power)
|
||||
global.ADD_HASH_RATE(HashCount)
|
||||
global.AddInfoBlock(BlockMining, "Set POW: " + Power)
|
||||
this.SetNoPOW(BlockMining.BlockNum + 8, 0, BlockMining.BlockNum)
|
||||
this.AddToMaxPOW(BlockMining, {
|
||||
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;
|
||||
OnTimeIdle();
|
||||
|
||||
|
||||
@@ -8,9 +8,19 @@
|
||||
* 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.MAX_COUNT_CHAIN_LOAD = 120, global.PACKET_ALIVE_PERIOD = 4 * CONSENSUS_PERIOD_TIME, global.PACKET_ALIVE_PERIOD_NEXT_NODE = 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.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.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], }";
|
||||
|
||||
@@ -12,9 +12,26 @@
|
||||
const fs = require("fs");
|
||||
import * as crypto from 'crypto';
|
||||
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")
|
||||
{
|
||||
MapMapLoaded
|
||||
BlockChain
|
||||
ChainID
|
||||
BlockID
|
||||
TaskNodeIndex
|
||||
LoadedChainList
|
||||
LastChainLoad
|
||||
StartLoadBlockTime
|
||||
LoadHistoryMode
|
||||
MapBlockBodyLoad
|
||||
BlockNumDB
|
||||
RelayMode
|
||||
LoadHistoryMessage
|
||||
LastLoadedBlockNum
|
||||
LoadHistoryContext
|
||||
LoadBlockStatNum
|
||||
BADHashCount
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.MapMapLoaded = {}
|
||||
@@ -43,9 +60,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
GenesisBlockHeaderDB(Num) {
|
||||
if (Num < 0)
|
||||
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,
|
||||
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], 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,
|
||||
@@ -59,7 +76,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
this.FindStartBlockNum()
|
||||
if (this.UseTruncateBlockDB)
|
||||
this.TruncateBlockDB(this.UseTruncateBlockDB)
|
||||
var CurNum = GetCurrentBlockNumByTime();
|
||||
var CurNum = global.GetCurrentBlockNumByTime();
|
||||
if (CurNum <= this.BlockNumDB) {
|
||||
this.TruncateBlockDB(CurNum)
|
||||
}
|
||||
@@ -70,8 +87,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
if (this.BlockNumDB < global.BLOCK_PROCESSING_LENGTH2)
|
||||
this.CreateGenesisBlocks()
|
||||
if (fs.existsSync(GetCodePath("EXPERIMENTAL/_run.js"))) {
|
||||
require(GetCodePath("EXPERIMENTAL/_run.js")).Run()
|
||||
if (fs.existsSync(global.GetCodePath("EXPERIMENTAL/_run.js"))) {
|
||||
require(global.GetCodePath("EXPERIMENTAL/_run.js")).Run()
|
||||
}
|
||||
this.LoadMemBlocksOnStart()
|
||||
}
|
||||
@@ -89,7 +106,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
||||
var Sum = 0;
|
||||
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);
|
||||
if (PrevBlock && PrevBlock.bSave) {
|
||||
Sum = Sum + PrevBlock.SumPow
|
||||
@@ -99,13 +116,13 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
var PrevHash = CalcHashFromArray(arr, true);
|
||||
var PrevHash = global.CalcHashFromArray(arr, true);
|
||||
return PrevHash;
|
||||
}
|
||||
GetPrevHashDB(Block) {
|
||||
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
||||
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 PrevBlock = this.ReadBlockHeaderDB(num);
|
||||
if (!PrevBlock || !PrevBlock.bSave) {
|
||||
@@ -114,18 +131,18 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
arr.push(PrevBlock.Hash)
|
||||
}
|
||||
var PrevHash = CalcHashFromArray(arr, true);
|
||||
var PrevHash = global.CalcHashFromArray(arr, true);
|
||||
return PrevHash;
|
||||
}
|
||||
StartSyncBlockchain(Node, bSilent, bCheckPoint) {
|
||||
StartSyncBlockchain(Node?, bSilent?, bCheckPoint?) {
|
||||
this.FREE_ALL_MEM_CHAINS()
|
||||
if (global.NO_HISTORY_MODE) {
|
||||
this.LoadHistoryMode = 0
|
||||
return;
|
||||
}
|
||||
if (global.CREATE_ON_START && !LOCAL_RUN)
|
||||
if (global.CREATE_ON_START && !global.LOCAL_RUN)
|
||||
return;
|
||||
if (!GrayConnect())
|
||||
if (!global.GrayConnect())
|
||||
this.RelayMode = true
|
||||
else
|
||||
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,
|
||||
StartTimeHistory: Date.now(), MaxTimeOut: 30 * 1000
|
||||
}
|
||||
if (!bSilent && !bCheckPoint && REST_START_COUNT) {
|
||||
if (!bSilent && !bCheckPoint && global.REST_START_COUNT) {
|
||||
this.CheckSyncRest()
|
||||
}
|
||||
if (!this.ActualNodes.size) {
|
||||
@@ -181,7 +198,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
Context.BlockNum = this.BlockNumDB
|
||||
}
|
||||
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
|
||||
if (this.LoadHistoryMessage)
|
||||
global.ToLog("Finish synchronization")
|
||||
@@ -200,7 +217,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
if (global.NO_HISTORY_MODE)
|
||||
return;
|
||||
this.StartLoadBlockTime = Date.now()
|
||||
if (Num > this.CurrentBlockNum + TIME_START_SAVE) {
|
||||
if (Num > this.CurrentBlockNum + global.TIME_START_SAVE) {
|
||||
return;
|
||||
}
|
||||
bIsSum = bIsSum || false
|
||||
@@ -208,7 +225,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
if (Tree.find({ hash: LoadHash }))
|
||||
return false;
|
||||
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,
|
||||
LoadSumDB: 0, LoadSum: 0, ParentChain: undefined, RootChain: undefined, BlockNumStart: Num, HashStart: LoadHash, IsSumStart: bIsSum,
|
||||
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)
|
||||
}
|
||||
LoopChainLoad() {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
if (this.UseTruncateBlockDB)
|
||||
this.TruncateBlockDB(this.UseTruncateBlockDB)
|
||||
@@ -248,7 +265,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
this.SendLoadToBegin()
|
||||
}
|
||||
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;
|
||||
for (var i = 0; i < this.LoadedChainList.length; i++) {
|
||||
var chain = this.LoadedChainList[i];
|
||||
@@ -263,7 +280,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
min_num_load = RootChain.BlockNum
|
||||
if (!chain.StopSend) {
|
||||
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)
|
||||
global.ToLog("Very long length of blocks to load history, stop chain with id=" + chain.id + " (" + chain.BlockNum + "-" + chain.BlockNumMax + ")")
|
||||
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)
|
||||
this.FREE_MEM_CHAINS(min_num_load)
|
||||
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)
|
||||
global.ToLog("LoadedChainList>COUNT_HISTORY_BLOCKS_FOR_LOAD -> FREE_ALL_MEM_CHAINS")
|
||||
this.FREE_ALL_MEM_CHAINS()
|
||||
}
|
||||
}
|
||||
GetNextNode(task, keyid, checktime, BlockNum) {
|
||||
var CurTime = GetCurrentTime(0) - 0;
|
||||
GetNextNode(task, keyid?, checktime?, BlockNum?) {
|
||||
var CurTime = global.GetCurrentTime(0) - 0;
|
||||
if (checktime && 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 };
|
||||
}
|
||||
task.time = undefined
|
||||
@@ -337,7 +354,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
Node = arr[this.TaskNodeIndex % arr.length]
|
||||
}
|
||||
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)) {
|
||||
timewait = true
|
||||
continue;
|
||||
@@ -391,7 +408,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
var DopStr = "";
|
||||
if (chain.IsSum)
|
||||
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 false;
|
||||
@@ -415,9 +432,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}";
|
||||
}
|
||||
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)
|
||||
BlockArr.unshift(this.ReadBlockHeaderDB(BLOCK_PROCESSING_LENGTH2 - 1))
|
||||
BlockArr.unshift(this.ReadBlockHeaderDB(global.BLOCK_PROCESSING_LENGTH2 - 1))
|
||||
return BlockArr;
|
||||
}
|
||||
RETBLOCKHEADER_FOWARD(Info, CurTime) {
|
||||
@@ -434,8 +451,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
var Block = arr[i];
|
||||
if (!Block)
|
||||
return;
|
||||
if (Block.BlockNum === CHECK_POINT.BlockNum && !IsZeroArr(CHECK_POINT.Hash)) {
|
||||
if (global.CompareArr(CHECK_POINT.Hash, Block.Hash) !== 0) {
|
||||
if (Block.BlockNum === global.CHECK_POINT.BlockNum && !global.IsZeroArr(global.CHECK_POINT.Hash)) {
|
||||
if (global.CompareArr(global.CHECK_POINT.Hash, Block.Hash) !== 0) {
|
||||
break;
|
||||
}
|
||||
Context.FindCheckPoint = true
|
||||
@@ -450,7 +467,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
arr2.push(Block)
|
||||
}
|
||||
else
|
||||
if (BlockDB && IsZeroArr(BlockDB.SumHash)) {
|
||||
if (BlockDB && global.IsZeroArr(BlockDB.SumHash)) {
|
||||
bFindDB = 1
|
||||
arr2.push(Block)
|
||||
}
|
||||
@@ -485,7 +502,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
}
|
||||
RETBLOCKHEADER(Info, CurTime) {
|
||||
Info.Node.NextPing = MIN_PERIOD_PING
|
||||
Info.Node.NextPing = global.MIN_PERIOD_PING
|
||||
if (Info.Context.Foward)
|
||||
return this.RETBLOCKHEADER_FOWARD(Info, CurTime);
|
||||
var chain = Info.Context.Chain;
|
||||
@@ -496,10 +513,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
if (arr.length <= 1) {
|
||||
var keysend = "" + Info.Node.addrStr + ":" + chain.BlockNum;
|
||||
chain.MapSend[keysend] = 1
|
||||
chain.AddInfo("NO:" + GetNodeStrPort(Info.Node))
|
||||
chain.AddInfo("NO:" + global.GetNodeStrPort(Info.Node))
|
||||
return;
|
||||
}
|
||||
chain.AddInfo("L=" + arr.length + " from:" + GetNodeStrPort(Info.Node))
|
||||
chain.AddInfo("L=" + arr.length + " from:" + global.GetNodeStrPort(Info.Node))
|
||||
var NextLoadBlock;
|
||||
var PrevBlock;
|
||||
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
|
||||
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
||||
if (BlockDB) {
|
||||
Block.Power = GetPowPower(Block.PowHash)
|
||||
Block.Power = global.GetPowPower(Block.PowHash)
|
||||
chain.LoadCountDB++
|
||||
chain.LoadSumDB += BlockDB.Power
|
||||
chain.LoadSum += Block.Power
|
||||
@@ -571,11 +588,11 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
if (NextLoadBlock && !NextLoadBlock.chain.StopSend) {
|
||||
if (arr.length >= chain.Count) {
|
||||
chain.Count = chain.Count * 2
|
||||
if (chain.Count > COUNT_BLOCKS_FOR_LOAD)
|
||||
chain.Count = COUNT_BLOCKS_FOR_LOAD
|
||||
if (chain.Count > global.COUNT_BLOCKS_FOR_LOAD)
|
||||
chain.Count = global.COUNT_BLOCKS_FOR_LOAD
|
||||
}
|
||||
if (chain.LoadCountDB >= COUNT_BLOCKS_FOR_CHECK_POW) {
|
||||
if (chain.LoadSumDB - chain.LoadSum > MAX_DELTA_COUNT_SUM_FOR_LOAD) {
|
||||
if (chain.LoadCountDB >= global.COUNT_BLOCKS_FOR_CHECK_POW) {
|
||||
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);
|
||||
chain.StopSend = true
|
||||
chain.AddInfo(Str)
|
||||
@@ -611,7 +628,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
var PrevBlock = BlockMin;
|
||||
for (var i = 1; i < arr.length; i++) {
|
||||
var Block = arr[i];
|
||||
Block.Power = GetPowPower(Block.PowHash)
|
||||
Block.Power = global.GetPowPower(Block.PowHash)
|
||||
Block.SumPow = PrevBlock.SumPow + Block.Power
|
||||
PrevBlock = Block
|
||||
}
|
||||
@@ -637,7 +654,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
PrepareTransactionsForLoad(chain, arr, bNoSlice) {
|
||||
PrepareTransactionsForLoad(chain, arr, bNoSlice?) {
|
||||
if (!bNoSlice)
|
||||
arr = arr.slice(1)
|
||||
chain.arr = arr
|
||||
@@ -648,7 +665,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
}
|
||||
LoopBlockLoad() {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
var CountSend = 0;
|
||||
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++) {
|
||||
Count++
|
||||
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.BodyLoad) {
|
||||
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
||||
@@ -676,7 +693,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
if (this.SendBlockNext(Block)) {
|
||||
CountSend++
|
||||
if (CountSend >= MAX_BLOCK_SEND)
|
||||
if (CountSend >= global.MAX_BLOCK_SEND)
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -694,7 +711,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
CheckAndWriteLoadedChain(chain) {
|
||||
if (chain.CurNumArrLoad >= chain.arr.length) {
|
||||
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;
|
||||
if (!chain.WriteToDBAfterLoad) {
|
||||
var cur_parent = chain.ParentChain;
|
||||
@@ -728,7 +745,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
var startTime = process.hrtime();
|
||||
if (this.LoadHistoryMessage)
|
||||
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;
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
Block = arr[i]
|
||||
@@ -752,12 +769,12 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
Res = this.WriteBlockDBFinaly(Block)
|
||||
}
|
||||
else {
|
||||
if (IsZeroArr(Block.TreeHash)) {
|
||||
if (global.IsZeroArr(Block.TreeHash)) {
|
||||
Res = this.WriteBlockDB(Block)
|
||||
}
|
||||
else {
|
||||
ToLogTrace("IsZeroArr(Block.TreeHash)")
|
||||
throw "IsZeroArr(Block.TreeHash)";
|
||||
global.ToLogTrace("global.IsZeroArr(Block.TreeHash)")
|
||||
throw "global.IsZeroArr(Block.TreeHash)";
|
||||
}
|
||||
}
|
||||
if (!Res) {
|
||||
@@ -766,7 +783,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
return;
|
||||
}
|
||||
Block.LoadDB = true
|
||||
if (Block.BlockNum >= CurrentBlockNum - BLOCK_COUNT_IN_MEMORY) {
|
||||
if (Block.BlockNum >= CurrentBlockNum - global.BLOCK_COUNT_IN_MEMORY) {
|
||||
this.CopyBlockToMem(Block)
|
||||
}
|
||||
else {
|
||||
@@ -776,7 +793,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
var BlockMem = this.BlockChain[Block.BlockNum];
|
||||
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) {
|
||||
@@ -784,7 +801,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
this.SetNoPOW(CurNumStart, 1, FirstBlock.BlockNum)
|
||||
}
|
||||
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) {
|
||||
BlockDst.BlockNum = Block.BlockNum
|
||||
@@ -834,12 +851,12 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
POW.SumPow = Block.SumPow
|
||||
}
|
||||
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;
|
||||
global.ADD_TO_STAT("MAX:BlockConfirmation", TimeDelta)
|
||||
}
|
||||
else {
|
||||
global.ADD_TO_STAT("MAX:BlockConfirmation", BLOCK_PROCESSING_LENGTH)
|
||||
global.ADD_TO_STAT("MAX:BlockConfirmation", global.BLOCK_PROCESSING_LENGTH)
|
||||
}
|
||||
}
|
||||
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 } })
|
||||
Node.SendBlockCount++
|
||||
SendResult = 1
|
||||
AddInfoBlock(Block, "SendNext")
|
||||
global.AddInfoBlock(Block, "SendNext")
|
||||
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 {
|
||||
if (!Ret.timewait) {
|
||||
@@ -867,7 +884,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
return SendResult;
|
||||
}
|
||||
ClearChains(DeleteChain, bShow) {
|
||||
ClearChains(DeleteChain, bShow?) {
|
||||
if (!DeleteChain) {
|
||||
this.FREE_ALL_MEM_CHAINS()
|
||||
return this.LoadedChainList.length;
|
||||
@@ -899,7 +916,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
return;
|
||||
this.LoadBlockStatNum = TimeNum
|
||||
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;
|
||||
var FreeGet = 64;
|
||||
var it = this.ActualNodes.iterator(), Node;
|
||||
@@ -940,41 +957,41 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}";
|
||||
}
|
||||
RETGETBLOCK(Info, CurTime) {
|
||||
Info.Node.NextPing = MIN_PERIOD_PING
|
||||
Info.Node.NextPing = global.MIN_PERIOD_PING
|
||||
var Block = Info.Context.Block;
|
||||
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
|
||||
if (Data.BlockNum !== Block.BlockNum || global.CompareArr(Data.TreeHash, Block.TreeHash) !== 0) {
|
||||
this.SetBlockNOSendToNode(Block, Info.Node, "NO")
|
||||
return;
|
||||
}
|
||||
if (Block.chain) {
|
||||
Block.chain.AddInfo("Load TR:" + Data.BlockNum + "/" + this.GetStrFromHashShort(Data.TreeHash) + " from:" + GetNodeStrPort(Info.Node))
|
||||
AddInfoBlock(Block, "LOAD TR OK")
|
||||
Block.chain.AddInfo("Load TR:" + Data.BlockNum + "/" + this.GetStrFromHashShort(Data.TreeHash) + " from:" + global.GetNodeStrPort(Info.Node))
|
||||
global.AddInfoBlock(Block, "LOAD TR OK")
|
||||
}
|
||||
var arrContent = Data.arrContent;
|
||||
var TreeHash = CalcTreeHashFromArrBody(Block.BlockNum, arrContent);
|
||||
var TreeHash = global.CalcTreeHashFromArrBody(Block.BlockNum, arrContent);
|
||||
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))
|
||||
this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP TreeHash")
|
||||
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];
|
||||
if (TR[0] === TYPE_TRANSACTION_ACC_HASH) {
|
||||
if (!DApps.Accounts.TRCheckAccountHash(TR, Data.BlockNum)) {
|
||||
if (TR[0] === global.TYPE_TRANSACTION_ACC_HASH) {
|
||||
if (!global.DApps.Accounts.TRCheckAccountHash(TR, Data.BlockNum)) {
|
||||
if (!this.BADHashCount)
|
||||
this.BADHashCount = 0
|
||||
this.BADHashCount++
|
||||
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")
|
||||
if (global.WATCHDOG_BADACCOUNT && this.BADHashCount > 60) {
|
||||
global.ToLog("Run WATCHDOG!")
|
||||
this.BADHashCount = 0
|
||||
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 {
|
||||
}
|
||||
@@ -995,7 +1012,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
Block.Send = undefined
|
||||
global.ADD_TO_STAT("BLOCK_LOADED", 1)
|
||||
Info.Node.LoadBlockCount++
|
||||
if (GrayConnect())
|
||||
if (global.GrayConnect())
|
||||
Info.Node.BlockProcessCount++
|
||||
if (this.LoadHistoryMode) {
|
||||
var Context = this.LoadHistoryContext;
|
||||
@@ -1036,7 +1053,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
var keysend = "" + Node.addrStr + ":" + Str;
|
||||
Block.MapSend[keysend] = 1
|
||||
if (Block.chain)
|
||||
Block.chain.AddInfo("" + Block.BlockNum + " " + Str2 + "<-" + GetNodeStrPort(Node))
|
||||
Block.chain.AddInfo("" + Block.BlockNum + " " + Str2 + "<-" + global.GetNodeStrPort(Node))
|
||||
}
|
||||
FindBlockInLoadedChain(BlockNum, TreeHash) {
|
||||
var StrTreeHash = global.GetHexFromArr(TreeHash);
|
||||
@@ -1050,25 +1067,25 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
CheckSeqHashDB(Block, StrError) {
|
||||
if (Block.BlockNum < global.BLOCK_PROCESSING_LENGTH2)
|
||||
return true;
|
||||
var TreeHashTest = CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
||||
var TreeHashTest = global.CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
||||
if (global.CompareArr(TreeHashTest, Block.TreeHash) !== 0) {
|
||||
var StrHex = global.GetHexFromArr(TreeHashTest);
|
||||
var StrHex0 = global.GetHexFromArr(Block.TreeHash);
|
||||
var Str = StrError + " #3 ERROR TREEHASH: " + Block.BlockNum + " Hex:" + StrHex0.substr(0, 12) + " != " + StrHex.substr(0,
|
||||
12);
|
||||
if (global.WATCHDOG_DEV)
|
||||
ToErrorTrace(Str)
|
||||
global.ToErrorTrace(Str)
|
||||
else
|
||||
global.ToError(Str)
|
||||
return false;
|
||||
}
|
||||
var PrevHash = this.GetPrevHashDB(Block);
|
||||
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) {
|
||||
var Str = StrError + " #2 ERROR HASH - block num: " + Block.BlockNum;
|
||||
if (global.WATCHDOG_DEV)
|
||||
ToErrorTrace(Str)
|
||||
global.ToErrorTrace(Str)
|
||||
else
|
||||
global.ToError(Str)
|
||||
return false;
|
||||
@@ -1089,10 +1106,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
global.ToLog("arr[" + i + "]=" + global.GetHexFromArr(arr[i]))
|
||||
}
|
||||
}
|
||||
GetBlock(num, bToMem, bReadBody) {
|
||||
GetBlock(num, bToMem?, bReadBody?) {
|
||||
if (bToMem === undefined)
|
||||
bToMem = true
|
||||
if (num < this.CurrentBlockNum - BLOCK_COUNT_IN_MEMORY)
|
||||
if (num < this.CurrentBlockNum - global.BLOCK_COUNT_IN_MEMORY)
|
||||
bToMem = false
|
||||
var Block = this.BlockChain[num];
|
||||
if (!Block) {
|
||||
@@ -1109,7 +1126,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
GetMapLoaded(num) {
|
||||
if (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];
|
||||
if (!map) {
|
||||
map = {}
|
||||
@@ -1129,19 +1146,19 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
}
|
||||
FREE_MEM_CHAINS(NumMax) {
|
||||
this.FREE_MEM_BLOCKS(NumMax - BLOCK_COUNT_IN_MEMORY)
|
||||
var maxArrMap = Math.floor(NumMax / BLOCK_COUNT_IN_MEMORY) - 1;
|
||||
this.FREE_MEM_BLOCKS(NumMax - global.BLOCK_COUNT_IN_MEMORY)
|
||||
var maxArrMap = Math.floor(NumMax / global.BLOCK_COUNT_IN_MEMORY) - 1;
|
||||
if (maxArrMap >= 0) {
|
||||
var nWasCount = 0;
|
||||
for (var key in this.MapMapLoaded)
|
||||
if (key < maxArrMap) {
|
||||
if (key as any < maxArrMap) {
|
||||
nWasCount++
|
||||
delete this.MapMapLoaded[key]
|
||||
}
|
||||
}
|
||||
}
|
||||
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++) {
|
||||
var chain = this.LoadedChainList[i];
|
||||
if (chain) {
|
||||
@@ -1155,7 +1172,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
}
|
||||
this.LoadedChainList = []
|
||||
this.MapMapLoaded = {}
|
||||
//@ts-ignore
|
||||
if (typeof gc === "function")
|
||||
//@ts-ignore
|
||||
gc()
|
||||
}
|
||||
AddValueToHistory(typedata, val) {
|
||||
@@ -1169,7 +1188,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
GetHistoryTree(typedata) {
|
||||
var Tree = global.HistoryBlockBuf.LoadValue(typedata, 1);
|
||||
if (!Tree) {
|
||||
Tree = new RBTree(CompareItemHash)
|
||||
Tree = new RBTree(global.CompareItemHash)
|
||||
global.HistoryBlockBuf.SaveValue(typedata, Tree)
|
||||
}
|
||||
return Tree;
|
||||
@@ -1182,8 +1201,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
while (root_chain.RootChain) {
|
||||
Count++
|
||||
root_chain = root_chain.RootChain
|
||||
if (Count > MAX_COUNT_CHAIN_LOAD) {
|
||||
TO_ERROR_LOG("BLOCK", 10, "Error COUNT GetRootChain")
|
||||
if (Count > global.MAX_COUNT_CHAIN_LOAD) {
|
||||
global.TO_ERROR_LOG("BLOCK", 10, "Error COUNT GetRootChain")
|
||||
global.SERVER.FREE_ALL_MEM_CHAINS()
|
||||
return undefined;
|
||||
}
|
||||
@@ -1200,10 +1219,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
||||
};
|
||||
chain.GetRootChain = GetRootChain.bind(chain)
|
||||
chain.GetFindDB = GetFindDB.bind(chain)
|
||||
chain.AddInfo = AddInfoChain.bind(chain)
|
||||
chain.AddInfo = global.AddInfoChain.bind(chain)
|
||||
}
|
||||
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) {
|
||||
var Str = global.GetHexFromArr(Hash);
|
||||
@@ -1255,7 +1274,7 @@ global.LoadBlockFromNetwork = function(Params, F) {
|
||||
global.SERVER.SendF(Node, {
|
||||
"Method": "GETBLOCK", "Data": { BlockNum: BlockNum, TreeHash: [] }, "Context": {
|
||||
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;
|
||||
if (!Block.BlockNum || Block.BlockNum !== Params.BlockNum) {
|
||||
global.ToLog("Error get BlockNum:" + Params.BlockNum + " from " + NodeName(Info.Node), 2);
|
||||
@@ -1281,4 +1300,4 @@ global.LoadBlockFromNetwork = function(Params, F) {
|
||||
F(1);
|
||||
}
|
||||
};
|
||||
global.HistoryBlockBuf = new STreeBuffer(HISTORY_BLOCK_COUNT * 1000, CompareItemHashSimple, "string");
|
||||
global.HistoryBlockBuf = new STreeBuffer(global.HISTORY_BLOCK_COUNT * 1000, global.CompareItemHashSimple, "string");
|
||||
|
||||
@@ -9,30 +9,26 @@
|
||||
*/
|
||||
|
||||
|
||||
function Write(e,r,t,n,l)
|
||||
{
|
||||
if(!(e.len >= e.length))
|
||||
{
|
||||
if("number" == typeof t)
|
||||
throw ToLogTrace("ERRR StringFormat "), "ERR!!";
|
||||
function Write(e, r, t, n?, l?) {
|
||||
if (!(e.len >= e.length)) {
|
||||
if ("number" == typeof t)
|
||||
throw global.ToLogTrace("ERRR StringFormat "), "ERR!!";
|
||||
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";
|
||||
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";
|
||||
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));
|
||||
return r && e.write(r, e.len, i), void (e.len += i);
|
||||
}
|
||||
switch(a)
|
||||
{
|
||||
switch (a) {
|
||||
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;
|
||||
for(var s = 0; s < i; s++)
|
||||
for (var s = 0; s < i; s++)
|
||||
e[e.len + s] = f[s];
|
||||
e.len += i;
|
||||
break;
|
||||
@@ -58,39 +54,39 @@ function Write(e,r,t,n,l)
|
||||
case "addres":
|
||||
case "hash":
|
||||
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.len += 32;
|
||||
break;
|
||||
case "buffer":
|
||||
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.len += n;
|
||||
break;
|
||||
case "arr":
|
||||
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.len += n;
|
||||
break;
|
||||
case "tr":
|
||||
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,
|
||||
e.len += 2;
|
||||
for(s = 0; s < i; s++)
|
||||
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;
|
||||
for (s = 0; s < i; s++)
|
||||
e[e.len + s] = r[s];
|
||||
e.len += i;
|
||||
break;
|
||||
case "data":
|
||||
i = r.length;
|
||||
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.len += i;
|
||||
break;
|
||||
case "hashSTR":
|
||||
var o = GetHexFromAddres(r);
|
||||
var o = global.GetHexFromAddres(r);
|
||||
e.write(o, e.len, 64), e.len += 64;
|
||||
break;
|
||||
case "uintSTR":
|
||||
@@ -100,33 +96,29 @@ function Write(e,r,t,n,l)
|
||||
default:
|
||||
l = l || {};
|
||||
var d = t.substr(0, 1);
|
||||
if("[" === d)
|
||||
{
|
||||
if ("[" === d) {
|
||||
r && (i = r.length);
|
||||
var b = GetMiddleString(a);
|
||||
Write(e, i, "uint32");
|
||||
for(s = 0; s < i; s++)
|
||||
for (s = 0; s < i; s++)
|
||||
Write(e, r[s], b, void 0, l);
|
||||
}
|
||||
else
|
||||
if("<" === d)
|
||||
{
|
||||
if ("<" === d) {
|
||||
r && (i = r.length);
|
||||
b = GetMiddleString(a);
|
||||
var h = 0, c = e.len;
|
||||
e.len += 4;
|
||||
for(s = 0; s < i; s++)
|
||||
r[s] && (h++, Write(e, s, "uint32"), Write(e, r[s], b, void 0, l));
|
||||
for (s = 0; s < i; s++)
|
||||
r[s] && (h++ , Write(e, s, "uint32"), Write(e, r[s], b, void 0, l));
|
||||
e.writeUInt32LE(h, c, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
if("{" !== d)
|
||||
else {
|
||||
if ("{" !== d)
|
||||
throw "Bad write type params: " + a;
|
||||
var g = l[a];
|
||||
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];
|
||||
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;
|
||||
if("number" == typeof r)
|
||||
throw ToLogTrace("ERR StringFormat"), "ERRR!";
|
||||
if ("number" == typeof r)
|
||||
throw global.ToLogTrace("ERR StringFormat"), "ERRR!";
|
||||
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;
|
||||
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;
|
||||
else
|
||||
if("str" === i.substr(0, 3))
|
||||
{
|
||||
if(3 < i.length)
|
||||
{
|
||||
if ("str" === i.substr(0, 3)) {
|
||||
if (3 < i.length) {
|
||||
var f = parseInt(i.substr(3));
|
||||
a = e.toString("utf8", e.len, e.len + f), e.len += f;
|
||||
for(var s = - 1, u = a.length - 1; 0 <= u; u--)
|
||||
if(0 !== a.charCodeAt(u))
|
||||
{
|
||||
for (var s = - 1, u = a.length - 1; 0 <= u; u--)
|
||||
if (0 !== a.charCodeAt(u)) {
|
||||
s = u;
|
||||
break;
|
||||
}
|
||||
@@ -163,12 +151,11 @@ function Read(e,r,t,n,l)
|
||||
}
|
||||
t = 0;
|
||||
}
|
||||
switch(i)
|
||||
{
|
||||
switch (i) {
|
||||
case "str":
|
||||
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);
|
||||
a = Utf8ArrayToStr(o), e.len += f;
|
||||
a = global.Utf8ArrayToStr(o), e.len += f;
|
||||
break;
|
||||
case "byte":
|
||||
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;
|
||||
break;
|
||||
case "time":
|
||||
if(l)
|
||||
if (l)
|
||||
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;
|
||||
break;
|
||||
case "addres":
|
||||
case "hash":
|
||||
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 += 32;
|
||||
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;
|
||||
break;
|
||||
case "tr":
|
||||
if(e.len + 1 >= e.length)
|
||||
{
|
||||
if (e.len + 1 >= e.length) {
|
||||
a = void 0;
|
||||
break;
|
||||
}
|
||||
@@ -212,11 +198,11 @@ function Read(e,r,t,n,l)
|
||||
break;
|
||||
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,
|
||||
e.len + f), e.len += f;
|
||||
e.len + f), e.len += f;
|
||||
break;
|
||||
case "hashSTR":
|
||||
var d = e.toString("utf8", e.len, e.len + 64);
|
||||
a = GetAddresFromHex(d), e.len += 64;
|
||||
a = global.GetAddresFromHex(d), e.len += 64;
|
||||
break;
|
||||
case "uintSTR":
|
||||
d = e.toString("utf8", e.len, e.len + 10);
|
||||
@@ -225,24 +211,20 @@ function Read(e,r,t,n,l)
|
||||
default:
|
||||
n = n || {};
|
||||
var b = i.substr(0, 1);
|
||||
if("[" === b || "<" === b)
|
||||
{
|
||||
if ("[" === b || "<" === b) {
|
||||
var h = "<" === b;
|
||||
a = [];
|
||||
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);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if("{" !== b)
|
||||
else {
|
||||
if ("{" !== b)
|
||||
throw "Bad read type params: " + i;
|
||||
var g = n[i];
|
||||
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];
|
||||
a[v.Key] = Read(e, v.Value, void 0, n, l);
|
||||
}
|
||||
@@ -251,58 +233,47 @@ function Read(e,r,t,n,l)
|
||||
return a;
|
||||
};
|
||||
|
||||
function BufWriteByte(e)
|
||||
{
|
||||
function BufWriteByte(e) {
|
||||
this[this.len] = e, this.len += 1;
|
||||
};
|
||||
|
||||
function BufWrite(e,r,t)
|
||||
{
|
||||
function BufWrite(e, r, t) {
|
||||
Write(this, e, r, t);
|
||||
};
|
||||
|
||||
function BufRead(e,r)
|
||||
{
|
||||
function BufRead(e, r) {
|
||||
return Read(this, e, r);
|
||||
};
|
||||
|
||||
function GetNewBuffer(e)
|
||||
{
|
||||
function GetNewBuffer(e) {
|
||||
var r = Buffer.alloc(e);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
};
|
||||
|
||||
function GetMiddleString2(e,r,t)
|
||||
{
|
||||
for(var n = 0, l = "", a = 0; a < e.length; a++)
|
||||
{
|
||||
function GetMiddleString2(e, r, t) {
|
||||
for (var n = 0, l = "", a = 0; a < e.length; a++) {
|
||||
var i = e.substr(a, 1);
|
||||
if(" " !== i && "\n" !== i && (i !== r || 1 != ++n))
|
||||
{
|
||||
if(i === t && 0 === --n)
|
||||
if (" " !== i && "\n" !== i && (i !== r || 1 != ++n)) {
|
||||
if (i === t && 0 === --n)
|
||||
break;
|
||||
n && (l += i);
|
||||
}
|
||||
@@ -310,24 +281,20 @@ function GetMiddleString2(e,r,t)
|
||||
return l;
|
||||
};
|
||||
|
||||
function GetAttributeStrings(e)
|
||||
{
|
||||
for(var r = 0, t = [], n = "", l = 0; l < e.length; l++)
|
||||
{
|
||||
function GetAttributeStrings(e) {
|
||||
for (var r = 0, t = [], n = "", l = 0; l < e.length; l++) {
|
||||
var a = e.substr(l, 1);
|
||||
if("{" === a)
|
||||
if ("{" === a)
|
||||
r++;
|
||||
else
|
||||
if("}" === a)
|
||||
if ("}" === a)
|
||||
r--;
|
||||
else
|
||||
{
|
||||
if("," === a && 0 === r)
|
||||
{
|
||||
else {
|
||||
if ("," === a && 0 === r) {
|
||||
0 < n.length && t.push(n), n = "";
|
||||
continue;
|
||||
}
|
||||
if(" " === a || "\n" === a)
|
||||
if (" " === a || "\n" === a)
|
||||
continue;
|
||||
}
|
||||
n += a;
|
||||
@@ -335,30 +302,25 @@ function GetAttributeStrings(e)
|
||||
return 0 < n.length && t.push(n), t;
|
||||
};
|
||||
|
||||
function GetKeyValueStrings(e)
|
||||
{
|
||||
for(var r = "", t = 0; t < e.length; t++)
|
||||
{
|
||||
function GetKeyValueStrings(e) {
|
||||
for (var r = "", t = 0; t < e.length; t++) {
|
||||
var n = e.substr(t, 1);
|
||||
if(" " !== n && "\n" !== n)
|
||||
{
|
||||
if(":" === n)
|
||||
return {Key:r, Value:e.substr(t + 1)};
|
||||
if (" " !== n && "\n" !== n) {
|
||||
if (":" === n)
|
||||
return { Key: r, Value: e.substr(t + 1) };
|
||||
r += n;
|
||||
}
|
||||
}
|
||||
throw "Error format Key:Value = " + e;
|
||||
};
|
||||
|
||||
function GetAttributes(e)
|
||||
{
|
||||
for(var r = [], t = GetAttributeStrings(e), n = 0; n < t.length; n++)
|
||||
{
|
||||
function GetAttributes(e) {
|
||||
for (var r = [], t = GetAttributeStrings(e), n = 0; n < t.length; n++) {
|
||||
var l = GetKeyValueStrings(t[n]);
|
||||
r.push(l);
|
||||
}
|
||||
return r;
|
||||
};
|
||||
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.GetBufferFromObject = GetBufferFromObject;
|
||||
module.exports.from = GetReadBuffer, module.exports.Write = Write, module.exports.Read = Read, module.exports.GetObjectFromBuffer = GetObjectFromBuffer,
|
||||
module.exports.GetBufferFromObject = GetBufferFromObject;
|
||||
|
||||
@@ -78,7 +78,7 @@ module.exports = class CCode extends require("./base")
|
||||
if (bUpdate) {
|
||||
UpdateCodeFiles(VersionNum)
|
||||
}
|
||||
if (global.global.START_LOAD_CODE.StartLoad) {
|
||||
if (global.START_LOAD_CODE.StartLoad) {
|
||||
global.CODE_VERSION = global.START_LOAD_CODE.StartLoad
|
||||
this.ClearLoadCode()
|
||||
}
|
||||
@@ -95,8 +95,8 @@ module.exports = class CCode extends require("./base")
|
||||
var file_handle = fs.openSync(fname2, "w");
|
||||
fs.writeSync(file_handle, data, 0, data.length)
|
||||
fs.closeSync(file_handle)
|
||||
var SignArr = arr2(Hash, GetArrFromValue(Data.VersionNum));
|
||||
var Sign = secp256k1.sign(SHA3BUF(SignArr), PrivateKey).signature;
|
||||
var SignArr = global.arr2(Hash, global.GetArrFromValue(Data.VersionNum));
|
||||
var Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), PrivateKey).signature;
|
||||
global.CODE_VERSION = Data
|
||||
global.CODE_VERSION.Hash = Hash
|
||||
global.CODE_VERSION.Sign = Sign
|
||||
@@ -150,10 +150,10 @@ global.UnpackCodeFile = UnpackCodeFile;
|
||||
|
||||
function UnpackCodeFile(fname) {
|
||||
var data = fs.readFileSync(fname);
|
||||
var reader = ZIP.Reader(data);
|
||||
var reader = global.ZIP.Reader(data);
|
||||
reader.forEach(function(entry) {
|
||||
var Name = entry.getName();
|
||||
var Path = GetCodePath(Name);
|
||||
var Path = global.GetCodePath(Name);
|
||||
if (entry.isFile()) {
|
||||
var buf = entry.getData();
|
||||
global.CheckCreateDir(Path, true, true);
|
||||
@@ -171,7 +171,7 @@ global.RestartNode = function RestartNode(bForce) {
|
||||
setTimeout(DoExit, 5000);
|
||||
if (global.nw || global.NWMODE) {
|
||||
} else {
|
||||
StopChildProcess();
|
||||
global.StopChildProcess();
|
||||
global.ToLog("********************************** FORCE RESTART!!!");
|
||||
return;
|
||||
}
|
||||
@@ -179,12 +179,12 @@ global.RestartNode = function RestartNode(bForce) {
|
||||
var it = this.ActualNodes.iterator(), Node;
|
||||
while ((Node = it.next()) !== null) {
|
||||
if (Node.Socket)
|
||||
CloseSocket(Node.Socket, "Restart");
|
||||
global.CloseSocket(Node.Socket, "Restart");
|
||||
}
|
||||
}
|
||||
this.StopServer();
|
||||
this.StopNode();
|
||||
StopChildProcess();
|
||||
global.StopChildProcess();
|
||||
global.ToLog("****************************************** RESTART!!!");
|
||||
global.ToLog("EXIT 1");
|
||||
};
|
||||
@@ -195,7 +195,7 @@ function DoExit() {
|
||||
global.ToLog("RESTART NW");
|
||||
var 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');
|
||||
child_process.exec("run-next.bat", { shell: true });
|
||||
}
|
||||
|
||||
@@ -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_POINT = { BlockNum: 0, Hash: [], Sign: [] };
|
||||
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
|
||||
};
|
||||
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: []
|
||||
};
|
||||
global.START_LOAD_CODE = {};
|
||||
@@ -28,7 +28,7 @@ global.MIN_PERIOD_PING = 4 * 1000;
|
||||
const MAX_PERIOD_PING = 120 * 1000;
|
||||
global.MAX_PING_FOR_CONNECT = 400;
|
||||
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;
|
||||
module.exports = class CConnect extends require("./transfer-msg")
|
||||
{
|
||||
@@ -41,6 +41,15 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
NodesIPMap
|
||||
PerioadAfterCanStart
|
||||
КодДляРазработчикаХекс
|
||||
CommonKey
|
||||
KeyToNode
|
||||
NameToNode
|
||||
BlockNumDB
|
||||
idTimerSetConst
|
||||
SignCurrentTimeDev
|
||||
StopDetectGrayMode
|
||||
LastNotZeroNodesTime
|
||||
TransferTree
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.StartTime = Date.now()
|
||||
@@ -69,21 +78,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
СтатДанныеОтладкиИзБлока() {
|
||||
var Массив = [];
|
||||
if (this.СтатБлок && this.СтатБлок.SeqHash) {
|
||||
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:BlockNum", this.СтатБлок.BlockNum, "uint"), 6)
|
||||
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:SeqHash", this.СтатБлок.SeqHash, "hash"), 32)
|
||||
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:AddrHash", this.СтатБлок.AddrHash, "hash"), 32)
|
||||
global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:BlockNum", this.СтатБлок.BlockNum, "uint"), 6)
|
||||
global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:SeqHash", this.СтатБлок.SeqHash, "hash"), 32)
|
||||
global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:AddrHash", this.СтатБлок.AddrHash, "hash"), 32)
|
||||
}
|
||||
return Массив;
|
||||
}
|
||||
ДоступенКлючРазработчика(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 0;
|
||||
}
|
||||
БлокИзДанных(Node, Arr) {
|
||||
var Block = {};
|
||||
if (this.ДоступенКлючРазработчика(Node) && !IsZeroArr(Arr)) {
|
||||
var Block: any = {};
|
||||
if (this.ДоступенКлючРазработчика(Node) && !global.IsZeroArr(Arr)) {
|
||||
var Data = global.BufLib.GetObjectFromBuffer(Arr, "{BlockNum:arr6,SeqHash:arr32,AddrHash:arr32}", {});
|
||||
Block.BlockNum = this.ValueFromXORDevelop(Node, "Stat:BlockNum", Data.BlockNum, "uint")
|
||||
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) {
|
||||
var Node, addrStr;
|
||||
addrStr = GetHexFromAddres(addrArr)
|
||||
addrStr = global.GetHexFromAddres(addrArr)
|
||||
Node = this.NodesMap[addrStr]
|
||||
if (!Node) {
|
||||
var key = "" + ip + ":" + port;
|
||||
@@ -132,7 +141,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var Node2 = this.NodesMap[Node.addrStr];
|
||||
if (Node2 && Node2 !== Node) {
|
||||
Node2.Delete = 1
|
||||
AddNodeInfo(Node2, "FIND DOUBLE!!")
|
||||
global.AddNodeInfo(Node2, "FIND DOUBLE!!")
|
||||
delete this.NodesMap[Node.addrStr]
|
||||
}
|
||||
this.NodesMap[Node.addrStr] = Node
|
||||
@@ -143,7 +152,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
return this.StartConnectTry(Node);
|
||||
}
|
||||
StartPingPong() {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
if (global.CAN_START)
|
||||
this.PerioadAfterCanStart++
|
||||
@@ -153,9 +162,9 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var Node = arr[i];
|
||||
if (this.IsCanConnect(Node) && !Node.IsAddrList) {
|
||||
if (Node.Hot)
|
||||
Node.NextPing = MIN_PERIOD_PING
|
||||
if (Node.NextPing < MIN_PERIOD_PING)
|
||||
Node.NextPing = MIN_PERIOD_PING
|
||||
Node.NextPing = global.MIN_PERIOD_PING
|
||||
if (Node.NextPing < global.MIN_PERIOD_PING)
|
||||
Node.NextPing = global.MIN_PERIOD_PING
|
||||
var Delta = Date.now() - Node.PingStart;
|
||||
if (Delta >= Node.NextPing) {
|
||||
Node.PingStart = Date.now()
|
||||
@@ -165,7 +174,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
if (!Node.PingNumber)
|
||||
Node.PingNumber = 0
|
||||
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) })
|
||||
}
|
||||
}
|
||||
@@ -173,13 +182,13 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
GetPingData(Node) {
|
||||
var GrayAddres = 0;
|
||||
if (GrayConnect())
|
||||
if (global.GrayConnect())
|
||||
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 CheckPointHashDB = [];
|
||||
if (CHECK_POINT.BlockNum && CHECK_POINT.BlockNum <= this.BlockNumDB) {
|
||||
var Block = this.ReadBlockHeaderFromMapDB(CHECK_POINT.BlockNum);
|
||||
if (global.CHECK_POINT.BlockNum && global.CHECK_POINT.BlockNum <= this.BlockNumDB) {
|
||||
var Block = this.ReadBlockHeaderFromMapDB(global.CHECK_POINT.BlockNum);
|
||||
if (Block) {
|
||||
CheckPointHashDB = Block.Hash
|
||||
}
|
||||
@@ -199,15 +208,15 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var СтатДанные = [];
|
||||
var DirectMAccount = 0;
|
||||
var Ret = {
|
||||
VERSIONMAX: DEF_VERSION,
|
||||
VERSIONMAX: global.DEF_VERSION,
|
||||
FIRST_TIME_BLOCK: 0,
|
||||
PingVersion: 3,
|
||||
GrayConnect: GrayAddres, Reserve2: 0, AutoCorrectTime: AUTO_CORRECT_TIME,
|
||||
LevelCount: LevelCount, Time: (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,
|
||||
AccountsHash: AccountsHash, MemoryUsage: Math.trunc(process.memoryUsage().heapTotal / 1024 / 1024), CheckDeltaTime: CHECK_DELTA_TIME,
|
||||
CodeVersion: CODE_VERSION, IsAddrList: global.ADDRLIST_MODE, CheckPointHashDB: CheckPointHashDB, PortWeb: HTTP_HOSTING_PORT, HashDB: HashDB,
|
||||
StopGetBlock: StopGetBlock, NetConstant: NET_CONSTANT,
|
||||
GrayConnect: GrayAddres, Reserve2: 0, AutoCorrectTime: global.AUTO_CORRECT_TIME,
|
||||
LevelCount: LevelCount, Time: (global.GetCurrentTime() - 0), BlockNumDB: this.BlockNumDB, LoadHistoryMode: this.LoadHistoryMode, CanStart: global.CAN_START,
|
||||
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: global.CHECK_DELTA_TIME,
|
||||
CodeVersion: global.CODE_VERSION, IsAddrList: global.ADDRLIST_MODE, CheckPointHashDB: CheckPointHashDB, PortWeb: global.HTTP_HOSTING_PORT, HashDB: HashDB,
|
||||
StopGetBlock: StopGetBlock, NetConstant: global.NET_CONSTANT,
|
||||
};
|
||||
return Ret;
|
||||
}
|
||||
@@ -286,7 +295,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
if (Info.Context.PingNumber !== Node.PingNumber)
|
||||
return;
|
||||
this.DoPingData(Info, 0)
|
||||
var DeltaTime = GetCurrentTime(0) - Info.Context.StartTime;
|
||||
var DeltaTime = global.GetCurrentTime(0) - Info.Context.StartTime;
|
||||
Node.DeltaTimeM = DeltaTime
|
||||
Node.SumDeltaTime += DeltaTime
|
||||
Node.CountDeltaTime++
|
||||
@@ -302,11 +311,11 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
this.CheckNetConstant(Data, Info.Node)
|
||||
this.CheckCodeVersion(Data, Info.Node)
|
||||
if (!global.CAN_START) {
|
||||
if (DeltaTime > MAX_PING_FOR_CONNECT)
|
||||
global.ToLog("DeltaTime=" + DeltaTime + ">" + MAX_PING_FOR_CONNECT + " ms - " + NodeInfo(Node), 2)
|
||||
if (DeltaTime > global.MAX_PING_FOR_CONNECT)
|
||||
global.ToLog("DeltaTime=" + DeltaTime + ">" + global.MAX_PING_FOR_CONNECT + " ms - " + NodeInfo(Node), 2)
|
||||
}
|
||||
var Times;
|
||||
if (DeltaTime <= MAX_PING_FOR_CONNECT) {
|
||||
if (DeltaTime <= global.MAX_PING_FOR_CONNECT) {
|
||||
Times = Node.Times
|
||||
if (!Times || Times.Count >= 10) {
|
||||
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)
|
||||
}
|
||||
CheckCheckPoint(Data, Node) {
|
||||
if (CREATE_ON_START)
|
||||
if (global.CREATE_ON_START)
|
||||
return;
|
||||
if (Data.CheckPoint.BlockNum && Data.CheckPoint.BlockNum > CHECK_POINT.BlockNum) {
|
||||
var SignArr = arr2(Data.CheckPoint.Hash, GetArrFromValue(Data.CheckPoint.BlockNum));
|
||||
if (CheckDevelopSign(SignArr, Data.CheckPoint.Sign)) {
|
||||
if (Data.CheckPoint.BlockNum && Data.CheckPoint.BlockNum > global.CHECK_POINT.BlockNum) {
|
||||
var SignArr = global.arr2(Data.CheckPoint.Hash, global.SaveToFile(Data.CheckPoint.BlockNum));
|
||||
if (global.CheckDevelopSign(SignArr, Data.CheckPoint.Sign)) {
|
||||
global.CHECK_POINT = Data.CheckPoint
|
||||
this.ResetNextPingAllNode()
|
||||
if (Data.CheckPoint.BlockNum < this.BlockNumDBMin)
|
||||
return;
|
||||
var Block = this.ReadBlockHeaderDB(CHECK_POINT.BlockNum);
|
||||
if (Block && global.CompareArr(Block.Hash, CHECK_POINT.Hash) !== 0) {
|
||||
this.BlockNumDB = CHECK_POINT.BlockNum - 1
|
||||
var Block = this.ReadBlockHeaderDB(global.CHECK_POINT.BlockNum);
|
||||
if (Block && global.CompareArr(Block.Hash, global.CHECK_POINT.Hash) !== 0) {
|
||||
this.BlockNumDB = global.CHECK_POINT.BlockNum - 1
|
||||
this.TruncateBlockDB(this.BlockNumDB)
|
||||
this.StartSyncBlockchain(Node, 0, 1)
|
||||
}
|
||||
@@ -365,10 +374,10 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
CheckDeltaTime(Data, Node) {
|
||||
if (global.AUTO_CORRECT_TIME)
|
||||
if (global.CAN_START && !CREATE_ON_START) {
|
||||
if (Data.CheckDeltaTime.Num > CHECK_DELTA_TIME.Num) {
|
||||
if (global.CAN_START && !global.CREATE_ON_START) {
|
||||
if (Data.CheckDeltaTime.Num > global.CHECK_DELTA_TIME.Num) {
|
||||
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
|
||||
}
|
||||
else {
|
||||
@@ -380,11 +389,11 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
}
|
||||
CheckNetConstant(Data, Node) {
|
||||
if (Data.NetConstant.Num > NET_CONSTANT.Num) {
|
||||
if (Data.NetConstant.Num > global.NET_CONSTANT.Num) {
|
||||
var SignArr = this.GetSignCheckNetConstant(Data.NetConstant);
|
||||
if (CheckDevelopSign(SignArr, Data.NetConstant.Sign)) {
|
||||
if (global.CheckDevelopSign(SignArr, Data.NetConstant.Sign)) {
|
||||
global.NET_CONSTANT = Data.NetConstant
|
||||
var CurBlockNum = GetCurrentBlockNumByTime();
|
||||
var CurBlockNum = global.GetCurrentBlockNumByTime();
|
||||
var Delta = Data.NetConstant.BlockNum - CurBlockNum;
|
||||
if (Delta < 1)
|
||||
Delta = 1
|
||||
@@ -406,12 +415,12 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
}
|
||||
DoNetConst() {
|
||||
global.MAX_TRANSACTION_LIMIT = NET_CONSTANT.MaxTrasactionLimit
|
||||
global.MAX_TRANSACTION_LIMIT = global.NET_CONSTANT.MaxTrasactionLimit
|
||||
}
|
||||
CheckCodeVersion(Data, Node) {
|
||||
var CodeVersion = Data.CodeVersion;
|
||||
Node.VersionNum = CodeVersion.VersionNum
|
||||
if (CodeVersion.VersionNum >= MIN_CODE_VERSION_NUM) {
|
||||
if (CodeVersion.VersionNum >= global.MIN_CODE_VERSION_NUM) {
|
||||
Node.VersionOK = true
|
||||
}
|
||||
else {
|
||||
@@ -419,8 +428,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
if (Node.VersionOK) {
|
||||
Node.CanHot = true
|
||||
if (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)
|
||||
if (global.CHECK_POINT.BlockNum !== Data.CheckPoint.BlockNum || global.CompareArr(global.CHECK_POINT.Hash, Data.CheckPoint.Hash) !== 0) {
|
||||
Node.CanHot = false
|
||||
Node.NextConnectDelta = 60 * 1000
|
||||
}
|
||||
@@ -432,24 +441,24 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
if (bLoadVer) {
|
||||
var Level = AddrLevelArrFromBegin(this.addrArr, CodeVersion.addrArr);
|
||||
var Level = global.AddrLevelArrFromBegin(this.addrArr, CodeVersion.addrArr);
|
||||
if (CodeVersion.BlockPeriod) {
|
||||
var Delta = GetCurrentBlockNumByTime() - CodeVersion.BlockNum;
|
||||
var Delta = global.GetCurrentBlockNumByTime() - CodeVersion.BlockNum;
|
||||
Level += Delta / CodeVersion.BlockPeriod
|
||||
}
|
||||
if (Level >= CodeVersion.LevelUpdate) {
|
||||
var SignArr = arr2(CodeVersion.Hash, GetArrFromValue(CodeVersion.VersionNum));
|
||||
if (CheckDevelopSign(SignArr, CodeVersion.Sign)) {
|
||||
var SignArr = global.arr2(CodeVersion.Hash, global.SaveToFile(CodeVersion.VersionNum));
|
||||
if (global.CheckDevelopSign(SignArr, CodeVersion.Sign)) {
|
||||
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)
|
||||
}
|
||||
else {
|
||||
CODE_VERSION = CodeVersion
|
||||
global.CODE_VERSION = CodeVersion
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -480,21 +489,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
Node2.NextPing = 5 * 1000
|
||||
}
|
||||
}
|
||||
StartDisconnectHot(Node, StrError, bDeleteHot) {
|
||||
AddNodeInfo(Node, "DisconnectHot:" + StrError)
|
||||
StartDisconnectHot(Node, StrError, bDeleteHot?) {
|
||||
global.AddNodeInfo(Node, "DisconnectHot:" + StrError)
|
||||
if (Node.Active && Node.Hot) {
|
||||
AddNodeInfo(Node, "SEND DISCONNECTHOT")
|
||||
this.Send(Node, { "Method": "DISCONNECTHOT", "Context": {}, "Data": StrError }, STR_TYPE)
|
||||
global.AddNodeInfo(Node, "SEND DISCONNECTHOT")
|
||||
this.Send(Node, { "Method": "DISCONNECTHOT", "Context": {}, "Data": StrError }, global.STR_TYPE)
|
||||
}
|
||||
this.DeleteNodeFromHot(Node)
|
||||
}
|
||||
DISCONNECTHOT(Info, CurTime) {
|
||||
this.DeleteNodeFromHot(Info.Node)
|
||||
global.ADD_TO_STAT("DISCONNECTHOT")
|
||||
AddNodeInfo(Info.Node, "GET DISCONNECTHOT:" + Info.Data)
|
||||
global.AddNodeInfo(Info.Node, "GET DISCONNECTHOT:" + Info.Data)
|
||||
}
|
||||
StartGetNodes(Node) {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
var Delta = Date.now() - Node.StartTimeGetNodes;
|
||||
if (Delta >= Node.NextGetNodesDelta) {
|
||||
@@ -510,7 +519,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
"Method": "RETGETNODES", "Context": Info.Context, "Data": {
|
||||
arr: this.GetDirectNodesArray(false, 0, 1), IsAddrList: global.ADDRLIST_MODE,
|
||||
}
|
||||
}, MAX_NODES_RETURN * 250 + 300)
|
||||
}, global.MAX_NODES_RETURN * 250 + 300)
|
||||
}
|
||||
static
|
||||
RETGETNODES_F() {
|
||||
@@ -539,7 +548,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
}
|
||||
Info.Node.IsAddrList = Data.IsAddrList
|
||||
AddNodeInfo(Info.Node, "RETGETNODES length=" + arr.length)
|
||||
global.AddNodeInfo(Info.Node, "RETGETNODES length=" + arr.length)
|
||||
}
|
||||
static
|
||||
RETGETNODES2_F() {
|
||||
@@ -567,7 +576,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
}
|
||||
Info.Node.IsAddrList = Data.IsAddrList
|
||||
AddNodeInfo(Info.Node, "RETGETNODES2 length=" + arr.length)
|
||||
global.AddNodeInfo(Info.Node, "RETGETNODES2 length=" + arr.length)
|
||||
}
|
||||
GetNewNode(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 true;
|
||||
}
|
||||
GetDirectNodesArray(bAll, bWebPort, bGetAddrArr) {
|
||||
GetDirectNodesArray(bAll, bWebPort?, bGetAddrArr?) {
|
||||
var ret = [];
|
||||
var Value = {
|
||||
addrStr: this.addrStr, ip: this.ip, port: this.port, LastTime: 0, DeltaTime: 0, Hot: true, BlockProcessCount: 0, portweb: HTTP_HOSTING_PORT,
|
||||
var Value: any = {
|
||||
addrStr: this.addrStr, ip: this.ip, port: this.port, LastTime: 0, DeltaTime: 0, Hot: true, BlockProcessCount: 0, portweb: global.HTTP_HOSTING_PORT,
|
||||
};
|
||||
if (bGetAddrArr)
|
||||
Value.addrArr = global.GetArrFromHex(Value.addrStr)
|
||||
@@ -594,17 +603,17 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var len = this.NodesArr.length;
|
||||
var UseRandom = 0;
|
||||
var MaxDeltaTime = 24 * 3600 * 1000;
|
||||
if (len > MAX_NODES_RETURN && !bAll) {
|
||||
if (len > global.MAX_NODES_RETURN && !bAll) {
|
||||
UseRandom = 1
|
||||
MaxDeltaTime = NODES_DELTA_CALC_HOUR * 3600 * 1000
|
||||
len = MAX_NODES_RETURN
|
||||
MaxDeltaTime = global.NODES_DELTA_CALC_HOUR * 3600 * 1000
|
||||
len = global.MAX_NODES_RETURN
|
||||
}
|
||||
var mapWasAdd = {};
|
||||
var CurTime = global.GetCurrentTime();
|
||||
for (var i = 0; i < len; i++) {
|
||||
var Item;
|
||||
if (UseRandom) {
|
||||
Item = this.NodesArr[random(this.NodesArr.length)]
|
||||
Item = this.NodesArr[global.random(this.NodesArr.length)]
|
||||
if (mapWasAdd[Item.addrStr]) {
|
||||
continue;
|
||||
}
|
||||
@@ -621,9 +630,9 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
continue;
|
||||
if (Item.BlockProcessCount < 0)
|
||||
continue;
|
||||
if (!GrayConnect() && Item.LastTime - 0 < CurTime - MaxDeltaTime)
|
||||
if (!global.GrayConnect() && Item.LastTime - 0 < CurTime - MaxDeltaTime)
|
||||
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,
|
||||
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;
|
||||
}
|
||||
AddToArrNodes(Item) {
|
||||
AddToArrNodes(Item, b?) {
|
||||
if (Item.addrStr === "" || Item.addrStr === this.addrStr)
|
||||
return;
|
||||
var Node;
|
||||
@@ -648,7 +657,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
else
|
||||
Node = new CNode(Item.addrStr, Item.ip, Item.port)
|
||||
Node.id = this.NodesArr.length
|
||||
Node.addrArr = GetAddresFromHex(Node.addrStr)
|
||||
Node.addrArr = global.GetAddresFromHex(Node.addrStr)
|
||||
this.NodesMap[Node.addrStr] = Node
|
||||
this.NodesArr.push(Node)
|
||||
this.NodesArrUnSort.push(Node)
|
||||
@@ -673,14 +682,14 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
NodesArrSort() {
|
||||
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 arr = arr0.slice(1, 2000);
|
||||
SaveParams(global.GetDataPath("nodes.lst"), arr)
|
||||
global.SaveParams(global.GetDataPath("nodes.lst"), arr)
|
||||
}
|
||||
}
|
||||
LoadNodesFromFile() {
|
||||
var arr = LoadParams(global.GetDataPath("nodes.lst"), []);
|
||||
var arr = global.LoadParams(global.GetDataPath("nodes.lst"), []);
|
||||
arr.sort(SortNodeBlockProcessCount)
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i].LastTime) {
|
||||
@@ -733,7 +742,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var Count;
|
||||
if (!global.CAN_START)
|
||||
return;
|
||||
if (Info.Node.GrayConnect || GrayConnect())
|
||||
if (Info.Node.GrayConnect || global.GrayConnect())
|
||||
return;
|
||||
var Count = this.GetLevelEnum(Info.Node);
|
||||
var bAdd = this.AddLevelConnect(Info.Node);
|
||||
@@ -743,7 +752,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
else {
|
||||
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 })
|
||||
}
|
||||
AddLevelConnect(Node) {
|
||||
@@ -765,9 +774,9 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
arr.push(Node)
|
||||
Node.TransferCount = 0
|
||||
if (this.LoadHistoryMode)
|
||||
Node.LastTimeTransfer = (GetCurrentTime() - 0) + 30 * 1000
|
||||
Node.LastTimeTransfer = (global.GetCurrentTime() - 0) + 30 * 1000
|
||||
else
|
||||
Node.LastTimeTransfer = (GetCurrentTime() - 0) + 10 * 1000
|
||||
Node.LastTimeTransfer = (global.GetCurrentTime() - 0) + 10 * 1000
|
||||
Node.CanHot = true
|
||||
this.CheckDisconnectHot(Level)
|
||||
if (!Node.CanHot)
|
||||
@@ -775,7 +784,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
this.SendGetMessage(Node)
|
||||
global.ADD_TO_STAT("NETCONFIGURATION")
|
||||
global.ADD_TO_STAT("AddLevelConnect")
|
||||
AddNodeInfo(Node, "Add Level connect")
|
||||
global.AddNodeInfo(Node, "Add Level connect")
|
||||
return true;
|
||||
}
|
||||
static
|
||||
@@ -784,7 +793,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
RETADDLEVELCONNECT(Info, CurTime) {
|
||||
var Data = this.DataFromF(Info);
|
||||
AddNodeInfo(Info.Node, "GET RETADDLEVELCONNECT: " + Data.result)
|
||||
global.AddNodeInfo(Info.Node, "GET RETADDLEVELCONNECT: " + Data.result)
|
||||
if (Data.result === 1) {
|
||||
this.AddLevelConnect(Info.Node)
|
||||
}
|
||||
@@ -794,7 +803,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
Info.Node.LevelCount = Data.Count
|
||||
}
|
||||
DeleteBadConnectingByTimer() {
|
||||
if (glStopNode)
|
||||
if (global.glStopNode)
|
||||
return;
|
||||
var CurTime = global.GetCurrentTime();
|
||||
var arr = global.SERVER.NodesArr;
|
||||
@@ -803,8 +812,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var Status = GetSocketStatus(Node.Socket);
|
||||
if (Node.Active && Status < 100) {
|
||||
var Delta = CurTime - Node.LastTime;
|
||||
if (Delta > MAX_WAIT_PERIOD_FOR_STATUS) {
|
||||
AddNodeInfo(Node, "Close bad connecting by time")
|
||||
if (Delta > global.MAX_WAIT_PERIOD_FOR_STATUS) {
|
||||
global.AddNodeInfo(Node, "Close bad connecting by time")
|
||||
this.DeleteNodeFromActive(Node)
|
||||
}
|
||||
}
|
||||
@@ -816,21 +825,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
if (Level < 3)
|
||||
MaxCountChilds = 4
|
||||
else
|
||||
MaxCountChilds = MAX_CONNECT_CHILD
|
||||
MaxCountChilds = global.MAX_CONNECT_CHILD
|
||||
var arr = this.LevelNodes[Level];
|
||||
if (arr) {
|
||||
for (var n = arr.length - 1; n >= 0; n--) {
|
||||
var Node = arr[n];
|
||||
if (Node) {
|
||||
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")
|
||||
}
|
||||
}
|
||||
}
|
||||
arr.sort(SortNodeBlockProcessCount)
|
||||
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];
|
||||
if (Node) {
|
||||
if (ChildCount > MaxCountChilds) {
|
||||
@@ -840,7 +849,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
global.ADD_TO_STAT("DisconnectChild")
|
||||
continue;
|
||||
}
|
||||
if (ChildCount > (MIN_CONNECT_CHILD) && Node.LevelCount > MIN_CONNECT_CHILD) {
|
||||
if (ChildCount > (global.MIN_CONNECT_CHILD) && Node.LevelCount > global.MIN_CONNECT_CHILD) {
|
||||
ChildCount--
|
||||
Node.CanHot = false
|
||||
this.AddCheckErrCount(Node, 1)
|
||||
@@ -855,8 +864,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
SetTime(NewTime) {
|
||||
global.ToLog("Set new time: " + NewTime)
|
||||
if (NewTime) {
|
||||
global.DELTA_CURRENT_TIME = NewTime - (GetCurrentTime(0) - 0)
|
||||
SAVE_CONST(true)
|
||||
global.DELTA_CURRENT_TIME = NewTime - (global.GetCurrentTime(0) - 0)
|
||||
global.SAVE_CONST(true)
|
||||
}
|
||||
}
|
||||
static
|
||||
@@ -864,13 +873,13 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
return "{Time:uint, Sign:arr64}";
|
||||
}
|
||||
SendTimeDev(Node) {
|
||||
if (!WALLET.WalletOpen) {
|
||||
if (!global.WALLET.WalletOpen) {
|
||||
global.ToLog("Error Wallet not open")
|
||||
return 0;
|
||||
}
|
||||
if (!this.SignCurrentTimeDev) {
|
||||
var SignArr = global.GetArrFromHex(SERVER.addrStr);
|
||||
this.SignCurrentTimeDev = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature
|
||||
var SignArr = global.GetArrFromHex(global.SERVER.addrStr);
|
||||
this.SignCurrentTimeDev = global.SaveToFile(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature
|
||||
}
|
||||
var Time = global.GetCurrentTime() - 0;
|
||||
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 Data = this.DataFromF(Info);
|
||||
var SignArr = global.GetArrFromHex(Node.addrStr);
|
||||
if (CheckDevelopSign(SignArr, Data.Sign)) {
|
||||
if (global.CheckDevelopSign(SignArr, Data.Sign)) {
|
||||
this.SetTime(Data.Time)
|
||||
}
|
||||
else {
|
||||
@@ -908,10 +917,10 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
for (var i = 0; i < this.NodesArr.length; i++) {
|
||||
var Node = this.NodesArr[i];
|
||||
if (!Node.Active && this.IsCanConnect(Node) && !Node.WasAddToConnect) {
|
||||
AddNodeInfo(Node, "To connect all")
|
||||
global.AddNodeInfo(Node, "To connect all")
|
||||
Node.NextConnectDelta = 1000
|
||||
Node.WasAddToConnect = 1
|
||||
ArrConnect.push(Node)
|
||||
global.ArrConnect.push(Node)
|
||||
Count++
|
||||
}
|
||||
}
|
||||
@@ -922,7 +931,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
for (var i = 0; i < this.NodesArr.length; i++) {
|
||||
var Node = this.NodesArr[i];
|
||||
if (Node.Active) {
|
||||
AddNodeInfo(Node, "Disconnect hot all")
|
||||
global.AddNodeInfo(Node, "Disconnect hot all")
|
||||
Node.NextConnectDelta = 10000
|
||||
this.DeleteNodeFromActive(Node)
|
||||
Count++
|
||||
@@ -942,7 +951,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var ArrNodes = this.GetHotTimeNodes();
|
||||
var CountNodes = ArrNodes.length;
|
||||
var DeltaArr = [];
|
||||
var NodesSet = new Set();
|
||||
var NodesSet: any = new Set();
|
||||
for (var i = 0; i < ArrNodes.length; i++) {
|
||||
var Node = ArrNodes[i];
|
||||
if (!Node.Times)
|
||||
@@ -983,6 +992,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
var Sum = 0;
|
||||
var Count = 0;
|
||||
//@ts-ignore
|
||||
for (var i = start; i <= finish; i++) {
|
||||
Sum = Sum + DeltaArr[i]
|
||||
Count++
|
||||
@@ -1010,7 +1020,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
global.ADD_TO_STAT("CORRECT_TIME_DOWN", - AvgDelta)
|
||||
global.DELTA_CURRENT_TIME = Math.trunc(global.DELTA_CURRENT_TIME + AvgDelta)
|
||||
this.ClearTimeStat()
|
||||
SAVE_CONST()
|
||||
global.SAVE_CONST()
|
||||
}
|
||||
ClearTimeStat() {
|
||||
var ArrNodes = this.GetHotTimeNodes();
|
||||
@@ -1019,19 +1029,19 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
}
|
||||
TimeDevCorrect() {
|
||||
if (CHECK_DELTA_TIME.bUse) {
|
||||
var BlockNum = GetCurrentBlockNumByTime();
|
||||
if (CHECK_DELTA_TIME.StartBlockNum <= BlockNum && CHECK_DELTA_TIME.EndBlockNum > BlockNum) {
|
||||
if (global.CHECK_DELTA_TIME.bUse) {
|
||||
var BlockNum = global.GetCurrentBlockNumByTime();
|
||||
if (global.CHECK_DELTA_TIME.StartBlockNum <= BlockNum && global.CHECK_DELTA_TIME.EndBlockNum > BlockNum) {
|
||||
if (!global.DELTA_CURRENT_TIME)
|
||||
global.DELTA_CURRENT_TIME = 0
|
||||
var CorrectTime = 0;
|
||||
if (CHECK_DELTA_TIME.bAddTime)
|
||||
CorrectTime = CHECK_DELTA_TIME.DeltaTime
|
||||
if (global.CHECK_DELTA_TIME.bAddTime)
|
||||
CorrectTime = global.CHECK_DELTA_TIME.DeltaTime
|
||||
else
|
||||
CorrectTime = - CHECK_DELTA_TIME.DeltaTime
|
||||
CorrectTime = - global.CHECK_DELTA_TIME.DeltaTime
|
||||
global.DELTA_CURRENT_TIME += CorrectTime
|
||||
this.ClearTimeStat()
|
||||
SAVE_CONST(true)
|
||||
global.SAVE_CONST(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1061,7 +1071,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
Node.NextConnectDelta = 1000
|
||||
if (!Node.FirstTime) {
|
||||
Node.FirstTime = global.GetCurrentTime() - 0
|
||||
Node.FirstTimeStr = "" + GetStrTimeUTC()
|
||||
Node.FirstTimeStr = "" + global.GetStrTimeUTC()
|
||||
}
|
||||
global.ADD_TO_STAT("AddToActive")
|
||||
}
|
||||
@@ -1071,8 +1081,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
this.StartDisconnectHot(Node, "NotActive", 1)
|
||||
Node.Hot = false
|
||||
this.ActualNodes.remove(Node)
|
||||
CloseSocket(Node.Socket, "DeleteNodeFromActive")
|
||||
CloseSocket(Node.Socket2, "DeleteNodeFromActive")
|
||||
global.CloseSocket(Node.Socket, "DeleteNodeFromActive")
|
||||
global.CloseSocket(Node.Socket2, "DeleteNodeFromActive")
|
||||
Node.ResetNode()
|
||||
Node.Socket = undefined
|
||||
Node.Socket2 = undefined
|
||||
@@ -1086,8 +1096,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
if (!Node.SocketStart)
|
||||
Node.SocketStart = Date.now()
|
||||
var DeltaTime = Date.now() - Node.SocketStart;
|
||||
if (DeltaTime >= PERIOD_FOR_RECONNECT) {
|
||||
if (random(100) >= 90)
|
||||
if (DeltaTime >= global.PERIOD_FOR_RECONNECT) {
|
||||
if (global.random(100) >= 90)
|
||||
Node.CreateReconnection()
|
||||
}
|
||||
}
|
||||
@@ -1120,8 +1130,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
AddrLevelNode(Node) {
|
||||
if (Node.GrayConnect)
|
||||
return MAX_LEVEL_SPECIALIZATION - 1;
|
||||
return AddrLevelArr(this.addrArr, Node.addrArr);
|
||||
return global.MAX_LEVEL_SPECIALIZATION - 1;
|
||||
return global.AddrLevelArr(this.addrArr, Node.addrArr);
|
||||
}
|
||||
GetNodesLevelCount() {
|
||||
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.UseDirectIP = 0
|
||||
SAVE_CONST()
|
||||
global.SAVE_CONST()
|
||||
}
|
||||
}
|
||||
SetDirectMode() {
|
||||
@@ -1230,14 +1240,14 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
if (CountNodes && !global.NET_WORK_MODE) {
|
||||
global.NET_WORK_MODE = { ip: "", port: "30000" }
|
||||
global.NET_WORK_MODE.UseDirectIP = 1
|
||||
SAVE_CONST()
|
||||
global.SAVE_CONST()
|
||||
}
|
||||
}
|
||||
StartCheckTransferTree() {
|
||||
var ArrTree = this.GetTransferTree();
|
||||
this.TransferTree = ArrTree
|
||||
var CurTime = Date.now();
|
||||
if (GrayConnect()) {
|
||||
if (global.GrayConnect()) {
|
||||
var MustCount = GetGrayServerConnections();
|
||||
if (this.ActualNodes.size < MustCount) {
|
||||
this.NodesArr.sort(SortNodeBlockProcessCountGray)
|
||||
@@ -1251,16 +1261,16 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
continue;
|
||||
var DeltaTime = CurTime - Node.StartTimeConnect;
|
||||
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
|
||||
AddNodeInfo(Node, "To connect")
|
||||
global.AddNodeInfo(Node, "To connect")
|
||||
Node.WasAddToConnect = 1
|
||||
ArrConnect.push(Node)
|
||||
global.ArrConnect.push(Node)
|
||||
WasDoConnect++
|
||||
}
|
||||
}
|
||||
}
|
||||
while (this.ActualNodes.size > MustCount) {
|
||||
var Node = this.ActualNodes.max();
|
||||
AddNodeInfo(Node, "DeleteFromActive")
|
||||
global.AddNodeInfo(Node, "DeleteFromActive")
|
||||
this.DeleteNodeFromActive(Node)
|
||||
}
|
||||
}
|
||||
@@ -1278,14 +1288,14 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
var Node = arr[n];
|
||||
var DeltaTime = CurTime - Node.StartTimeConnect;
|
||||
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
|
||||
AddNodeInfo(Node, "To connect")
|
||||
global.AddNodeInfo(Node, "To connect")
|
||||
Node.WasAddToConnect = 1
|
||||
ArrConnect.push(Node)
|
||||
global.ArrConnect.push(Node)
|
||||
WasDoConnect++
|
||||
}
|
||||
DeltaTime = CurTime - Node.StartTimeHot
|
||||
if (Node.Active && !Node.Hot && WasDoHot < MIN_CONNECT_CHILD && DeltaTime > Node.NextHotDelta && !Node.GrayConnect) {
|
||||
AddNodeInfo(Node, "To hot level")
|
||||
if (Node.Active && !Node.Hot && WasDoHot < global.MIN_CONNECT_CHILD && DeltaTime > Node.NextHotDelta && !Node.GrayConnect) {
|
||||
global.AddNodeInfo(Node, "To hot level")
|
||||
this.StartAddLevelConnect(Node)
|
||||
Node.StartTimeHot = CurTime
|
||||
Node.NextHotDelta = Node.NextHotDelta * 2
|
||||
@@ -1299,21 +1309,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
}
|
||||
ValueToXOR(StrType, Str) {
|
||||
var Arr1 = toUTF8Array(Str);
|
||||
var Arr1 = global.toUTF8Array(Str);
|
||||
var Arr2 = global.shaarr(this.CommonKey + ":" + this.addrStr + ":" + StrType);
|
||||
return global.WALLET.XORHash(Arr1, Arr2, 32);
|
||||
}
|
||||
ValueFromXOR(Node, StrType, Arr1) {
|
||||
var Arr2 = global.shaarr(this.CommonKey + ":" + Node.addrStr + ":" + StrType);
|
||||
var Arr = global.WALLET.XORHash(Arr1, Arr2, 32);
|
||||
var Str = Utf8ArrayToStr(Arr);
|
||||
var Str = global.Utf8ArrayToStr(Arr);
|
||||
return Str;
|
||||
}
|
||||
ValueToXORDevelop(StrName, Data, Type) {
|
||||
var Arr1;
|
||||
if (Type === "uint") {
|
||||
Arr1 = []
|
||||
WriteUintToArr(Arr1, Data)
|
||||
global.WriteUintToArr(Arr1, Data)
|
||||
}
|
||||
else
|
||||
if (Type === "hash") {
|
||||
@@ -1321,25 +1331,25 @@ module.exports = class CConnect extends require("./transfer-msg")
|
||||
}
|
||||
else
|
||||
if (Type === "str") {
|
||||
Arr1 = toUTF8Array(Data)
|
||||
Arr1 = global.toUTF8Array(Data)
|
||||
}
|
||||
var Arr2 = global.shaarr(this.КодДляРазработчикаХекс + ":" + StrName);
|
||||
return global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
|
||||
}
|
||||
ValueFromXORDevelop(Node, StrName, Arr1, Type) {
|
||||
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 Arr = global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
|
||||
if (Type === "uint") {
|
||||
return ReadUintFromArr(Arr, 0);
|
||||
return global.ReadUintFromArr(Arr, 0);
|
||||
}
|
||||
else
|
||||
if (Type === "hash") {
|
||||
return Arr;
|
||||
}
|
||||
var Str = Utf8ArrayToStr(Arr);
|
||||
var Str = global.Utf8ArrayToStr(Arr);
|
||||
return Str;
|
||||
}
|
||||
};
|
||||
@@ -1363,8 +1373,8 @@ function SortNodeBlockProcessCountGray(a, b) {
|
||||
};
|
||||
|
||||
function GetGrayServerConnections() {
|
||||
var Count = MAX_GRAY_CONNECTIONS_TO_SERVER;
|
||||
if (SERVER.LoadHistoryMode && global.SERVER.LoadHistoryMessage)
|
||||
var Count = global.MAX_GRAY_CONNECTIONS_TO_SERVER;
|
||||
if (global.SERVER.LoadHistoryMode && global.SERVER.LoadHistoryMessage)
|
||||
Count = Count * 10;
|
||||
return Count;
|
||||
};
|
||||
|
||||
@@ -63,6 +63,8 @@ global.CONST_NAME_ARR = [
|
||||
"REST_START_COUNT",
|
||||
"LOAD_TO_BEGIN"
|
||||
];
|
||||
global.MAX_LENGTH_SENDER_MAP = 3000;
|
||||
global.DELTA_START_SENDER_MAP = 24;
|
||||
global.NODES_DELTA_CALC_HOUR = 4;
|
||||
global.USE_HARD_API_V2 = 0;
|
||||
global.USE_TICKET = 0;
|
||||
@@ -196,7 +198,7 @@ if (global.LOCAL_RUN) {
|
||||
global.NEW_FORMULA_KTERA = 3;
|
||||
global.NEW_FORMULA_TARGET1 = 0;
|
||||
global.NEW_FORMULA_TARGET2 = 1;
|
||||
NETWORK = "LOCAL";
|
||||
global.NETWORK = "LOCAL";
|
||||
global.ALL_VIEW_ROWS = 1;
|
||||
global.COUNT_NODE_PROOF = 1;
|
||||
global.NEW_SIGN_TIME = 0;
|
||||
@@ -217,7 +219,7 @@ else
|
||||
global.START_BLOCK_ACCOUNT_HASH3 = 2356000;
|
||||
global.BLOCKNUM_TICKET_ALGO = 1;
|
||||
global.WALLET_NAME = "TEST";
|
||||
NETWORK = "TERA-TEST2";
|
||||
global.NETWORK = "TERA-TEST2";
|
||||
if (global.START_PORT_NUMBER === undefined)
|
||||
global.START_PORT_NUMBER = 40000;
|
||||
global.ALL_VIEW_ROWS = 1;
|
||||
@@ -238,7 +240,7 @@ if (global.LOCAL_RUN) {
|
||||
global.CHECK_GLOBAL_TIME = 0;
|
||||
}
|
||||
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_CLIENT = "TERA-CORE";
|
||||
|
||||
@@ -10,15 +10,6 @@
|
||||
require("./library.js");
|
||||
import * as crypto from 'crypto'
|
||||
|
||||
let {
|
||||
sha3,
|
||||
secp256k1,
|
||||
SHA3BUF,
|
||||
GetSignHash,
|
||||
shaarr,
|
||||
ToLog
|
||||
} = global
|
||||
|
||||
global.MAX_SUPER_VALUE_POW = (1 << 30) * 2;
|
||||
var BuferForStr = Buffer.alloc(32);
|
||||
global.GetHexFromAddres = function(arr) {
|
||||
@@ -79,9 +70,9 @@ global.GetPublicKeyFromAddres = function(Arr) {
|
||||
return RetArr;
|
||||
};
|
||||
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++) {
|
||||
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)
|
||||
return 1;
|
||||
}
|
||||
@@ -107,7 +98,7 @@ global.GetSignHash = function(Context, ContextAddrTo, Msg) {
|
||||
};
|
||||
global.GetVerifyHash = function(Context, ContextAddr, Msg, Sign1) {
|
||||
try {
|
||||
var Sign2 = GetSignHash(Context, ContextAddr, Msg);
|
||||
var Sign2 = global.GetSignHash(Context, ContextAddr, Msg);
|
||||
for (var i = 0; i < Sign1.length; i++)
|
||||
if (Sign1[i] !== Sign2[i])
|
||||
return false;
|
||||
@@ -170,7 +161,7 @@ global.GetKeyPairTest = function(password, Power) {
|
||||
var Data = KeyPair.getPublicKey('', 'compressed');
|
||||
if (Data[0] === 2) {
|
||||
if (Power) {
|
||||
var nBits = GetPowPower(Data.slice(1));
|
||||
var nBits = global.GetPowPower(Data.slice(1));
|
||||
if (nBits < Power)
|
||||
continue;
|
||||
}
|
||||
@@ -197,7 +188,7 @@ function GetArrFromValue(Num) {
|
||||
};
|
||||
|
||||
function GetHashWithNonce(hash0, nonce) {
|
||||
return shaarr2(hash0, GetArrFromValue(nonce));
|
||||
return global.shaarr2(hash0, global.GetArrFromValue(nonce));
|
||||
};
|
||||
global.GetHashWithValues = GetHashWithValues;
|
||||
|
||||
@@ -246,7 +237,7 @@ function CreateNoncePOWExtern(arr0, BlockNum, count, startnone) {
|
||||
if (!startnone)
|
||||
startnone = 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++) {
|
||||
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
|
||||
var value = GetPowValue(arrhash);
|
||||
@@ -266,7 +257,7 @@ function CreateNoncePOWExternMinPower(arr0, BlockNum, MinPow) {
|
||||
var nonce = 0;
|
||||
while (1) {
|
||||
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
|
||||
var power = GetPowPower(arrhash);
|
||||
var power = global.GetPowPower(arrhash);
|
||||
if (power >= MinPow) {
|
||||
return nonce;
|
||||
}
|
||||
@@ -277,7 +268,7 @@ global.CreateNoncePOWInner = function(arr0, count) {
|
||||
var Hash;
|
||||
var arr = arr0.slice();
|
||||
var maxnonce = 0;
|
||||
var supervalue = MAX_SUPER_VALUE_POW;
|
||||
var supervalue = global.MAX_SUPER_VALUE_POW;
|
||||
for (var nonce = 0; nonce < count; nonce++) {
|
||||
var hashTest = GetHashWithNonce(arr, nonce);
|
||||
var value = GetPowValue(hashTest);
|
||||
@@ -297,7 +288,7 @@ global.CreateAddrPOW = function(SeqHash, AddrArr, MaxHash, Start, CountNonce, Bl
|
||||
AddrArr[7] = (nonce >>> 8) & 0xFF;
|
||||
AddrArr[8] = (nonce >>> 16) & 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) {
|
||||
MaxHash = HashTest;
|
||||
MaxNonce = nonce;
|
||||
@@ -324,7 +315,7 @@ function IsZeroArr(arr) {
|
||||
|
||||
function CalcHashFromArray(ArrHashes, bOriginalSeq) {
|
||||
if (bOriginalSeq === undefined)
|
||||
ArrHashes.sort(CompareArr);
|
||||
ArrHashes.sort(global.CompareArr);
|
||||
var Buf = [];
|
||||
for (var i = 0; i < ArrHashes.length; i++) {
|
||||
var Value = ArrHashes[i];
|
||||
@@ -342,7 +333,7 @@ function CalcHashFromArray(ArrHashes, bOriginalSeq) {
|
||||
|
||||
function CalcHash3FromArray(ArrHashes, bOriginalSeq) {
|
||||
if (bOriginalSeq === undefined)
|
||||
ArrHashes.sort(CompareArr);
|
||||
ArrHashes.sort(global.CompareArr);
|
||||
var Buf = [];
|
||||
for (var i = 0; i < ArrHashes.length; i++) {
|
||||
var Value = ArrHashes[i];
|
||||
@@ -381,12 +372,12 @@ function CalcMerkl3FromArray(Arr, Tree0?) {
|
||||
return Tree;
|
||||
}
|
||||
if (bSort) {
|
||||
Arr.sort(CompareArr);
|
||||
Arr.sort(global.CompareArr);
|
||||
}
|
||||
var Arr2 = [];
|
||||
var len = Math.floor(Arr.length / 2);
|
||||
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);
|
||||
}
|
||||
if (len * 2 !== Arr.length) {
|
||||
@@ -418,12 +409,12 @@ function CalcMerkl0FromArray(Arr, Tree0?) {
|
||||
return Tree;
|
||||
}
|
||||
if (bSort) {
|
||||
Arr.sort(CompareArr);
|
||||
Arr.sort(global.CompareArr);
|
||||
}
|
||||
var Arr2 = [];
|
||||
var len = Math.floor(Arr.length / 2);
|
||||
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);
|
||||
}
|
||||
if (len * 2 !== Arr.length) {
|
||||
@@ -555,7 +546,7 @@ function CheckMerkleProof(ArrL, ArrM, ArrR) {
|
||||
var length2 = Math.floor(Arr.length / 2);
|
||||
Arr2 = [];
|
||||
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);
|
||||
}
|
||||
if (Arr.length / 2 > length2)
|
||||
@@ -593,7 +584,7 @@ function UpdateMerklTree(Tree, CalcMap: any, NumLevel) {
|
||||
if (i2 < len2) {
|
||||
Count++;
|
||||
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 {
|
||||
if (key as any > LastIndex) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
const fs = require('fs');
|
||||
import * as fs from 'fs'
|
||||
const DBLib = require("./db");
|
||||
const DBRow = require("./db-row");
|
||||
global.BlockDB = new DBLib();
|
||||
@@ -35,24 +35,33 @@ const WorkStructHeader2 = {};
|
||||
const DEFAULT_DB_VERSION = 2;
|
||||
module.exports = class CDB extends require("../code")
|
||||
{
|
||||
DBHeader100
|
||||
BlockNumDB
|
||||
BlockNumDBMin
|
||||
CurrentBlockNum
|
||||
CheckOnStartComplete
|
||||
UseTruncateBlockDB
|
||||
MapHeader
|
||||
StatMap
|
||||
PrevBlockChainArr
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
var bWriteMode = (global.PROCESS_NAME === "MAIN");
|
||||
global.DB_VERSION = DEFAULT_DB_VERSION
|
||||
var FileItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, bWriteMode);
|
||||
var FileItem2 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, bWriteMode);
|
||||
var FileItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, bWriteMode);
|
||||
var FileItem2 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, bWriteMode);
|
||||
if (FileItem2.size)
|
||||
global.DB_VERSION = 2
|
||||
else
|
||||
if (FileItem1.size)
|
||||
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.BlockNumDB = 0
|
||||
this.BlockNumDBMin = 0
|
||||
this.ClearBufMap()
|
||||
setTimeout(function() {
|
||||
SERVER.ReadStateTX()
|
||||
global.SERVER.ReadStateTX()
|
||||
}, 10)
|
||||
}
|
||||
ReadStateTX() {
|
||||
@@ -62,10 +71,10 @@ module.exports = class CDB extends require("../code")
|
||||
}
|
||||
}
|
||||
LoadMemBlocksOnStart() {
|
||||
this.CurrentBlockNum = GetCurrentBlockNumByTime()
|
||||
for (var i = this.BlockNumDB - BLOCK_COUNT_IN_MEMORY; i <= this.BlockNumDB; i++)
|
||||
this.CurrentBlockNum = global.GetCurrentBlockNumByTime()
|
||||
for (var i = this.BlockNumDB - global.BLOCK_COUNT_IN_MEMORY; i <= this.BlockNumDB; i++)
|
||||
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)
|
||||
else
|
||||
this.GetBlock(i, true, false)
|
||||
@@ -74,12 +83,12 @@ module.exports = class CDB extends require("../code")
|
||||
GetMaxNumBlockDB() {
|
||||
var FileItem, BlockNum;
|
||||
if (global.DB_VERSION === 2) {
|
||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
||||
BlockNum = (FileItem.size / BLOCK_HEADER_SIZE2) - 1
|
||||
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
||||
BlockNum = (FileItem.size / global.BLOCK_HEADER_SIZE2) - 1
|
||||
}
|
||||
else {
|
||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER)
|
||||
BlockNum = (FileItem.size / BLOCK_HEADER_SIZE) - 1
|
||||
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER)
|
||||
BlockNum = (FileItem.size / global.BLOCK_HEADER_SIZE) - 1
|
||||
}
|
||||
return BlockNum;
|
||||
}
|
||||
@@ -88,7 +97,7 @@ module.exports = class CDB extends require("../code")
|
||||
var BlockNum = this.GetMaxNumBlockDB();
|
||||
if (global.NO_CHECK_BLOCKNUM_ONSTART) {
|
||||
this.BlockNumDB = this.CheckBlocksOnStartFoward(BlockNum - 2, 0)
|
||||
ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
||||
global.ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
||||
return;
|
||||
}
|
||||
BlockNum = this.CheckBlocksOnStartReverse(BlockNum)
|
||||
@@ -97,7 +106,7 @@ module.exports = class CDB extends require("../code")
|
||||
if (this.BlockNumDB >= global.BLOCK_PROCESSING_LENGTH2) {
|
||||
this.TruncateBlockDB(this.BlockNumDB)
|
||||
}
|
||||
ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
||||
global.ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
||||
this.CheckOnStartComplete = 1
|
||||
}
|
||||
CheckBlocksOnStartReverse(StartNum) {
|
||||
@@ -106,21 +115,21 @@ module.exports = class CDB extends require("../code")
|
||||
var PrevBlock;
|
||||
for (var num = StartNum; num >= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2; num -= delta) {
|
||||
var Block = this.ReadBlockHeaderDB(num);
|
||||
if (!Block || IsZeroArr(Block.SumHash)) {
|
||||
if (!Block || global.IsZeroArr(Block.SumHash)) {
|
||||
delta++
|
||||
Count = 0
|
||||
continue;
|
||||
}
|
||||
var PrevBlock = this.ReadBlockHeaderDB(num - 1);
|
||||
if (!PrevBlock || IsZeroArr(PrevBlock.SumHash)) {
|
||||
if (!PrevBlock || global.IsZeroArr(PrevBlock.SumHash)) {
|
||||
Count = 0
|
||||
continue;
|
||||
}
|
||||
var SumHash = shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||
var SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||
if (global.CompareArr(SumHash, Block.SumHash) === 0) {
|
||||
delta = 1
|
||||
Count++
|
||||
if (Count > COUNT_BLOCKS_FOR_LOAD / 10)
|
||||
if (Count > global.COUNT_BLOCKS_FOR_LOAD / 10)
|
||||
return num;
|
||||
}
|
||||
else {
|
||||
@@ -135,7 +144,7 @@ module.exports = class CDB extends require("../code")
|
||||
if (StartNum < this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2)
|
||||
StartNum = this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2
|
||||
var MaxNum = global.DApps.Accounts.GetHashedMaxBlockNum();
|
||||
var BlockNumTime = GetCurrentBlockNumByTime();
|
||||
var BlockNumTime = global.GetCurrentBlockNumByTime();
|
||||
if (BlockNumTime < MaxNum)
|
||||
MaxNum = BlockNumTime
|
||||
var arr = [];
|
||||
@@ -148,37 +157,37 @@ module.exports = class CDB extends require("../code")
|
||||
if (!Block)
|
||||
return num > 0 ? num - 1 : 0;
|
||||
if (num % 100000 === 0)
|
||||
ToLog("CheckBlocksOnStartFoward: " + num)
|
||||
global.ToLog("CheckBlocksOnStartFoward: " + num)
|
||||
if (bCheckBody) {
|
||||
var TreeHash = CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
||||
var TreeHash = global.CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
||||
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;
|
||||
}
|
||||
}
|
||||
if (PrevBlock) {
|
||||
if (arr.length !== BLOCK_PROCESSING_LENGTH) {
|
||||
if (arr.length !== global.BLOCK_PROCESSING_LENGTH) {
|
||||
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);
|
||||
arr.push(Prev.Hash)
|
||||
}
|
||||
}
|
||||
else {
|
||||
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)
|
||||
}
|
||||
var PrevHash = CalcHashFromArray(arr, true);
|
||||
var PrevHash = global.CalcHashFromArray(arr, true);
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
var SumHash = shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||
var SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -188,23 +197,23 @@ module.exports = class CDB extends require("../code")
|
||||
}
|
||||
WriteBlockDB(Block) {
|
||||
var startTime = process.hrtime();
|
||||
if (Block.TrCount === 0 && !IsZeroArr(Block.TreeHash)) {
|
||||
ToLogTrace("ERROR WRITE TrCount BLOCK:" + Block.BlockNum)
|
||||
if (Block.TrCount === 0 && !global.IsZeroArr(Block.TreeHash)) {
|
||||
global.ToLogTrace("ERROR WRITE TrCount BLOCK:" + Block.BlockNum)
|
||||
throw "ERROR WRITE";
|
||||
}
|
||||
var Ret = this.WriteBodyDB(Block);
|
||||
if (Ret) {
|
||||
Ret = this.WriteBlockDBFinaly(Block)
|
||||
}
|
||||
ADD_TO_STAT_TIME("MAX:WriteBlockDB", startTime)
|
||||
ADD_TO_STAT_TIME("WriteBlockDB", startTime)
|
||||
global.ADD_TO_STAT_TIME("MAX:WriteBlockDB", startTime)
|
||||
global.ADD_TO_STAT_TIME("WriteBlockDB", startTime)
|
||||
return Ret;
|
||||
}
|
||||
WriteBlockDBFinaly(Block) {
|
||||
var Ret = this.WriteBlockHeaderDB(Block);
|
||||
if (Ret) {
|
||||
if (Block.TrDataLen === 0 && !IsZeroArr(Block.TreeHash)) {
|
||||
ToLogTrace("ERROR WRITE FINAL TrDataLen BLOCK")
|
||||
if (Block.TrDataLen === 0 && !global.IsZeroArr(Block.TreeHash)) {
|
||||
global.ToLogTrace("ERROR WRITE FINAL TrDataLen BLOCK")
|
||||
throw "ERROR WRITE";
|
||||
}
|
||||
this.OnWriteBlock(Block)
|
||||
@@ -224,28 +233,28 @@ module.exports = class CDB extends require("../code")
|
||||
WriteBodyResultDB(Block) {
|
||||
var arrTr = Block.arrContentResult;
|
||||
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 Size = arrTr.length * 6;
|
||||
var Position = Block.TrDataPos + Block.TrDataLen - 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;
|
||||
}
|
||||
var BufWrite = BufLib.GetNewBuffer(Size);
|
||||
var BufWrite = global.BufLib.GetNewBuffer(Size);
|
||||
for (var i = 0; i < arrTr.length; i++) {
|
||||
BufWrite.Write(arrTr[i], "uint")
|
||||
}
|
||||
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
||||
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 true;
|
||||
}
|
||||
WriteBodyDB(Block) {
|
||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
||||
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
||||
var FD = FileItem.fd;
|
||||
var Position = FileItem.size;
|
||||
Block.TrDataPos = Position
|
||||
@@ -264,7 +273,7 @@ module.exports = class CDB extends require("../code")
|
||||
}
|
||||
Block.VersionBody = 1
|
||||
TrDataLen += arrTr.length * 6
|
||||
var BufWrite = BufLib.GetNewBuffer(TrDataLen);
|
||||
var BufWrite = global.BufLib.GetNewBuffer(TrDataLen);
|
||||
BufWrite.Write(arrTr.length, "uint16")
|
||||
BufWrite.Write(Block.VersionBody, "uint16")
|
||||
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);
|
||||
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;
|
||||
}
|
||||
FileItem.size += TrDataLen
|
||||
@@ -281,9 +290,9 @@ module.exports = class CDB extends require("../code")
|
||||
Block.TrDataLen = TrDataLen
|
||||
return true;
|
||||
}
|
||||
WriteBlockHeaderDB(Block, bPreSave) {
|
||||
WriteBlockHeaderDB(Block, bPreSave?) {
|
||||
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"))
|
||||
return false;
|
||||
this.WriteBlockHeader100(Block)
|
||||
@@ -291,17 +300,17 @@ module.exports = class CDB extends require("../code")
|
||||
this.BlockNumDB = Block.BlockNum - 1
|
||||
var PrevBlock = this.ReadBlockHeaderDB(Block.BlockNum - 1);
|
||||
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";
|
||||
return false;
|
||||
}
|
||||
Block.SumHash = shaarr2(PrevBlock.SumHash, Block.Hash)
|
||||
Block.SumPow = PrevBlock.SumPow + GetPowPower(Block.PowHash)
|
||||
Block.SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash)
|
||||
Block.SumPow = PrevBlock.SumPow + global.GetPowPower(Block.PowHash)
|
||||
}
|
||||
if (global.DB_VERSION === 2) {
|
||||
return this.WriteBlockHeaderToFile2(Block);
|
||||
}
|
||||
var BufWrite = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE);
|
||||
var BufWrite = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE);
|
||||
this.BlockHeaderToBuf(BufWrite, Block)
|
||||
var Res = this.WriteBufHeaderToFile1(BufWrite, Block.BlockNum);
|
||||
return Res;
|
||||
@@ -311,8 +320,8 @@ module.exports = class CDB extends require("../code")
|
||||
var BlockNum = Math.trunc(Block.BlockNum);
|
||||
this.ClearBufMap()
|
||||
Block.VersionDB = global.DB_VERSION
|
||||
BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader)
|
||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1)
|
||||
BufWrite = global.BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader)
|
||||
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1)
|
||||
if (!Block.FilePos) {
|
||||
if (!FileItem.size)
|
||||
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)
|
||||
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;
|
||||
}
|
||||
if (Block.FilePos >= FileItem.size) {
|
||||
FileItem.size = Block.FilePos + BufWrite.length
|
||||
}
|
||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
||||
var Position = BlockNum * BLOCK_HEADER_SIZE2;
|
||||
BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_HEADER_VERSION2, BLOCK_HEADER_SIZE2, WorkStructHeader2)
|
||||
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
||||
var Position = BlockNum * global.BLOCK_HEADER_SIZE2;
|
||||
BufWrite = global.BufLib.GetBufferFromObject(Block, FORMAT_HEADER_VERSION2, global.BLOCK_HEADER_SIZE2, WorkStructHeader2)
|
||||
written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position)
|
||||
if (Position >= FileItem.size) {
|
||||
FileItem.size = Position + 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;
|
||||
}
|
||||
else {
|
||||
@@ -344,14 +353,14 @@ module.exports = class CDB extends require("../code")
|
||||
WriteBufHeaderToFile1(BufWrite, BlockNum) {
|
||||
BlockNum = Math.trunc(BlockNum)
|
||||
this.ClearBufMap()
|
||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
|
||||
var Position = BlockNum * BLOCK_HEADER_SIZE;
|
||||
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
|
||||
var Position = BlockNum * global.BLOCK_HEADER_SIZE;
|
||||
var written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position);
|
||||
if (Position >= FileItem.size) {
|
||||
FileItem.size = Position + 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;
|
||||
}
|
||||
else {
|
||||
@@ -375,10 +384,10 @@ module.exports = class CDB extends require("../code")
|
||||
}
|
||||
else
|
||||
if (Num > 1) {
|
||||
ToLog("NOT FIND PEVHASH100 BlockNum=" + Block.BlockNum, 2)
|
||||
global.ToLog("NOT FIND PEVHASH100 BlockNum=" + Block.BlockNum, 2)
|
||||
return;
|
||||
}
|
||||
Hash100 = sha3arr2(PrevHash100, Block.Hash)
|
||||
Hash100 = global.sha3arr2(PrevHash100, 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;
|
||||
}
|
||||
else {
|
||||
if (Block && !IsZeroArr(Block.TreeHash)) {
|
||||
ToLogTrace("ERROR arrContent on BlockNum=" + Num)
|
||||
if (Block && !global.IsZeroArr(Block.TreeHash)) {
|
||||
global.ToLogTrace("ERROR arrContent on BlockNum=" + Num)
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
return Block;
|
||||
}
|
||||
ReadBlockBodyDB(Block) {
|
||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY);
|
||||
if (Block.TrDataLen > MAX_BLOCK_SIZE * 2) {
|
||||
ToLogTrace("Error value TrDataLen, BlockNum=" + Block.BlockNum)
|
||||
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY);
|
||||
if (Block.TrDataLen > global.MAX_BLOCK_SIZE * 2) {
|
||||
global.ToLogTrace("Error value TrDataLen, BlockNum=" + Block.BlockNum)
|
||||
return false;
|
||||
}
|
||||
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);
|
||||
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;
|
||||
}
|
||||
Block.arrContent = []
|
||||
Block.arrContentResult = []
|
||||
var TrCount = 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++) {
|
||||
var body = BufRead.Read("tr");
|
||||
if (!body)
|
||||
@@ -448,9 +457,9 @@ module.exports = class CDB extends require("../code")
|
||||
}
|
||||
BlockNum = Math.trunc(BlockNum)
|
||||
var Block, BufRead, FileItem, bytesRead, Position;
|
||||
BufRead = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE)
|
||||
Position = BlockNum * BLOCK_HEADER_SIZE
|
||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER);
|
||||
BufRead = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE)
|
||||
Position = BlockNum * global.BLOCK_HEADER_SIZE
|
||||
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER);
|
||||
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
||||
if (bytesRead !== BufRead.length)
|
||||
return undefined;
|
||||
@@ -467,21 +476,21 @@ module.exports = class CDB extends require("../code")
|
||||
return undefined;
|
||||
}
|
||||
BlockNum = Math.trunc(BlockNum)
|
||||
Position = BlockNum * BLOCK_HEADER_SIZE2
|
||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
||||
BufRead = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE2)
|
||||
Position = BlockNum * global.BLOCK_HEADER_SIZE2
|
||||
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
||||
BufRead = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE2)
|
||||
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
||||
if (bytesRead !== BufRead.length)
|
||||
return undefined;
|
||||
Block = BufLib.GetObjectFromBuffer(BufRead, FORMAT_HEADER_VERSION2, WorkStructHeader2)
|
||||
Block = global.BufLib.GetObjectFromBuffer(BufRead, FORMAT_HEADER_VERSION2, WorkStructHeader2)
|
||||
if (!Block.FilePos) {
|
||||
return undefined;
|
||||
}
|
||||
Position = Block.FilePos
|
||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY)
|
||||
BufRead = BufLib.GetNewBuffer(200)
|
||||
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY)
|
||||
BufRead = global.BufLib.GetNewBuffer(200)
|
||||
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) {
|
||||
throw ("ERROR Block.VersionDB");
|
||||
return undefined;
|
||||
@@ -516,7 +525,7 @@ module.exports = class CDB extends require("../code")
|
||||
this.UseTruncateBlockDB = undefined
|
||||
var Block = this.ReadBlockDB(LastBlockNum);
|
||||
if (!Block) {
|
||||
ToLog("************ ERROR TruncateBlockDB - not found block=" + LastBlockNum, 2)
|
||||
global.ToLog("************ ERROR TruncateBlockDB - not found block=" + LastBlockNum, 2)
|
||||
return;
|
||||
}
|
||||
this.WriteBlockDB(Block)
|
||||
@@ -524,12 +533,12 @@ module.exports = class CDB extends require("../code")
|
||||
TruncateBlockDBInner(LastBlock) {
|
||||
var FItem1, size;
|
||||
if (global.DB_VERSION === 2) {
|
||||
FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
||||
size = (LastBlock.BlockNum + 1) * BLOCK_HEADER_SIZE2
|
||||
FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
||||
size = (LastBlock.BlockNum + 1) * global.BLOCK_HEADER_SIZE2
|
||||
}
|
||||
else {
|
||||
FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1)
|
||||
size = (LastBlock.BlockNum + 1) * BLOCK_HEADER_SIZE
|
||||
FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1)
|
||||
size = (LastBlock.BlockNum + 1) * global.BLOCK_HEADER_SIZE
|
||||
}
|
||||
if (size < 0)
|
||||
size = 0
|
||||
@@ -543,13 +552,13 @@ module.exports = class CDB extends require("../code")
|
||||
ClearDataBase() {
|
||||
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC)
|
||||
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
|
||||
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
|
||||
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
|
||||
fs.ftruncateSync(FItem2.fd, FItem2.size)
|
||||
this.DBHeader100.Truncate(- 1)
|
||||
@@ -567,13 +576,13 @@ module.exports = class CDB extends require("../code")
|
||||
Close() {
|
||||
this.ClearBufMap()
|
||||
this.ReadStateTX()
|
||||
BlockDB.CloseDBFile(FILE_NAME_HEADER)
|
||||
BlockDB.CloseDBFile(FILE_NAME_HEADER2)
|
||||
BlockDB.CloseDBFile(FILE_NAME_BODY)
|
||||
global.BlockDB.CloseDBFile(FILE_NAME_HEADER)
|
||||
global.BlockDB.CloseDBFile(FILE_NAME_HEADER2)
|
||||
global.BlockDB.CloseDBFile(FILE_NAME_BODY)
|
||||
this.DBHeader100.Close()
|
||||
}
|
||||
RewriteAllTransactions() {
|
||||
if (TX_PROCESS.Worker) {
|
||||
if (global.TX_PROCESS.Worker) {
|
||||
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC) {
|
||||
global.TX_PROCESS.RunRPC("RewriteAllTransactions", {})
|
||||
return 1;
|
||||
@@ -592,10 +601,10 @@ module.exports = class CDB extends require("../code")
|
||||
BufWrite.Write(Block.Reserv500, "uint")
|
||||
BufWrite.Write(Block.TrDataPos, "uint")
|
||||
BufWrite.Write(Block.TrDataLen, "uint32")
|
||||
BufWrite.len = len + BLOCK_HEADER_SIZE
|
||||
BufWrite.len = len + global.BLOCK_HEADER_SIZE
|
||||
}
|
||||
BufToBlockHeader(BufRead, Num) {
|
||||
var Block = {};
|
||||
var Block: any = {};
|
||||
var len = BufRead.len;
|
||||
Block.TreeHash = 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.TrDataLen = BufRead.Read("uint32")
|
||||
Block.TrCount = 0
|
||||
BufRead.len = len + BLOCK_HEADER_SIZE
|
||||
BufRead.len = len + global.BLOCK_HEADER_SIZE
|
||||
return this.PrepareBlockFields(Block, Num);
|
||||
}
|
||||
PrepareBlockFields(Block, Num) {
|
||||
Block.AddInfo = AddInfoBlock.bind(Block)
|
||||
Block.AddInfo = global.AddInfoBlock.bind(Block)
|
||||
Block.Info = ""
|
||||
Block.BlockNum = Num
|
||||
Block.SeqHash = this.GetSeqHash(Block.BlockNum, Block.PrevHash, Block.TreeHash)
|
||||
if (Block.BlockNum >= global.BLOCK_PROCESSING_LENGTH2) {
|
||||
CalcHashBlockFromSeqAddr(Block)
|
||||
global.CalcHashBlockFromSeqAddr(Block)
|
||||
}
|
||||
else {
|
||||
Block.Hash = this.GetHashGenesis(Block.BlockNum)
|
||||
Block.PowHash = Block.Hash
|
||||
}
|
||||
Block.Power = GetPowPower(Block.PowHash)
|
||||
if (IsZeroArr(Block.Hash))
|
||||
Block.Power = global.GetPowPower(Block.PowHash)
|
||||
if (global.IsZeroArr(Block.Hash))
|
||||
return undefined;
|
||||
return Block;
|
||||
}
|
||||
@@ -640,7 +649,7 @@ module.exports = class CDB extends require("../code")
|
||||
break;
|
||||
Block.Num = Block.BlockNum
|
||||
if (Block.AddrHash) {
|
||||
Block.Miner = ReadUintFromArr(Block.AddrHash, 0)
|
||||
Block.Miner = global.ReadUintFromArr(Block.AddrHash, 0)
|
||||
if (Block.BlockNum < 16 || Block.Miner > MaxAccount)
|
||||
Block.Miner = 0
|
||||
if (bMinerName && Block.Miner) {
|
||||
@@ -650,7 +659,7 @@ module.exports = class CDB extends require("../code")
|
||||
else
|
||||
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.Hash2 = Value.Hash2
|
||||
}
|
||||
@@ -659,14 +668,14 @@ module.exports = class CDB extends require("../code")
|
||||
var Bytes = Block.TrDataLen;
|
||||
var Pow = Block.Power;
|
||||
var Miner = Block.Miner;
|
||||
var Date = DateFromBlock(Block.BlockNum);
|
||||
var Date = global.DateFromBlock(Block.BlockNum);
|
||||
try {
|
||||
if (!eval(Filter))
|
||||
continue;
|
||||
}
|
||||
catch (e) {
|
||||
if (!WasError)
|
||||
ToLog(e)
|
||||
global.ToLog(e)
|
||||
WasError = 1
|
||||
}
|
||||
}
|
||||
@@ -686,7 +695,7 @@ module.exports = class CDB extends require("../code")
|
||||
continue;
|
||||
if (num >= Block.arrContent.length)
|
||||
break;
|
||||
var Tr = { body: Block.arrContent[num] };
|
||||
var Tr: any = { body: Block.arrContent[num] };
|
||||
this.CheckCreateTransactionObject(Tr, 1)
|
||||
Tr.Num = num
|
||||
Tr.Type = Tr.body[0]
|
||||
@@ -694,7 +703,7 @@ module.exports = class CDB extends require("../code")
|
||||
Tr.Body = []
|
||||
for (var j = 0; j < Tr.body.length; j++)
|
||||
Tr.Body[j] = Tr.body[j]
|
||||
var App = DAppByType[Tr.Type];
|
||||
var App = global.DAppByType[Tr.Type];
|
||||
if (App) {
|
||||
Tr.Script = App.GetScriptTransaction(Tr.body)
|
||||
if (BlockNum >= this.BlockNumDBMin)
|
||||
@@ -722,7 +731,7 @@ module.exports = class CDB extends require("../code")
|
||||
return arr;
|
||||
}
|
||||
ClearStat() {
|
||||
var MAX_ARR_PERIOD = MAX_STAT_PERIOD * 2 + 10;
|
||||
var MAX_ARR_PERIOD = global.MAX_STAT_PERIOD * 2 + 10;
|
||||
this.StatMap = {
|
||||
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) {
|
||||
var Block = this.ReadBlockHeaderDB(num);
|
||||
if (Block) {
|
||||
Power = GetPowPower(Block.PowHash)
|
||||
var Miner = ReadUintFromArr(Block.AddrHash, 0);
|
||||
var Nonce = ReadUintFromArr(Block.AddrHash, 6);
|
||||
Power = global.GetPowPower(Block.PowHash)
|
||||
var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||
Nonce = global.ReadUintFromArr(Block.AddrHash, 6);
|
||||
if (Param.Miner < 0) {
|
||||
if (Param.Adviser) {
|
||||
var Adviser = global.DApps.Accounts.GetAdviserByMiner(Map, Miner);
|
||||
@@ -794,9 +803,9 @@ module.exports = class CDB extends require("../code")
|
||||
var StepTime = 1;
|
||||
while (ArrList.length >= MaxSizeArr) {
|
||||
if (Param.bNonce)
|
||||
ArrList = ResizeArrMax(ArrList)
|
||||
ArrList = global.ResizeArrMax(ArrList)
|
||||
else
|
||||
ArrList = ResizeArrAvg(ArrList)
|
||||
ArrList = global.ResizeArrAvg(ArrList)
|
||||
StepTime = StepTime * 2
|
||||
}
|
||||
return { ArrList: ArrList, AvgValue: AvgValue, steptime: StepTime };
|
||||
@@ -804,7 +813,7 @@ module.exports = class CDB extends require("../code")
|
||||
GetStatBlockchain(name, MinLength) {
|
||||
if (!MinLength)
|
||||
return [];
|
||||
var MAX_ARR_PERIOD = MAX_STAT_PERIOD * 2 + 10;
|
||||
var MAX_ARR_PERIOD = global.MAX_STAT_PERIOD * 2 + 10;
|
||||
if (!this.StatMap) {
|
||||
this.ClearStat()
|
||||
}
|
||||
@@ -835,9 +844,9 @@ module.exports = class CDB extends require("../code")
|
||||
if (num <= MaxNumBlockDB) {
|
||||
var Block = this.ReadBlockHeaderDB(num);
|
||||
if (Block) {
|
||||
Power = GetPowPower(Block.PowHash)
|
||||
var Miner = ReadUintFromArr(Block.AddrHash, 0);
|
||||
if (Miner === GENERATE_BLOCK_ACCOUNT) {
|
||||
Power = global.GetPowPower(Block.PowHash)
|
||||
var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||
if (Miner === global.GENERATE_BLOCK_ACCOUNT) {
|
||||
PowerMy = Power
|
||||
}
|
||||
}
|
||||
@@ -860,7 +869,7 @@ module.exports = class CDB extends require("../code")
|
||||
this.StatMap["POWER_BLOCKCHAIN"] = arr
|
||||
this.StatMap["POWER_MY_WIN"] = arrmy
|
||||
}
|
||||
var arr = this.StatMap[name];
|
||||
arr = this.StatMap[name];
|
||||
if (!arr)
|
||||
arr = []
|
||||
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];
|
||||
}
|
||||
GetSeqHash(BlockNum, PrevHash, TreeHash) {
|
||||
var arr = [GetArrFromValue(BlockNum), PrevHash, TreeHash];
|
||||
var SeqHash = CalcHashFromArray(arr, true);
|
||||
var arr = [global.GetArrFromValue(BlockNum), PrevHash, TreeHash];
|
||||
var SeqHash = global.CalcHashFromArray(arr, true);
|
||||
return SeqHash;
|
||||
}
|
||||
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];
|
||||
for (var i = 0; i < global.TR_TICKET_HASH_LENGTH; 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.power = GetPowPower(Tr.HashPow)
|
||||
Tr.power = global.GetPowPower(Tr.HashPow)
|
||||
Tr.TimePow = Tr.power
|
||||
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) {
|
||||
var Body = Tr.body;
|
||||
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)
|
||||
Tr.HASH = global.sha3(Body)
|
||||
else
|
||||
Tr.HASH = global.shaarr(Body)
|
||||
Tr.HashTicket = Tr.HASH.slice(0, global.TR_TICKET_HASH_LENGTH)
|
||||
this.CheckCreateTicketObject(Tr, Tr.num, SetTxID)
|
||||
Tr.Prioritet = MAX_LENGTH_SENDER_MAP
|
||||
Tr.Prioritet = global.MAX_LENGTH_SENDER_MAP
|
||||
if (!NotPrioritet && this.GetSenderPrioritet) {
|
||||
var App = DAppByType[Body[0]];
|
||||
var App = global.DAppByType[Body[0]];
|
||||
if (App) {
|
||||
Tr.SenderNum = App.GetSenderNum(Tr.num, Body)
|
||||
if (Tr.SenderNum && Tr.SenderNum > 0) {
|
||||
@@ -919,7 +928,7 @@ module.exports = class CDB extends require("../code")
|
||||
}
|
||||
BlockChainToBuf(WriteNum, StartNum, EndBlockNum) {
|
||||
if (StartNum === undefined)
|
||||
return BufLib.GetNewBuffer(10);
|
||||
return global.BufLib.GetNewBuffer(10);
|
||||
var GetLength = EndBlockNum - StartNum + 1;
|
||||
var arr = [];
|
||||
var arr0 = this.PrevBlockChainArr;
|
||||
@@ -927,7 +936,7 @@ module.exports = class CDB extends require("../code")
|
||||
var Block = arr0[arr0.length - 1];
|
||||
if (Block.BlockNum >= StartNum && Block.BlockNum <= EndBlockNum) {
|
||||
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
|
||||
}
|
||||
else {
|
||||
@@ -960,11 +969,11 @@ module.exports = class CDB extends require("../code")
|
||||
var CountSend = arr.length - global.BLOCK_PROCESSING_LENGTH2;
|
||||
var BufWrite;
|
||||
if (CountSend <= 0) {
|
||||
BufWrite = BufLib.GetNewBuffer(10)
|
||||
BufWrite = global.BufLib.GetNewBuffer(10)
|
||||
}
|
||||
else {
|
||||
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(CountSend, "uint32")
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
@@ -993,8 +1002,8 @@ function AddInfo(Block, Str, BlockNumStart) {
|
||||
Block.Info = Str;
|
||||
else
|
||||
if (Block.Info.length < 2000) {
|
||||
var timesend = "" + SERVER.CurrentBlockNum - BlockNumStart;
|
||||
var now = GetCurrentTime();
|
||||
var timesend: any = "" as any + global.SERVER.CurrentBlockNum - BlockNumStart;
|
||||
var now = global.GetCurrentTime();
|
||||
timesend += ".[" + now.getSeconds().toStringZ(2) + "." + now.getMilliseconds().toStringZ(3) + "]";
|
||||
Str = timesend + ": " + Str;
|
||||
Block.Info += "\n" + Str;
|
||||
@@ -1003,19 +1012,19 @@ function AddInfo(Block, Str, BlockNumStart) {
|
||||
global.AddInfoChain = function(Str) {
|
||||
if (!global.STAT_MODE)
|
||||
return;
|
||||
if (this.BlockNumStart > GetCurrentBlockNumByTime() - HISTORY_BLOCK_COUNT)
|
||||
if (this.BlockNumStart > global.GetCurrentBlockNumByTime() - global.HISTORY_BLOCK_COUNT)
|
||||
AddInfo(this, Str, this.BlockNumStart);
|
||||
};
|
||||
global.AddInfoBlock = function(Block, Str) {
|
||||
if (!global.STAT_MODE)
|
||||
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);
|
||||
};
|
||||
global.GetNodeStrPort = function(Node) {
|
||||
if (!Node)
|
||||
return "";
|
||||
if (LOCAL_RUN)
|
||||
if (global.LOCAL_RUN)
|
||||
return "" + Node.port;
|
||||
else {
|
||||
if (!Node.ip)
|
||||
|
||||
@@ -21,8 +21,8 @@ module.exports = class {
|
||||
this.DBMap = {}
|
||||
}
|
||||
CheckPathDB() {
|
||||
var Path = global.global.GetDataPath("DB");
|
||||
global.global.CheckCreateDir(Path)
|
||||
var Path = global.GetDataPath("DB");
|
||||
global.CheckCreateDir(Path)
|
||||
}
|
||||
CloseDBFile(name, bdelete) {
|
||||
this.LastHash = undefined
|
||||
@@ -34,7 +34,7 @@ module.exports = class {
|
||||
fs.close(Item.fd, function(err) {
|
||||
if (!err) {
|
||||
if (bDelete) {
|
||||
var fname = global.global.GetDataPath("DB/" + Name);
|
||||
var fname = global.GetDataPath("DB/" + Name);
|
||||
fs.unlink(fname, function(err) {
|
||||
if (err)
|
||||
global.ToLog(err)
|
||||
@@ -63,7 +63,7 @@ module.exports = class {
|
||||
this.CheckPathDB()
|
||||
this.WasCheckPathDB = true
|
||||
}
|
||||
var fname = global.global.GetDataPath("DB/" + name);
|
||||
var fname = global.GetDataPath("DB/" + name);
|
||||
if (!fs.existsSync(fname)) {
|
||||
if (bExist) {
|
||||
this.DBMap[name] = null
|
||||
@@ -90,7 +90,7 @@ function CheckStartOneProcess(Name) {
|
||||
if (global.READ_ONLY_DB || MapCheckProcess[Name])
|
||||
return;
|
||||
MapCheckProcess[Name] = 1;
|
||||
var path = global.global.GetDataPath("DB/" + Name);
|
||||
var path = global.GetDataPath("DB/" + Name);
|
||||
if (fs.existsSync(path)) {
|
||||
fs.unlinkSync(path);
|
||||
}
|
||||
|
||||
@@ -41,15 +41,7 @@ ContenTypeMap[".js"] = "application/javascript";
|
||||
ContenTypeMap["html"] = "text/html";
|
||||
ContenTypeMap["psd"] = "application/octet-stream";
|
||||
global.HTTPCaller = {};
|
||||
|
||||
let {
|
||||
ToLog,
|
||||
ToError,
|
||||
DApps,
|
||||
SERVER,
|
||||
MAX_TRANSACTION_COUNT
|
||||
} = global
|
||||
|
||||
let HTTPCaller = global.HTTPCaller
|
||||
function DoCommand(response, Type, Path, params, remoteAddress) {
|
||||
var F = global.HTTPCaller[params[0]];
|
||||
if (F) {
|
||||
@@ -188,7 +180,7 @@ function DappClientCodeFile(response, StrNum) {
|
||||
response.end();
|
||||
};
|
||||
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 (global.DEV_MODE && Params.DebugPath) {
|
||||
global.ToLog("Load: " + Params.DebugPath);
|
||||
@@ -203,7 +195,7 @@ global.SendBlockFile = SendBlockFile;
|
||||
function SendBlockFile(response, BlockNum, TrNum) {
|
||||
BlockNum = parseInt(BlockNum);
|
||||
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);
|
||||
if (Block && Block.arrContent) {
|
||||
SendToResponceFile(response, Block, TrNum);
|
||||
@@ -211,7 +203,7 @@ function SendBlockFile(response, BlockNum, TrNum) {
|
||||
}
|
||||
else
|
||||
if (!Block || !Block.TrDataPos) {
|
||||
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||
global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||
if (Err) {
|
||||
SendToResponce404(response);
|
||||
}
|
||||
@@ -247,11 +239,11 @@ function SendToResponce404(response) {
|
||||
response.end();
|
||||
};
|
||||
HTTPCaller.DappBlockFile = function(Params, response) {
|
||||
Params.BlockNum = ParseNum(Params.BlockNum);
|
||||
Params.TrNum = ParseNum(Params.TrNum);
|
||||
Params.BlockNum = global.ParseNum(Params.BlockNum);
|
||||
Params.TrNum = global.ParseNum(Params.TrNum);
|
||||
if (!Params.TrNum)
|
||||
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);
|
||||
if (Block && Block.arrContent) {
|
||||
SendToResponceDappFile(response, Block, Params.TrNum);
|
||||
@@ -259,7 +251,7 @@ HTTPCaller.DappBlockFile = function(Params, response) {
|
||||
}
|
||||
else
|
||||
if (!Block || !Block.TrDataPos) {
|
||||
LoadBlockFromNetwork(Params, function(Err, Block) {
|
||||
global.LoadBlockFromNetwork(Params, function(Err, Block) {
|
||||
if (Err) {
|
||||
SendToResponceResult0(response);
|
||||
}
|
||||
@@ -274,7 +266,7 @@ HTTPCaller.DappBlockFile = function(Params, response) {
|
||||
};
|
||||
|
||||
function SendToResponceDappFile(response, Block, TrNum) {
|
||||
var Result = { result: 0 };
|
||||
var Result: any = { result: 0 };
|
||||
var Body = Block.arrContent[TrNum];
|
||||
if (Body) {
|
||||
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') };
|
||||
}
|
||||
else {
|
||||
var App = DAppByType[Type];
|
||||
var App = global.DAppByType[Type];
|
||||
if (App) {
|
||||
Body = JSON.parse(App.GetScriptTransaction(Body));
|
||||
}
|
||||
@@ -303,7 +295,7 @@ HTTPCaller.DappStaticCall = function(Params, response) {
|
||||
global.DApps.Accounts.BeginBlock();
|
||||
global.DApps.Accounts.BeginTransaction();
|
||||
global.TickCounter = 100000;
|
||||
var Account = global.DApps.Accounts.ReadStateTR(ParseNum(Params.Account));
|
||||
var Account = global.DApps.Accounts.ReadStateTR(global.ParseNum(Params.Account));
|
||||
if (!Account) {
|
||||
return { result: 0, RetValue: "Error account Num: " + Params.Account };
|
||||
}
|
||||
@@ -324,7 +316,7 @@ HTTPCaller.DappStaticCall = function(Params, response) {
|
||||
return null;
|
||||
};
|
||||
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)
|
||||
global.TX_PROCESS.Worker.send({ cmd: "SetSmartEvent", Smart: SmartNum });
|
||||
var Account;
|
||||
@@ -349,15 +341,15 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
||||
var EArr = GetEventArray(SmartNum, Context);
|
||||
var WLData = HTTPCaller.DappWalletList(Params);
|
||||
var ArrLog = [];
|
||||
for (var i = 0; i < ArrLogClient.length; i++) {
|
||||
var Item = ArrLogClient[i];
|
||||
for (var i = 0; i < global.ArrLogClient.length; i++) {
|
||||
var Item = global.ArrLogClient[i];
|
||||
if (!Item.final)
|
||||
continue;
|
||||
ArrLog.push(Item);
|
||||
}
|
||||
var Ret = {
|
||||
result: 1, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, MIN_POWER_POW_TR: MIN_POWER_POW_TR, FIRST_TIME_BLOCK: FIRST_TIME_BLOCK,
|
||||
CONSENSUS_PERIOD_TIME: CONSENSUS_PERIOD_TIME, PRICE_DAO: PRICE_DAO(SERVER.BlockNumDB), NEW_SIGN_TIME: NEW_SIGN_TIME, Smart: Smart,
|
||||
var Ret: any = {
|
||||
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: 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,
|
||||
};
|
||||
if (global.WALLET) {
|
||||
@@ -367,7 +359,7 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
||||
}
|
||||
if (!ObjectOnly) {
|
||||
Ret.CurTime = Date.now();
|
||||
Ret.CurBlockNum = GetCurrentBlockNumByTime();
|
||||
Ret.CurBlockNum = global.GetCurrentBlockNumByTime();
|
||||
Ret.BlockNumDB = global.SERVER.BlockNumDB;
|
||||
Ret.MaxAccID = global.DApps.Accounts.GetMaxAccount();
|
||||
Ret.MaxDappsID = global.DApps.Smart.GetMaxNum();
|
||||
@@ -375,14 +367,14 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
||||
return Ret;
|
||||
};
|
||||
HTTPCaller.DappWalletList = function(Params) {
|
||||
var arr0 = global.DApps.Accounts.GetWalletAccountsByMap(WALLET.AccountMap);
|
||||
var arr0 = global.DApps.Accounts.GetWalletAccountsByMap(global.WALLET.AccountMap);
|
||||
var arr = [];
|
||||
for (var i = 0; i < arr0.length; i++) {
|
||||
if (Params.AllAccounts || arr0[i].Value.Smart === Params.Smart) {
|
||||
arr.push(arr0[i]);
|
||||
}
|
||||
}
|
||||
var Ret = { result: 1, arr: arr, };
|
||||
var Ret: any = { result: 1, arr: arr, };
|
||||
return Ret;
|
||||
};
|
||||
HTTPCaller.DappAccountList = function(Params) {
|
||||
@@ -402,13 +394,13 @@ HTTPCaller.DappTransactionList = function(Params, response) {
|
||||
Params.Param3 = Params.BlockNum;
|
||||
return HTTPCaller.GetTransactionAll(Params, response);
|
||||
};
|
||||
var sessionid = GetHexFromAddres(crypto.randomBytes(20));
|
||||
var sessionid = global.GetHexFromAddres(crypto.randomBytes(20));
|
||||
HTTPCaller.RestartNode = function(Params) {
|
||||
global.RestartNode();
|
||||
return { result: 1 };
|
||||
};
|
||||
HTTPCaller.ToLogServer = function(Str) {
|
||||
ToLogClient(Str);
|
||||
global.ToLogClient(Str);
|
||||
return { result: 1 };
|
||||
};
|
||||
HTTPCaller.FindMyAccounts = function(Params) {
|
||||
@@ -443,11 +435,11 @@ HTTPCaller.GetBlockList = function(Params, response, bOnlyNum) {
|
||||
if (!Block) {
|
||||
CountWait++;
|
||||
WasWait = 1;
|
||||
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||
global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||
CountWait--;
|
||||
if (CountWait === 0) {
|
||||
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));
|
||||
}
|
||||
});
|
||||
@@ -466,7 +458,7 @@ HTTPCaller.GetTransactionAll = function(Params, response) {
|
||||
if (BlockNum < global.SERVER.BlockNumDBMin) {
|
||||
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||
if (!Block) {
|
||||
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||
global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||
var Result;
|
||||
if (Err) {
|
||||
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);
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var item = arr[i];
|
||||
item.BlockNum = item.Num * PERIOD_ACCOUNT_HASH;
|
||||
item.BlockNum = item.Num * global.PERIOD_ACCOUNT_HASH;
|
||||
item.Hash100 = [];
|
||||
if (item.BlockNum % 100 === 0) {
|
||||
var Data = global.SERVER.DBHeader100.Read(item.BlockNum / 100);
|
||||
@@ -527,24 +519,24 @@ HTTPCaller.GetWalletInfo = function(Params) {
|
||||
var TXBlockNum = 0;
|
||||
if (StateTX)
|
||||
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),
|
||||
CODE_VERSION: CODE_VERSION, MAX_TRANSACTION_LIMIT: 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),
|
||||
AccountMap: global.WALLET.AccountMap, ArrLog: ArrLogClient, MaxAccID: global.DApps.Accounts.GetMaxAccount(), MaxActNum: global.DApps.Accounts.GetActsMaxNum(),
|
||||
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: global.GetCurrentBlockNumByTime(), CurTime: Date.now(), IsDevelopAccount: global.IsDeveloperAccount(global.WALLET.PubKeyArr),
|
||||
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,
|
||||
INTERNET_IP_FROM_STUN: global.INTERNET_IP_FROM_STUN, HistoryMaxNum: MaxHistory, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, FIRST_TIME_BLOCK: 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)),
|
||||
NodeAddrStr: global.SERVER.addrStr, STAT_MODE: global.STAT_MODE, HTTPPort: global.HTTP_PORT_NUMBER, HTTPPassword: HTTP_PORT_PASSWORD,
|
||||
CONSTANTS: Constants, CheckPointBlockNum: CHECK_POINT.BlockNum, MiningAccount: global.GENERATE_BLOCK_ACCOUNT, CountMiningCPU: GetCountMiningCPU(),
|
||||
CountRunCPU: global.ArrMiningWrk.length, MiningPaused: global.MiningPaused, HashRate: HashRateOneSec, MIN_POWER_POW_TR: 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(),
|
||||
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: 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: global.HTTP_PORT_PASSWORD,
|
||||
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: global.MIN_POWER_POW_TR,
|
||||
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,
|
||||
};
|
||||
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
|
||||
Ret.PrivateKey = global.GetHexFromArr(WALLET.GetPrivateKey());
|
||||
Ret.PrivateKey = global.GetHexFromArr(global.WALLET.GetPrivateKey());
|
||||
Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr;
|
||||
return Ret;
|
||||
};
|
||||
@@ -553,7 +545,7 @@ HTTPCaller.TestSignLib = function() {
|
||||
global.TestSignLib();
|
||||
};
|
||||
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.PublicKey = global.WALLET.KeyPair.PubKeyStr;
|
||||
return Ret;
|
||||
@@ -589,14 +581,14 @@ HTTPCaller.GetSignFromHEX = function(Params) {
|
||||
};
|
||||
HTTPCaller.SendTransactionHex = function(Params) {
|
||||
var body = global.GetArrFromHex(Params.Hex);
|
||||
var Result = { result: 1 };
|
||||
var Result: any = { result: 1 };
|
||||
var Res = global.SERVER.AddTransactionOwn({ body: body, ToAll: 1 });
|
||||
Result.sessionid = sessionid;
|
||||
Result.text = AddTrMap[Res];
|
||||
Result.text = global.AddTrMap[Res];
|
||||
var final = false;
|
||||
if (Res <= 0 && Res !== - 3)
|
||||
final = true;
|
||||
ToLogClient("Send: " + Result.text, global.GetHexFromArr(sha3(body)), final);
|
||||
global.ToLogClient("Send: " + Result.text, global.GetHexFromArr(global.sha3(body)), final);
|
||||
return Result;
|
||||
};
|
||||
HTTPCaller.SendDirectCode = function(Params, response) {
|
||||
@@ -617,7 +609,7 @@ HTTPCaller.SendDirectCode = function(Params, response) {
|
||||
else {
|
||||
try {
|
||||
var ret = eval(Params.Code);
|
||||
Result = JSON.stringify(ret, "", 4);
|
||||
Result = JSON.stringify(ret, undefined, 4);
|
||||
}
|
||||
catch (e) {
|
||||
Result = "" + e;
|
||||
@@ -634,12 +626,12 @@ HTTPCaller.SetMining = function(MiningAccount) {
|
||||
function CheckCorrectDevKey() {
|
||||
if (global.WALLET.WalletOpen === false) {
|
||||
var StrErr = "Not open wallet";
|
||||
ToLogClient(StrErr);
|
||||
global.ToLogClient(StrErr);
|
||||
return { result: 0, text: StrErr };
|
||||
}
|
||||
if (!IsDeveloperAccount(WALLET.PubKeyArr)) {
|
||||
if (!global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
|
||||
var StrErr = "Not developer key";
|
||||
ToLogClient(StrErr);
|
||||
global.ToLogClient(StrErr);
|
||||
return { result: 0, text: StrErr };
|
||||
}
|
||||
return true;
|
||||
@@ -685,8 +677,8 @@ function SetCheckPointOnBlock(BlockNum) {
|
||||
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||
if (!Block)
|
||||
return 0;
|
||||
var SignArr = arr2(Block.Hash, GetArrFromValue(Block.BlockNum));
|
||||
var Sign = secp256k1.sign(SHA3BUF(SignArr, Block.BlockNum), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
||||
var SignArr = global.arr2(Block.Hash, global.GetArrFromValue(Block.BlockNum));
|
||||
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.SERVER.ResetNextPingAllNode();
|
||||
return 1;
|
||||
@@ -708,17 +700,17 @@ var SumCheckPow = 0;
|
||||
var CountCheckPow = 0;
|
||||
|
||||
function RunSetCheckPoint() {
|
||||
if (!SERVER.BlockNumDB)
|
||||
if (!global.SERVER.BlockNumDB)
|
||||
return;
|
||||
if (SERVER.BlockNumDB < 2100000)
|
||||
if (global.SERVER.BlockNumDB < 2100000)
|
||||
return;
|
||||
var Delta = GetCurrentBlockNumByTime() - global.SERVER.BlockNumDB;
|
||||
var Delta = global.GetCurrentBlockNumByTime() - global.SERVER.BlockNumDB;
|
||||
if (Delta > 16)
|
||||
return;
|
||||
var BlockNum = global.SERVER.BlockNumDB - global.CheckPointDelta;
|
||||
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||
if (Block) {
|
||||
var Power = GetPowPower(Block.PowHash);
|
||||
var Power = global.GetPowPower(Block.PowHash);
|
||||
if (Power < 30) {
|
||||
global.ToLog("CANNOT SET CHECK POINT Power=" + Power + " BlockNum=" + BlockNum);
|
||||
return;
|
||||
@@ -737,7 +729,7 @@ function RunSetCheckPoint() {
|
||||
}
|
||||
};
|
||||
HTTPCaller.SetNewCodeVersion = function(Data) {
|
||||
var Ret = CheckCorrectDevKey();
|
||||
var Ret: any = CheckCorrectDevKey();
|
||||
if (Ret !== true)
|
||||
return Ret;
|
||||
var Ret = global.SERVER.SetNewCodeVersion(Data, global.WALLET.KeyPair.getPrivateKey(''));
|
||||
@@ -745,17 +737,17 @@ HTTPCaller.SetNewCodeVersion = function(Data) {
|
||||
return { result: 1, text: Ret };
|
||||
};
|
||||
HTTPCaller.SetCheckNetConstant = function(Data) {
|
||||
var Ret = CheckCorrectDevKey();
|
||||
var Ret: any = CheckCorrectDevKey();
|
||||
if (Ret !== true)
|
||||
return Ret;
|
||||
if (!Data) {
|
||||
ToLogClient("Data not set");
|
||||
global.ToLogClient("Data not set");
|
||||
return { result: 0, text: "Data not set" };
|
||||
}
|
||||
Data.Num = GetCurrentBlockNumByTime();
|
||||
Data.BlockNum = GetCurrentBlockNumByTime() + 10;
|
||||
Data.Num = global.GetCurrentBlockNumByTime();
|
||||
Data.BlockNum = global.GetCurrentBlockNumByTime() + 10;
|
||||
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.ResetNextPingAllNode();
|
||||
return { result: 1, text: "Set NET_CONSTANT BlockNum=" + Data.BlockNum };
|
||||
@@ -765,11 +757,11 @@ HTTPCaller.SetCheckDeltaTime = function(Data) {
|
||||
if (Ret !== true)
|
||||
return Ret;
|
||||
if (!Data || !Data.Num) {
|
||||
ToLogClient("Num not set");
|
||||
global.ToLogClient("Num not set");
|
||||
return { result: 0 };
|
||||
}
|
||||
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.SERVER.ResetNextPingAllNode();
|
||||
return { result: 1, text: "Set check time Num=" + Data.Num };
|
||||
@@ -791,9 +783,9 @@ var StartCheckTimeNum = 0;
|
||||
function RunAutoCorrTime() {
|
||||
if (global.WALLET.WalletOpen === false)
|
||||
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 Data = { Num: GetCurrentBlockNumByTime(), bUse: 1, bAddTime: 1 };
|
||||
var Data: any = { Num: global.GetCurrentBlockNumByTime(), bUse: 1, bAddTime: 1 };
|
||||
if (AutoDelta < 0) {
|
||||
AutoDelta = - AutoDelta;
|
||||
Data.bAddTime = 0;
|
||||
@@ -802,7 +794,7 @@ function RunAutoCorrTime() {
|
||||
Data.StartBlockNum = Data.Num + 5;
|
||||
Data.EndBlockNum = Data.StartBlockNum + Math.trunc(AutoDelta / Data.DeltaTime);
|
||||
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.SERVER.ResetNextPingAllNode();
|
||||
StartCheckTimeNum = Data.EndBlockNum + 1;
|
||||
@@ -814,10 +806,10 @@ HTTPCaller.SaveConstant = function(SetObj) {
|
||||
for (var key in SetObj) {
|
||||
global[key] = SetObj[key];
|
||||
}
|
||||
SAVE_CONST(true);
|
||||
global.SAVE_CONST(true);
|
||||
global.SERVER.DO_CONSTANT();
|
||||
if (!WasUpdate && global.USE_AUTO_UPDATE && CODE_VERSION.VersionNum && global.UPDATE_CODE_VERSION_NUM < CODE_VERSION.VersionNum) {
|
||||
global.SERVER.UseCode(CODE_VERSION.VersionNum, true);
|
||||
if (!WasUpdate && global.USE_AUTO_UPDATE && global.CODE_VERSION.VersionNum && global.UPDATE_CODE_VERSION_NUM < global.CODE_VERSION.VersionNum) {
|
||||
global.SERVER.UseCode(global.CODE_VERSION.VersionNum, true);
|
||||
}
|
||||
if (SetObj.DoRestartNode)
|
||||
global.RestartNode();
|
||||
@@ -830,7 +822,7 @@ HTTPCaller.SaveConstant = function(SetObj) {
|
||||
HTTPCaller.SetHTTPParams = function(SetObj) {
|
||||
global.HTTP_PORT_NUMBER = SetObj.HTTPPort;
|
||||
global.HTTP_PORT_PASSWORD = SetObj.HTTPPassword;
|
||||
SAVE_CONST(true);
|
||||
global.SAVE_CONST(true);
|
||||
if (SetObj.DoRestartNode)
|
||||
global.RestartNode();
|
||||
return { result: 1 };
|
||||
@@ -841,17 +833,17 @@ HTTPCaller.SetNetMode = function(SetObj) {
|
||||
for (var key in SetObj) {
|
||||
global.NET_WORK_MODE[key] = SetObj[key];
|
||||
}
|
||||
if (NET_WORK_MODE) {
|
||||
global.START_IP = NET_WORK_MODE.ip;
|
||||
global.START_PORT_NUMBER = NET_WORK_MODE.port;
|
||||
if (global.NET_WORK_MODE) {
|
||||
global.START_IP = global.NET_WORK_MODE.ip;
|
||||
global.START_PORT_NUMBER = global.NET_WORK_MODE.port;
|
||||
}
|
||||
SAVE_CONST(true);
|
||||
global.SAVE_CONST(true);
|
||||
if (SetObj.DoRestartNode)
|
||||
global.RestartNode();
|
||||
return { result: 1 };
|
||||
};
|
||||
HTTPCaller.GetAccountKey = function(Num) {
|
||||
var Result = {};
|
||||
var Result: any = {};
|
||||
Result.result = 0;
|
||||
var KeyPair = global.WALLET.GetAccountKey(Num);
|
||||
if (KeyPair) {
|
||||
@@ -924,7 +916,7 @@ function GetCopyNode(Node, BlockCounts) {
|
||||
var Item = {
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
@@ -939,7 +931,7 @@ HTTPCaller.GetBlockchainStat = function(Param) {
|
||||
return Result;
|
||||
};
|
||||
HTTPCaller.GetAllCounters = function(Params, response) {
|
||||
let Result = GET_STATS();
|
||||
let Result = global.GET_STATS();
|
||||
Result.result = 1;
|
||||
Result.sessionid = sessionid;
|
||||
Result.STAT_MODE = global.STAT_MODE;
|
||||
@@ -976,9 +968,9 @@ function AddStatData(Params, Result, Prefix) {
|
||||
};
|
||||
HTTPCaller.SetStatMode = function(flag) {
|
||||
if (flag)
|
||||
StartCommonStat();
|
||||
global.StartCommonStat();
|
||||
global.STAT_MODE = flag;
|
||||
SAVE_CONST(true);
|
||||
global.SAVE_CONST(true);
|
||||
global.TX_PROCESS.RunRPC("LOAD_CONST");
|
||||
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 };
|
||||
};
|
||||
HTTPCaller.RewriteAllTransactions = function(Param) {
|
||||
RewriteAllTransactions();
|
||||
global.RewriteAllTransactions();
|
||||
return { result: 1, sessionid: sessionid };
|
||||
};
|
||||
HTTPCaller.RewriteTransactions = function(Param) {
|
||||
@@ -1006,7 +998,7 @@ HTTPCaller.TruncateBlockChain = function(Param) {
|
||||
var StartNum = global.SERVER.BlockNumDB - Param.BlockCount;
|
||||
var MinBlock = global.DApps.Accounts.GetMinBlockAct();
|
||||
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 };
|
||||
}
|
||||
global.SERVER.TruncateBlockDB(StartNum);
|
||||
@@ -1026,8 +1018,8 @@ HTTPCaller.CleanChain = function(Param) {
|
||||
return { result: 0, sessionid: sessionid };
|
||||
};
|
||||
HTTPCaller.GetArrStats = function(Keys, response) {
|
||||
var arr = GET_STATDIAGRAMS(Keys);
|
||||
let Result = { result: 1, sessionid: sessionid, arr: arr, STAT_MODE: global.STAT_MODE };
|
||||
var arr = global.GET_STATDIAGRAMS(Keys);
|
||||
let Result: any = { result: 1, sessionid: sessionid, arr: arr, STAT_MODE: global.STAT_MODE };
|
||||
if (!global.TX_PROCESS || !global.TX_PROCESS.RunRPC)
|
||||
return Result;
|
||||
var Keys2 = [];
|
||||
@@ -1051,7 +1043,7 @@ HTTPCaller.GetArrStats = function(Keys, response) {
|
||||
return null;
|
||||
};
|
||||
HTTPCaller.GetBlockChain = function(type) {
|
||||
if (!global.SERVER || !SERVER.LoadedChainList) {
|
||||
if (!global.SERVER || !global.SERVER.LoadedChainList) {
|
||||
return { result: 0 };
|
||||
}
|
||||
var MainChains = {};
|
||||
@@ -1081,13 +1073,13 @@ HTTPCaller.GetBlockChain = function(type) {
|
||||
for (var List of ArrMapMapLoaded) {
|
||||
AddMapList(arrLoadedBlocks, type, List);
|
||||
}
|
||||
var obj = {
|
||||
var obj: any = {
|
||||
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(),
|
||||
IsDevelopAccount: IsDeveloperAccount(WALLET.PubKeyArr), LoadedChainCount: global.SERVER.LoadedChainList.length, StartLoadBlockTime: global.SERVER.StartLoadBlockTime,
|
||||
LoadedBlocks: arrLoadedBlocks, BlockChain: arrBlocks, port: global.SERVER.port, DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME, memoryUsage: process.memoryUsage(),
|
||||
IsDevelopAccount: global.IsDeveloperAccount(global.WALLET.PubKeyArr), LoadedChainCount: global.SERVER.LoadedChainList.length, StartLoadBlockTime: global.SERVER.StartLoadBlockTime,
|
||||
sessionid: sessionid, result: 1
|
||||
};
|
||||
var obj2 = HTTPCaller.GetHotArray();
|
||||
var obj2: any = HTTPCaller.GetHotArray();
|
||||
obj.ArrTree = obj2.ArrTree;
|
||||
arrBlocks = [];
|
||||
arrLoadedChainList = [];
|
||||
@@ -1116,9 +1108,9 @@ HTTPCaller.GetHistoryTransactions = function(Params) {
|
||||
Item.Description = TR.Description;
|
||||
}
|
||||
}
|
||||
var Result = {
|
||||
var Result: any = {
|
||||
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;
|
||||
}
|
||||
@@ -1126,10 +1118,10 @@ HTTPCaller.GetHistoryTransactions = function(Params) {
|
||||
};
|
||||
|
||||
function GetCopyBlock(Block) {
|
||||
var Result = {
|
||||
BlockNum: Block.BlockNum, bSave: Block.bSave, TreeHash: GetHexFromAddres(Block.TreeHash), AddrHash: GetHexFromAddres(Block.AddrHash),
|
||||
PrevHash: GetHexFromAddres(Block.PrevHash), SumHash: GetHexFromAddres(Block.SumHash), SumPow: Block.SumPow, TrDataPos: Block.TrDataPos,
|
||||
TrDataLen: Block.TrDataLen, SeqHash: GetHexFromAddres(Block.SeqHash), Hash: GetHexFromAddres(Block.Hash), Power: GetPowPower(Block.PowHash),
|
||||
var Result: any = {
|
||||
BlockNum: Block.BlockNum, bSave: Block.bSave, TreeHash: global.GetHexFromAddres(Block.TreeHash), AddrHash: global.GetHexFromAddres(Block.AddrHash),
|
||||
PrevHash: global.GetHexFromAddres(Block.PrevHash), SumHash: global.GetHexFromAddres(Block.SumHash), SumPow: Block.SumPow, TrDataPos: Block.TrDataPos,
|
||||
TrDataLen: Block.TrDataLen, SeqHash: global.GetHexFromAddres(Block.SeqHash), Hash: global.GetHexFromAddres(Block.Hash), Power: global.GetPowPower(Block.PowHash),
|
||||
TrCount: Block.TrCount, arrContent: Block.arrContent,
|
||||
};
|
||||
return Result;
|
||||
@@ -1137,7 +1129,7 @@ function GetCopyBlock(Block) {
|
||||
var AddrLength = 16;
|
||||
|
||||
function GetHexFromAddresShort(Hash) {
|
||||
return GetHexFromAddres(Hash).substr(0, AddrLength);
|
||||
return global.GetHexFromAddres(Hash).substr(0, AddrLength);
|
||||
};
|
||||
|
||||
function GetHexFromStrShort(Str) {
|
||||
@@ -1162,27 +1154,27 @@ function CopyBlockDraw(Block, MainChains) {
|
||||
var MinerID = 0;
|
||||
var MinerName = "";
|
||||
if (Block.AddrHash) {
|
||||
var Num = ReadUintFromArr(Block.AddrHash, 0);
|
||||
var Num = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||
MinerID = Num;
|
||||
var Item = global.DApps.Accounts.ReadState(Num);
|
||||
if (Item && Item.Name)
|
||||
MinerName = Item.Name.substr(0, 8);
|
||||
}
|
||||
var CheckPoint = 0;
|
||||
if (Block.BlockNum === CHECK_POINT.BlockNum)
|
||||
if (Block.BlockNum === global.CHECK_POINT.BlockNum)
|
||||
CheckPoint = 1;
|
||||
var Mining;
|
||||
if (SERVER.MiningBlock === Block)
|
||||
if (global.SERVER.MiningBlock === Block)
|
||||
Mining = 1;
|
||||
else
|
||||
Mining = 0;
|
||||
GetGUID(Block);
|
||||
var Item = {
|
||||
Item = {
|
||||
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),
|
||||
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,
|
||||
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,
|
||||
};
|
||||
if (Block.chain)
|
||||
@@ -1198,11 +1190,11 @@ function CopyBlockDraw(Block, MainChains) {
|
||||
return Item;
|
||||
};
|
||||
|
||||
function CopyChainDraw(Chain, bWasRecursive, bMain) {
|
||||
function CopyChainDraw(Chain, bWasRecursive, bMain?) {
|
||||
if (!Chain)
|
||||
return 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(),
|
||||
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,
|
||||
@@ -1231,7 +1223,7 @@ function CopyChainDraw(Chain, bWasRecursive, bMain) {
|
||||
return Item;
|
||||
};
|
||||
|
||||
function AddChainList(arrLoadedChainList, LoadedChainList, bMain) {
|
||||
function AddChainList(arrLoadedChainList, LoadedChainList, bMain?) {
|
||||
for (var chain of LoadedChainList) {
|
||||
if (chain) {
|
||||
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) {
|
||||
var map = MapMapLoaded[key];
|
||||
if (map) {
|
||||
@@ -1278,8 +1270,7 @@ function SendWebFile(response, name?, StrCookie?, bParsing?) {
|
||||
if (StrCookie)
|
||||
Headers['Set-Cookie'] = StrCookie;
|
||||
response.writeHead(200, Headers);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (StrContentType === "application/font-woff") {
|
||||
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 });
|
||||
}
|
||||
if (bParsing && StrContentType === "text/html") {
|
||||
var data = GetFileHTMLWithParsing(Path);
|
||||
data = GetFileHTMLWithParsing(Path);
|
||||
response.end(data);
|
||||
return;
|
||||
}
|
||||
@@ -1322,11 +1313,13 @@ function ParseTag(Str, TagName, bEdit) {
|
||||
if (index >= 0) {
|
||||
var index2 = Str.indexOf("}}", index + 3 + TagName.length);
|
||||
if (index2 < 0) {
|
||||
//@ts-ignore
|
||||
global.ToLog("Error teg " + TagName + " in " + Path);
|
||||
break;
|
||||
}
|
||||
var Delta = index2 - index;
|
||||
if (Delta > 210) {
|
||||
//@ts-ignore
|
||||
global.ToLog("Error length (more 200) teg File in " + Path);
|
||||
break;
|
||||
}
|
||||
@@ -1383,7 +1376,7 @@ function SaveFileSimple(Path, Str) {
|
||||
global.SendHTMLMap = {};
|
||||
var Key = "GetFileSimple-" + Path;
|
||||
global.SendHTMLMap[Key] = Str;
|
||||
SaveToFile(Path, Str);
|
||||
global.SaveToFile(Path, Str);
|
||||
};
|
||||
global.SendHTMLMap = {};
|
||||
global.SendWebFile = SendWebFile;
|
||||
@@ -1394,7 +1387,7 @@ global.SaveFileSimple = SaveFileSimple;
|
||||
|
||||
function GetStrTime(now) {
|
||||
if (!now)
|
||||
now = GetCurrentTime(0);
|
||||
now = global.GetCurrentTime(0);
|
||||
var Str = "" + now.getHours().toStringZ(2);
|
||||
Str = Str + ":" + now.getMinutes().toStringZ(2);
|
||||
Str = Str + ":" + now.getSeconds().toStringZ(2);
|
||||
@@ -1499,7 +1492,7 @@ if (global.HTTP_PORT_NUMBER) {
|
||||
global.ToLog("Path: " + Path, 0);
|
||||
}
|
||||
if (CheckPassword && global.HTTP_PORT_PASSWORD) {
|
||||
var StrPort = "";
|
||||
var StrPort: any = "";
|
||||
if (global.HTTP_PORT_NUMBER !== 80)
|
||||
StrPort = global.HTTP_PORT_NUMBER;
|
||||
var cookies = parseCookies(request.headers.cookie);
|
||||
@@ -1517,7 +1510,7 @@ if (global.HTTP_PORT_NUMBER) {
|
||||
if (!nonce)
|
||||
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) {
|
||||
ClientTokenMap[cookies_token] = 1;
|
||||
}
|
||||
@@ -1563,9 +1556,9 @@ if (global.HTTP_PORT_NUMBER) {
|
||||
else {
|
||||
DoCommand(response, Type, Path, params, remoteAddress);
|
||||
}
|
||||
}).listen(port, LISTEN_IP, function() {
|
||||
}).listen(port, global.LISTEN_IP, function() {
|
||||
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) {
|
||||
global.ToError("H##3");
|
||||
@@ -1654,7 +1647,7 @@ function GetEventArray(SmartNum, Context) {
|
||||
return ArrRet;
|
||||
};
|
||||
HTTPCaller.GetHashRate = function(ArrParams) {
|
||||
var CurBlockNum = GetCurrentBlockNumByTime();
|
||||
var CurBlockNum = global.GetCurrentBlockNumByTime();
|
||||
var ResArr = [];
|
||||
for (var i = 0; i < ArrParams.length; i++) {
|
||||
var Item = ArrParams[i];
|
||||
@@ -1693,7 +1686,7 @@ HTTPCaller.GetHashRate = function(ArrParams) {
|
||||
var Block = global.SERVER.ReadBlockHeaderDB(Num + d);
|
||||
if (Block) {
|
||||
CountSum++;
|
||||
Sum += GetPowPower(Block.PowHash);
|
||||
Sum += global.GetPowPower(Block.PowHash);
|
||||
}
|
||||
}
|
||||
if (!CountSum)
|
||||
|
||||
@@ -14,7 +14,6 @@ import './constant'
|
||||
import './log'
|
||||
|
||||
let {
|
||||
CONSENSUS_PERIOD_TIME,
|
||||
ToLog,
|
||||
TO_ERROR_LOG,
|
||||
SaveToFile,
|
||||
@@ -82,7 +81,7 @@ require('../HTML/JS/sha3.js');
|
||||
require('../HTML/JS/coinlib.js');
|
||||
global.GetCurrentBlockNumByTime = function GetCurrentBlockNumByTime() {
|
||||
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;
|
||||
};
|
||||
global.DelDir = function(Path) {
|
||||
@@ -168,7 +167,7 @@ global.LoadParams = function(filename, DefaultValue) {
|
||||
return DefaultValue;
|
||||
};
|
||||
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.TimeStart = global.GetCurrentTime();
|
||||
|
||||
@@ -13,14 +13,8 @@ import './constant'
|
||||
import './log-strict'
|
||||
|
||||
let {
|
||||
GetDataPath,
|
||||
START_PORT_NUMBER,
|
||||
CheckSizeLogFile,
|
||||
ToError,
|
||||
ToLog,
|
||||
GetCurrentTime,
|
||||
DEBUG_MODE,
|
||||
SERVER
|
||||
} = global
|
||||
|
||||
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);
|
||||
}
|
||||
}, global.GET_STATDIAGRAMS = function(e) {
|
||||
GetCurrentTime();
|
||||
global.GetCurrentTime();
|
||||
var t = GetCurrentStatIndex();
|
||||
if (!e || !e.length)
|
||||
return [];
|
||||
@@ -219,8 +213,8 @@ global.PrepareStatEverySecond = function() {
|
||||
}, global.ClearCommonStat = function() {
|
||||
StartStatTime = void (CurStatIndex = 0), CONTEXT_STATS = { Total: {}, Interval: [] }, CONTEXT_ERRORS = { Total: {}, Interval: [] },
|
||||
global.HASH_RATE = 0, global.SERVER.ClearStat();
|
||||
}, global.ResizeArrAvg = ResizeArrAvg, global.ResizeArrMax = ResizeArrMax, 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.ResizeArrAvg = ResizeArrAvg, global.ResizeArrMax = ResizeArrMax, global.DEBUG_MODE ? global.TO_DEBUG_LOG = function(e, t, r, o) {
|
||||
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.GetStrOnlyTime = function(e) {
|
||||
if (!global.GetCurrentTime)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
require("./library.js");
|
||||
const net = require("net");
|
||||
var ConnectIDCount = 1;
|
||||
let RBTree = global.RBTree;
|
||||
module.exports = class CNode {
|
||||
addrStr
|
||||
ip
|
||||
@@ -81,6 +82,16 @@ module.exports = class CNode {
|
||||
SendPacketNum
|
||||
Socket
|
||||
Socket2
|
||||
ReconnectFromServer
|
||||
SecretForReconnect
|
||||
Self
|
||||
addrStrTemp
|
||||
DoubleConnection
|
||||
PubKey
|
||||
addrArr
|
||||
SocketStart
|
||||
WaitConnectFromServer
|
||||
WaitConnectIP
|
||||
constructor(addrStr, ip, port) {
|
||||
this.addrStr = addrStr
|
||||
this.ip = ip.trim()
|
||||
@@ -131,7 +142,7 @@ module.exports = class CNode {
|
||||
this.StartTimeGetNodes = 0
|
||||
this.NextGetNodesDelta = 1000
|
||||
this.PingStart = 0
|
||||
this.NextPing = MIN_PERIOD_PING
|
||||
this.NextPing = global.MIN_PERIOD_PING
|
||||
this.SendBlockArr = []
|
||||
this.LoadBlockArr = []
|
||||
this.SendBlockCount = 0
|
||||
@@ -175,7 +186,7 @@ module.exports = class CNode {
|
||||
NODE.SocketStart = Date.now()
|
||||
NODE.Socket = net.createConnection(NODE.port, NODE.ip, function() {
|
||||
if (NODE.Socket) {
|
||||
socketInit(NODE.Socket, "s")
|
||||
global.socketInit(NODE.Socket, "s")
|
||||
global.AddNodeInfo(NODE, "OK connected *" + NODE.Socket.ConnectID)
|
||||
NODE.Socket.ConnectToServer = true
|
||||
SetSocketStatus(NODE.Socket, 2)
|
||||
@@ -194,7 +205,7 @@ module.exports = class CNode {
|
||||
NODE.SocketStart = Date.now()
|
||||
NODE.Socket2 = net.createConnection(NODE.port, NODE.ip, function() {
|
||||
if (NODE.Socket2) {
|
||||
socketInit(NODE.Socket2, "s")
|
||||
global.socketInit(NODE.Socket2, "s")
|
||||
global.AddNodeInfo(NODE, "OK Reconnected *" + NODE.Socket2.ConnectID)
|
||||
NODE.Socket2.ConnectToServer = true
|
||||
SetSocketStatus(NODE.Socket2, 2)
|
||||
@@ -287,7 +298,7 @@ module.exports = class CNode {
|
||||
global.CloseSocket(SOCKET, Buf ? "Method=" + Buf.Method + ":" + Str : "=CLIENT ON DATA=")
|
||||
}
|
||||
else {
|
||||
socketRead(Socket, data)
|
||||
global.socketRead(Socket, data)
|
||||
global.SERVER.OnGetFromTCP(NODE, Socket, data)
|
||||
}
|
||||
})
|
||||
@@ -323,13 +334,13 @@ module.exports = class CNode {
|
||||
var Info = this.GetPOWClientData(0);
|
||||
Info.Reconnect = 1
|
||||
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);
|
||||
Socket.write(BufAll)
|
||||
return 1;
|
||||
}
|
||||
try {
|
||||
var Buf = global.BufLib.GetObjectFromBuffer(data, FORMAT_POW_TO_CLIENT, {});
|
||||
var Buf = global.BufLib.GetObjectFromBuffer(data, global.FORMAT_POW_TO_CLIENT, {});
|
||||
}
|
||||
catch (e) {
|
||||
global.SERVER.Sendglobal.CloseSocket(Socket, "FORMAT_POW_TO_CLIENT")
|
||||
@@ -341,7 +352,7 @@ module.exports = class CNode {
|
||||
global.SERVER.Sendglobal.CloseSocket(Socket, "SELF")
|
||||
return;
|
||||
}
|
||||
var addrStr = GetHexFromAddres(Buf.addrArr);
|
||||
var addrStr = global.GetHexFromAddres(Buf.addrArr);
|
||||
if (!Node.StartFindList && addrStr !== Node.addrStr) {
|
||||
global.AddNodeInfo(Node, "END: CHANGED ADDR: " + Node.addrStr.substr(0, 16) + "->" + addrStr.substr(0, 16))
|
||||
global.SERVER.Sendglobal.CloseSocket(Socket, "ADDRESS_HAS_BEEN_CHANGED")
|
||||
@@ -354,9 +365,9 @@ module.exports = class CNode {
|
||||
}
|
||||
var Result = false;
|
||||
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) {
|
||||
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) {
|
||||
@@ -365,7 +376,7 @@ module.exports = class CNode {
|
||||
global.SERVER.Sendglobal.CloseSocket(Socket, "ERROR_SIGN_SERVER")
|
||||
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)
|
||||
return 0;
|
||||
}
|
||||
@@ -384,18 +395,18 @@ module.exports = class CNode {
|
||||
Node.PubKey = Buffer.from([Buf.PubKeyType].concat(Buf.addrArr))
|
||||
Node.addrArr = Buf.addrArr
|
||||
Node.addrStr = addrStr
|
||||
if (global.CompareArr(SERVER.addrArr, Node.addrArr) === 0) {
|
||||
if (global.CompareArr(global.SERVER.addrArr, Node.addrArr) === 0) {
|
||||
Node.Self = 1
|
||||
return 0;
|
||||
}
|
||||
var Hash = shaarr2(Buf.addrArr, Buf.HashRND);
|
||||
var nonce = CreateNoncePOWExternMinPower(Hash, 0, Buf.MIN_POWER_POW_HANDSHAKE);
|
||||
var Hash = global.shaarr2(Buf.addrArr, Buf.HashRND);
|
||||
var nonce = global.CreateNoncePOWExternMinPower(Hash, 0, Buf.MIN_POWER_POW_HANDSHAKE);
|
||||
var Info;
|
||||
if (WALLET.WalletOpen && IsDeveloperAccount(WALLET.PubKeyArr)) {
|
||||
if (global.WALLET.WalletOpen && global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
|
||||
Info = this.GetPOWClientData(0)
|
||||
Info.Reconnect = 255
|
||||
Info.Sign = secp256k1.sign(SHA3BUF(Hash), WALLET.KeyPair.getPrivateKey('')).signature
|
||||
Result = CheckDevelopSign(Hash, Info.Sign)
|
||||
Info.Sign = global.secp256k1.sign(global.SHA3BUF(Hash), global.WALLET.KeyPair.getPrivateKey('')).signature
|
||||
Result = global.CheckDevelopSign(Hash, Info.Sign)
|
||||
if (!Result) {
|
||||
throw "ERROR DEVELOPSIGN!";
|
||||
}
|
||||
@@ -403,19 +414,19 @@ module.exports = class CNode {
|
||||
else {
|
||||
Info = this.GetPOWClientData(nonce)
|
||||
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);
|
||||
Socket.write(BufAll)
|
||||
return 1;
|
||||
}
|
||||
GetPOWClientData(nonce) {
|
||||
var Node = this;
|
||||
var Info = {};
|
||||
Info.DEF_NETWORK = GetNetworkName()
|
||||
Info.DEF_VERSION = DEF_VERSION
|
||||
Info.DEF_CLIENT = DEF_CLIENT
|
||||
var Info: any = {};
|
||||
Info.DEF_NETWORK = global.GetNetworkName()
|
||||
Info.DEF_VERSION = global.DEF_VERSION
|
||||
Info.DEF_CLIENT = global.DEF_CLIENT
|
||||
Info.addrArr = global.SERVER.addrArr
|
||||
Info.ToIP = Node.ip
|
||||
Info.ToPort = Node.port
|
||||
@@ -426,7 +437,7 @@ module.exports = class CNode {
|
||||
Info.SendBytes = 0
|
||||
Info.SecretForReconnect = []
|
||||
Info.Reserv = []
|
||||
if (GrayConnect())
|
||||
if (global.GrayConnect())
|
||||
Info.GrayConnect = 1
|
||||
return Info;
|
||||
}
|
||||
@@ -480,7 +491,7 @@ global.CloseSocket = function(Socket, StrError?, bHide?) {
|
||||
function SetSocketStatus(Socket, Status) {
|
||||
if (Socket && Socket.SocketStatus !== Status) {
|
||||
if (Status === 100 && (Socket.SocketStatus !== 3 && Socket.SocketStatus !== 200)) {
|
||||
ToLogTrace("===================ERROR=================== " + Status);
|
||||
global.ToLogTrace("===================ERROR=================== " + Status);
|
||||
return;
|
||||
}
|
||||
if (Status === 100 && Socket.Node)
|
||||
@@ -494,7 +505,7 @@ function GetSocketStatus(Socket) {
|
||||
if (Socket && Socket.SocketStatus) {
|
||||
if (Socket.SocketStatus !== 100) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -543,7 +554,7 @@ function NodeName(Node) {
|
||||
return "";
|
||||
if (Node.Name)
|
||||
return Node.Name;
|
||||
if (LOCAL_RUN)
|
||||
if (global.LOCAL_RUN)
|
||||
return "" + Node.port;
|
||||
else {
|
||||
return "" + Node.ip + ":" + Node.addrStr.substr(0, 6);
|
||||
@@ -583,7 +594,7 @@ function AddNodeInfo(Node, Str, bSet) {
|
||||
Node.Info = "";
|
||||
}
|
||||
{
|
||||
var timesend = GetStrOnlyTimeUTC();
|
||||
var timesend = global.GetStrOnlyTimeUTC();
|
||||
Str = timesend + " " + Str;
|
||||
Node.Info += Str + "\n";
|
||||
}
|
||||
|
||||
@@ -11,14 +11,19 @@
|
||||
"use strict";
|
||||
module.exports = class CRest extends require("./db/block-db")
|
||||
{
|
||||
LoadRestContext
|
||||
BlockNumDB
|
||||
BlockNumDBMin
|
||||
UseTruncateBlockDB
|
||||
ContextSendLoadToBegin
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
}
|
||||
CheckSyncRest() {
|
||||
var BlockNumTime = GetCurrentBlockNumByTime();
|
||||
var BlockNumTime = global.GetCurrentBlockNumByTime();
|
||||
var Delta = BlockNumTime - this.BlockNumDB;
|
||||
if (Delta > REST_START_COUNT + DELTA_BLOCK_ACCOUNT_HASH + 500) {
|
||||
var BlockNumRest = GetCurrentRestNum(REST_START_COUNT + DELTA_BLOCK_ACCOUNT_HASH + 500);
|
||||
if (Delta > global.REST_START_COUNT + global.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) {
|
||||
}
|
||||
else
|
||||
@@ -29,8 +34,8 @@ module.exports = class CRest extends require("./db/block-db")
|
||||
return;
|
||||
}
|
||||
this.LoadRestContext = {
|
||||
Mode: 0, BlockNum: BlockNumRest, BlockNumRest: BlockNumRest, WasDelta: Delta, BlockNumProof: BlockNumRest + DELTA_BLOCK_ACCOUNT_HASH,
|
||||
CountProof: COUNT_BLOCKS_FOR_LOAD, StartTimeHistory: Date.now(), MaxTimeOut: 600 * 1000, LoopSyncRest: 1, SendGetHeaderCount: 0,
|
||||
Mode: 0, BlockNum: BlockNumRest, BlockNumRest: BlockNumRest, WasDelta: Delta, BlockNumProof: BlockNumRest + global.DELTA_BLOCK_ACCOUNT_HASH,
|
||||
CountProof: global.COUNT_BLOCKS_FOR_LOAD, StartTimeHistory: Date.now(), MaxTimeOut: 600 * 1000, LoopSyncRest: 1, SendGetHeaderCount: 0,
|
||||
ReceiveHeaderCount: 0, ArrProof: [], MapSend: {}
|
||||
}
|
||||
for (var i = 0; i < this.NodesArr.length; i++) {
|
||||
@@ -60,7 +65,7 @@ module.exports = class CRest extends require("./db/block-db")
|
||||
Context.SendGetHeaderCount++
|
||||
break;
|
||||
}
|
||||
if (Context.ReceiveHeaderCount >= COUNT_NODE_PROOF) {
|
||||
if (Context.ReceiveHeaderCount >= global.COUNT_NODE_PROOF) {
|
||||
Context.Mode = 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) {
|
||||
if (Context.TxProof)
|
||||
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
|
||||
if (Data.BlockNum !== BlockProof.BlockNum || global.CompareArr(Data.TreeHash, BlockProof.TreeHash) !== 0) {
|
||||
global.ToLog("Error get proof block from " + NodeName(Item.Node), 2)
|
||||
return;
|
||||
}
|
||||
var TreeHash = CalcTreeHashFromArrBody(Data.BlockNum, Data.arrContent);
|
||||
var TreeHash = global.CalcTreeHashFromArrBody(Data.BlockNum, Data.arrContent);
|
||||
if (global.CompareArr(BlockProof.TreeHash, TreeHash) !== 0) {
|
||||
global.ToLog("Error TreeHash in proof block from " + NodeName(Item.Node), 2)
|
||||
return;
|
||||
@@ -148,9 +153,9 @@ module.exports = class CRest extends require("./db/block-db")
|
||||
var FindTx = undefined;
|
||||
for (var n = 0; n < Data.arrContent.length; n++) {
|
||||
var Body = Data.arrContent[n];
|
||||
if (Body[0] === TYPE_TRANSACTION_ACC_HASH) {
|
||||
if (Body[0] === global.TYPE_TRANSACTION_ACC_HASH) {
|
||||
try {
|
||||
FindTx = global.BufLib.GetObjectFromBuffer(Body, FORMAT_ACCOUNT_HASH3, {})
|
||||
FindTx = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_ACCOUNT_HASH3, {})
|
||||
}
|
||||
catch (e) {
|
||||
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.AccTaskFinished = 0
|
||||
var AccCount = FindTx.AccountMax + 1;
|
||||
for (var n = 0; n < AccCount; n += MAX_ACCOUNTS_TRANSFER) {
|
||||
var Task = { StartNum: n, Count: MAX_ACCOUNTS_TRANSFER, Time: 0, MapSend: {} };
|
||||
for (var n = 0; n < AccCount; n += global.MAX_ACCOUNTS_TRANSFER) {
|
||||
var Task = { StartNum: n, Count: global.MAX_ACCOUNTS_TRANSFER, Time: 0, MapSend: {} };
|
||||
if (Task.StartNum + Task.Count > AccCount)
|
||||
Task.Count = AccCount - Task.StartNum
|
||||
Context.AccTaskList.push(Task)
|
||||
}
|
||||
Context.SmartTaskList = []
|
||||
Context.SmartTaskFinished = 0
|
||||
for (var n = 0; n < FindTx.SmartCount; n += MAX_SMARTS_TRANSFER) {
|
||||
var Task = { StartNum: n, Count: MAX_SMARTS_TRANSFER, Time: 0, MapSend: {} };
|
||||
for (var n = 0; n < FindTx.SmartCount; n += global.MAX_SMARTS_TRANSFER) {
|
||||
var Task = { StartNum: n, Count: global.MAX_SMARTS_TRANSFER, Time: 0, MapSend: {} };
|
||||
if (Task.StartNum + Task.Count > FindTx.SmartCount)
|
||||
Task.Count = FindTx.SmartCount - Task.StartNum
|
||||
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)
|
||||
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),
|
||||
2)
|
||||
return;
|
||||
@@ -230,8 +235,8 @@ module.exports = class CRest extends require("./db/block-db")
|
||||
for (var i = 0; i < Data.Arr.length; i++) {
|
||||
ArrM[i] = global.shaarr(Data.Arr[i])
|
||||
}
|
||||
var GetHash = CheckMerkleProof(Data.ProofArrL, ArrM, Data.ProofArrR);
|
||||
if (CompareArrL(GetHash, Context.TxProof.AccHash) !== 0) {
|
||||
var GetHash = global.CheckMerkleProof(Data.ProofArrL, ArrM, Data.ProofArrR);
|
||||
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),
|
||||
2)
|
||||
return;
|
||||
@@ -302,7 +307,7 @@ module.exports = class CRest extends require("./db/block-db")
|
||||
if (ErrSmartNum > 0) {
|
||||
var Str = "Error hash in smart num: " + ErrSmartNum;
|
||||
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];
|
||||
if (!Task) {
|
||||
global.ToLog("error task number: " + t)
|
||||
@@ -444,7 +449,7 @@ function CheckHashSmarts(LastSumHash) {
|
||||
Item.SumHash = [];
|
||||
var Buf = global.BufLib.GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, WorkStruct);
|
||||
var Hash = global.sha3(Buf);
|
||||
var SumHash = sha3arr2(PrevItem.SumHash, Hash);
|
||||
var SumHash = global.sha3arr2(PrevItem.SumHash, Hash);
|
||||
if (global.CompareArr(SumHash, WasSumHash) !== 0)
|
||||
return Num;
|
||||
Item = PrevItem;
|
||||
|
||||
@@ -9,65 +9,59 @@
|
||||
*/
|
||||
|
||||
|
||||
function DoRest(r,t,e)
|
||||
{
|
||||
var u = r.Arr[0], o = Math.floor(e / 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] * REST_BLOCK_SCALE);
|
||||
function DoRest(r, t, e) {
|
||||
var u = r.Arr[0], o = Math.floor(e / global.REST_BLOCK_SCALE);
|
||||
if (o !== Math.floor((u.BlockNum - 1) / global.REST_BLOCK_SCALE)) {
|
||||
for (var n = GetRestArr(o), l = [], a = n.length - 2; 0 <= a; a--)
|
||||
l.push(n[a] * global.REST_BLOCK_SCALE);
|
||||
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];
|
||||
if(1 < u)
|
||||
{
|
||||
if (1 < u) {
|
||||
var l = t[u - 2];
|
||||
if(o.BlockNum > l)
|
||||
return ;
|
||||
if (o.BlockNum > l)
|
||||
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 = {});
|
||||
n.BlockNum && u < r.Arr.length - 1 && RestPush(r, t, e, u + 1), r.Arr[u] = o;
|
||||
};
|
||||
|
||||
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 o = 0, n = u, l = e - 1; 0 <= l; l--)
|
||||
{
|
||||
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 o = 0, n = u, l = e - 1; 0 <= l; 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;
|
||||
if(0 != (o & n))
|
||||
if (0 != (o & n))
|
||||
break;
|
||||
}
|
||||
return t;
|
||||
};
|
||||
var RestArrMap = {};
|
||||
|
||||
function GetCurrentRestArr()
|
||||
{
|
||||
var r = GetCurrentBlockNumByTime(), t = Math.floor(r / REST_BLOCK_SCALE), e = RestArrMap[t];
|
||||
if(void 0 === e)
|
||||
{
|
||||
function GetCurrentRestArr() {
|
||||
var r = global.GetCurrentBlockNumByTime(), t = Math.floor(r / global.REST_BLOCK_SCALE), e = RestArrMap[t];
|
||||
if (void 0 === e) {
|
||||
RestArrMap = {}, (e = GetRestArr(t)).length = e.length - 1;
|
||||
for(var u = 0; u < e.length; u++)
|
||||
e[u] = e[u] * REST_BLOCK_SCALE;
|
||||
for (var u = 0; u < e.length; u++)
|
||||
e[u] = e[u] * global.REST_BLOCK_SCALE;
|
||||
RestArrMap[t] = e;
|
||||
}
|
||||
return e;
|
||||
};
|
||||
|
||||
function GetCurrentRestNum(r)
|
||||
{
|
||||
for(var t = GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--)
|
||||
if(e[u] <= t)
|
||||
function GetCurrentRestNum(r) {
|
||||
for (var t = global.GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--)
|
||||
if (e[u] <= t)
|
||||
return e[u];
|
||||
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;
|
||||
|
||||
@@ -20,16 +20,16 @@ global.STR_TYPE = 2;
|
||||
global.MAX_STR_BUF_DATA = 200;
|
||||
global.MAX_CONNECTION_ACTIVE = 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;
|
||||
global.STAT_PERIOD = CONSENSUS_PERIOD_TIME / 5;
|
||||
const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * STAT_PERIOD / 1000;
|
||||
const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * STAT_PERIOD / 1000;
|
||||
global.STAT_PERIOD = global.CONSENSUS_PERIOD_TIME / 5;
|
||||
const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * global.STAT_PERIOD / 1000;
|
||||
const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * global.STAT_PERIOD / 1000;
|
||||
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_SERVER = "{\
|
||||
DEF_NETWORK:str15,\
|
||||
DEF_VERSION:str9,\
|
||||
global.DEF_VERSION:str9,\
|
||||
DEF_CLIENT:str16, \
|
||||
addrArr:addres, \
|
||||
ToIP:str26,\
|
||||
@@ -57,8 +57,31 @@ const FORMAT_PACKET_SEND_TCP = "{\
|
||||
Hash:hash,\
|
||||
Data:data,\
|
||||
}";
|
||||
let RBTree = global.RBTree;
|
||||
let STreeBuffer = global.STreeBuffer;
|
||||
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) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.UseRNDHeader = UseRNDHeader
|
||||
@@ -107,10 +130,10 @@ module.exports = class CTransport extends require("./connect")
|
||||
Map["DISCONNECTHOT"] = { Period: 1000, Hard: 1 }
|
||||
Map["GETMESSAGE"] = { Period: 1000, Hard: 1 }
|
||||
Map["MESSAGE"] = { Period: 1000, Hard: 1 }
|
||||
Map["TRANSACTION"] = { Period: PERIOD_GET_BLOCK, Hard: 1 }
|
||||
Map["GETBLOCKHEADER"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETBLOCKHEADER100"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETBLOCK"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["TRANSACTION"] = { Period: global.PERIOD_GET_BLOCK, Hard: 1 }
|
||||
Map["GETBLOCKHEADER"] = { Period: global.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: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||
Map["GETNODES"] = { Period: 1000, Hard: 1, LowVersion: 1, IsAddrList: 1 }
|
||||
Map["RETGETNODES"] = { 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)
|
||||
this.Send(Node, Info, 1)
|
||||
}
|
||||
DataFromF(Info, bSendFormat) {
|
||||
DataFromF(Info, bSendFormat?) {
|
||||
var format = this.GetF(Info.Method, bSendFormat);
|
||||
try {
|
||||
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) {
|
||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
||||
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||
if (this.CurrentTimeStart !== TimeNum)
|
||||
this.CurrentTimeValues = {}
|
||||
this.CurrentTimeStart = TimeNum
|
||||
@@ -173,7 +196,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.CurrentTimeValues[Key] += Value
|
||||
}
|
||||
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) {
|
||||
var Value = this.CurrentTimeValues[Key];
|
||||
if (Value === undefined)
|
||||
@@ -186,11 +209,11 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
}
|
||||
RecalcSendStatictic() {
|
||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
||||
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||
if (this.SendStatNum === TimeNum)
|
||||
return;
|
||||
this.SendStatNum = TimeNum
|
||||
var Period = CONSENSUS_PERIOD_TIME / STAT_PERIOD;
|
||||
var Period = global.CONSENSUS_PERIOD_TIME / global.STAT_PERIOD;
|
||||
this.SendTrafficFree = TRAFIC_LIMIT_SEND
|
||||
var it = this.ActualNodes.iterator(), Node;
|
||||
while ((Node = it.next()) !== null) {
|
||||
@@ -212,17 +235,17 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.SendTrafficFree -= Node.SendTrafficLimit
|
||||
}
|
||||
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
|
||||
global.ADD_TO_STAT("SEND_TRAFFIC_FREE", this.SendTrafficFree / 1024)
|
||||
}
|
||||
OnGetMethod(Info, CurTime) {
|
||||
if (DEBUG_MODE) {
|
||||
if (global.DEBUG_MODE) {
|
||||
var Str = "";
|
||||
if (Info.Data && 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) {
|
||||
var StrOK = ",HAND,GETNODES,";
|
||||
@@ -239,7 +262,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
F.bind(this)(Info, CurTime)
|
||||
}
|
||||
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")
|
||||
}
|
||||
}
|
||||
@@ -277,7 +300,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
var Key = "" + rinfo.address.trim();
|
||||
var Stat = this.BAN_IP[Key];
|
||||
if (Stat) {
|
||||
if (Stat.TimeTo > (GetCurrentTime(0) - 0))
|
||||
if (Stat.TimeTo > (global.GetCurrentTime(0) - 0))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -306,17 +329,17 @@ module.exports = class CTransport extends require("./connect")
|
||||
if (Node.DeltaBan > 1000000)
|
||||
Node.DeltaBan = 1000000
|
||||
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 }
|
||||
Node.BlockProcessCount = 0
|
||||
this.DeleteNodeFromActiveByIP(Node.ip)
|
||||
global.ADD_TO_STAT("AddToBan")
|
||||
}
|
||||
AddToBanIP(ip, Str, Period) {
|
||||
AddToBanIP(ip, Str, Period?) {
|
||||
if (!Period)
|
||||
Period = 600 * 1000
|
||||
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)
|
||||
global.ToLog("ADD TO BAN:: " + Key + " " + Str)
|
||||
global.ADD_TO_STAT("AddToBanIP")
|
||||
@@ -333,29 +356,29 @@ module.exports = class CTransport extends require("./connect")
|
||||
else {
|
||||
this.OnGetMethod(Meta, CurTime)
|
||||
}
|
||||
ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET", startTime)
|
||||
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", startTime)
|
||||
global.ADD_TO_STAT_TIME("TIME_USE_PACKET", 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;
|
||||
if (TypeData === BUF_TYPE) {
|
||||
if (TypeData === global.BUF_TYPE) {
|
||||
BufData = Data
|
||||
}
|
||||
else
|
||||
if (TypeData === STR_TYPE) {
|
||||
BufData = Buffer.from(Data.substr(0, MAX_STR_BUF_DATA))
|
||||
if (TypeData === global.STR_TYPE) {
|
||||
BufData = Buffer.from(Data.substr(0, global.MAX_STR_BUF_DATA))
|
||||
}
|
||||
else {
|
||||
if (Data === undefined) {
|
||||
TypeData = BUF_TYPE
|
||||
TypeData = global.BUF_TYPE
|
||||
BufData = Buffer.alloc(0)
|
||||
}
|
||||
else {
|
||||
throw "ERROR TYPE DATA";
|
||||
}
|
||||
}
|
||||
var BUF = {};
|
||||
var BUF: any = {};
|
||||
BUF.PacketSize = 0
|
||||
BUF.NumXORRND = 0
|
||||
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);
|
||||
}
|
||||
catch (e) {
|
||||
TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer")
|
||||
global.TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer")
|
||||
return undefined;
|
||||
}
|
||||
var Hash = this.GetHashFromData(Meta);
|
||||
@@ -384,8 +407,8 @@ module.exports = class CTransport extends require("./connect")
|
||||
global.ToLog("TRANSPORT", 645, "Error hash Buffer", 2)
|
||||
return undefined;
|
||||
}
|
||||
if (Meta.TypeData === STR_TYPE) {
|
||||
Meta.Data = Meta.Data.slice(0, MAX_STR_BUF_DATA).toString()
|
||||
if (Meta.TypeData === global.STR_TYPE) {
|
||||
Meta.Data = Meta.Data.slice(0, global.MAX_STR_BUF_DATA).toString()
|
||||
}
|
||||
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)
|
||||
Socket.Buf.len = 0
|
||||
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")
|
||||
break;
|
||||
}
|
||||
@@ -464,7 +487,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
if (this.StopDoSendPacket(Param, Node, Buf.Method)) {
|
||||
return 1;
|
||||
}
|
||||
if (!IsZeroArr(Buf.ContextID)) {
|
||||
if (!global.IsZeroArr(Buf.ContextID)) {
|
||||
Buf.Context = global.ContextPackets.LoadValue(Buf.ContextID)
|
||||
}
|
||||
if (!Buf.Context) {
|
||||
@@ -494,11 +517,11 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.OnPacketTCP(Buf)
|
||||
}
|
||||
}
|
||||
ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime)
|
||||
global.ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime)
|
||||
return 1;
|
||||
}
|
||||
StopDoSendPacket(Param, Node, Name) {
|
||||
var CurTime = GetCurrentTime(0) - 0;
|
||||
var CurTime = global.GetCurrentTime(0) - 0;
|
||||
if (!Param) {
|
||||
global.ADD_TO_STAT("STOP_METHOD")
|
||||
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:" + Info.Method)
|
||||
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)
|
||||
this.HardPacketForSend.clear()
|
||||
return;
|
||||
@@ -597,9 +620,9 @@ module.exports = class CTransport extends require("./connect")
|
||||
var MaxCount = 20;
|
||||
while (Info = this.HardPacketForSend.max()) {
|
||||
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)
|
||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
||||
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||
this.RiseBusyLevelByInfo(Info)
|
||||
Info.Node.NextPing = 1 * 1000
|
||||
this.AddCheckErrCount(Info.Node, 0.2)
|
||||
@@ -645,10 +668,10 @@ module.exports = class CTransport extends require("./connect")
|
||||
DoSendPacketNode(Node) {
|
||||
var TimeNum = Date.now();
|
||||
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()) {
|
||||
var DeltaTime = TimeNum - Info.TimeNum;
|
||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
||||
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||
Node.SendPacket.remove(Info)
|
||||
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:(KB)" + Info.Method, BufWrite.length / 1024)
|
||||
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;
|
||||
}
|
||||
DoSendPacket() {
|
||||
@@ -723,36 +746,36 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
CheckPOWTicketConnect(Socket, data) {
|
||||
try {
|
||||
var Info = global.BufLib.GetObjectFromBuffer(data, FORMAT_POW_TO_SERVER, {});
|
||||
var Info = global.BufLib.GetObjectFromBuffer(data, global.FORMAT_POW_TO_SERVER, {});
|
||||
}
|
||||
catch (e) {
|
||||
this.SendCloseSocket(Socket, "FORMAT_POW_TO_SERVER")
|
||||
return;
|
||||
}
|
||||
if (Info.DEF_NETWORK !== GetNetworkName()) {
|
||||
this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + GetNetworkName())
|
||||
if (Info.DEF_NETWORK !== global.GetNetworkName()) {
|
||||
this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + global.GetNetworkName())
|
||||
return;
|
||||
}
|
||||
var Node = this.FindRunNodeContext(Info.addrArr, Info.FromIP, Info.FromPort, true);
|
||||
if (global.CompareArr(Info.addrArr, this.addrArr) === 0) {
|
||||
AddNodeInfo(Node, "SERV: GET SELF")
|
||||
global.AddNodeInfo(Node, "SERV: GET SELF")
|
||||
this.SendCloseSocket(Socket, "SELF")
|
||||
return;
|
||||
}
|
||||
var Hash = shaarr2(this.addrArr, Socket.HashRND);
|
||||
var hashInfo = GetHashWithValues(Hash, Info.nonce, 0);
|
||||
var power = GetPowPower(hashInfo);
|
||||
var Hash = global.shaarr2(this.addrArr, Socket.HashRND);
|
||||
var hashInfo = global.GetHashWithValues(Hash, Info.nonce, 0);
|
||||
var power = global.GetPowPower(hashInfo);
|
||||
if (Info.Reconnect) {
|
||||
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) {
|
||||
Result = CheckDevelopSign(Hash, Info.Sign)
|
||||
Result = global.CheckDevelopSign(Hash, Info.Sign)
|
||||
}
|
||||
if (Result) {
|
||||
Node.NextConnectDelta = 1000
|
||||
Node.WaitConnectFromServer = 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)
|
||||
Node.Socket = Socket
|
||||
SetSocketStatus(Socket, 3)
|
||||
@@ -767,39 +790,39 @@ module.exports = class CTransport extends require("./connect")
|
||||
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))
|
||||
CloseSocket(Socket, "ERROR_RECONNECT")
|
||||
global.CloseSocket(Socket, "ERROR_RECONNECT")
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (power < MIN_POWER_POW_HANDSHAKE) {
|
||||
if (power < global.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))
|
||||
CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE")
|
||||
global.CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE")
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (!Node.BlockProcessCount)
|
||||
Node.BlockProcessCount = 0
|
||||
if (this.ActualNodes.size >= MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) {
|
||||
AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS")
|
||||
if (this.ActualNodes.size >= global.MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) {
|
||||
global.AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS")
|
||||
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_MAX_CLIENTS", 2))
|
||||
CloseSocket(Socket, "ERROR_MAX_CLIENTS")
|
||||
global.CloseSocket(Socket, "ERROR_MAX_CLIENTS")
|
||||
return;
|
||||
}
|
||||
var Result = false;
|
||||
let Result = false;
|
||||
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) {
|
||||
AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT")
|
||||
global.AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT")
|
||||
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")
|
||||
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.FromPort = Info.FromPort
|
||||
Node.SecretForReconnect = crypto.randomBytes(20)
|
||||
@@ -808,7 +831,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
Node.NextConnectDelta = 1000
|
||||
Node.WaitConnectFromServer = 0
|
||||
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)
|
||||
Node.Socket = Socket
|
||||
SetSocketStatus(Socket, 3)
|
||||
@@ -831,7 +854,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.Server.close()
|
||||
}
|
||||
StartServer() {
|
||||
if (GrayConnect()) {
|
||||
if (global.GrayConnect()) {
|
||||
this.CanSend++
|
||||
return;
|
||||
}
|
||||
@@ -839,20 +862,20 @@ module.exports = class CTransport extends require("./connect")
|
||||
this.Server = net.createServer(function(sock) {
|
||||
if (SELF.WasBanIP({ address: sock.remoteAddress })) {
|
||||
sock.ConnectID = "new"
|
||||
CloseSocket(sock, "WAS BAN", true)
|
||||
global.CloseSocket(sock, "WAS BAN", true)
|
||||
return;
|
||||
}
|
||||
let SOCKET = sock;
|
||||
socketInit(SOCKET, "c")
|
||||
global.socketInit(SOCKET, "c")
|
||||
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")
|
||||
SOCKET.HashRND = crypto.randomBytes(32)
|
||||
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: []
|
||||
};
|
||||
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);
|
||||
try {
|
||||
SOCKET.write(BufWrite)
|
||||
@@ -873,10 +896,10 @@ module.exports = class CTransport extends require("./connect")
|
||||
SOCKET.ConnectToServer = 0
|
||||
return;
|
||||
}
|
||||
CloseSocket(SOCKET, "=SERVER ON DATA=")
|
||||
global.CloseSocket(SOCKET, "=SERVER ON DATA=")
|
||||
}
|
||||
else {
|
||||
socketRead(SOCKET, data)
|
||||
global.socketRead(SOCKET, data)
|
||||
SELF.OnGetFromTCP(SOCKET.Node, SOCKET, data)
|
||||
}
|
||||
})
|
||||
@@ -885,7 +908,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
var Node = SOCKET.Node;
|
||||
var Status = GetSocketStatus(SOCKET);
|
||||
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) {
|
||||
Node.SwapSockets()
|
||||
SOCKET.WasClose = 1
|
||||
@@ -894,15 +917,15 @@ module.exports = class CTransport extends require("./connect")
|
||||
SOCKET.on('close', function(err) {
|
||||
global.ADD_TO_STAT("ClientClose")
|
||||
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) {
|
||||
CloseSocket(SOCKET, "GET CLOSE")
|
||||
global.CloseSocket(SOCKET, "GET CLOSE")
|
||||
}
|
||||
SetSocketStatus(SOCKET, 0)
|
||||
})
|
||||
SOCKET.on('error', function(err) {
|
||||
global.ADD_TO_STAT("ERRORS")
|
||||
CloseSocket(SOCKET, "ERRORS")
|
||||
global.CloseSocket(SOCKET, "ERRORS")
|
||||
if (SOCKET.Node)
|
||||
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) {
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
ToLogClient('Port ' + SELF.port + ' in use, retrying...')
|
||||
global.ToLogClient('Port ' + SELF.port + ' in use, retrying...')
|
||||
if (SELF.Server)
|
||||
SELF.Server.close()
|
||||
setTimeout(function() {
|
||||
@@ -931,21 +954,22 @@ module.exports = class CTransport extends require("./connect")
|
||||
}
|
||||
}
|
||||
RunListenServer() {
|
||||
if (!START_PORT_NUMBER || START_PORT_NUMBER === "undefined")
|
||||
START_PORT_NUMBER = 30000
|
||||
if (!global.START_PORT_NUMBER || global.START_PORT_NUMBER === "undefined")
|
||||
global.START_PORT_NUMBER = 30000
|
||||
let SELF = this;
|
||||
SELF.port = START_PORT_NUMBER
|
||||
ToLogClient("Prepare to run TCP server on " + LISTEN_IP + ":" + SELF.port)
|
||||
this.Server.listen(SELF.port, LISTEN_IP, function() {
|
||||
SELF.port = global.START_PORT_NUMBER
|
||||
global.ToLogClient("Prepare to run TCP server on " + global.LISTEN_IP + ":" + SELF.port)
|
||||
this.Server.listen(SELF.port, global.LISTEN_IP, function() {
|
||||
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++
|
||||
var Hash;
|
||||
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() {
|
||||
let Stun = global.Stun;
|
||||
let SELF = this;
|
||||
let server = Stun.createServer();
|
||||
const request = Stun.createMessage(Stun.constants.STUN_BINDING_REQUEST);
|
||||
@@ -958,7 +982,7 @@ module.exports = class CTransport extends require("./connect")
|
||||
SELF.CanSend++
|
||||
global.INTERNET_IP_FROM_STUN = value.address
|
||||
if (!SELF.ip)
|
||||
SELF.ip = INTERNET_IP_FROM_STUN
|
||||
SELF.ip = global.INTERNET_IP_FROM_STUN
|
||||
if (server)
|
||||
server.close()
|
||||
SELF.RunListenServer()
|
||||
@@ -973,11 +997,11 @@ module.exports = class CTransport extends require("./connect")
|
||||
})
|
||||
}
|
||||
CLOSE_SOCKET(Context, CurTime) {
|
||||
AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString())
|
||||
CloseSocket(Context.Socket, "CLOSE_SOCKET")
|
||||
global.AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString())
|
||||
global.CloseSocket(Context.Socket, "CLOSE_SOCKET")
|
||||
}
|
||||
SendCloseSocket(Socket, Str) {
|
||||
AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str)
|
||||
global.AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str)
|
||||
if (Socket.WasClose) {
|
||||
return;
|
||||
}
|
||||
@@ -985,12 +1009,12 @@ module.exports = class CTransport extends require("./connect")
|
||||
if (Socket.Node && Socket.Node.BufWrite && Socket.Node.BufWrite.length > 0) {
|
||||
}
|
||||
else {
|
||||
AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str)
|
||||
global.AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str)
|
||||
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)
|
||||
return;
|
||||
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) {
|
||||
var arrSum = [arr[0]];
|
||||
|
||||
@@ -27,14 +27,14 @@ function CreateHashMinimal(Block, MinerID) {
|
||||
throw "BlockNum < BLOCKNUM_ALGO2";
|
||||
return false;
|
||||
}
|
||||
var PrevHashNum = ReadUint32FromArr(Block.PrevHash, 28);
|
||||
var Ret = GetHash(Block.SeqHash, PrevHashNum, Block.BlockNum, MinerID, 0, 0, 0, 0, 0);
|
||||
var PrevHashNum = global.ReadUint32FromArr(Block.PrevHash, 28);
|
||||
var Ret = global.GetHash(Block.SeqHash, PrevHashNum, Block.BlockNum, MinerID, 0, 0, 0, 0, 0);
|
||||
Block.Hash = Ret.Hash;
|
||||
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];
|
||||
WriteUintToArrOnPos(Block.AddrHash, MinerID, 0);
|
||||
WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
||||
global.WriteUintToArrOnPos(Block.AddrHash, MinerID, 0);
|
||||
global.WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
||||
return true;
|
||||
};
|
||||
var MAX_MEMORY3 = 0, SHIFT_MASKA3;
|
||||
@@ -61,8 +61,7 @@ function InitVer3(Block) {
|
||||
try {
|
||||
BufferNonce3 = new Uint32Array(MAX_MEMORY3);
|
||||
BufferBlockNum3 = new Uint32Array(MAX_MEMORY3);
|
||||
}
|
||||
catch (e) {
|
||||
} catch (e) {
|
||||
SHIFT_MASKA3 = SHIFT_MASKA3 + 1;
|
||||
MAX_MEMORY3 = MAX_MEMORY3 / 2;
|
||||
global.ToLog("WAS ALLOC MEMORY ERROR. NEW TRY: " + MAX_MEMORY3);
|
||||
@@ -88,10 +87,13 @@ function CreatePOWVersion3(Block, bHashPump) {
|
||||
if (!Block.MaxLider) {
|
||||
Block.HashCount = 0;
|
||||
Block.MaxLider = {
|
||||
Nonce0: 0, Nonce1: 0, Nonce2: 0, 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],
|
||||
Nonce0: 0,
|
||||
Nonce1: 0,
|
||||
Nonce2: 0,
|
||||
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;
|
||||
@@ -99,7 +101,7 @@ function CreatePOWVersion3(Block, bHashPump) {
|
||||
var BlockNum = Block.BlockNum;
|
||||
var Miner = Block.MinerID;
|
||||
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++) {
|
||||
var Nonce = List.ArrNonce[n];
|
||||
var HashNum = List.ArrHash[n] >>> SHIFT_MASKA3;
|
||||
@@ -110,11 +112,11 @@ function CreatePOWVersion3(Block, bHashPump) {
|
||||
if (bHashPump)
|
||||
return;
|
||||
var Ret = 0;
|
||||
var PrevHashNum = ReadUint32FromArr(Block.PrevHash, 28);
|
||||
var HashBase = GetHashFromNum2(BlockNum, PrevHashNum);
|
||||
var PrevHashNum = global.ReadUint32FromArr(Block.PrevHash, 28);
|
||||
var HashBase = global.GetHashFromNum2(BlockNum, PrevHashNum);
|
||||
var Value1 = FindHashBuffer3(HashBase, BlockNum, Miner, 1);
|
||||
if (Value1) {
|
||||
var Hash1 = XORArr(HashBase, Value1.Hash);
|
||||
var Hash1 = global.XORArr(HashBase, Value1.Hash);
|
||||
if (global.CompareArr(MaxLider.Hash1, Hash1) > 0) {
|
||||
MaxLider.Hash1 = Hash1;
|
||||
MaxLider.Nonce1 = Value1.Nonce;
|
||||
@@ -126,10 +128,10 @@ function CreatePOWVersion3(Block, bHashPump) {
|
||||
var CountEnd = START_NONCE + 50000;
|
||||
var 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);
|
||||
if (Value2) {
|
||||
var Hash2 = XORArr(HashCurrent, Value2.Hash);
|
||||
var Hash2 = global.XORArr(HashCurrent, Value2.Hash);
|
||||
if (global.CompareArr(MaxLider.Hash2, Hash2) > 0) {
|
||||
MaxLider.Nonce0 = Nonce0;
|
||||
MaxLider.Hash2 = Hash2;
|
||||
@@ -145,13 +147,13 @@ function CreatePOWVersion3(Block, bHashPump) {
|
||||
Block.LastNonce0 = Nonce0;
|
||||
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];
|
||||
WriteUintToArrOnPos(Block.AddrHash, Miner, 0);
|
||||
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce0, 6);
|
||||
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce1, 12);
|
||||
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce2, 18);
|
||||
WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum1, 24);
|
||||
WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum2, 26);
|
||||
WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
||||
global.WriteUintToArrOnPos(Block.AddrHash, Miner, 0);
|
||||
global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce0, 6);
|
||||
global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce1, 12);
|
||||
global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce2, 18);
|
||||
global.WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum1, 24);
|
||||
global.WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum2, 26);
|
||||
global.WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
||||
Block.Hash = MaxLider.Hash2;
|
||||
if (global.CompareArr(MaxLider.Hash1, MaxLider.Hash2) > 0) {
|
||||
Block.PowHash = MaxLider.Hash1;
|
||||
@@ -160,10 +162,10 @@ function CreatePOWVersion3(Block, bHashPump) {
|
||||
Block.PowHash = MaxLider.Hash2;
|
||||
}
|
||||
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO)
|
||||
Block.Hash = sha3arr2(MaxLider.Hash1, MaxLider.Hash2);
|
||||
Block.Hash = global.sha3arr2(MaxLider.Hash1, MaxLider.Hash2);
|
||||
else
|
||||
Block.Hash = shaarr2(MaxLider.Hash1, MaxLider.Hash2);
|
||||
var Power = GetPowPower(Block.PowHash);
|
||||
Block.Hash = global.shaarr2(MaxLider.Hash1, MaxLider.Hash2);
|
||||
var Power = global.GetPowPower(Block.PowHash);
|
||||
Block.HashCount = (1 << Power) >>> 0;
|
||||
}
|
||||
return Ret;
|
||||
@@ -176,7 +178,7 @@ function FindHashBuffer3(HashFind, BlockNum, Miner, CountFind) {
|
||||
var BlockNum2 = BufferBlockNum3[Index];
|
||||
if (BlockNum2 && BlockNum2 > BlockNum - DELTA_LONG_MINING) {
|
||||
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 };
|
||||
}
|
||||
}
|
||||
@@ -193,7 +195,7 @@ global.GetNonceHashArr = function(BlockNum, Miner, StartNonceRnd, CountNonce) {
|
||||
var ArrHash = [];
|
||||
for (var n = 0; n < CountNonce; 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];
|
||||
ArrNonce[n] = Nonce;
|
||||
ArrHash[n] = HashNum;
|
||||
|
||||
@@ -19,9 +19,10 @@ if (global.PROCESS_NAME === "MAIN" || global.PROCESS_NAME === "TX")
|
||||
require("./wallet");
|
||||
module.exports = class CSmartContract extends require("./block-exchange")
|
||||
{
|
||||
BufHashTree
|
||||
constructor(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
|
||||
}
|
||||
AddBlockToHashTree(Block) {
|
||||
@@ -73,8 +74,8 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var key in DApps) {
|
||||
DApps[key].OnWriteBlockStart(Block)
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].OnWriteBlockStart(Block)
|
||||
}
|
||||
var arrContentResult = [];
|
||||
var BlockNum = Block.BlockNum;
|
||||
@@ -86,11 +87,11 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
||||
continue;
|
||||
}
|
||||
var type = arr[i][0];
|
||||
var App = DAppByType[type];
|
||||
var App = global.DAppByType[type];
|
||||
if (App) {
|
||||
App.ResultTx = 0
|
||||
global.DApps.Accounts.BeginTransaction()
|
||||
var StrHex = global.GetHexFromArr(sha3(arr[i]));
|
||||
var StrHex = global.GetHexFromArr(global.sha3(arr[i]));
|
||||
var item;
|
||||
global.CurTrItem = undefined
|
||||
if (global.TreeFindTX) {
|
||||
@@ -103,7 +104,7 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
||||
if (Result === true) {
|
||||
if (App.ResultTx)
|
||||
SetResult = App.ResultTx
|
||||
if (!DApps.Accounts.CommitTransaction(BlockNum, i))
|
||||
if (!global.DApps.Accounts.CommitTransaction(BlockNum, i))
|
||||
SetResult = 0
|
||||
}
|
||||
else {
|
||||
@@ -137,40 +138,40 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
||||
}
|
||||
if (arrContentResult.length)
|
||||
process.send({ cmd: "WriteBodyResult", BlockNum: Block.BlockNum, arrContentResult: arrContentResult })
|
||||
for (var key in DApps) {
|
||||
DApps[key].OnWriteBlockFinish(Block)
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].OnWriteBlockFinish(Block)
|
||||
}
|
||||
}
|
||||
BlockDeleteTX(Block) {
|
||||
this.BufHashTree.LastAddNum = 0
|
||||
for (var key in DApps) {
|
||||
DApps[key].OnDeleteBlock(Block)
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].OnDeleteBlock(Block)
|
||||
}
|
||||
}
|
||||
OnDelete(Block) {
|
||||
}
|
||||
IsValidTicket(Tr, BlockNum) {
|
||||
this.CheckCreateTicketObject(Tr, BlockNum)
|
||||
if (Tr.power < MIN_POWER_POW_TR)
|
||||
if (Tr.power < global.MIN_POWER_POW_TR)
|
||||
return - 2;
|
||||
if (Tr.num !== BlockNum)
|
||||
return - 3;
|
||||
return 1;
|
||||
}
|
||||
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;
|
||||
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;
|
||||
if (Tr.num !== BlockNum)
|
||||
return - 3;
|
||||
if (Tr.body[0] === TYPE_TRANSACTION_ACC_HASH)
|
||||
if (Tr.body[0] === global.TYPE_TRANSACTION_ACC_HASH)
|
||||
return - 4;
|
||||
return 1;
|
||||
}
|
||||
ReWriteDAppTransactions(Length) {
|
||||
if (!TX_PROCESS.Worker)
|
||||
if (!global.TX_PROCESS.Worker)
|
||||
return 0;
|
||||
if (!Length)
|
||||
return 0;
|
||||
@@ -188,22 +189,22 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
||||
return 1;
|
||||
}
|
||||
AddDAppTransactions(BlockNum, Arr) {
|
||||
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
||||
if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||
return;
|
||||
var BlockNumHash = BlockNum - DELTA_BLOCK_ACCOUNT_HASH;
|
||||
var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH;
|
||||
if (BlockNumHash < 0)
|
||||
return;
|
||||
var Item = global.DApps.Accounts.GetAccountHashItem(BlockNumHash);
|
||||
if (Item) {
|
||||
var Body = [TYPE_TRANSACTION_ACC_HASH];
|
||||
WriteUintToArr(Body, BlockNumHash)
|
||||
WriteArrToArr(Body, Item.AccHash, 32)
|
||||
if (BlockNumHash >= START_BLOCK_ACCOUNT_HASH3) {
|
||||
WriteUintToArr(Body, Item.AccountMax)
|
||||
WriteArrToArr(Body, Item.SmartHash, 32)
|
||||
WriteUintToArr(Body, Item.SmartCount)
|
||||
WriteUintToArr(Body, BlockNum)
|
||||
WriteUintToArr(Body, 0)
|
||||
var Body = [global.TYPE_TRANSACTION_ACC_HASH];
|
||||
global.WriteUintToArr(Body, BlockNumHash)
|
||||
global.WriteArrToArr(Body, Item.AccHash, 32)
|
||||
if (BlockNumHash >= global.START_BLOCK_ACCOUNT_HASH3) {
|
||||
global.WriteUintToArr(Body, Item.AccountMax)
|
||||
global.WriteArrToArr(Body, Item.SmartHash, 32)
|
||||
global.WriteUintToArr(Body, Item.SmartCount)
|
||||
global.WriteUintToArr(Body, BlockNum)
|
||||
global.WriteUintToArr(Body, 0)
|
||||
}
|
||||
var Tr = { body: Body };
|
||||
this.CheckCreateTransactionObject(Tr)
|
||||
@@ -213,7 +214,7 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
||||
AddTransactionOwn(Tr) {
|
||||
if (!global.TX_PROCESS.Worker)
|
||||
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 })
|
||||
return this.AddTransaction(Tr, 1);
|
||||
}
|
||||
|
||||
@@ -12,17 +12,19 @@
|
||||
const MAX_MESSAGE_COUNT = 1000;
|
||||
module.exports = class CMessages extends require("./transaction-validator")
|
||||
{
|
||||
MemPoolMsg
|
||||
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.MemPoolMsg = []
|
||||
for (var i = 0; i <= MAX_LEVEL_SPECIALIZATION; i++)
|
||||
this.MemPoolMsg[i] = new RBTree(CompareItemTimePow)
|
||||
for (var i = 0; i <= global.MAX_LEVEL_SPECIALIZATION; i++)
|
||||
this.MemPoolMsg[i] = new RBTree(global.CompareItemTimePow)
|
||||
}
|
||||
AddMsgToQuote(Msg) {
|
||||
var Tree = this.MemPoolMsg[Msg.Level];
|
||||
if (Tree) {
|
||||
if (Tree.insert(Msg)) {
|
||||
if (Tree.size > MEM_POOL_MSG_COUNT) {
|
||||
if (Tree.size > global.MEM_POOL_MSG_COUNT) {
|
||||
var maxitem = Tree.max();
|
||||
Tree.remove(maxitem)
|
||||
if (maxitem === Msg)
|
||||
@@ -38,7 +40,7 @@ module.exports = class CMessages extends require("./transaction-validator")
|
||||
}
|
||||
IsValidMsg(Msg) {
|
||||
this.CheckCreateMsgHASH(Msg)
|
||||
if (Msg.power < MIN_POWER_POW_MSG)
|
||||
if (Msg.power < global.MIN_POWER_POW_MSG)
|
||||
return - 1;
|
||||
if (Msg.time > this.CurrentBlockNum)
|
||||
return - 1;
|
||||
@@ -47,18 +49,18 @@ module.exports = class CMessages extends require("./transaction-validator")
|
||||
CheckCreateMsgHASH(Msg) {
|
||||
if (!Msg.HashPow) {
|
||||
Msg.HASH = global.sha3(Msg.body)
|
||||
Msg.HashPow = GetHashWithValues(Msg.HASH, Msg.nonce, Msg.time)
|
||||
Msg.power = GetPowPower(Msg.HashPow)
|
||||
Msg.HashPow = global.GetHashWithValues(Msg.HASH, Msg.nonce, Msg.time)
|
||||
Msg.power = global.GetPowPower(Msg.HashPow)
|
||||
Msg.TimePow = Msg.time + Msg.power - Math.log2(Msg.body.length / 128)
|
||||
Msg.Level = AddrLevelArr(this.addrArr, Msg.addrArr)
|
||||
if (Msg.Level >= MAX_LEVEL_SPECIALIZATION)
|
||||
Msg.Level = MAX_LEVEL_SPECIALIZATION
|
||||
Msg.Level = global.AddrLevelArr(this.addrArr, Msg.addrArr)
|
||||
if (Msg.Level >= global.MAX_LEVEL_SPECIALIZATION)
|
||||
Msg.Level = global.MAX_LEVEL_SPECIALIZATION
|
||||
}
|
||||
}
|
||||
CreateMsgFromBody(Body, ToAddr) {
|
||||
var HASH = global.sha3(Body);
|
||||
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,
|
||||
};
|
||||
this.CheckCreateMsgHASH(Msg)
|
||||
@@ -97,8 +99,9 @@ module.exports = class CMessages extends require("./transaction-validator")
|
||||
var Msg = arr[i];
|
||||
if (this.IsValidMsg(Msg)) {
|
||||
if (global.CompareArr(this.addrArr, Msg.addrArr) === 0) {
|
||||
var App = DAppByType[Msg.body[0]];
|
||||
var App = global.DAppByType[Msg.body[0]];
|
||||
if (App) {
|
||||
//@ts-ignore
|
||||
App.OnMessage(Msg, BlockNum, i)
|
||||
}
|
||||
}
|
||||
@@ -117,7 +120,7 @@ module.exports = class CMessages extends require("./transaction-validator")
|
||||
GETMESSAGE(Info, CurTime) {
|
||||
var arr = [];
|
||||
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];
|
||||
if (Tree) {
|
||||
var it = Tree.iterator(), Item;
|
||||
@@ -145,10 +148,10 @@ module.exports = class CMessages extends require("./transaction-validator")
|
||||
setTimeout(function() {
|
||||
var Res = SELF.AddTransaction(TR, 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)
|
||||
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 - 3;
|
||||
@@ -170,10 +173,10 @@ module.exports = class CMessages extends require("./transaction-validator")
|
||||
SendTransaction(Tr) {
|
||||
if (!Tr.ToAll)
|
||||
return;
|
||||
var CurTime = GetCurrentTime(0) - 0;
|
||||
var CurTime = global.GetCurrentTime(0) - 0;
|
||||
var Count;
|
||||
if (GrayConnect())
|
||||
Count = Math.trunc(MAX_GRAY_CONNECTIONS_TO_SERVER / 2)
|
||||
if (global.GrayConnect())
|
||||
Count = Math.trunc(global.MAX_GRAY_CONNECTIONS_TO_SERVER / 2)
|
||||
else
|
||||
Count = Math.min(this.ActualNodes.size, 16)
|
||||
if (Count < 2)
|
||||
|
||||
@@ -12,14 +12,14 @@ global.RunOnUpdate = RunOnUpdate;
|
||||
|
||||
function RunOnUpdate() {
|
||||
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)
|
||||
UpdateInfo.UPDATE_NUM_COMPLETE = 0;
|
||||
var CurNum = UpdateInfo.UPDATE_NUM_COMPLETE;
|
||||
if (CurNum !== UPDATE_CODE_VERSION_NUM) {
|
||||
UpdateInfo.UPDATE_NUM_COMPLETE = UPDATE_CODE_VERSION_NUM;
|
||||
if (CurNum !== global.UPDATE_CODE_VERSION_NUM) {
|
||||
UpdateInfo.UPDATE_NUM_COMPLETE = global.UPDATE_CODE_VERSION_NUM;
|
||||
global.ToLog("UPDATER Start");
|
||||
SaveParams(fname, UpdateInfo);
|
||||
global.SaveParams(fname, UpdateInfo);
|
||||
if (global.TEST_NETWORK || global.LOCAL_RUN) {
|
||||
}
|
||||
else {
|
||||
@@ -43,7 +43,7 @@ function CreateHeadersHash100() {
|
||||
if (Num === 0)
|
||||
Hash100 = [];
|
||||
else
|
||||
Hash100 = sha3arr2(PrevHash100, Block.Hash);
|
||||
Hash100 = global.sha3arr2(PrevHash100, Block.Hash);
|
||||
DB.Write({ Num: Num / 100, Hash100: Hash100, Hash: Block.Hash });
|
||||
if (Num % 1000000 === 0)
|
||||
global.ToLog("Create Hash100:" + Num);
|
||||
@@ -54,12 +54,12 @@ function CreateHeadersHash100() {
|
||||
};
|
||||
|
||||
function CheckRewriteTr(Num, StrHash, StartRewrite) {
|
||||
if (SERVER.BlockNumDB < StartRewrite)
|
||||
if (global.SERVER.BlockNumDB < StartRewrite)
|
||||
return "NO";
|
||||
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
||||
if (!AccountsHash || global.GetHexFromArr(AccountsHash) !== StrHash) {
|
||||
global.ToLog("START REWRITE ERR ACTS TRANSACTIONS");
|
||||
global.SERVER.ReWriteDAppTransactions(SERVER.BlockNumDB - StartRewrite);
|
||||
global.SERVER.ReWriteDAppTransactions(global.SERVER.BlockNumDB - StartRewrite);
|
||||
return "Rewrite";
|
||||
}
|
||||
else {
|
||||
@@ -71,7 +71,7 @@ function CheckRewriteAllTr2(Num, StrHash, Num2, StrHash2) {
|
||||
if (global.LOCAL_RUN || global.TEST_NETWORK)
|
||||
return "NONE";
|
||||
var MaxNum = global.SERVER.GetMaxNumBlockDB();
|
||||
if (MaxNum < START_BLOCK_ACCOUNT_HASH)
|
||||
if (MaxNum < global.START_BLOCK_ACCOUNT_HASH)
|
||||
return "NONE";
|
||||
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
||||
var AccountsHash2 = global.DApps.Accounts.GetHashOrUndefined(Num2);
|
||||
@@ -80,8 +80,8 @@ function CheckRewriteAllTr2(Num, StrHash, Num2, StrHash2) {
|
||||
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
|
||||
global.ToLog("***************** START REWRITE ALL DAPPS");
|
||||
global.UpdateMode = 1;
|
||||
for (var key in DApps) {
|
||||
DApps[key].ClearDataBase();
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].ClearDataBase();
|
||||
}
|
||||
global.UpdateMode = 0;
|
||||
return "Rewrite";
|
||||
@@ -95,14 +95,14 @@ function CheckRewriteAllTr(Num, StrHash, Num2, StrHash2) {
|
||||
if (global.LOCAL_RUN || global.TEST_NETWORK)
|
||||
return "NONE";
|
||||
var MaxNum = global.SERVER.GetMaxNumBlockDB();
|
||||
if (MaxNum < START_BLOCK_ACCOUNT_HASH)
|
||||
if (MaxNum < global.START_BLOCK_ACCOUNT_HASH)
|
||||
return "NONE";
|
||||
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
||||
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
|
||||
global.ToLog("***************** START REWRITE ALL DAPPS");
|
||||
global.UpdateMode = 1;
|
||||
for (var key in DApps) {
|
||||
DApps[key].ClearDataBase();
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].ClearDataBase();
|
||||
}
|
||||
global.UpdateMode = 0;
|
||||
return "Rewrite";
|
||||
@@ -154,7 +154,7 @@ function ReWriteDBSmartWrite() {
|
||||
var Item = global.DApps.Smart.DBSmart.Read(num);
|
||||
if (!Item)
|
||||
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)
|
||||
global.ToLog("Smart " + Item.Num + ". " + Item.Name + " length=" + Body.length);
|
||||
global.DApps.Smart.DBSmartWrite(Item);
|
||||
|
||||
@@ -17,12 +17,18 @@ const WalletPath = "WALLET";
|
||||
const DBRow = require("./db/db-row");
|
||||
const CONFIG_NAME = global.GetDataPath(WalletPath + "/config.lst");
|
||||
class CApp {
|
||||
Password
|
||||
WalletOpen
|
||||
AccountMap
|
||||
KeyPair
|
||||
KeyXOR
|
||||
PubKeyArr
|
||||
constructor() {
|
||||
CheckCreateDir(global.GetDataPath(WalletPath))
|
||||
global.CheckCreateDir(global.GetDataPath(WalletPath))
|
||||
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
||||
this.Password = ""
|
||||
this.WalletOpen = undefined
|
||||
var Params = LoadParams(CONFIG_NAME, undefined);
|
||||
var Params = global.LoadParams(CONFIG_NAME, undefined);
|
||||
if (!Params) {
|
||||
Params = {}
|
||||
if (global.TEST_NETWORK) {
|
||||
@@ -39,7 +45,7 @@ class CApp {
|
||||
this.AccountMap = Params.AccountMap
|
||||
this.KeyPair = crypto.createECDH('secp256k1')
|
||||
if (Params.Protect) {
|
||||
ToLogClient("Wallet protect by password")
|
||||
global.ToLogClient("Wallet protect by password")
|
||||
this.KeyXOR = global.GetArrFromHex(Params.KeyXOR)
|
||||
this.WalletOpen = false
|
||||
this.SetPrivateKey(Params.PubKey)
|
||||
@@ -55,22 +61,22 @@ class CApp {
|
||||
AddTransaction(Tr) {
|
||||
if (!global.TX_PROCESS.Worker)
|
||||
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 })
|
||||
return global.SERVER.AddTransaction(Tr, 1);
|
||||
}
|
||||
SetPrivateKey(KeyStr, bSetNew) {
|
||||
SetPrivateKey(KeyStr, bSetNew?) {
|
||||
var bGo = 1;
|
||||
if (this.WalletOpen === false) {
|
||||
bGo = 0
|
||||
}
|
||||
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.PubKeyStr = global.GetHexFromArr(this.KeyPair.PubKeyArr)
|
||||
this.KeyPair.PrivKeyStr = KeyStr.toUpperCase()
|
||||
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.WasInit = 1
|
||||
this.PubKeyArr = this.KeyPair.PubKeyArr
|
||||
@@ -98,38 +104,38 @@ class CApp {
|
||||
this.Password = ""
|
||||
this.WalletOpen = false
|
||||
this.KeyPair = crypto.createECDH('secp256k1')
|
||||
this.SetPrivateKey(GetHexFromArr(this.PubKeyArr), false)
|
||||
ToLogClient("Wallet close")
|
||||
this.SetPrivateKey(global.GetHexFromArr(this.PubKeyArr), false)
|
||||
global.ToLogClient("Wallet close")
|
||||
return 1;
|
||||
}
|
||||
OpenWallet(StrPassword) {
|
||||
if (this.WalletOpen !== false) {
|
||||
ToLogClient("Wallet was open")
|
||||
global.ToLogClient("Wallet was open")
|
||||
}
|
||||
var Hash = this.HashProtect(StrPassword);
|
||||
var TestPrivKey = this.XORHash(this.KeyXOR, Hash, 32);
|
||||
if (!IsZeroArr(TestPrivKey)) {
|
||||
if (!global.IsZeroArr(TestPrivKey)) {
|
||||
this.KeyPair.setPrivateKey(Buffer.from(TestPrivKey))
|
||||
var TestPubKey = this.KeyPair.getPublicKey('', 'compressed');
|
||||
if (global.CompareArr(TestPubKey, this.PubKeyArr) !== 0) {
|
||||
ToLogClient("Wrong password")
|
||||
global.ToLogClient("Wrong password")
|
||||
return 0;
|
||||
}
|
||||
this.Password = StrPassword
|
||||
this.WalletOpen = true
|
||||
this.SetPrivateKey(GetHexFromArr(TestPrivKey), false)
|
||||
this.SetPrivateKey(global.GetHexFromArr(TestPrivKey), false)
|
||||
}
|
||||
else {
|
||||
this.Password = StrPassword
|
||||
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;
|
||||
}
|
||||
SetPasswordNew(StrPassword) {
|
||||
if (this.WalletOpen === false) {
|
||||
ToLogClient("Wallet is close by password")
|
||||
global.ToLogClient("Wallet is close by password")
|
||||
return;
|
||||
}
|
||||
this.Password = StrPassword
|
||||
@@ -157,7 +163,7 @@ class CApp {
|
||||
if (this.WalletOpen === false) {
|
||||
return;
|
||||
}
|
||||
var Params = {};
|
||||
var Params: any = {};
|
||||
if (this.Password) {
|
||||
Params.Protect = true
|
||||
var Hash = this.HashProtect(this.Password);
|
||||
@@ -179,13 +185,13 @@ class CApp {
|
||||
}
|
||||
Params.AccountMap = this.AccountMap
|
||||
Params.MiningAccount = global.GENERATE_BLOCK_ACCOUNT
|
||||
SaveParams(CONFIG_NAME, Params)
|
||||
global.SaveParams(CONFIG_NAME, Params)
|
||||
}
|
||||
OnCreateAccount(Data) {
|
||||
this.AccountMap[Data.Num] = 0
|
||||
}
|
||||
FindMyAccounts(bClean) {
|
||||
if (IsZeroArr(this.PubKeyArr))
|
||||
if (global.IsZeroArr(this.PubKeyArr))
|
||||
return;
|
||||
if (bClean)
|
||||
this.AccountMap = {}
|
||||
@@ -212,15 +218,15 @@ class CApp {
|
||||
if (!this.KeyPair.WasInit)
|
||||
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
||||
var PrivKey = this.GetPrivateKey(Num);
|
||||
var sigObj = secp256k1.sign(SHA3BUF(Arr), Buffer.from(PrivKey));
|
||||
returnglobal.GetHexFromArr(sigObj.signature);
|
||||
var sigObj = global.secp256k1.sign(global.SHA3BUF(Arr), Buffer.from(PrivKey));
|
||||
return global.GetHexFromArr(sigObj.signature);
|
||||
}
|
||||
GetSignTransaction(TR) {
|
||||
if (!this.KeyPair.WasInit)
|
||||
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
||||
var PrivKey = this.GetPrivateKey(this.AccountMap[TR.FromID]);
|
||||
var Arr = global.DApps.Accounts.GetSignTransferTx(TR, PrivKey);
|
||||
returnglobal.GetHexFromArr(Arr);
|
||||
return global.GetHexFromArr(Arr);
|
||||
}
|
||||
};
|
||||
global.WALLET = new CApp;
|
||||
|
||||
207
src/global.d.ts
vendored
207
src/global.d.ts
vendored
@@ -18,15 +18,25 @@ declare global {
|
||||
HTTP_PORT_NUMBER: number;
|
||||
LOCAL_RUN: number;
|
||||
//#endregion
|
||||
|
||||
//#region main-process.ts
|
||||
PROCESS_NAME: string;
|
||||
POWPROCESS: number;
|
||||
DEBUGPROCESS: any;
|
||||
START_SERVER: number;
|
||||
SetCalcPOW: Function;
|
||||
RunStopPOWProcess: Function;
|
||||
NEW_SERVER_PRIVATE_KEY: number;
|
||||
//#endregion
|
||||
|
||||
//#region constant.ts
|
||||
UPDATE_CODE_VERSION_NUM: number;
|
||||
MIN_CODE_VERSION_NUM: number;
|
||||
MINING_VERSION_NUM: number;
|
||||
InitParamsArg: Function;
|
||||
CONST_NAME_ARR: string[];
|
||||
MAX_LENGTH_SENDER_MAP: number;
|
||||
DELTA_START_SENDER_MAP: number;
|
||||
NODES_DELTA_CALC_HOUR: number;
|
||||
USE_HARD_API_V2: number;
|
||||
USE_TICKET: number;
|
||||
@@ -49,11 +59,11 @@ declare global {
|
||||
SERVER_PRIVATE_KEY_HEX: string;
|
||||
USE_NET_FOR_SERVER_ADDRES: number;
|
||||
NET_WORK_MODE: {
|
||||
ip: string;
|
||||
port: number;
|
||||
UseDirectIP: boolean;
|
||||
NodeWhiteList: string;
|
||||
DoRestartNode: number;
|
||||
ip?: string;
|
||||
port?: number | string;
|
||||
UseDirectIP?: boolean | number;
|
||||
NodeWhiteList?: string;
|
||||
DoRestartNode?: number;
|
||||
}
|
||||
STAT_MODE: number;
|
||||
MAX_STAT_PERIOD: number;
|
||||
@@ -140,7 +150,7 @@ declare global {
|
||||
NEW_SIGN_TIME: number;
|
||||
TEST_TRANSACTION_GENERATE: number;
|
||||
TEST_NETWORK: boolean | number;
|
||||
START_PORT_NUMBER: number;
|
||||
START_PORT_NUMBER: number | string;
|
||||
GetNetworkName: Function;
|
||||
DEF_VERSION: string;
|
||||
DEF_CLIENT: string;
|
||||
@@ -161,10 +171,6 @@ declare global {
|
||||
NWMODE: number;
|
||||
NOALIVE: number;
|
||||
DEV_MODE: number;
|
||||
START_SERVER: number;
|
||||
SetCalcPOW: Function;
|
||||
RunStopPOWProcess: Function;
|
||||
NEW_SERVER_PRIVATE_KEY: number;
|
||||
//#endregion
|
||||
|
||||
//#region startlib.ts
|
||||
@@ -180,8 +186,8 @@ declare global {
|
||||
ToLogClient: Function;
|
||||
|
||||
glCurNumFindArr: number;
|
||||
ArrReconnect: [];
|
||||
ArrConnect: [];
|
||||
ArrReconnect: any[];
|
||||
ArrConnect: any[];
|
||||
|
||||
//#region main-process.ts:51
|
||||
SERVER: any;
|
||||
@@ -192,7 +198,7 @@ declare global {
|
||||
|
||||
//#region main-process.ts:100
|
||||
GetCurrentTime: Function;
|
||||
//#region main-process.ts:100
|
||||
//#endregion
|
||||
|
||||
//#region
|
||||
SpeedSignLib: number;
|
||||
@@ -269,7 +275,8 @@ declare global {
|
||||
|
||||
//#region run-nw.ts
|
||||
NWVERSION: string;
|
||||
HTTP_SERVER_START_OK: boolean;
|
||||
HTTP_SERVER_START_OK: boolean | number;
|
||||
NO_HISTORY_MODE: boolean;
|
||||
//#endregion
|
||||
|
||||
//#region crypto-library.ts
|
||||
@@ -367,15 +374,28 @@ declare global {
|
||||
|
||||
//#region base.ts
|
||||
glStopNode: any;
|
||||
GetCheckAccHash: Function;
|
||||
ReadHashFromBufDB: Function;
|
||||
STreeBuffer: any;
|
||||
TestCreateTr: Function;
|
||||
//#endregion
|
||||
|
||||
//#region html-server.ts
|
||||
HTTPCaller: any;
|
||||
DappTemplateFile: Function;
|
||||
DappSmartCodeFile: Function;
|
||||
DappClientCodeFile
|
||||
SendBlockFile
|
||||
|
||||
DappClientCodeFile: Function;
|
||||
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;
|
||||
//#endregion
|
||||
|
||||
@@ -397,10 +417,13 @@ declare global {
|
||||
|
||||
//#region block-db.ts
|
||||
BlockDB: any;
|
||||
BLOCK_HEADER_SIZE
|
||||
BLOCK_HEADER_SIZE2
|
||||
DB_VERSION
|
||||
|
||||
BLOCK_HEADER_SIZE: number;
|
||||
BLOCK_HEADER_SIZE2: number;
|
||||
DB_VERSION: number;
|
||||
AddInfoChain: Function;
|
||||
AddInfoBlock: Function;
|
||||
GetNodeStrPort: Function;
|
||||
NO_CHECK_BLOCKNUM_ONSTART: number;
|
||||
//#endregion
|
||||
|
||||
//#region db.ts
|
||||
@@ -436,6 +459,7 @@ declare global {
|
||||
//#endregion
|
||||
|
||||
//#region transaction-validator.ts
|
||||
CurTrItem: any;
|
||||
//#endregion
|
||||
|
||||
//#region connect.ts
|
||||
@@ -448,10 +472,28 @@ declare global {
|
||||
MIN_PERIOD_PING: number;
|
||||
MAX_PING_FOR_CONNECT: number;
|
||||
MAX_WAIT_PERIOD_FOR_HOT: number;
|
||||
GetGrayServerConnections: Function;
|
||||
SortNodeBlockProcessCount: Function;
|
||||
//#endregion
|
||||
|
||||
//#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
|
||||
|
||||
//#region terahashlib.js
|
||||
@@ -486,12 +528,125 @@ declare global {
|
||||
shaarrblock2: Function;
|
||||
//#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;
|
||||
sha3: any;
|
||||
SHA3BUF: any;
|
||||
shaarr: any;
|
||||
ELECTRON: any;
|
||||
TestTestWaletMode: any;
|
||||
}
|
||||
interface Process {
|
||||
RunRPC: Function;
|
||||
@@ -507,6 +662,7 @@ declare global {
|
||||
Path: string;
|
||||
OnMessage: Function;
|
||||
PeriodAlive: number;
|
||||
RunRPC?: Function;
|
||||
}
|
||||
interface Worker {
|
||||
connected: boolean;
|
||||
@@ -542,7 +698,12 @@ declare global {
|
||||
DappTransactionList?: Function;
|
||||
DappStaticCall?: Function;
|
||||
GetHistoryTransactions?: Function;
|
||||
GetSupply?: Function;
|
||||
GetTotalSupply?: Function;
|
||||
}
|
||||
|
||||
interface Buffer {
|
||||
Read,
|
||||
Write,
|
||||
len
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ WebApi2.CreateAccount = function(Params, response) {
|
||||
Body = Body.slice(0, Body.len + 12);
|
||||
SendTransaction(Body, TR as any, Params.Wait, function(result, text) {
|
||||
var Result = {
|
||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||
Meta: Params.Meta,
|
||||
};
|
||||
var Str = JSON.stringify(Result);
|
||||
@@ -42,10 +42,10 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
||||
return { result: 0 };
|
||||
var Coin;
|
||||
if (typeof Params.Amount === "number")
|
||||
Coin = COIN_FROM_FLOAT(Params.Amount);
|
||||
Coin = global.COIN_FROM_FLOAT(Params.Amount);
|
||||
else
|
||||
Coin = Params.Amount;
|
||||
var FromNum = ParseNum(Params.FromID);
|
||||
var FromNum = global.ParseNum(Params.FromID);
|
||||
if (!Coin)
|
||||
return { result: 0, Meta: Params.Meta, text: "Params.Amount required" };
|
||||
if (!FromNum)
|
||||
@@ -57,7 +57,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
||||
if (typeof Params.ToID === "string" && Params.ToID.length === 66)
|
||||
ToPubKeyArr = global.GetArrFromHex(Params.ToID);
|
||||
else
|
||||
ToID = ParseNum(Params.ToID);
|
||||
ToID = global.ParseNum(Params.ToID);
|
||||
var DataFrom = global.DApps.Accounts.ReadState(FromNum);
|
||||
if (!DataFrom)
|
||||
return { result: 0, Meta: Params.Meta, text: "Error read account: " + FromNum };
|
||||
@@ -68,14 +68,14 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
||||
}
|
||||
else {
|
||||
OperationID = MapSendID[FromNum].OperationID;
|
||||
if ((new Date() - MapSendID[FromNum].Date) > 8 * 1000) {
|
||||
if (((new Date() as any) - MapSendID[FromNum].Date) > 8 * 1000) {
|
||||
OperationID += 20;
|
||||
}
|
||||
}
|
||||
OperationID++;
|
||||
MapSendID[FromNum].OperationID = OperationID;
|
||||
MapSendID[FromNum].Date = Date.now();
|
||||
var TR = {
|
||||
var TR: any = {
|
||||
Type: 111, Version: 3, Reserve: 0, FromID: FromNum, OperationID: OperationID, To: [{
|
||||
PubKey: ToPubKeyArr, ID: ToID, SumCOIN: Coin.SumCOIN,
|
||||
SumCENT: Coin.SumCENT
|
||||
@@ -86,11 +86,11 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
||||
if (!Params.FromPrivKey)
|
||||
return { result: 0, Meta: Params.Meta, text: "Params.FromPrivKey required" };
|
||||
TR.Sign = global.DApps.Accounts.GetSignTransferTx(TR, global.GetArrFromHex(Params.FromPrivKey));
|
||||
var Body = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
|
||||
var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER3, global.MAX_TRANSACTION_SIZE, {}, 1);
|
||||
Body = Body.slice(0, Body.len + 12);
|
||||
SendTransaction(Body, TR, Params.Wait, function(result, text) {
|
||||
var Result = {
|
||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||
Meta: Params.Meta,
|
||||
};
|
||||
var Str = JSON.stringify(Result);
|
||||
@@ -100,7 +100,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
||||
};
|
||||
WebApi2.GetBalance = function(Params, response) {
|
||||
if (typeof Params === "object") {
|
||||
var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.AccountID), 1);
|
||||
var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.AccountID), 1);
|
||||
if (arr.length) {
|
||||
var Account = arr[0];
|
||||
var Value = Account.Value;
|
||||
@@ -116,7 +116,7 @@ WebApi2.GetBalance = function(Params, response) {
|
||||
WebApi2.GetTransaction = function(Params) {
|
||||
if (typeof Params === "object" && Params.TxID) {
|
||||
var Arr = global.GetArrFromHex(Params.TxID);
|
||||
var BlockNum = ReadUintFromArr(Arr, TR_TICKET_HASH_LENGTH);
|
||||
var BlockNum = global.ReadUintFromArr(Arr, global.TR_TICKET_HASH_LENGTH);
|
||||
var Block = global.SERVER.ReadBlockDB(BlockNum);
|
||||
if (Block && Block.arrContent) {
|
||||
for (var i = 0; i < Block.arrContent.length; i++) {
|
||||
@@ -209,11 +209,11 @@ WebApi2.SendRawTransaction = function(Params, response) {
|
||||
return { result: 0, Meta: Params.Meta, text: "Params.Tx.Sign required" };
|
||||
var TR = Params.Tx;
|
||||
TxHexToArr(TR);
|
||||
var Body = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
|
||||
var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER3, global.MAX_TRANSACTION_SIZE, {}, 1);
|
||||
Body = Body.slice(0, Body.len + 12);
|
||||
SendTransaction(Body, TR, Params.Wait, function(result, text) {
|
||||
var Result = {
|
||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||
Meta: Params.Meta,
|
||||
};
|
||||
var Str = JSON.stringify(Result);
|
||||
@@ -252,9 +252,9 @@ function TxHexToArr(TR) {
|
||||
var DELTA_FOR_TIME_TX = 1;
|
||||
|
||||
function GetTxID(BlockNum, Body) {
|
||||
var Nonce = ReadUintFromArr(Body, Body.length - 6);
|
||||
var Nonce = global.ReadUintFromArr(Body, Body.length - 6);
|
||||
var Arr2 = CreateTxID(Body, BlockNum, Nonce);
|
||||
return Arr2.slice(0, TR_TICKET_HASH_LENGTH + 6);
|
||||
return Arr2.slice(0, global.TR_TICKET_HASH_LENGTH + 6);
|
||||
};
|
||||
|
||||
function CreateTxID(body, BlockNum, Nonce) {
|
||||
@@ -262,14 +262,14 @@ function CreateTxID(body, BlockNum, Nonce) {
|
||||
body.writeUIntLE(Nonce, body.length - 6, 6);
|
||||
var HASH = global.sha3(body);
|
||||
var FullHashTicket = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
for (var i = 0; i < TR_TICKET_HASH_LENGTH; i++)
|
||||
for (var i = 0; i < global.TR_TICKET_HASH_LENGTH; i++)
|
||||
FullHashTicket[i] = HASH[i];
|
||||
WriteUintToArrOnPos(FullHashTicket, BlockNum, TR_TICKET_HASH_LENGTH);
|
||||
global.WriteUintToArrOnPos(FullHashTicket, BlockNum, global.TR_TICKET_HASH_LENGTH);
|
||||
return FullHashTicket;
|
||||
};
|
||||
|
||||
function GetBlockNumTr(arr) {
|
||||
var BlockNum = DELTA_FOR_TIME_TX + GetCurrentBlockNumByTime();
|
||||
var BlockNum = DELTA_FOR_TIME_TX + global.GetCurrentBlockNumByTime();
|
||||
if (arr[0] === global.TYPE_TRANSACTION_CREATE) {
|
||||
var BlockNum2 = Math.floor(BlockNum / 10) * 10;
|
||||
if (BlockNum2 < BlockNum)
|
||||
@@ -282,12 +282,12 @@ function GetBlockNumTr(arr) {
|
||||
function CreateHashBodyPOWInnerMinPower(TR, arr, MinPow, startnonce) {
|
||||
var BlockNum = GetBlockNumTr(arr);
|
||||
if (MinPow === undefined) {
|
||||
MinPow = MIN_POWER_POW_TR + Math.log2(arr.length / 128);
|
||||
MinPow = global.MIN_POWER_POW_TR + Math.log2(arr.length / 128);
|
||||
}
|
||||
var nonce = startnonce;
|
||||
while (1) {
|
||||
var TxID = CreateTxID(arr, BlockNum, nonce);
|
||||
var power = GetPowPower(sha3(TxID));
|
||||
var power = global.GetPowPower(global.sha3(TxID));
|
||||
if (power >= MinPow) {
|
||||
TR._TxID = TxID;
|
||||
TR._BlockNum = BlockNum;
|
||||
@@ -349,7 +349,7 @@ function SendTransaction(Body, TR, Wait, F) {
|
||||
function GetTransactionFromBody(Params, Block, TrNum, Body) {
|
||||
var TR = global.DApps.Accounts.GetObjectTransaction(Body);
|
||||
if (TR) {
|
||||
ConvertBufferToStr(TR);
|
||||
global.ConvertBufferToStr(TR);
|
||||
TR.result = 1;
|
||||
TR.Meta = Params.Meta;
|
||||
if (Block.VersionBody === 1 && Block.arrContentResult) {
|
||||
|
||||
@@ -14,16 +14,9 @@ const fs = require('fs');
|
||||
const os = require('os');
|
||||
import * as crypto from 'crypto';
|
||||
|
||||
let {
|
||||
GetNormalPathString,
|
||||
sha3,
|
||||
AddTrMap,
|
||||
ADD_HASH_RATE
|
||||
} = global
|
||||
|
||||
global.START_SERVER = 1;
|
||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
||||
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
|
||||
console.log("DATA DIR: " + global.DATA_PATH);
|
||||
console.log("PROGRAM DIR: " + global.CODE_PATH);
|
||||
require("../core/library");
|
||||
@@ -31,7 +24,7 @@ global.ToLog(os.platform() + " (" + os.arch() + ") " + os.release());
|
||||
var VerArr = process.versions.node.split('.');
|
||||
global.ToLog("nodejs: " + process.versions.node);
|
||||
if ((VerArr[0] as any as number) < 8) {
|
||||
global.global.ToError("Error version of NodeJS=" + VerArr[0] + " Pls, download new version from www.nodejs.org and update it. The minimum version must be 8");
|
||||
global.ToError("Error version of NodeJS=" + VerArr[0] + " Pls, download new version from www.nodejs.org and update it. The minimum version must be 8");
|
||||
process.exit();
|
||||
}
|
||||
var CServer = require("../core/server");
|
||||
@@ -62,7 +55,7 @@ process.on('uncaughtException' as any, function(err: TeraError) {
|
||||
if (global.PROCESS_NAME !== "MAIN") {
|
||||
process.send({ cmd: "log", message: err });
|
||||
}
|
||||
global.global.ToError(err.stack);
|
||||
global.ToError(err.stack);
|
||||
global.ToLog(err.stack);
|
||||
if (err.code === "ENOTFOUND" || err.code === "ECONNRESET" || err.code === "EPIPE") {
|
||||
}
|
||||
@@ -73,7 +66,7 @@ process.on('uncaughtException' as any, function(err: TeraError) {
|
||||
}
|
||||
});
|
||||
process.on('error' as any, function(err: TeraError) {
|
||||
global.global.ToError(err.stack);
|
||||
global.ToError(err.stack);
|
||||
global.ToLog(err.stack);
|
||||
});
|
||||
var ArrChildProcess = [];
|
||||
@@ -134,15 +127,15 @@ function OnMessageWeb(msg) {
|
||||
function AddTransactionFromWeb(Params) {
|
||||
var body = global.GetArrFromHex(Params.HexValue);
|
||||
if (global.TX_PROCESS && global.TX_PROCESS.Worker) {
|
||||
var StrHex = global.GetHexFromArr(sha3(body));
|
||||
var StrHex = global.GetHexFromArr(global.sha3(body));
|
||||
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex, Web: 1, WebID: Params.WebID });
|
||||
}
|
||||
var Res = global.SERVER.AddTransaction({ body: body }, 1);
|
||||
var text = AddTrMap[Res];
|
||||
var text = global.AddTrMap[Res];
|
||||
var final = false;
|
||||
if (Res <= 0 && Res !== - 3)
|
||||
final = true;
|
||||
global.ToLogClient("Send: " + text, global.GetHexFromArr(sha3(body)), final);
|
||||
global.ToLogClient("Send: " + text, global.GetHexFromArr(global.sha3(body)), final);
|
||||
return text;
|
||||
};
|
||||
global.AddTransactionFromWeb = AddTransactionFromWeb;
|
||||
@@ -311,7 +304,7 @@ function StartChildProcess(Item) {
|
||||
ITEM.Worker.on('error', function(err) {
|
||||
});
|
||||
ITEM.Worker.on('close', function(code) {
|
||||
global.global.ToError("CLOSE " + ITEM.Name);
|
||||
global.ToError("CLOSE " + ITEM.Name);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -454,7 +447,7 @@ function RunStopPOWProcess(Mode) {
|
||||
return;
|
||||
if (GENERATE_BLOCK_ACCOUNT < 8)
|
||||
return;
|
||||
var PathMiner = GetCodePath("../miner.js");
|
||||
var PathMiner = global.GetCodePath("../miner.js");
|
||||
if (!fs.existsSync(PathMiner))
|
||||
PathMiner = "./process/pow-process.js";
|
||||
if (ArrMiningWrk.length >= GetCountMiningCPU())
|
||||
@@ -494,13 +487,13 @@ function RunStopPOWProcess(Mode) {
|
||||
}
|
||||
else
|
||||
if (msg.cmd === "HASHRATE") {
|
||||
ADD_HASH_RATE(msg.CountNonce);
|
||||
global.ADD_HASH_RATE(msg.CountNonce);
|
||||
}
|
||||
});
|
||||
Worker.on('error', function(err) {
|
||||
if (!ArrMiningWrk.length)
|
||||
return;
|
||||
global.global.ToError('ERROR IN PROCESS: ' + err);
|
||||
global.ToError('ERROR IN PROCESS: ' + err);
|
||||
});
|
||||
Worker.on('close', function(code) {
|
||||
global.ToLog("STOP PROCESS: " + Worker.Num + " pid:" + Worker.pid);
|
||||
@@ -533,9 +526,7 @@ function SetCalcPOW(Block, cmd) {
|
||||
};
|
||||
global.SetCalcPOW = SetCalcPOW;
|
||||
global.RunStopPOWProcess = RunStopPOWProcess;
|
||||
let {
|
||||
glCurNumFindArr
|
||||
} = global
|
||||
|
||||
function DoGetNodes() {
|
||||
if (!SERVER)
|
||||
return;
|
||||
@@ -543,11 +534,11 @@ function DoGetNodes() {
|
||||
return;
|
||||
if (!SERVER.NodesArrUnSort || !SERVER.NodesArrUnSort.length)
|
||||
return;
|
||||
var Num = glCurNumFindArr % global.SERVER.NodesArrUnSort.length;
|
||||
var Num = global.glCurNumFindArr % global.SERVER.NodesArrUnSort.length;
|
||||
var Node = global.SERVER.NodesArrUnSort[Num];
|
||||
if (Num === 0)
|
||||
glCurNumFindArr = 0;
|
||||
glCurNumFindArr++;
|
||||
global.glCurNumFindArr = 0;
|
||||
global.glCurNumFindArr++;
|
||||
if (Node.Delete)
|
||||
return;
|
||||
if (SERVER.NodeInBan(Node))
|
||||
@@ -565,7 +556,7 @@ function DoConnectToNodes(Arr, Mode) {
|
||||
if (!GrayConnect() && global.SERVER.CanSend < 2) {
|
||||
return;
|
||||
}
|
||||
if (GrayConnect() && global.SERVER.ActualNodes.size > GetGrayServerConnections())
|
||||
if (GrayConnect() && global.SERVER.ActualNodes.size > global.GetGrayServerConnections())
|
||||
return;
|
||||
if (Arr.length) {
|
||||
var MinProcessCount = global.SERVER.BusyLevel - 1;
|
||||
@@ -592,16 +583,14 @@ var idRunOnce;
|
||||
function RunServer() {
|
||||
let {
|
||||
GetNetworkName,
|
||||
DEF_VERSION,
|
||||
NET_WORK_MODE,
|
||||
SAVE_CONST,
|
||||
ToLog,
|
||||
START_IP,
|
||||
START_PORT_NUMBER
|
||||
} = global
|
||||
idRunOnce = setInterval(RunOnce, 1000);
|
||||
global.ToLog("NETWORK: " + GetNetworkName());
|
||||
global.ToLog("VERSION: " + DEF_VERSION);
|
||||
global.ToLog("VERSION: " + global.DEF_VERSION);
|
||||
if (global.NET_WORK_MODE) {
|
||||
global.START_IP = NET_WORK_MODE.ip;
|
||||
global.START_PORT_NUMBER = NET_WORK_MODE.port;
|
||||
@@ -666,7 +655,7 @@ function RunOnce() {
|
||||
var Period = (global.random(600) + global.RESTART_PERIOD_SEC);
|
||||
global.ToLog("SET RESTART NODE AFTER: " + Period + " sec");
|
||||
setInterval(function() {
|
||||
RestartNode();
|
||||
global.RestartNode();
|
||||
}, Period * 1000);
|
||||
}
|
||||
setTimeout(function() {
|
||||
@@ -713,7 +702,7 @@ function TestSignLib(MaxTime) {
|
||||
for (var Num = 0; Num < 1000; Num++) {
|
||||
var Result = global.secp256k1.verify(hash, Sign, PubKey);
|
||||
if (!Result) {
|
||||
global.global.ToError("Error test sign");
|
||||
global.ToError("Error test sign");
|
||||
process.exit(0);
|
||||
}
|
||||
var Time = process.hrtime(startTime);
|
||||
|
||||
@@ -37,7 +37,7 @@ function CalcPOWHash() {
|
||||
});
|
||||
}
|
||||
catch (e) {
|
||||
global.global.ToError(e);
|
||||
global.ToError(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -52,7 +52,7 @@ PROCESS.on("message", function(e) {
|
||||
});
|
||||
}
|
||||
catch (e) {
|
||||
global.global.ToError(e);
|
||||
global.ToError(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -80,12 +80,12 @@ function PumpHash() {
|
||||
if (global.BlockPump) {
|
||||
var e = Date.now();
|
||||
if (EndTime < StartTime) {
|
||||
if (100 * (e - StartTime) / CONSENSUS_PERIOD_TIME >= BlockPump.Percent)
|
||||
if (100 * (e - StartTime) / global.CONSENSUS_PERIOD_TIME >= global.BlockPump.Percent)
|
||||
return void (EndTime = e);
|
||||
CreatePOWVersionX(BlockPump, 1);
|
||||
global.CreatePOWVersionX(global.BlockPump, 1);
|
||||
}
|
||||
else {
|
||||
100 * (e - EndTime) / CONSENSUS_PERIOD_TIME > 100 - BlockPump.Percent && (StartTime = e);
|
||||
100 * (e - EndTime) / global.CONSENSUS_PERIOD_TIME > 100 - global.BlockPump.Percent && (StartTime = e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -10,15 +10,15 @@
|
||||
|
||||
global.PROCESS_NAME = "STATIC";
|
||||
import * as crypto from 'crypto';
|
||||
const fs = require('fs');
|
||||
require("../core/constant");
|
||||
require('../core/block-loader-const');
|
||||
require('../core/rest_tables.js');
|
||||
require('../system/accounts.js');
|
||||
require('../system/smart.js');
|
||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
||||
require("../core/library");
|
||||
import * as fs from 'fs'
|
||||
import "../core/constant"
|
||||
import '../core/block-loader-const'
|
||||
import '../core/rest_tables'
|
||||
import '../system/accounts'
|
||||
import '../system/smart'
|
||||
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
|
||||
import "../core/library"
|
||||
global.READ_ONLY_DB = 1;
|
||||
var LastAlive = Date.now();
|
||||
setTimeout(function() {
|
||||
@@ -74,7 +74,7 @@ function CheckAlive() {
|
||||
if (global.NOALIVE)
|
||||
return;
|
||||
var Delta = Date.now() - LastAlive;
|
||||
if (Delta > CHECK_STOP_CHILD_PROCESS) {
|
||||
if (Delta > global.CHECK_STOP_CHILD_PROCESS) {
|
||||
global.ToLog("STATIC-DB: ALIVE TIMEOUT Stop and exit: " + Delta + "/" + global.CHECK_STOP_CHILD_PROCESS);
|
||||
process.exit(0);
|
||||
return;
|
||||
@@ -83,11 +83,11 @@ function CheckAlive() {
|
||||
process.on('uncaughtException', function(err) {
|
||||
global.ToError(err.stack);
|
||||
global.ToLog(err.stack);
|
||||
TO_ERROR_LOG("STATIC-DB", 777, err);
|
||||
global.TO_ERROR_LOG("STATIC-DB", 777, err);
|
||||
global.ToLog("-----------------STATIC-DB EXIT------------------");
|
||||
process.exit();
|
||||
});
|
||||
process.on('error', function(err) {
|
||||
process.on('error' as any, function(err: TeraError) {
|
||||
global.ToError("STATIC-DB:\n" + err.stack);
|
||||
global.ToLog(err.stack);
|
||||
});
|
||||
@@ -98,7 +98,7 @@ KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 7
|
||||
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
|
||||
global.HTTP_PORT_NUMBER = 0;
|
||||
setInterval(function() {
|
||||
if (SERVER)
|
||||
if (global.SERVER)
|
||||
global.SERVER.Close();
|
||||
global.DApps.Accounts.Close();
|
||||
global.DApps.Smart.DBSmart.Close();
|
||||
@@ -116,8 +116,8 @@ function GETBLOCKHEADER100(msg) {
|
||||
var Count = Data.Count;
|
||||
if (!Count || Count < 0 || !EndNum100)
|
||||
return;
|
||||
if (Count > COUNT_BLOCKS_FOR_LOAD)
|
||||
Count = COUNT_BLOCKS_FOR_LOAD;
|
||||
if (Count > global.COUNT_BLOCKS_FOR_LOAD)
|
||||
Count = global.COUNT_BLOCKS_FOR_LOAD;
|
||||
var Arr = [];
|
||||
var Data100 = global.SERVER.DBHeader100.Read(EndNum100);
|
||||
if (Data100 && global.CompareArr(Data100.Hash100, LoadHash100) === 0) {
|
||||
@@ -131,7 +131,7 @@ function GETBLOCKHEADER100(msg) {
|
||||
Arr.push(Data100.Hash);
|
||||
}
|
||||
}
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(Arr, "[hash]", MAX_PACKET_LENGTH, {});
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(Arr, "[hash]", global.MAX_PACKET_LENGTH, {});
|
||||
global.ToLog("GETBLOCKHEADER100 Send Arr=" + Arr.length + " - " + BlockNum);
|
||||
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETBLOCKHEADER100", Context: msg.Context, Data: BufWrite });
|
||||
};
|
||||
@@ -144,11 +144,11 @@ function GETBLOCKHEADER(msg) {
|
||||
var Foward = Data.Foward;
|
||||
if (Foward) {
|
||||
var BlockDB = global.SERVER.ReadBlockHeaderDB(Data.BlockNum);
|
||||
if (BlockDB && BlockDB.SumHash && (global.CompareArr(BlockDB.SumHash, LoadHash) === 0 || IsZeroArr(LoadHash))) {
|
||||
if (BlockDB && BlockDB.SumHash && (global.CompareArr(BlockDB.SumHash, LoadHash) === 0 || global.IsZeroArr(LoadHash))) {
|
||||
StartNum = Data.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
||||
if (StartNum < 0)
|
||||
StartNum = 0;
|
||||
BlockNum = StartNum + COUNT_BLOCKS_FOR_LOAD + global.BLOCK_PROCESSING_LENGTH2;
|
||||
BlockNum = StartNum + global.COUNT_BLOCKS_FOR_LOAD + global.BLOCK_PROCESSING_LENGTH2;
|
||||
if (BlockNum > global.SERVER.GetMaxNumBlockDB())
|
||||
BlockNum = global.SERVER.GetMaxNumBlockDB();
|
||||
}
|
||||
@@ -159,8 +159,8 @@ function GETBLOCKHEADER(msg) {
|
||||
var Count = Data.Count;
|
||||
if (!Count || Count < 0 || BlockNum < 0)
|
||||
return;
|
||||
if (Count > COUNT_BLOCKS_FOR_LOAD)
|
||||
Count = COUNT_BLOCKS_FOR_LOAD;
|
||||
if (Count > global.COUNT_BLOCKS_FOR_LOAD)
|
||||
Count = global.COUNT_BLOCKS_FOR_LOAD;
|
||||
Count += global.BLOCK_PROCESSING_LENGTH2;
|
||||
var BlockDB = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||
if (BlockDB && (BlockDB.Prepared && (!IsSum) && BlockDB.Hash && global.CompareArr(BlockDB.Hash, LoadHash) === 0 || BlockDB.bSave && IsSum && BlockDB.SumHash && global.CompareArr(BlockDB.SumHash,
|
||||
@@ -184,8 +184,8 @@ function GETBLOCK(msg) {
|
||||
var BufWrite;
|
||||
var BlockDB = global.SERVER.ReadBlockDB(BlockNum);
|
||||
var StrSend;
|
||||
if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || IsZeroArr(TreeHash))) {
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, FORMAT_BLOCK_TRANSFER, MAX_PACKET_LENGTH, WRK_BLOCK_TRANSFER);
|
||||
if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || global.IsZeroArr(TreeHash))) {
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, global.FORMAT_BLOCK_TRANSFER, global.MAX_PACKET_LENGTH, global.WRK_BLOCK_TRANSFER);
|
||||
StrSend = "OK";
|
||||
}
|
||||
if (StrSend === "OK") {
|
||||
@@ -211,7 +211,7 @@ function GETREST(msg) {
|
||||
var Data = msg.Data;
|
||||
if (!Data.BlockNum)
|
||||
return;
|
||||
if (IsZeroArr(Data.AccHash)) {
|
||||
if (global.IsZeroArr(Data.AccHash)) {
|
||||
return;
|
||||
}
|
||||
var BlockNumRest = Data.BlockNum;
|
||||
@@ -234,8 +234,8 @@ function GETREST(msg) {
|
||||
var WorkFormatLength = global.DApps.Accounts.SIZE_ACCOUNT_ROW;
|
||||
var Max = global.DApps.Accounts.DBState.GetMaxNum();
|
||||
var LengthAccount = Data.Count;
|
||||
if (LengthAccount > MAX_ACCOUNTS_TRANSFER)
|
||||
LengthAccount = MAX_ACCOUNTS_TRANSFER;
|
||||
if (LengthAccount > global.MAX_ACCOUNTS_TRANSFER)
|
||||
LengthAccount = global.MAX_ACCOUNTS_TRANSFER;
|
||||
var StartAccount = Data.AccNum;
|
||||
var EndAccount = StartAccount + LengthAccount - 1;
|
||||
if (EndAccount > Max)
|
||||
@@ -249,7 +249,7 @@ function GETREST(msg) {
|
||||
else {
|
||||
ArrRest = GetArrRest(BlockNumRest, StartAccount, EndAccount);
|
||||
ProofHash = Tree.Root;
|
||||
var RetProof = GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
|
||||
var RetProof = global.GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
|
||||
ProofArrL = RetProof.ArrL;
|
||||
ProofArrR = RetProof.ArrR;
|
||||
BufLength = 1000 + ArrRest.length * WorkFormatLength;
|
||||
@@ -257,7 +257,7 @@ function GETREST(msg) {
|
||||
}
|
||||
}
|
||||
var Data2 = { Result: nResult, Arr: ArrRest, Version: 1, ProofHash: ProofHash, ProofArrL: ProofArrL, ProofArrR: ProofArrR };
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(Data2, FORMAT_REST_TRANSFER, BufLength, {});
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(Data2, global.FORMAT_REST_TRANSFER, BufLength, {});
|
||||
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETREST", Context: msg.Context, Data: BufWrite });
|
||||
};
|
||||
|
||||
@@ -279,12 +279,12 @@ function GETSMART(msg) {
|
||||
Arr.push(BufSmart);
|
||||
}
|
||||
var Data2 = { Result: Arr.length ? 1 : 0, Arr: Arr };
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(Data2, FORMAT_SMART_TRANSFER, BufLength, {});
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(Data2, global.FORMAT_SMART_TRANSFER, BufLength, {});
|
||||
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETSMART", Context: msg.Context, Data: BufWrite });
|
||||
};
|
||||
var glMapForHash = {};
|
||||
|
||||
function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly) {
|
||||
function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly?) {
|
||||
var ArrRest = [];
|
||||
var WorkStruct = {};
|
||||
var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW;
|
||||
@@ -352,7 +352,7 @@ function GetRestMerkleTree(BlockNumRest, RestIndexArr) {
|
||||
for (var Num = 0; Num < ArrHash.length; Num++) {
|
||||
MerkleCalc[Num] = 1;
|
||||
}
|
||||
UpdateMerklTree(MerkleTree, MerkleCalc, 0);
|
||||
global.UpdateMerklTree(MerkleTree, MerkleCalc, 0);
|
||||
glMapRest[BlockNumRest] = MerkleTree;
|
||||
var Time2 = process.hrtime(startTime);
|
||||
var deltaTime1 = (Time1[0] * 1000 + Time1[1] / 1e6) / 1000;
|
||||
|
||||
@@ -12,15 +12,15 @@ global.PROCESS_NAME = "TX";
|
||||
import * as crypto from 'crypto';
|
||||
const fs = require('fs');
|
||||
require("../core/constant");
|
||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
||||
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
|
||||
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
|
||||
require("../core/library");
|
||||
global.READ_ONLY_DB = 0;
|
||||
var LastAlive = Date.now();
|
||||
setTimeout(function() {
|
||||
setInterval(CheckAlive, 1000);
|
||||
}, 20000);
|
||||
setInterval(PrepareStatEverySecond, 1000);
|
||||
setInterval(global.PrepareStatEverySecond, 1000);
|
||||
if (process.send) {
|
||||
setInterval(function() {
|
||||
process.send({ cmd: "Alive" });
|
||||
@@ -58,7 +58,7 @@ process.on('message', function(msg) {
|
||||
global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
|
||||
break;
|
||||
case "Eval":
|
||||
EvalCode(msg.Code);
|
||||
global.EvalCode(msg.Code);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -82,11 +82,11 @@ function CheckAlive() {
|
||||
process.on('uncaughtException', function(err) {
|
||||
global.ToError(err.stack);
|
||||
global.ToLog(err.stack);
|
||||
TO_ERROR_LOG("TX-PROCESS", 777, err);
|
||||
global.TO_ERROR_LOG("TX-PROCESS", 777, err);
|
||||
global.ToLog("-----------------TX-PROCESS EXIT------------------");
|
||||
process.exit();
|
||||
});
|
||||
process.on('error', function(err) {
|
||||
process.on('error' as any, function(err: TeraError) {
|
||||
global.ToError("TX-PROCESS:\n" + err.stack);
|
||||
global.ToLog(err.stack);
|
||||
});
|
||||
@@ -96,14 +96,14 @@ var KeyPair = crypto.createECDH('secp256k1');
|
||||
KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77]));
|
||||
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
|
||||
global.TreeFindTX = new STreeBuffer(30 * 1000, CompareItemHashSimple, "string");
|
||||
global.TreeFindTX = new STreeBuffer(30 * 1000, global.CompareItemHashSimple, "string");
|
||||
setInterval(function() {
|
||||
if (SERVER) {
|
||||
if (global.SERVER) {
|
||||
global.SERVER.Close();
|
||||
}
|
||||
DoTXProcess();
|
||||
}, 10);
|
||||
var BlockTree = new STreeBuffer(30 * 1000, CompareItemHashSimple, "number");
|
||||
var BlockTree = new STreeBuffer(30 * 1000, global.CompareItemHashSimple, "number");
|
||||
global.bShowDetail = 0;
|
||||
var StopTxProcess = 0;
|
||||
var MinimalValidBlock = 0;
|
||||
@@ -116,12 +116,12 @@ function DoTXProcess() {
|
||||
InitTXProcess();
|
||||
var BlockMin = FindMinimal();
|
||||
if (!BlockMin) {
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("!BlockMin");
|
||||
return;
|
||||
}
|
||||
var StartTime = Date.now();
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("BlockMin: " + BlockMin.BlockNum + " LastBlockNum=" + LastBlockNum);
|
||||
var CountTX = 0;
|
||||
for (var Num = BlockMin.BlockNum; Num < BlockMin.BlockNum + 200; Num++) {
|
||||
@@ -131,7 +131,7 @@ function DoTXProcess() {
|
||||
break;
|
||||
var Block = global.SERVER.ReadBlockDB(Num);
|
||||
if (!Block) {
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("!Block");
|
||||
break;
|
||||
}
|
||||
@@ -140,7 +140,7 @@ function DoTXProcess() {
|
||||
}
|
||||
var Item = BlockTree.LoadValue(Block.BlockNum, 1);
|
||||
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0) {
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("WAS CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
|
||||
continue;
|
||||
}
|
||||
@@ -157,7 +157,7 @@ function DoTXProcess() {
|
||||
if (Num % 100000 === 0)
|
||||
global.ToLog("CALC: " + Num);
|
||||
CountTX++;
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog(" CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
|
||||
BlockTree.SaveValue(Block.BlockNum, { BlockNum: Block.BlockNum, SumHash: Block.SumHash });
|
||||
LastBlockNum = Block.BlockNum;
|
||||
@@ -167,14 +167,14 @@ function DoTXProcess() {
|
||||
function FindMinimal() {
|
||||
var MaxNumBlockDB = global.SERVER.GetMaxNumBlockDB();
|
||||
if (MaxNumBlockDB && MaxNumBlockDB < LastBlockNum) {
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("MaxNumBlockDB<LastBlockNum: " + MaxNumBlockDB + "<" + LastBlockNum);
|
||||
LastBlockNum = MaxNumBlockDB - 1;
|
||||
BlockTree.Clear();
|
||||
}
|
||||
if (LastBlockNum < MinimalValidBlock)
|
||||
LastBlockNum = MinimalValidBlock;
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("FindMinimal from LastBlockNum=" + LastBlockNum);
|
||||
for (var Num = LastBlockNum; Num--; Num >= 0) {
|
||||
if (Num < MinimalValidBlock)
|
||||
@@ -186,7 +186,7 @@ function FindMinimal() {
|
||||
if (!IsValidSumHash(Block)) {
|
||||
continue;
|
||||
}
|
||||
if (Block.BlockNum % PERIOD_ACCOUNT_HASH === 0) {
|
||||
if (Block.BlockNum % global.PERIOD_ACCOUNT_HASH === 0) {
|
||||
var Item = global.DApps.Accounts.GetAccountHashItem(Block.BlockNum);
|
||||
if (Item) {
|
||||
BlockTree.SaveValue(Block.BlockNum, Item);
|
||||
@@ -195,10 +195,10 @@ function FindMinimal() {
|
||||
var Item = BlockTree.LoadValue(Block.BlockNum, 1);
|
||||
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0)
|
||||
return Block;
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("" + Num + " " + Block.BlockNum + ". Item=" + JSON.stringify(Item) + " MinimalValidBlock=" + MinimalValidBlock);
|
||||
}
|
||||
if (bShowDetail)
|
||||
if (global.bShowDetail)
|
||||
global.ToLog("MinimalValidBlock:" + MinimalValidBlock);
|
||||
if (MinimalValidBlock === 0 && LastBlockNum > 0) {
|
||||
RewriteAllTransactions();
|
||||
@@ -212,12 +212,12 @@ function IsValidSumHash(Block) {
|
||||
return 1;
|
||||
if (Block.BlockNum < 16)
|
||||
return 1;
|
||||
if (IsZeroArr(Block.SumHash))
|
||||
if (global.IsZeroArr(Block.SumHash))
|
||||
return 0;
|
||||
var PrevBlock = global.SERVER.ReadBlockHeaderDB(Block.BlockNum - 1);
|
||||
if (!PrevBlock)
|
||||
return 0;
|
||||
var SumHash2 = shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||
var SumHash2 = global.shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||
if (global.CompareArr(SumHash2, Block.SumHash) === 0)
|
||||
return 1;
|
||||
return 0;
|
||||
@@ -240,7 +240,7 @@ function InitTXProcess() {
|
||||
StateTX = global.DApps.Accounts.DBStateTX.Read(0);
|
||||
LastBlockNum = StateTX.BlockNum;
|
||||
MinimalValidBlock = StateTX.BlockNumMin;
|
||||
LastBlockNum = PERIOD_ACCOUNT_HASH * Math.trunc(LastBlockNum / PERIOD_ACCOUNT_HASH);
|
||||
LastBlockNum = global.PERIOD_ACCOUNT_HASH * Math.trunc(LastBlockNum / global.PERIOD_ACCOUNT_HASH);
|
||||
if (LastBlockNum > 100) {
|
||||
LastBlockNum = 1 + LastBlockNum - 100;
|
||||
}
|
||||
@@ -254,8 +254,8 @@ global.ClearDataBase = ClearDataBase;
|
||||
|
||||
function ClearDataBase() {
|
||||
MinimalValidBlock = 0;
|
||||
for (var key in DApps) {
|
||||
DApps[key].ClearDataBase();
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].ClearDataBase();
|
||||
}
|
||||
LastBlockNum = 0;
|
||||
BlockTree.Clear();
|
||||
@@ -268,8 +268,8 @@ function RewriteAllTransactions() {
|
||||
return;
|
||||
}
|
||||
global.ToLog("*************RewriteAllTransactions");
|
||||
for (var key in DApps) {
|
||||
DApps[key].ClearDataBase();
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].ClearDataBase();
|
||||
}
|
||||
LastBlockNum = 0;
|
||||
BlockTree.Clear();
|
||||
@@ -291,8 +291,8 @@ function TXPrepareLoadRest(BlockNum) {
|
||||
StopTxProcess = 1;
|
||||
MinimalValidBlock = BlockNum;
|
||||
global.ToLog("*************TXPrepareLoadRest:" + BlockNum, 2);
|
||||
for (var key in DApps) {
|
||||
DApps[key].ClearDataBase();
|
||||
for (var key in global.DApps) {
|
||||
global.DApps[key].ClearDataBase();
|
||||
}
|
||||
LastBlockNum = BlockNum;
|
||||
BlockTree.Clear();
|
||||
@@ -345,7 +345,7 @@ global.EvalCode = function(Code) {
|
||||
var Result;
|
||||
try {
|
||||
var ret = eval(Code);
|
||||
Result = JSON.stringify(ret, "", 4);
|
||||
Result = JSON.stringify(ret, undefined, 4);
|
||||
}
|
||||
catch (e) {
|
||||
Result = "" + e;
|
||||
|
||||
@@ -80,7 +80,7 @@ process.on('message', function(msg) {
|
||||
break;
|
||||
case "DappEvent":
|
||||
{
|
||||
AddDappEventToGlobalMap(msg.Data);
|
||||
global.AddDappEventToGlobalMap(msg.Data);
|
||||
break;
|
||||
}
|
||||
case "ToLogClient":
|
||||
@@ -215,7 +215,7 @@ function MainHTTPFunction(request, response) {
|
||||
return;
|
||||
if (!request.socket || !request.socket.remoteAddress)
|
||||
return;
|
||||
SetSafeResponce(response);
|
||||
global.SetSafeResponce(response);
|
||||
var DataURL = url.parse(request.url);
|
||||
var Params = querystring.parse(DataURL.query);
|
||||
var Path = querystring.unescape(DataURL.pathname);
|
||||
@@ -350,7 +350,7 @@ function DoCommandNew(response, Type, Path, Params) {
|
||||
response.end(JSON.stringify({ result: 0, text: "You must set const USE_HARD_API_V2:1" }));
|
||||
return;
|
||||
}
|
||||
Caller = WebApi2;
|
||||
Caller = global.WebApi2;
|
||||
}
|
||||
Method = ArrPath[2];
|
||||
}
|
||||
@@ -390,16 +390,16 @@ function DoCommandNew(response, Type, Path, Params) {
|
||||
response.writeHead(301, { "Location": '/' });
|
||||
return response.end();
|
||||
case "file":
|
||||
SendBlockFile(response, ArrPath[1], ArrPath[2]);
|
||||
global.SendBlockFile(response, ArrPath[1], ArrPath[2]);
|
||||
break;
|
||||
case "DappTemplateFile":
|
||||
DappTemplateFile(response, ArrPath[1]);
|
||||
global.DappTemplateFile(response, ArrPath[1]);
|
||||
break;
|
||||
case "smart":
|
||||
DappSmartCodeFile(response, ArrPath[1]);
|
||||
global.DappSmartCodeFile(response, ArrPath[1]);
|
||||
break;
|
||||
case "client":
|
||||
DappClientCodeFile(response, ArrPath[1]);
|
||||
global.DappClientCodeFile(response, ArrPath[1]);
|
||||
default:
|
||||
{
|
||||
var Name = ArrPath[ArrPath.length - 1];
|
||||
@@ -466,7 +466,7 @@ function DoCommandNew(response, Type, Path, Params) {
|
||||
Name = PrefixPath + "/" + Name;
|
||||
break;
|
||||
}
|
||||
SendWebFile(response, Name, "", 1);
|
||||
global.SendWebFile(response, Name, "", 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -506,24 +506,24 @@ HostingCaller.GetAccountList = function(Params) {
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
if (!Params.CountNum)
|
||||
Params.CountNum = 1;
|
||||
var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.StartNum), ParseNum(Params.CountNum));
|
||||
var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum));
|
||||
return { result: 1, arr: arr };
|
||||
};
|
||||
HostingCaller.GetAccount = function(id) {
|
||||
id = ParseNum(id);
|
||||
id = global.ParseNum(id);
|
||||
var arr = global.DApps.Accounts.GetRowsAccounts(id, 1);
|
||||
return { Item: arr[0], result: 1 };
|
||||
};
|
||||
HostingCaller.GetBlockList = function(Params, response) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
Params.StartNum = ParseNum(Params.StartNum);
|
||||
Params.CountNum = ParseNum(Params.CountNum);
|
||||
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||
if (Params.CountNum > MaxCountViewRows)
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
if (!Params.CountNum)
|
||||
Params.CountNum = 1;
|
||||
return HTTPCaller.GetBlockList(Params, response);
|
||||
return global.HTTPCaller.GetBlockList(Params, response);
|
||||
};
|
||||
HostingCaller.GetTransactionList = function(Params, response) {
|
||||
Params.Param3 = Params.BlockNum;
|
||||
@@ -532,12 +532,12 @@ HostingCaller.GetTransactionList = function(Params, response) {
|
||||
HostingCaller.GetTransactionAll = function(Params, response) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
Params.Param3 = ParseNum(Params.Param3);
|
||||
Params.StartNum = ParseNum(Params.StartNum);
|
||||
Params.CountNum = ParseNum(Params.CountNum);
|
||||
Params.Param3 = global.ParseNum(Params.Param3);
|
||||
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||
if (Params.CountNum > MaxCountViewRows)
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
return HTTPCaller.GetTransactionAll(Params, response);
|
||||
return global.HTTPCaller.GetTransactionAll(Params, response);
|
||||
};
|
||||
HostingCaller.GetDappList = function(Params) {
|
||||
if (typeof Params !== "object")
|
||||
@@ -546,7 +546,7 @@ HostingCaller.GetDappList = function(Params) {
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
if (!Params.CountNum)
|
||||
Params.CountNum = 1;
|
||||
var arr = global.DApps.Smart.GetRows(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, Params.Filter, 1);
|
||||
var arr = global.DApps.Smart.GetRows(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, Params.Filter, 1);
|
||||
return { result: 1, arr: arr };
|
||||
};
|
||||
HostingCaller.GetNodeList = function(Params) {
|
||||
@@ -640,7 +640,7 @@ HostingCaller.GetAccountListByKey = function(Params, ppp, bRet) {
|
||||
var Ret = { result: 1, arr: arr };
|
||||
if (bRet)
|
||||
return Ret;
|
||||
var Context = GetUserContext(Params);
|
||||
var Context = global.GetUserContext(Params);
|
||||
var StrInfo = JSON.stringify(Ret);
|
||||
if (!Params.AllData && Context.PrevAccountList === StrInfo) {
|
||||
return { result: 0, cache: 1 };
|
||||
@@ -692,20 +692,20 @@ HostingCaller.SendTransactionHex = function(Params, response) {
|
||||
HostingCaller.DappSmartHTMLFile = function(Params) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
return HTTPCaller.DappSmartHTMLFile(Params);
|
||||
return global.HTTPCaller.DappSmartHTMLFile(Params);
|
||||
};
|
||||
HostingCaller.DappBlockFile = function(Params, responce) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
return HTTPCaller.DappBlockFile(Params, responce);
|
||||
return global.HTTPCaller.DappBlockFile(Params, responce);
|
||||
};
|
||||
HostingCaller.DappInfo = function(Params) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
var SmartNum = ParseNum(Params.Smart);
|
||||
var SmartNum = global.ParseNum(Params.Smart);
|
||||
process.send({ cmd: "SetSmartEvent", Smart: SmartNum });
|
||||
var Context = GetUserContext(Params);
|
||||
var Ret = HTTPCaller.DappInfo(Params, undefined, 1);
|
||||
var Context = global.GetUserContext(Params);
|
||||
var Ret = global.HTTPCaller.DappInfo(Params, undefined, 1);
|
||||
Ret.PubKey = undefined;
|
||||
var StrInfo = JSON.stringify(Ret);
|
||||
if (!Params.AllData && Context.PrevDappInfo === StrInfo) {
|
||||
@@ -726,7 +726,7 @@ HostingCaller.DappWalletList = function(Params) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
var Ret = HostingCaller.GetAccountListByKey(Params, undefined, 1);
|
||||
var Smart = ParseNum(Params.Smart);
|
||||
var Smart = global.ParseNum(Params.Smart);
|
||||
var arr = [];
|
||||
for (var i = 0; i < Ret.arr.length; i++) {
|
||||
if (Params.AllAccounts || Ret.arr[i].Value.Smart === Smart) {
|
||||
@@ -736,7 +736,7 @@ HostingCaller.DappWalletList = function(Params) {
|
||||
Ret.arr = arr;
|
||||
return Ret;
|
||||
};
|
||||
HTTPCaller.DappWalletList = HostingCaller.DappWalletList;
|
||||
global.HTTPCaller.DappWalletList = HostingCaller.DappWalletList;
|
||||
HostingCaller.DappAccountList = function(Params) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
@@ -744,7 +744,7 @@ HostingCaller.DappAccountList = function(Params) {
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
if (!Params.CountNum)
|
||||
Params.CountNum = 1;
|
||||
var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, 1);
|
||||
var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, 1);
|
||||
return { arr: arr, result: 1 };
|
||||
};
|
||||
HostingCaller.DappSmartList = function(Params) {
|
||||
@@ -754,42 +754,42 @@ HostingCaller.DappSmartList = function(Params) {
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
if (!Params.CountNum)
|
||||
Params.CountNum = 1;
|
||||
var arr = global.DApps.Smart.GetRows(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, undefined, Params.GetAllData,
|
||||
var arr = global.DApps.Smart.GetRows(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, undefined, Params.GetAllData,
|
||||
Params.TokenGenerate);
|
||||
return { arr: arr, result: 1 };
|
||||
};
|
||||
HostingCaller.DappBlockList = function(Params, response) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
Params.StartNum = ParseNum(Params.StartNum);
|
||||
Params.CountNum = ParseNum(Params.CountNum);
|
||||
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||
if (Params.CountNum > MaxCountViewRows)
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
if (!Params.CountNum)
|
||||
Params.CountNum = 1;
|
||||
return HTTPCaller.DappBlockList(Params, response);
|
||||
return global.HTTPCaller.DappBlockList(Params, response);
|
||||
};
|
||||
HostingCaller.DappTransactionList = function(Params, response) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
Params.BlockNum = ParseNum(Params.BlockNum);
|
||||
Params.StartNum = ParseNum(Params.StartNum);
|
||||
Params.CountNum = ParseNum(Params.CountNum);
|
||||
Params.BlockNum = global.ParseNum(Params.BlockNum);
|
||||
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||
if (Params.CountNum > MaxCountViewRows)
|
||||
Params.CountNum = MaxCountViewRows;
|
||||
if (!Params.CountNum)
|
||||
Params.CountNum = 1;
|
||||
return HTTPCaller.DappTransactionList(Params, response);
|
||||
return global.HTTPCaller.DappTransactionList(Params, response);
|
||||
};
|
||||
HostingCaller.DappStaticCall = function(Params, response) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
return HTTPCaller.DappStaticCall(Params, response);
|
||||
return global.HTTPCaller.DappStaticCall(Params, response);
|
||||
};
|
||||
HostingCaller.GetHistoryTransactions = function(Params) {
|
||||
if (typeof Params !== "object")
|
||||
return { result: 0 };
|
||||
return HTTPCaller.GetHistoryTransactions(Params);
|
||||
return global.HTTPCaller.GetHistoryTransactions(Params);
|
||||
};
|
||||
HostingCaller.GetSupply = function(Params) {
|
||||
var Data = global.DApps.Accounts.ReadState(0);
|
||||
@@ -843,7 +843,7 @@ setInterval(function() {
|
||||
var AvgPow = SumPow / Count;
|
||||
ADD_TO_STAT("MAX:HASH_RATE_B", AvgPow);
|
||||
}
|
||||
var Count = COUNT_BLOCK_PROOF + 16 - 1;
|
||||
var Count = global.COUNT_BLOCK_PROOF + 16 - 1;
|
||||
if (MaxNumBlockDB > Count) {
|
||||
var StartNum = MaxNumBlockDB - Count;
|
||||
NodeBlockChain = global.SERVER.BlockChainToBuf(StartNum, StartNum, MaxNumBlockDB);
|
||||
|
||||
@@ -74,7 +74,7 @@ global.FORMAT_ACCOUNT_HASH = "{\
|
||||
BlockNum:uint,\
|
||||
AccHash:buffer32,\
|
||||
}";
|
||||
global.FORMAT_ACCOUNT_HASH3 = "{\
|
||||
global.global.FORMAT_ACCOUNT_HASH3 = "{\
|
||||
Type:byte,\
|
||||
BlockNum:uint,\
|
||||
AccHash:buffer32,\
|
||||
@@ -144,22 +144,23 @@ class MerkleDBRow extends DBRow {
|
||||
};
|
||||
class AccountApp extends require("./dapp")
|
||||
{
|
||||
private CreateTrCount
|
||||
private FORMAT_ACCOUNT_ROW
|
||||
private SIZE_ACCOUNT_ROW
|
||||
private DBState
|
||||
private FORMAT_ACCOUNT_ROW_REST
|
||||
private SIZE_ACCOUNT_ROW_REST
|
||||
private DBRest
|
||||
private DBAct
|
||||
private DBActPrev
|
||||
private FORMAT_STATE_HISTORY
|
||||
private DBStateHistory
|
||||
private HistoryFormatArr
|
||||
private DBStateTX
|
||||
private DBAccountsHash
|
||||
private WasCheckRestDB
|
||||
private ResultTx
|
||||
CreateTrCount
|
||||
FORMAT_ACCOUNT_ROW
|
||||
SIZE_ACCOUNT_ROW
|
||||
DBState
|
||||
FORMAT_ACCOUNT_ROW_REST
|
||||
SIZE_ACCOUNT_ROW_REST
|
||||
DBRest
|
||||
DBAct
|
||||
DBActPrev
|
||||
FORMAT_STATE_HISTORY
|
||||
DBStateHistory
|
||||
HistoryFormatArr
|
||||
DBStateTX
|
||||
DBAccountsHash
|
||||
WasCheckRestDB
|
||||
ResultTx
|
||||
DBChanges
|
||||
constructor() {
|
||||
super()
|
||||
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
||||
@@ -205,7 +206,7 @@ class AccountApp extends require("./dapp")
|
||||
Start(bClean?) {
|
||||
if (global.LOCAL_RUN)
|
||||
bClean = 1
|
||||
if (!bClean && this.DBState.GetMaxNum() + 1 >= global.global.BLOCK_PROCESSING_LENGTH2)
|
||||
if (!bClean && this.DBState.GetMaxNum() + 1 >= global.BLOCK_PROCESSING_LENGTH2)
|
||||
return;
|
||||
this.DBState.MerkleTree = undefined
|
||||
this.DBState.Truncate(- 1)
|
||||
@@ -267,7 +268,7 @@ class AccountApp extends require("./dapp")
|
||||
}
|
||||
global.ToLog("******************************FINISH FillRestDB")
|
||||
}
|
||||
_DBStateWrite(Data?, BlockNum?) {
|
||||
_DBStateWrite(Data?, BlockNum?, b?) {
|
||||
this.CheckRestDB()
|
||||
this.DBState.Write(Data)
|
||||
if (Data.Num === undefined)
|
||||
@@ -330,7 +331,7 @@ class AccountApp extends require("./dapp")
|
||||
return Num;
|
||||
}
|
||||
case TYPE_TRANSACTION_TRANSFER:
|
||||
var Num = ReadUintFromArr(Body, 1 + 1 + 6);
|
||||
var Num = global.ReadUintFromArr(Body, 1 + 1 + 6);
|
||||
return Num;
|
||||
}
|
||||
}
|
||||
@@ -400,10 +401,13 @@ class AccountApp extends require("./dapp")
|
||||
case global.TYPE_TRANSACTION_ACC_HASH:
|
||||
{
|
||||
Result = 1
|
||||
if (global.LOCAL_RUN || global.TEST_NETWORK);
|
||||
else
|
||||
if (BlockNum < global.START_BLOCK_ACCOUNT_HASH + 200000)
|
||||
if (global.LOCAL_RUN || global.TEST_NETWORK) {
|
||||
|
||||
}
|
||||
else {
|
||||
if (BlockNum < global.global.START_BLOCK_ACCOUNT_HASH + 200000)
|
||||
break;
|
||||
}
|
||||
var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH;
|
||||
if (!this.TRCheckAccountHash(Body, BlockNum, TrNum)) {
|
||||
Result = "BAD ACCOUNT HASH"
|
||||
@@ -426,7 +430,7 @@ class AccountApp extends require("./dapp")
|
||||
var SysBalance = SysData.Value.SumCOIN;
|
||||
const REF_PERIOD_START = global.START_MINING;
|
||||
const REF_PERIOD_END = 30 * 1000 * 1000;
|
||||
var AccountID = ReadUintFromArr(Block.AddrHash, 0);
|
||||
var AccountID = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||
if (AccountID < 8)
|
||||
return;
|
||||
var Data = this.ReadStateTR(AccountID);
|
||||
@@ -444,29 +448,29 @@ class AccountApp extends require("./dapp")
|
||||
}
|
||||
}
|
||||
else {
|
||||
var Power = GetPowPower(Block.PowHash);
|
||||
var Power = global.GetPowPower(Block.PowHash);
|
||||
if (Block.BlockNum >= global.NEW_BLOCK_REWARD1)
|
||||
Power = 43
|
||||
Sum = Power * Power * SysBalance / global.TOTAL_SUPPLY_TERA / 100
|
||||
}
|
||||
var CoinTotal = { SumCOIN: 0, SumCENT: 0 };
|
||||
var CoinSum = COIN_FROM_FLOAT(Sum);
|
||||
if (!ISZERO(CoinSum)) {
|
||||
var CoinSum = global.COIN_FROM_FLOAT(Sum);
|
||||
if (!global.ISZERO(CoinSum)) {
|
||||
if (Data.Adviser >= 8 && Block.BlockNum < REF_PERIOD_END) {
|
||||
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 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)
|
||||
ADD(CoinTotal, CoinAdv)
|
||||
ADD(CoinSum, CoinAdv)
|
||||
global.ADD(CoinTotal, CoinAdv)
|
||||
global.ADD(CoinSum, CoinAdv)
|
||||
}
|
||||
}
|
||||
this.SendMoneyTR(Block, 0, AccountID, CoinSum, Block.BlockNum, 0xFFFF, "", "Coin base", 1)
|
||||
ADD(CoinTotal, CoinSum)
|
||||
var CoinDevelop = CopyObjValue(CoinTotal);
|
||||
DIV(CoinDevelop, 100)
|
||||
if (!ISZERO(CoinDevelop))
|
||||
global.ADD(CoinTotal, CoinSum)
|
||||
var CoinDevelop = global.CopyObjValue(CoinTotal);
|
||||
global.DIV(CoinDevelop, 100)
|
||||
if (!global.ISZERO(CoinDevelop))
|
||||
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:
|
||||
{
|
||||
format = FORMAT_MONEY_TRANSFER
|
||||
format = global.FORMAT_MONEY_TRANSFER
|
||||
break;
|
||||
}
|
||||
case TYPE_DEPRECATED_TRANSFER2:
|
||||
{
|
||||
format = FORMAT_MONEY_TRANSFER2
|
||||
format = global.FORMAT_MONEY_TRANSFER2
|
||||
break;
|
||||
}
|
||||
case TYPE_TRANSACTION_TRANSFER:
|
||||
{
|
||||
format = FORMAT_MONEY_TRANSFER3
|
||||
format = global.FORMAT_MONEY_TRANSFER3
|
||||
break;
|
||||
}
|
||||
case TYPE_TRANSACTION_ACC_HASH:
|
||||
case global.TYPE_TRANSACTION_ACC_HASH:
|
||||
{
|
||||
format = FORMAT_ACCOUNT_HASH3
|
||||
format = global.global.FORMAT_ACCOUNT_HASH3
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -526,30 +530,30 @@ class AccountApp extends require("./dapp")
|
||||
if (!TR)
|
||||
return "";
|
||||
if (TR.Body && TR.Body.length) {
|
||||
var App = DAppByType[TR.Body[0]];
|
||||
var App = global.DAppByType[TR.Body[0]];
|
||||
if (App) {
|
||||
TR.Body = JSON.parse(App.GetScriptTransaction(TR.Body))
|
||||
}
|
||||
}
|
||||
ConvertBufferToStr(TR)
|
||||
return JSON.stringify(TR, "", 2);
|
||||
global.ConvertBufferToStr(TR)
|
||||
return JSON.stringify(TR, undefined, 2);
|
||||
}
|
||||
TRCheckAccountHash(Body, BlockNum, TrNum) {
|
||||
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
||||
if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||
return 1;
|
||||
try {
|
||||
var TR = global.BufLib.GetObjectFromBuffer(Body, FORMAT_ACCOUNT_HASH3, {});
|
||||
var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_ACCOUNT_HASH3, {});
|
||||
}
|
||||
catch (e) {
|
||||
return 0;
|
||||
}
|
||||
if (BlockNum < START_BLOCK_ACCOUNT_HASH + 200000)
|
||||
if (BlockNum < global.START_BLOCK_ACCOUNT_HASH + 200000)
|
||||
return 1;
|
||||
var Item = this.GetAccountHashItem(TR.BlockNum);
|
||||
if (Item && Item.BlockNum === TR.BlockNum) {
|
||||
if (CompareArr(Item.AccHash, TR.AccHash) === 0) {
|
||||
if (TR.BlockNum >= START_BLOCK_ACCOUNT_HASH3) {
|
||||
if (CompareArr(Item.SmartHash, TR.SmartHash) === 0 && Item.AccountMax === TR.AccountMax && Item.SmartCount === TR.SmartCount) {
|
||||
if (global.CompareArr(Item.AccHash, TR.AccHash) === 0) {
|
||||
if (TR.BlockNum >= global.START_BLOCK_ACCOUNT_HASH3) {
|
||||
if (global.CompareArr(Item.SmartHash, TR.SmartHash) === 0 && Item.AccountMax === TR.AccountMax && Item.SmartCount === TR.SmartCount) {
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@@ -568,7 +572,7 @@ class AccountApp extends require("./dapp")
|
||||
return "Error length transaction";
|
||||
var CheckMinPower = 1;
|
||||
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
|
||||
}
|
||||
else {
|
||||
@@ -581,12 +585,12 @@ class AccountApp extends require("./dapp")
|
||||
this.CreateTrCount++
|
||||
var power;
|
||||
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO) {
|
||||
var Tr = { body: Body };
|
||||
var Tr: any = { body: Body };
|
||||
global.SERVER.CheckCreateTransactionObject(Tr)
|
||||
power = Tr.power
|
||||
}
|
||||
else {
|
||||
power = GetPowPower(shaarr(Body))
|
||||
power = global.GetPowPower(shaarr(Body))
|
||||
}
|
||||
if (global.TEST_NETWORK && BlockNum >= 3290000) {
|
||||
CheckMinPower = 0
|
||||
@@ -604,7 +608,7 @@ class AccountApp extends require("./dapp")
|
||||
return "Error min power POW for create account (update client)";
|
||||
}
|
||||
try {
|
||||
var TR = global.BufLib.GetObjectFromBuffer(Body, global.global.FORMAT_CREATE, {});
|
||||
var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_CREATE, {});
|
||||
}
|
||||
catch (e) {
|
||||
return "Error transaction format";
|
||||
@@ -620,7 +624,7 @@ class AccountApp extends require("./dapp")
|
||||
Account.Adviser = TR.Adviser
|
||||
Account.Value.Smart = TR.Smart
|
||||
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)
|
||||
}
|
||||
this.ResultTx = Account.Num
|
||||
@@ -677,7 +681,7 @@ class AccountApp extends require("./dapp")
|
||||
MapItem[Item.ID] = 1
|
||||
}
|
||||
bWas = 1
|
||||
ADD(TotalSum, Item)
|
||||
global.ADD(TotalSum, Item)
|
||||
}
|
||||
if (!bWas && TR.Version < 3)
|
||||
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";
|
||||
}
|
||||
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;
|
||||
var name = TR.Description;
|
||||
var index = name.indexOf("\n");
|
||||
@@ -725,7 +729,7 @@ class AccountApp extends require("./dapp")
|
||||
Item.ID = Account.Num
|
||||
this.SendMoneyTR(Block, Data.Num, Account.Num, { SumCOIN: Item.SumCOIN, SumCENT: Item.SumCENT }, BlockNum, TrNum, TR.Description,
|
||||
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)
|
||||
}
|
||||
else {
|
||||
@@ -765,11 +769,11 @@ class AccountApp extends require("./dapp")
|
||||
return "Error sign transaction";
|
||||
}
|
||||
if (TR.Body && TR.Body.length) {
|
||||
var App = DAppByType[TR.Body[0]];
|
||||
var App = global.DAppByType[TR.Body[0]];
|
||||
if (App) {
|
||||
TR.FromPubKey = Data.PubKey
|
||||
var Result = App.OnWriteTransaction(Block, TR.Body, BlockNum, TrNum, TR);
|
||||
if (Result !== true)
|
||||
Result = App.OnWriteTransaction(Block, TR.Body, BlockNum, TrNum, TR);
|
||||
if (Result as any !== true)
|
||||
return Result;
|
||||
}
|
||||
}
|
||||
@@ -804,7 +808,7 @@ class AccountApp extends require("./dapp")
|
||||
}
|
||||
this.DeleteActOneDB(this.DBAct, 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) {
|
||||
var MaxNum = DBAct.GetMaxNum();
|
||||
@@ -813,7 +817,7 @@ class AccountApp extends require("./dapp")
|
||||
for (var num = MaxNum; num >= 0; num--) {
|
||||
var ItemCheck = DBAct.Read(num);
|
||||
if (!ItemCheck) {
|
||||
ToLogTrace("!ItemCheck")
|
||||
global.ToLogTrace("!ItemCheck")
|
||||
throw "ERRR DeleteActOneDB";
|
||||
}
|
||||
if (ItemCheck.BlockNum < BlockNum) {
|
||||
@@ -882,7 +886,7 @@ class AccountApp extends require("./dapp")
|
||||
if (!Data)
|
||||
break;
|
||||
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
|
||||
Count++
|
||||
}
|
||||
@@ -899,7 +903,7 @@ class AccountApp extends require("./dapp")
|
||||
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
|
||||
arr.push(Data)
|
||||
Data.WN = map[key]
|
||||
Data.Name = NormalizeName(Data.Name)
|
||||
Data.Name = global.NormalizeName(Data.Name)
|
||||
if (Data.Currency)
|
||||
Data.CurrencyObj = global.DApps.Smart.ReadSimple(Data.Currency)
|
||||
if (Data.Value.Smart) {
|
||||
@@ -925,7 +929,7 @@ class AccountApp extends require("./dapp")
|
||||
if (Filter.substring(0, 1) === "=") {
|
||||
Filter = Filter.substring(1)
|
||||
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) {
|
||||
F = undefined
|
||||
@@ -946,13 +950,13 @@ class AccountApp extends require("./dapp")
|
||||
break;
|
||||
if (!Data.PubKeyStr)
|
||||
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
|
||||
Data.Name = NormalizeName(Data.Name)
|
||||
Data.Name = global.NormalizeName(Data.Name)
|
||||
if (F) {
|
||||
var Cur = Data.Currency;
|
||||
var Currency = Data.Currency;
|
||||
var ID = Data.Num;
|
||||
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 Name = Data.Name;
|
||||
var PubKey = global.GetHexFromArr(Data.PubKey);
|
||||
@@ -969,7 +973,7 @@ class AccountApp extends require("./dapp")
|
||||
}
|
||||
else
|
||||
if (Filter) {
|
||||
var Amount = FLOAT_FROM_COIN(Data.Value);
|
||||
var Amount = global.FLOAT_FROM_COIN(Data.Value);
|
||||
var PubKey = global.GetHexFromArr(Data.PubKey);
|
||||
var Str = "" + Data.Num + " " + Data.Value.OperationID + " " + Data.Name.toUpperCase() + " " + Data.Adviser + " " + Amount + " " + PubKey + " " + Smart + " " + Data.BlockNumCreate;
|
||||
if (Str.indexOf(Filter) < 0)
|
||||
@@ -1037,7 +1041,7 @@ class AccountApp extends require("./dapp")
|
||||
return arr;
|
||||
}
|
||||
GetHashOrUndefined(BlockNum) {
|
||||
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
||||
if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||
return undefined;
|
||||
var Item = this.GetAccountHashItem(BlockNum);
|
||||
if (Item)
|
||||
@@ -1046,7 +1050,7 @@ class AccountApp extends require("./dapp")
|
||||
return undefined;
|
||||
}
|
||||
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;
|
||||
}
|
||||
GetHashedMaxBlockNum() {
|
||||
@@ -1059,7 +1063,7 @@ class AccountApp extends require("./dapp")
|
||||
return 0;
|
||||
}
|
||||
CalcHash(Block, BlockMaxAccount) {
|
||||
if (Block.BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
||||
if (Block.BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||
return;
|
||||
if (this.DBState.WasUpdate) {
|
||||
this.CalcMerkleTree()
|
||||
@@ -1075,14 +1079,14 @@ class AccountApp extends require("./dapp")
|
||||
SmartHash = []
|
||||
}
|
||||
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
|
||||
};
|
||||
this.DBAccountsHash.Write(Data)
|
||||
this.DBAccountsHash.Truncate(Block.BlockNum / PERIOD_ACCOUNT_HASH)
|
||||
this.DBAccountsHash.Truncate(Block.BlockNum / global.PERIOD_ACCOUNT_HASH)
|
||||
return Data;
|
||||
}
|
||||
CalcMerkleTree(bForce) {
|
||||
CalcMerkleTree(bForce?) {
|
||||
this.DBState.MerkleHash = this.DBState.CalcMerkleTree(bForce)
|
||||
this.DBState.WasUpdate = 0
|
||||
}
|
||||
@@ -1124,7 +1128,7 @@ class AccountApp extends require("./dapp")
|
||||
}
|
||||
var arr = [];
|
||||
for (var key in DBChanges.BlockMap) {
|
||||
key = ParseNum(key)
|
||||
key = global.ParseNum(key)
|
||||
var Data = DBChanges.BlockMap[key];
|
||||
if (Data.Changed) {
|
||||
arr.push(Data)
|
||||
@@ -1170,7 +1174,7 @@ class AccountApp extends require("./dapp")
|
||||
return false;
|
||||
DBChanges.BlockMaxAccount = DBChanges.TRMaxAccount
|
||||
for (var key in DBChanges.TRMap) {
|
||||
key = ParseNum(key)
|
||||
key = global.ParseNum(key)
|
||||
var Data = DBChanges.TRMap[key];
|
||||
if (Data.Changed) {
|
||||
DBChanges.BlockMap[key] = Data
|
||||
@@ -1213,7 +1217,7 @@ class AccountApp extends require("./dapp")
|
||||
return Data;
|
||||
}
|
||||
ReadStateTR(Num) {
|
||||
Num = ParseNum(Num)
|
||||
Num = global.ParseNum(Num)
|
||||
var TRMap = this.DBChanges.TRMap;
|
||||
var Data = TRMap[Num];
|
||||
if (!Data) {
|
||||
@@ -1239,7 +1243,7 @@ class AccountApp extends require("./dapp")
|
||||
Data = {
|
||||
Num: Num, Currency: BData.Currency, PubKey: BData.PubKey, Name: BData.Name, BlockNumCreate: BData.BlockNumCreate, Adviser: BData.Adviser,
|
||||
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
|
||||
}, BackupValue: BData.BackupValue
|
||||
}
|
||||
@@ -1252,8 +1256,8 @@ class AccountApp extends require("./dapp")
|
||||
Data.ChangeTrNum = TrNum
|
||||
}
|
||||
SendMoneyTR(Block, FromID, ToID, CoinSum, BlockNum, TrNum, DescriptionFrom, DescriptionTo, OperationCount) {
|
||||
FromID = ParseNum(FromID)
|
||||
ToID = ParseNum(ToID)
|
||||
FromID = global.ParseNum(FromID)
|
||||
ToID = global.ParseNum(ToID)
|
||||
if (CoinSum.SumCENT >= 1e9) {
|
||||
throw "ERROR SumCENT>=1e9";
|
||||
}
|
||||
@@ -1261,7 +1265,7 @@ class AccountApp extends require("./dapp")
|
||||
if (!FromData) {
|
||||
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;
|
||||
}
|
||||
this.WriteStateTR(FromData, TrNum)
|
||||
@@ -1276,7 +1280,7 @@ class AccountApp extends require("./dapp")
|
||||
if (!ToData) {
|
||||
throw "Send: Error account ToNum: " + ToID;
|
||||
}
|
||||
ADD(ToData.Value, CoinSum)
|
||||
global.ADD(ToData.Value, CoinSum)
|
||||
this.WriteStateTR(ToData, TrNum)
|
||||
if (ToID > 15) {
|
||||
this.DBChanges.TRHistory.push({
|
||||
@@ -1288,11 +1292,11 @@ class AccountApp extends require("./dapp")
|
||||
FromData.Value.OperationID += OperationCount
|
||||
if (FromData.Value.Smart) {
|
||||
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) {
|
||||
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) {
|
||||
@@ -1300,9 +1304,9 @@ class AccountApp extends require("./dapp")
|
||||
if (TR.Version === 2 || TR.Version === 3) {
|
||||
var format;
|
||||
if (TR.Version === 2)
|
||||
format = FORMAT_MONEY_TRANSFER_BODY2
|
||||
format = global.FORMAT_MONEY_TRANSFER_BODY2
|
||||
else
|
||||
format = FORMAT_MONEY_TRANSFER_BODY3
|
||||
format = global.FORMAT_MONEY_TRANSFER_BODY3
|
||||
Arr = []
|
||||
for (var i = 0; i < TR.To.length; i++) {
|
||||
var Item = TR.To[i];
|
||||
@@ -1313,14 +1317,14 @@ class AccountApp extends require("./dapp")
|
||||
for (var j = 0; j < 33; 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++)
|
||||
Arr[Arr.length] = Body[j]
|
||||
}
|
||||
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;
|
||||
}
|
||||
SaveHistory(Data) {
|
||||
@@ -1332,7 +1336,7 @@ class AccountApp extends require("./dapp")
|
||||
var BufWrite = global.BufLib.GetBufferFromObject(Data, this.HistoryFormatArr[Data.Type], 100, WorkStructHistory);
|
||||
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
||||
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";
|
||||
return false;
|
||||
}
|
||||
@@ -1389,20 +1393,20 @@ class AccountApp extends require("./dapp")
|
||||
if (!Data)
|
||||
break;
|
||||
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;
|
||||
var App = new AccountApp;
|
||||
DApps["Accounts"] = App;
|
||||
DAppByType[TYPE_TRANSACTION_CREATE] = App;
|
||||
DAppByType[TYPE_DEPRECATED_TRANSFER1] = App;
|
||||
DAppByType[TYPE_DEPRECATED_TRANSFER2] = App;
|
||||
DAppByType[TYPE_TRANSACTION_TRANSFER] = App;
|
||||
DAppByType[TYPE_TRANSACTION_ACC_HASH] = App;
|
||||
global.DApps["Accounts"] = App;
|
||||
global.DAppByType[global.TYPE_TRANSACTION_CREATE] = App;
|
||||
global.DAppByType[TYPE_DEPRECATED_TRANSFER1] = App;
|
||||
global.DAppByType[TYPE_DEPRECATED_TRANSFER2] = App;
|
||||
global.DAppByType[TYPE_TRANSACTION_TRANSFER] = App;
|
||||
global.DAppByType[global.TYPE_TRANSACTION_ACC_HASH] = App;
|
||||
|
||||
function TestStateFiles(Size, Format) {
|
||||
return;
|
||||
|
||||
@@ -27,7 +27,7 @@ class FileApp extends require("./dapp")
|
||||
}
|
||||
GetScriptTransaction(Body) {
|
||||
var TR = this.GetObjectTransaction(Body);
|
||||
ConvertBufferToStr(TR)
|
||||
global.ConvertBufferToStr(TR)
|
||||
return JSON.stringify(TR, undefined, 2);
|
||||
}
|
||||
GetVerifyTransaction(Block, BlockNum, TrNum, Body) {
|
||||
|
||||
@@ -19,18 +19,20 @@ const MESSAGE_END = MAX_MSG_SIZE - 5;
|
||||
require("./names");
|
||||
class CApp extends require("./dapp")
|
||||
{
|
||||
Channels
|
||||
NamesMap
|
||||
constructor() {
|
||||
super()
|
||||
this.Channels = {}
|
||||
this.NamesMap = NAMES.KeyValueMap
|
||||
this.NamesMap = global.NAMES.KeyValueMap
|
||||
global.MESSAGER = this
|
||||
}
|
||||
Decrypt(Body) {
|
||||
for (var key in this.Channels) {
|
||||
var Node = this.Channels[key];
|
||||
Decrypt(Body, TempArrayTr, Node.Secret)
|
||||
if (IsZeroArr(TempArrayTr.slice(MESSAGE_END))) {
|
||||
var Str = Utf8ArrayToStr(TempArrayTr.slice(MESSAGE_START));
|
||||
global.Decrypt(Body, TempArrayTr, Node.Secret)
|
||||
if (global.IsZeroArr(TempArrayTr.slice(MESSAGE_END))) {
|
||||
var Str = global.Utf8ArrayToStr(TempArrayTr.slice(MESSAGE_START));
|
||||
return Str;
|
||||
}
|
||||
}
|
||||
@@ -39,12 +41,11 @@ class CApp extends require("./dapp")
|
||||
Encrypt(StrMessage, StrTo) {
|
||||
var NameArr;
|
||||
if (typeof StrTo === "string") {
|
||||
NameArr = GetArrFromStr(StrTo, 32)
|
||||
NameArr = global.GetArrFromStr(StrTo, 32)
|
||||
} else {
|
||||
NameArr = StrTo
|
||||
}
|
||||
else {
|
||||
NameArr = Str
|
||||
}
|
||||
var arrMessage = GetArrFromStr(StrMessage, MESSAGE_END);
|
||||
var arrMessage = global.GetArrFromStr(StrMessage, MESSAGE_END);
|
||||
var ArrayTr = new Uint8Array(MAX_MSG_SIZE);
|
||||
ArrayTr[0] = MESSAGE_TYPE_TRANSACTION
|
||||
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 Node = this.OpenChannel(NameArr);
|
||||
Encrypt(ArrayTr, Body, Node.Secret)
|
||||
global.Encrypt(ArrayTr, Body, Node.Secret)
|
||||
return Body;
|
||||
}
|
||||
OpenChannel(FromNameArr) {
|
||||
var FromArr;
|
||||
var StrKeyFrom = GetHexFromAddres(FromNameArr);
|
||||
var StrKeyFrom = global.GetHexFromAddres(FromNameArr);
|
||||
if (this.NamesMap[StrKeyFrom]) {
|
||||
FromArr = this.NamesMap[StrKeyFrom]
|
||||
}
|
||||
else {
|
||||
FromArr = FromNameArr
|
||||
}
|
||||
var StrKey = GetHexFromAddres(FromArr);
|
||||
var StrKey = global.GetHexFromAddres(FromArr);
|
||||
var Node = this.Channels[StrKey];
|
||||
if (!Node) {
|
||||
Node = { addrArr: FromArr }
|
||||
CheckContextSecret(this.Server, Node)
|
||||
global.CheckContextSecret(this.Server, Node)
|
||||
this.Channels[StrKey] = Node
|
||||
}
|
||||
return Node;
|
||||
@@ -77,7 +78,7 @@ class CApp extends require("./dapp")
|
||||
var Type = Body[0];
|
||||
if (Type === OPEN_TYPE_TRANSACTION) {
|
||||
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);
|
||||
this.OpenChannel(FromNameArr)
|
||||
}
|
||||
@@ -105,19 +106,19 @@ class CApp extends require("./dapp")
|
||||
|
||||
function TestEncryptDecrypt() {
|
||||
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 KeyPair2 = GetKeyPairTest("Test2");
|
||||
var StrTest1 = GetArrFromStr("Test2", 32);
|
||||
var StrKey = GetHexFromAddres(StrTest1);
|
||||
MESSAGER.NamesMap[StrKey] = KeyPair2.addrArr;
|
||||
var Body = MESSAGER.Encrypt("This is a test message!", "Test2");
|
||||
var Str2 = MESSAGER.Decrypt(Body);
|
||||
var KeyPair2 = global.GetKeyPairTest("Test2");
|
||||
var StrTest1 = global.GetArrFromStr("Test2", 32);
|
||||
var StrKey = global.GetHexFromAddres(StrTest1);
|
||||
global.MESSAGER.NamesMap[StrKey] = KeyPair2.addrArr;
|
||||
var Body = global.MESSAGER.Encrypt("This is a test message!", "Test2");
|
||||
var Str2 = global.MESSAGER.Decrypt(Body);
|
||||
console.log("Decrypt:");
|
||||
console.log(Str2);
|
||||
};
|
||||
module.exports = CApp;
|
||||
var App = new CApp;
|
||||
DApps["Messager"] = App;
|
||||
DAppByType[OPEN_TYPE_TRANSACTION] = App;
|
||||
DAppByType[MESSAGE_TYPE_TRANSACTION] = App;
|
||||
var Messager = new CApp;
|
||||
global.DApps["Messager"] = Messager;
|
||||
global.DAppByType[OPEN_TYPE_TRANSACTION] = Messager;
|
||||
global.DAppByType[MESSAGE_TYPE_TRANSACTION] = Messager;
|
||||
|
||||
@@ -26,7 +26,7 @@ class NameApp extends require("./dapp")
|
||||
var StrKey = global.GetHexFromAddres(Body.slice(1, 33));
|
||||
if (!this.KeyValueMap[StrKey]) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ class SmartApp extends require("./dapp")
|
||||
FORMAT_ROW
|
||||
ROW_SIZE
|
||||
DBSmart
|
||||
RowHole
|
||||
constructor() {
|
||||
super()
|
||||
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
||||
@@ -125,10 +126,10 @@ class SmartApp extends require("./dapp")
|
||||
len += 2 + Body[len] + Body[len + 1] * 256
|
||||
if (len + 64 > Body.length)
|
||||
return 0;
|
||||
var Num = ReadUintFromArr(Body, len);
|
||||
var Num = global.ReadUintFromArr(Body, len);
|
||||
return Num;
|
||||
case TYPE_TRANSACTION_SMART_CHANGE:
|
||||
var Num = ReadUintFromArr(Body, 1);
|
||||
var Num = global.ReadUintFromArr(Body, 1);
|
||||
return Num;
|
||||
}
|
||||
}
|
||||
@@ -184,7 +185,7 @@ class SmartApp extends require("./dapp")
|
||||
if (!format)
|
||||
return "";
|
||||
var TR = global.BufLib.GetObjectFromBuffer(Body, format, {});
|
||||
ConvertBufferToStr(TR)
|
||||
global.ConvertBufferToStr(TR)
|
||||
return JSON.stringify(TR, undefined, 2);
|
||||
}
|
||||
GetVerifyTransaction(Block, BlockNum, TrNum, Body) {
|
||||
@@ -199,7 +200,7 @@ class SmartApp extends require("./dapp")
|
||||
return "Error length transaction (max size)";
|
||||
if (BlockNum < global.SMART_BLOCKNUM_START)
|
||||
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())
|
||||
return "Name required";
|
||||
if (TR.AccountLength > 50)
|
||||
@@ -209,10 +210,10 @@ class SmartApp extends require("./dapp")
|
||||
var AddAccount = TR.AccountLength - 1;
|
||||
var Price;
|
||||
if (TR.TokenGenerate)
|
||||
Price = PRICE_DAO(BlockNum).NewTokenSmart
|
||||
Price = global.PRICE_DAO(BlockNum).NewTokenSmart
|
||||
else
|
||||
Price = PRICE_DAO(BlockNum).NewSmart
|
||||
Price += AddAccount * PRICE_DAO(BlockNum).NewAccount
|
||||
Price = global.PRICE_DAO(BlockNum).NewSmart
|
||||
Price += AddAccount * global.PRICE_DAO(BlockNum).NewAccount
|
||||
if (!(ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= Price)) {
|
||||
return "Not money in the transaction";
|
||||
}
|
||||
@@ -270,11 +271,11 @@ class SmartApp extends require("./dapp")
|
||||
MaxCountOperationID = 1000000
|
||||
if (TR.OperationID > AccountFrom.Value.OperationID + MaxCountOperationID)
|
||||
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;
|
||||
if (AccountFrom.PubKey[0] === 2 || AccountFrom.PubKey[0] === 3)
|
||||
try {
|
||||
Result = secp256k1.verify(hash, TR.Sign, AccountFrom.PubKey)
|
||||
Result = global.secp256k1.verify(hash, TR.Sign, AccountFrom.PubKey)
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
@@ -297,7 +298,7 @@ class SmartApp extends require("./dapp")
|
||||
return "Error length transaction (min size)";
|
||||
if (BlockNum < global.SMART_BLOCKNUM_START)
|
||||
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);
|
||||
if (!Account)
|
||||
return "RunSmart: Error account Num: " + TR.Account;
|
||||
@@ -369,7 +370,7 @@ class SmartApp extends require("./dapp")
|
||||
Filter = Filter.toUpperCase()
|
||||
}
|
||||
if (Category)
|
||||
Category = ParseNum(Category)
|
||||
Category = global.global.ParseNum(Category)
|
||||
var WasError = 0;
|
||||
var arr = [];
|
||||
var Data;
|
||||
@@ -430,12 +431,12 @@ class SmartApp extends require("./dapp")
|
||||
if (!PrevItem) {
|
||||
throw "!PrevItem of Smart num = " + PrevNum;
|
||||
}
|
||||
Item.SumHash = sha3arr2(PrevItem.SumHash, Hash)
|
||||
Item.SumHash = global.sha3arr2(PrevItem.SumHash, Hash)
|
||||
}
|
||||
this.DBSmart.Write(Item)
|
||||
}
|
||||
ReadSmart(Num) {
|
||||
Num = ParseNum(Num)
|
||||
Num = global.global.ParseNum(Num)
|
||||
var Smart = this.DBSmart.GetMap("ITEM" + Num);
|
||||
if (!Smart) {
|
||||
Smart = this.DBSmart.Read(Num)
|
||||
@@ -480,12 +481,12 @@ class SmartApp extends require("./dapp")
|
||||
};
|
||||
|
||||
function GetParsing(Str) {
|
||||
LexerJS.ParseCode(Str);
|
||||
var Code = LexerJS.stream;
|
||||
for (var key in LexerJS.FunctionMap) {
|
||||
global.LexerJS.ParseCode(Str);
|
||||
var Code = global.LexerJS.stream;
|
||||
for (var key in global.LexerJS.FunctionMap) {
|
||||
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 += "\n\
|
||||
@@ -522,7 +523,7 @@ function GetSmartEvalContext(Smart) {
|
||||
var RunContext = undefined;
|
||||
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;
|
||||
if (typeof SmartOrSmartID === "number") {
|
||||
Smart = global.DApps.Smart.ReadSmart(SmartOrSmartID);
|
||||
@@ -540,11 +541,11 @@ function RunSmartMethod(Block, SmartOrSmartID, Account, BlockNum, TrNum, PayCont
|
||||
else
|
||||
return;
|
||||
}
|
||||
var context = {};
|
||||
var context: any = {};
|
||||
if (PayContext) {
|
||||
context.BlockNum = BlockNum;
|
||||
context.BlockHash = CopyArr(Block.Hash);
|
||||
context.BlockAddrHash = CopyArr(Block.AddrHash);
|
||||
context.BlockHash = global.CopyArr(Block.Hash);
|
||||
context.BlockAddrHash = global.CopyArr(Block.AddrHash);
|
||||
context.TrNum = TrNum;
|
||||
context.Account = GET_ACCOUNT(Account);
|
||||
context.Smart = GET_SMART(Smart);
|
||||
@@ -584,7 +585,7 @@ function GET_ACCOUNT(Obj) {
|
||||
}, get Currency() {
|
||||
return Data.Currency;
|
||||
}, get PubKey() {
|
||||
return CopyArr(Data.PubKey);
|
||||
return global.CopyArr(Data.PubKey);
|
||||
}, get Name() {
|
||||
return Data.Name;
|
||||
}, get BlockNumCreate() {
|
||||
@@ -912,7 +913,7 @@ function DO(Count) {
|
||||
|
||||
function $SetValue(ID, CoinSum) {
|
||||
DO(3000);
|
||||
ID = ParseNum(ID);
|
||||
ID = global.ParseNum(ID);
|
||||
if (!RunContext.Smart.TokenGenerate) {
|
||||
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";
|
||||
}
|
||||
if (typeof CoinSum === "number") {
|
||||
CoinSum = COIN_FROM_FLOAT(CoinSum);
|
||||
CoinSum = global.COIN_FROM_FLOAT(CoinSum);
|
||||
}
|
||||
if (CoinSum.SumCENT >= 1e9) {
|
||||
throw "ERROR SumCENT>=1e9";
|
||||
@@ -940,9 +941,9 @@ function $SetValue(ID, CoinSum) {
|
||||
|
||||
function $Send(ToID, CoinSum, Description) {
|
||||
DO(3000);
|
||||
ToID = ParseNum(ToID);
|
||||
ToID = global.ParseNum(ToID);
|
||||
if (typeof CoinSum === "number")
|
||||
CoinSum = COIN_FROM_FLOAT(CoinSum);
|
||||
CoinSum = global.COIN_FROM_FLOAT(CoinSum);
|
||||
if (CoinSum.SumCENT >= 1e9) {
|
||||
throw "ERROR SumCENT>=1e9";
|
||||
}
|
||||
@@ -959,8 +960,8 @@ function $Send(ToID, CoinSum, Description) {
|
||||
|
||||
function $Move(FromID, ToID, CoinSum, Description) {
|
||||
DO(3000);
|
||||
FromID = ParseNum(FromID);
|
||||
ToID = ParseNum(ToID);
|
||||
FromID = global.ParseNum(FromID);
|
||||
ToID = global.ParseNum(ToID);
|
||||
var FromData = global.DApps.Accounts.ReadStateTR(FromID);
|
||||
var ToData = global.DApps.Accounts.ReadStateTR(ToID);
|
||||
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";
|
||||
}
|
||||
if (typeof CoinSum === "number") {
|
||||
CoinSum = COIN_FROM_FLOAT(CoinSum);
|
||||
CoinSum = global.COIN_FROM_FLOAT(CoinSum);
|
||||
}
|
||||
if (CoinSum.SumCENT >= 1e9) {
|
||||
throw "ERROR SumCENT>=1e9";
|
||||
@@ -999,7 +1000,7 @@ function $Event(Description) {
|
||||
|
||||
function $ReadAccount(ID) {
|
||||
DO(900);
|
||||
ID = ParseNum(ID);
|
||||
ID = global.ParseNum(ID);
|
||||
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
||||
if (!Account)
|
||||
throw "Error read account Num: " + ID;
|
||||
@@ -1008,7 +1009,7 @@ function $ReadAccount(ID) {
|
||||
|
||||
function $ReadState(ID) {
|
||||
DO(900);
|
||||
ID = ParseNum(ID);
|
||||
ID = global.ParseNum(ID);
|
||||
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
||||
if (!Account)
|
||||
throw "Error read state account Num: " + ID;
|
||||
@@ -1037,7 +1038,7 @@ function $WriteState(Obj, ID) {
|
||||
DO(3000);
|
||||
if (ID === undefined)
|
||||
ID = Obj.Num;
|
||||
ID = ParseNum(ID);
|
||||
ID = global.ParseNum(ID);
|
||||
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
||||
if (!Account)
|
||||
throw "Error write account Num: " + ID;
|
||||
@@ -1056,12 +1057,12 @@ function $GetMaxAccount() {
|
||||
|
||||
function $ADD(Coin, Value2) {
|
||||
DO(5);
|
||||
return ADD(Coin, Value2);
|
||||
return global.ADD(Coin, Value2);
|
||||
};
|
||||
|
||||
function $SUB(Coin, Value2) {
|
||||
DO(5);
|
||||
return SUB(Coin, Value2);
|
||||
return global.SUB(Coin, Value2);
|
||||
};
|
||||
|
||||
function $ISZERO(Coin) {
|
||||
@@ -1074,22 +1075,22 @@ function $ISZERO(Coin) {
|
||||
|
||||
function $FLOAT_FROM_COIN(Coin) {
|
||||
DO(5);
|
||||
return FLOAT_FROM_COIN(Coin);
|
||||
return global.FLOAT_FROM_COIN(Coin);
|
||||
};
|
||||
|
||||
function $COIN_FROM_FLOAT(Sum) {
|
||||
DO(20);
|
||||
return COIN_FROM_FLOAT(Sum);
|
||||
return global.COIN_FROM_FLOAT(Sum);
|
||||
};
|
||||
|
||||
function $COIN_FROM_STRING(Sum) {
|
||||
DO(20);
|
||||
return COIN_FROM_STRING(Sum);
|
||||
return global.COIN_FROM_STRING(Sum);
|
||||
};
|
||||
|
||||
function $require(SmartNum) {
|
||||
DO(2000);
|
||||
SmartNum = ParseNum(SmartNum);
|
||||
SmartNum = global.ParseNum(SmartNum);
|
||||
var Smart = global.DApps.Smart.ReadSmart(SmartNum);
|
||||
if (!Smart) {
|
||||
throw "Smart does not exist. Error id number: " + SmartNum;
|
||||
@@ -1146,7 +1147,7 @@ function $parseInt(a) {
|
||||
|
||||
function $parseUint(a) {
|
||||
DO(10);
|
||||
return ParseNum(a);
|
||||
return global.ParseNum(a);
|
||||
};
|
||||
|
||||
function $String(a) {
|
||||
|
||||
Reference in New Issue
Block a user