@@ -11,97 +11,82 @@
|
|||||||
var MAX_SUM_TER = 1e9;
|
var MAX_SUM_TER = 1e9;
|
||||||
var MAX_SUM_CENT = 1e9;
|
var MAX_SUM_CENT = 1e9;
|
||||||
|
|
||||||
function ADD(Coin,Value2)
|
function ADD(Coin, Value2) {
|
||||||
{
|
|
||||||
Coin.SumCOIN += Value2.SumCOIN;
|
Coin.SumCOIN += Value2.SumCOIN;
|
||||||
Coin.SumCENT += Value2.SumCENT;
|
Coin.SumCENT += Value2.SumCENT;
|
||||||
if(Coin.SumCENT >= MAX_SUM_CENT)
|
if (Coin.SumCENT >= MAX_SUM_CENT) {
|
||||||
{
|
|
||||||
Coin.SumCENT -= MAX_SUM_CENT;
|
Coin.SumCENT -= MAX_SUM_CENT;
|
||||||
Coin.SumCOIN++;
|
Coin.SumCOIN++;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function SUB(Coin,Value2)
|
function SUB(Coin, Value2) {
|
||||||
{
|
|
||||||
Coin.SumCOIN -= Value2.SumCOIN;
|
Coin.SumCOIN -= Value2.SumCOIN;
|
||||||
if(Coin.SumCENT >= Value2.SumCENT)
|
if (Coin.SumCENT >= Value2.SumCENT) {
|
||||||
{
|
|
||||||
Coin.SumCENT -= Value2.SumCENT;
|
Coin.SumCENT -= Value2.SumCENT;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
Coin.SumCENT = MAX_SUM_CENT + Coin.SumCENT - Value2.SumCENT;
|
Coin.SumCENT = MAX_SUM_CENT + Coin.SumCENT - Value2.SumCENT;
|
||||||
Coin.SumCOIN--;
|
Coin.SumCOIN--;
|
||||||
}
|
}
|
||||||
if(Coin.SumCOIN < 0)
|
if (Coin.SumCOIN < 0) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function DIV(Coin,Value)
|
function DIV(Coin, Value) {
|
||||||
{
|
|
||||||
Coin.SumCOIN = Coin.SumCOIN / Value;
|
Coin.SumCOIN = Coin.SumCOIN / Value;
|
||||||
Coin.SumCENT = Math.floor(Coin.SumCENT / Value);
|
Coin.SumCENT = Math.floor(Coin.SumCENT / Value);
|
||||||
var SumCOIN = Math.floor(Coin.SumCOIN);
|
var SumCOIN = Math.floor(Coin.SumCOIN);
|
||||||
var SumCENT = Math.floor((Coin.SumCOIN - SumCOIN) * MAX_SUM_CENT);
|
var SumCENT = Math.floor((Coin.SumCOIN - SumCOIN) * MAX_SUM_CENT);
|
||||||
Coin.SumCOIN = SumCOIN;
|
Coin.SumCOIN = SumCOIN;
|
||||||
Coin.SumCENT = Coin.SumCENT + SumCENT;
|
Coin.SumCENT = Coin.SumCENT + SumCENT;
|
||||||
if(Coin.SumCENT >= MAX_SUM_CENT)
|
if (Coin.SumCENT >= MAX_SUM_CENT) {
|
||||||
{
|
|
||||||
Coin.SumCENT -= MAX_SUM_CENT;
|
Coin.SumCENT -= MAX_SUM_CENT;
|
||||||
Coin.SumCOIN++;
|
Coin.SumCOIN++;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
function FLOAT_FROM_COIN(Coin)
|
function FLOAT_FROM_COIN(Coin) {
|
||||||
{
|
|
||||||
var Sum = Coin.SumCOIN + Coin.SumCENT / MAX_SUM_CENT;
|
var Sum = Coin.SumCOIN + Coin.SumCENT / MAX_SUM_CENT;
|
||||||
return Sum;
|
return Sum;
|
||||||
};
|
};
|
||||||
|
|
||||||
function STRING_FROM_COIN(Coin)
|
function STRING_FROM_COIN(Coin) {
|
||||||
{
|
|
||||||
var Sum = FLOAT_FROM_COIN(Coin);
|
var Sum = FLOAT_FROM_COIN(Coin);
|
||||||
return Sum.toLocaleString(undefined, {useGrouping:true, style:'decimal', maximumFractionDigits:9});
|
return Sum.toLocaleString(undefined, { useGrouping: true, style: 'decimal', maximumFractionDigits: 9 });
|
||||||
};
|
};
|
||||||
|
|
||||||
function COIN_FROM_FLOAT(Sum)
|
function COIN_FROM_FLOAT(Sum) {
|
||||||
{
|
|
||||||
var SumCOIN = Math.floor(Sum);
|
var SumCOIN = Math.floor(Sum);
|
||||||
var SumCENT = Math.floor((Sum - SumCOIN) * MAX_SUM_CENT);
|
var SumCENT = Math.floor((Sum - SumCOIN) * MAX_SUM_CENT);
|
||||||
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT};
|
var Coin = { SumCOIN: SumCOIN, SumCENT: SumCENT };
|
||||||
return Coin;
|
return Coin;
|
||||||
};
|
};
|
||||||
|
|
||||||
function COIN_FROM_FLOAT2(Sum)
|
function COIN_FROM_FLOAT2(Sum) {
|
||||||
{
|
|
||||||
var SumCOIN = Math.floor(Sum);
|
var SumCOIN = Math.floor(Sum);
|
||||||
var SumCENT = Math.floor(Sum * MAX_SUM_CENT - SumCOIN * MAX_SUM_CENT);
|
var SumCENT = Math.floor(Sum * MAX_SUM_CENT - SumCOIN * MAX_SUM_CENT);
|
||||||
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT};
|
var Coin = { SumCOIN: SumCOIN, SumCENT: SumCENT };
|
||||||
return Coin;
|
return Coin;
|
||||||
};
|
};
|
||||||
if(typeof window === "object")
|
if (typeof window === "object")
|
||||||
window.COIN_FROM_FLOAT = COIN_FROM_FLOAT2;
|
window.COIN_FROM_FLOAT = COIN_FROM_FLOAT2;
|
||||||
|
|
||||||
function ISZERO(Coin)
|
function ISZERO(Coin) {
|
||||||
{
|
if (Coin.SumCOIN === 0 && Coin.SumCENT === 0)
|
||||||
if(Coin.SumCOIN === 0 && Coin.SumCENT === 0)
|
|
||||||
return true;
|
return true;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
function COIN_FROM_STRING(Str)
|
function COIN_FROM_STRING(Str) {
|
||||||
{
|
|
||||||
throw "TODO: COIN_FROM_STRING";
|
throw "TODO: COIN_FROM_STRING";
|
||||||
};
|
};
|
||||||
if(typeof global === "object")
|
if (typeof global === "object") {
|
||||||
{
|
|
||||||
global.ADD = ADD;
|
global.ADD = ADD;
|
||||||
global.SUB = SUB;
|
global.SUB = SUB;
|
||||||
global.DIV = DIV;
|
global.DIV = DIV;
|
||||||
|
|||||||
@@ -9,40 +9,34 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
function SavePrivateKey()
|
function SavePrivateKey() {
|
||||||
{
|
|
||||||
var Select = document.getElementById("idTypeKey");
|
var Select = document.getElementById("idTypeKey");
|
||||||
if(Select.value === "brain")
|
if (Select.value === "brain") {
|
||||||
{
|
|
||||||
ConvertToPrivateKey();
|
ConvertToPrivateKey();
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
var Str = document.getElementById("idKeyNew").value;
|
var Str = document.getElementById("idKeyNew").value;
|
||||||
Str = Str.trim();
|
Str = Str.trim();
|
||||||
if(Select.value === "private" && (Str.length !== 64 || !IsHexStr(Str)))
|
if (Select.value === "private" && (Str.length !== 64 || !IsHexStr(Str))) {
|
||||||
{
|
|
||||||
SetError("Error: Length must 64 HEX chars. (Length=" + Str.length + ")");
|
SetError("Error: Length must 64 HEX chars. (Length=" + Str.length + ")");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(Select.value !== "private" && (Str.length !== 66 || Str.substr(0, 1) !== "0" || !IsHexStr(Str)))
|
if (Select.value !== "private" && (Str.length !== 66 || Str.substr(0, 1) !== "0" || !IsHexStr(Str))) {
|
||||||
{
|
|
||||||
SetError("Error: Length must 66 HEX chars. (Length=" + Str.length + ")");
|
SetError("Error: Length must 66 HEX chars. (Length=" + Str.length + ")");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
if(Select.value === "private" && PrivKeyStr !== Str)
|
if (Select.value === "private" && PrivKeyStr !== Str)
|
||||||
SetStatus("Changed privat key");
|
SetStatus("Changed privat key");
|
||||||
else
|
else
|
||||||
if(Select.value === "public" && PubKeyStr !== Str)
|
if (Select.value === "public" && PubKeyStr !== Str)
|
||||||
SetStatus("Changed public key");
|
SetStatus("Changed public key");
|
||||||
GetData("SetWalletKey", Str, function (Data)
|
GetData("SetWalletKey", Str, function(Data) {
|
||||||
{
|
if (Data && Data.result === 1) {
|
||||||
if(Data && Data.result === 1)
|
if (Select.value === "private")
|
||||||
{
|
|
||||||
if(Select.value === "private")
|
|
||||||
SelectStyle("styleContrast1");
|
SelectStyle("styleContrast1");
|
||||||
else
|
else
|
||||||
if(Select.value === "public")
|
if (Select.value === "public")
|
||||||
SelectStyle("styleContrast2");
|
SelectStyle("styleContrast2");
|
||||||
SetVisibleEditKeys(0);
|
SetVisibleEditKeys(0);
|
||||||
UpdatesData();
|
UpdatesData();
|
||||||
@@ -50,46 +44,36 @@ function SavePrivateKey()
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function CreateCheckPoint()
|
function CreateCheckPoint() {
|
||||||
{
|
if (!ServerBlockNumDB || ServerBlockNumDB < 16) {
|
||||||
if(!ServerBlockNumDB || ServerBlockNumDB < 16)
|
|
||||||
{
|
|
||||||
SetError("Not set ServerBlockNumDB");
|
SetError("Not set ServerBlockNumDB");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
var BlockNum = ServerBlockNumDB - 10;
|
var BlockNum = ServerBlockNumDB - 10;
|
||||||
SetCheckPoint(BlockNum);
|
SetCheckPoint(BlockNum);
|
||||||
};
|
};
|
||||||
|
|
||||||
function UseAutoCheckPoint()
|
function UseAutoCheckPoint() {
|
||||||
{
|
|
||||||
var Set = $("idUseAutoCheckPoint").checked;
|
var Set = $("idUseAutoCheckPoint").checked;
|
||||||
var Period = ParseNum($("idPeriodAutoCheckPoint").value);
|
var Period = ParseNum($("idPeriodAutoCheckPoint").value);
|
||||||
GetData("SetAutoCheckPoint", {Set:Set, Period:Period}, function (Data)
|
GetData("SetAutoCheckPoint", { Set: Set, Period: Period }, function(Data) {
|
||||||
{
|
if (Data) {
|
||||||
if(Data)
|
|
||||||
{
|
|
||||||
SetStatus(Data.text, !Data.result);
|
SetStatus(Data.text, !Data.result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function UseAutoCorrTime()
|
function UseAutoCorrTime() {
|
||||||
{
|
GetData("SetAutoCorrTime", document.getElementById("idUseAutoCorrTime").checked, function(Data) {
|
||||||
GetData("SetAutoCorrTime", document.getElementById("idUseAutoCorrTime").checked, function (Data)
|
if (Data) {
|
||||||
{
|
|
||||||
if(Data)
|
|
||||||
{
|
|
||||||
SetStatus(Data.text, !Data.result);
|
SetStatus(Data.text, !Data.result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetCodeVersionJSON()
|
function SetCodeVersionJSON() {
|
||||||
{
|
|
||||||
var Data = JSON.parse(JSON.stringify(CONFIG_DATA.CODE_VERSION));
|
var Data = JSON.parse(JSON.stringify(CONFIG_DATA.CODE_VERSION));
|
||||||
if(!Data.BlockNum)
|
if (!Data.BlockNum) {
|
||||||
{
|
|
||||||
Data.LevelUpdate = 160;
|
Data.LevelUpdate = 160;
|
||||||
}
|
}
|
||||||
Data.BlockNum = CONFIG_DATA.CurBlockNum;
|
Data.BlockNum = CONFIG_DATA.CurBlockNum;
|
||||||
@@ -103,13 +87,11 @@ function SetCodeVersionJSON()
|
|||||||
document.getElementById("idDevService").value = Str;
|
document.getElementById("idDevService").value = Str;
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetCorrTimeJSON()
|
function SetCorrTimeJSON() {
|
||||||
{
|
|
||||||
var AutoDelta = parseInt(document.getElementById("idDevValue").value);
|
var AutoDelta = parseInt(document.getElementById("idDevValue").value);
|
||||||
var Data = {Num:CONFIG_DATA.CurBlockNum, bUse:1, bAddTime:1};
|
var Data = { Num: CONFIG_DATA.CurBlockNum, bUse: 1, bAddTime: 1 };
|
||||||
if(AutoDelta < 0)
|
if (AutoDelta < 0) {
|
||||||
{
|
AutoDelta = - AutoDelta;
|
||||||
AutoDelta = - AutoDelta;
|
|
||||||
Data.bAddTime = 0;
|
Data.bAddTime = 0;
|
||||||
}
|
}
|
||||||
Data.DeltaTime = 40;
|
Data.DeltaTime = 40;
|
||||||
@@ -119,180 +101,140 @@ function SetCorrTimeJSON()
|
|||||||
document.getElementById("idDevService").value = Str;
|
document.getElementById("idDevService").value = Str;
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetNetConstJSON()
|
function SetNetConstJSON() {
|
||||||
{
|
|
||||||
var Str = JSON.stringify(Data, "", 2);
|
var Str = JSON.stringify(Data, "", 2);
|
||||||
document.getElementById("idDevService").value = Str;
|
document.getElementById("idDevService").value = Str;
|
||||||
var Data = {MaxTrasactionLimit:CONFIG_DATA.MAX_TRANSACTION_LIMIT};
|
var Data = { MaxTrasactionLimit: CONFIG_DATA.MAX_TRANSACTION_LIMIT };
|
||||||
var Str = JSON.stringify(Data, "", 2);
|
var Str = JSON.stringify(Data, "", 2);
|
||||||
document.getElementById("idDevService").value = Str;
|
document.getElementById("idDevService").value = Str;
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetNewCodeVersion()
|
function SetNewCodeVersion() {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
var Data = JSON.parse(document.getElementById("idDevService").value);
|
var Data = JSON.parse(document.getElementById("idDevService").value);
|
||||||
}
|
}
|
||||||
catch(e)
|
catch (e) {
|
||||||
{
|
|
||||||
SetError("Error format setting data");
|
SetError("Error format setting data");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
Data.addrArr = GetArrFromHex(Data.addrArr);
|
Data.addrArr = GetArrFromHex(Data.addrArr);
|
||||||
GetData("SetNewCodeVersion", Data, function (Data)
|
GetData("SetNewCodeVersion", Data, function(Data) {
|
||||||
{
|
if (Data) {
|
||||||
if(Data)
|
|
||||||
{
|
|
||||||
SetStatus(Data.text, !Data.result);
|
SetStatus(Data.text, !Data.result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function StartTimeCorrect()
|
function StartTimeCorrect() {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
var Data = JSON.parse(document.getElementById("idDevService").value);
|
var Data = JSON.parse(document.getElementById("idDevService").value);
|
||||||
}
|
}
|
||||||
catch(e)
|
catch (e) {
|
||||||
{
|
|
||||||
SetError("Error format setting data");
|
SetError("Error format setting data");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
GetData("SetCheckDeltaTime", Data, function (Data)
|
GetData("SetCheckDeltaTime", Data, function(Data) {
|
||||||
{
|
if (Data) {
|
||||||
if(Data)
|
|
||||||
{
|
|
||||||
SetStatus(Data.text, !Data.result);
|
SetStatus(Data.text, !Data.result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function StartNetConst()
|
function StartNetConst() {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
var Data = JSON.parse(document.getElementById("idDevService").value);
|
var Data = JSON.parse(document.getElementById("idDevService").value);
|
||||||
}
|
}
|
||||||
catch(e)
|
catch (e) {
|
||||||
{
|
|
||||||
SetError("Error format setting data");
|
SetError("Error format setting data");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
GetData("SetCheckNetConstant", Data, function (Data)
|
GetData("SetCheckNetConstant", Data, function(Data) {
|
||||||
{
|
if (Data) {
|
||||||
if(Data)
|
|
||||||
{
|
|
||||||
SetStatus(Data.text, !Data.result);
|
SetStatus(Data.text, !Data.result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function RestartNode()
|
function RestartNode() {
|
||||||
{
|
|
||||||
GetData("RestartNode", {});
|
GetData("RestartNode", {});
|
||||||
DoRestartWallet();
|
DoRestartWallet();
|
||||||
};
|
};
|
||||||
|
|
||||||
function UseAutoUpdate()
|
function UseAutoUpdate() {
|
||||||
{
|
var Data = { USE_AUTO_UPDATE: document.getElementById("idAutoUpdate").checked, DoMining: 1 };
|
||||||
var Data = {USE_AUTO_UPDATE:document.getElementById("idAutoUpdate").checked, DoMining:1};
|
GetData("SaveConstant", Data, function(Data) {
|
||||||
GetData("SaveConstant", Data, function (Data)
|
if (Data && Data.result) {
|
||||||
{
|
|
||||||
if(Data && Data.result)
|
|
||||||
{
|
|
||||||
SetStatus("Save AutoUpdate: " + document.getElementById("idAutoUpdate").checked);
|
SetStatus("Save AutoUpdate: " + document.getElementById("idAutoUpdate").checked);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function UseMining()
|
function UseMining() {
|
||||||
{
|
if (!MiningAccount) {
|
||||||
if(!MiningAccount)
|
|
||||||
{
|
|
||||||
SetError("Not set mining account");
|
SetError("Not set mining account");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
var Data = {USE_MINING:document.getElementById("idUseMining").checked, DoMining:1};
|
var Data = { USE_MINING: document.getElementById("idUseMining").checked, DoMining: 1 };
|
||||||
GetData("SaveConstant", Data, function (Data)
|
GetData("SaveConstant", Data, function(Data) {
|
||||||
{
|
if (Data && Data.result) {
|
||||||
if(Data && Data.result)
|
|
||||||
{
|
|
||||||
SetStatus("Save Mining: " + document.getElementById("idUseMining").checked);
|
SetStatus("Save Mining: " + document.getElementById("idUseMining").checked);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetPercentMining()
|
function SetPercentMining() {
|
||||||
{
|
var Data = { POW_MAX_PERCENT: document.getElementById("idPercentMining").value };
|
||||||
var Data = {POW_MAX_PERCENT:document.getElementById("idPercentMining").value};
|
GetData("SaveConstant", Data, function(Data) {
|
||||||
GetData("SaveConstant", Data, function (Data)
|
if (Data && Data.result) {
|
||||||
{
|
|
||||||
if(Data && Data.result)
|
|
||||||
{
|
|
||||||
SetStatus("Save Mining percent: " + document.getElementById("idPercentMining").value + " %");
|
SetStatus("Save Mining percent: " + document.getElementById("idPercentMining").value + " %");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function MiningSets()
|
function MiningSets() {
|
||||||
{
|
|
||||||
var name = "edit_mining_set";
|
var name = "edit_mining_set";
|
||||||
if(IsVisibleBlock(name))
|
if (IsVisibleBlock(name)) {
|
||||||
{
|
|
||||||
SetVisibleBlock(name, false);
|
SetVisibleBlock(name, false);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
SetVisibleBlock(name, true);
|
SetVisibleBlock(name, true);
|
||||||
document.getElementById("idMiningAccount").value = MiningAccount;
|
document.getElementById("idMiningAccount").value = MiningAccount;
|
||||||
document.getElementById("idMiningAccount").focus();
|
document.getElementById("idMiningAccount").focus();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function SaveMiningSet(Value)
|
function SaveMiningSet(Value) {
|
||||||
{
|
|
||||||
SetVisibleBlock("edit_mining_set", false);
|
SetVisibleBlock("edit_mining_set", false);
|
||||||
if(Value)
|
if (Value) {
|
||||||
{
|
|
||||||
MiningAccount = Value;
|
MiningAccount = Value;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
MiningAccount = ParseNum(document.getElementById("idMiningAccount").value);
|
MiningAccount = ParseNum(document.getElementById("idMiningAccount").value);
|
||||||
}
|
}
|
||||||
GetData("SetMining", MiningAccount, function (Data)
|
GetData("SetMining", MiningAccount, function(Data) {
|
||||||
{
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function CancalMiningSet()
|
function CancalMiningSet() {
|
||||||
{
|
|
||||||
var name = "edit_mining_set";
|
var name = "edit_mining_set";
|
||||||
SetVisibleBlock(name, false);
|
SetVisibleBlock(name, false);
|
||||||
};
|
};
|
||||||
var WasHistoryMaxNum;
|
var WasHistoryMaxNum;
|
||||||
var WasLastNumSound = 0;
|
var WasLastNumSound = 0;
|
||||||
|
|
||||||
function CheckNewMoney()
|
function CheckNewMoney() {
|
||||||
{
|
return;
|
||||||
return ;
|
if (!$("idUseSoundHistory").checked)
|
||||||
if(!$("idUseSoundHistory").checked)
|
return;
|
||||||
return ;
|
if (WasHistoryMaxNum === HistoryMaxNum || !ServerBlockNumDB)
|
||||||
if(WasHistoryMaxNum === HistoryMaxNum || !ServerBlockNumDB)
|
return;
|
||||||
return ;
|
|
||||||
WasHistoryMaxNum = HistoryMaxNum;
|
WasHistoryMaxNum = HistoryMaxNum;
|
||||||
GetData("GetHistoryAct", {StartNum:HistoryMaxNum - 40, CountNum:40}, function (Data)
|
GetData("GetHistoryAct", { StartNum: HistoryMaxNum - 40, CountNum: 40 }, function(Data) {
|
||||||
{
|
if (Data && Data.result) {
|
||||||
if(Data && Data.result)
|
|
||||||
{
|
|
||||||
var arr = Data.arr;
|
var arr = Data.arr;
|
||||||
for(var i = 0; i < arr.length; i++)
|
for (var i = 0; i < arr.length; i++) {
|
||||||
{
|
|
||||||
var Item = arr[i];
|
var Item = arr[i];
|
||||||
if(Item.Direct === "+" && Item.BlockNum > ServerBlockNumDB - 60 && Item.BlockNum < ServerBlockNumDB - 20 && Item.BlockNum > WasLastNumSound)
|
if (Item.Direct === "+" && Item.BlockNum > ServerBlockNumDB - 60 && Item.BlockNum < ServerBlockNumDB - 20 && Item.BlockNum > WasLastNumSound) {
|
||||||
{
|
|
||||||
WasLastNumSound = Item.BlockNum;
|
WasLastNumSound = Item.BlockNum;
|
||||||
$("sound_coin").play();
|
$("sound_coin").play();
|
||||||
}
|
}
|
||||||
@@ -301,52 +243,41 @@ function CheckNewMoney()
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function DoRestartWallet()
|
function DoRestartWallet() {
|
||||||
{
|
|
||||||
SetStatus("<H1 align='center' style='color:blue'>Restarting program...</H1>");
|
SetStatus("<H1 align='center' style='color:blue'>Restarting program...</H1>");
|
||||||
if(!WasSetRestart)
|
if (!WasSetRestart) {
|
||||||
{
|
|
||||||
WasSetRestart = 1;
|
WasSetRestart = 1;
|
||||||
setTimeout(function ()
|
setTimeout(function() {
|
||||||
{
|
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
}, 10 * 1000);
|
}, 10 * 1000);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetArrLog(arr)
|
function SetArrLog(arr) {
|
||||||
{
|
|
||||||
var Str = "";
|
var Str = "";
|
||||||
var bFindAccount = 0;
|
var bFindAccount = 0;
|
||||||
for(var i = 0; i < arr.length; i++)
|
for (var i = 0; i < arr.length; i++) {
|
||||||
{
|
|
||||||
var Item = arr[i];
|
var Item = arr[i];
|
||||||
var tr_text = GetTransactionText(MapSendTransaction[Item.key], Item.key.substr(0, 16));
|
var tr_text = GetTransactionText(MapSendTransaction[Item.key], Item.key.substr(0, 16));
|
||||||
var info = Item.text;
|
var info = Item.text;
|
||||||
if(tr_text)
|
if (tr_text)
|
||||||
info += " (" + tr_text + ")";
|
info += " (" + tr_text + ")";
|
||||||
if(Item.final)
|
if (Item.final) {
|
||||||
{
|
|
||||||
var TR = MapSendTransaction[Item.key];
|
var TR = MapSendTransaction[Item.key];
|
||||||
if(TR)
|
if (TR) {
|
||||||
{
|
if (Item.text.indexOf("Add to blockchain") >= 0) {
|
||||||
if(Item.text.indexOf("Add to blockchain") >= 0)
|
if (TR.bFindAcc) {
|
||||||
{
|
|
||||||
if(TR.bFindAcc)
|
|
||||||
{
|
|
||||||
bFindAccount = 1;
|
bFindAccount = 1;
|
||||||
TR.bFindAcc = 0;
|
TR.bFindAcc = 0;
|
||||||
}
|
}
|
||||||
if(TR.Run)
|
if (TR.Run) {
|
||||||
{
|
|
||||||
TR.Run(TR);
|
TR.Run(TR);
|
||||||
TR.Run = undefined;
|
TR.Run = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var Account = MapCheckTransaction[Item.key];
|
var Account = MapCheckTransaction[Item.key];
|
||||||
if(Account)
|
if (Account) {
|
||||||
{
|
|
||||||
delete MapCheckTransaction[Item.key];
|
delete MapCheckTransaction[Item.key];
|
||||||
Account.NextSendTime = 0;
|
Account.NextSendTime = 0;
|
||||||
}
|
}
|
||||||
@@ -355,39 +286,31 @@ function SetArrLog(arr)
|
|||||||
}
|
}
|
||||||
SetStatusFromServer(Str);
|
SetStatusFromServer(Str);
|
||||||
CheckSending();
|
CheckSending();
|
||||||
if(bFindAccount)
|
if (bFindAccount) {
|
||||||
{
|
|
||||||
FindMyAccounts();
|
FindMyAccounts();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetAutoMining()
|
function SetAutoMining() {
|
||||||
{
|
setTimeout(function() {
|
||||||
setTimeout(function ()
|
|
||||||
{
|
|
||||||
var Select = $("idAccount");
|
var Select = $("idAccount");
|
||||||
if(Select.options.length)
|
if (Select.options.length) {
|
||||||
{
|
|
||||||
SaveMiningSet(Select.options[Select.options.length - 1].value);
|
SaveMiningSet(Select.options[Select.options.length - 1].value);
|
||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
};
|
};
|
||||||
|
|
||||||
function ViewNetworkMode()
|
function ViewNetworkMode() {
|
||||||
{
|
if (IsVisibleBlock('idNetworkView')) {
|
||||||
if(IsVisibleBlock('idNetworkView'))
|
|
||||||
{
|
|
||||||
SetVisibleBlock('idNetworkView', false);
|
SetVisibleBlock('idNetworkView', false);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
SetVisibleBlock('idNetworkView', true);
|
SetVisibleBlock('idNetworkView', true);
|
||||||
var Mode = CONFIG_DATA.CONSTANTS.NET_WORK_MODE;
|
var Mode = CONFIG_DATA.CONSTANTS.NET_WORK_MODE;
|
||||||
if(!Mode)
|
if (!Mode) {
|
||||||
{
|
|
||||||
Mode = {};
|
Mode = {};
|
||||||
Mode.UseDirectIP = true;
|
Mode.UseDirectIP = true;
|
||||||
if(INTERNET_IP_FROM_STUN)
|
if (INTERNET_IP_FROM_STUN)
|
||||||
Mode.ip = INTERNET_IP_FROM_STUN;
|
Mode.ip = INTERNET_IP_FROM_STUN;
|
||||||
else
|
else
|
||||||
Mode.ip = SERVER_IP;
|
Mode.ip = SERVER_IP;
|
||||||
@@ -396,146 +319,120 @@ function ViewNetworkMode()
|
|||||||
document.getElementById("idUseDirectIP").checked = Mode.UseDirectIP;
|
document.getElementById("idUseDirectIP").checked = Mode.UseDirectIP;
|
||||||
document.getElementById("idIP").value = Mode.ip;
|
document.getElementById("idIP").value = Mode.ip;
|
||||||
document.getElementById("idPort").value = Mode.port;
|
document.getElementById("idPort").value = Mode.port;
|
||||||
if(!Mode.NodeWhiteList)
|
if (!Mode.NodeWhiteList)
|
||||||
Mode.NodeWhiteList = "";
|
Mode.NodeWhiteList = "";
|
||||||
document.getElementById("idNodeWhiteList").value = Mode.NodeWhiteList;
|
document.getElementById("idNodeWhiteList").value = Mode.NodeWhiteList;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetNetworkParams(bRestart)
|
function SetNetworkParams(bRestart) {
|
||||||
{
|
|
||||||
var Mode = {};
|
var Mode = {};
|
||||||
Mode.UseDirectIP = document.getElementById("idUseDirectIP").checked;
|
Mode.UseDirectIP = document.getElementById("idUseDirectIP").checked;
|
||||||
Mode.ip = document.getElementById("idIP").value;
|
Mode.ip = document.getElementById("idIP").value;
|
||||||
Mode.port = ParseNum(document.getElementById("idPort").value);
|
Mode.port = ParseNum(document.getElementById("idPort").value);
|
||||||
Mode.NodeWhiteList = document.getElementById("idNodeWhiteList").value;
|
Mode.NodeWhiteList = document.getElementById("idNodeWhiteList").value;
|
||||||
Mode.DoRestartNode = bRestart;
|
Mode.DoRestartNode = bRestart;
|
||||||
GetData("SetNetMode", Mode, function (Data)
|
GetData("SetNetMode", Mode, function(Data) {
|
||||||
{
|
if (Data && Data.result) {
|
||||||
if(Data && Data.result)
|
|
||||||
{
|
|
||||||
SetStatus("Set net work params OK");
|
SetStatus("Set net work params OK");
|
||||||
SetVisibleBlock('idNetworkView', false);
|
SetVisibleBlock('idNetworkView', false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if(bRestart)
|
if (bRestart)
|
||||||
DoRestartWallet();
|
DoRestartWallet();
|
||||||
};
|
};
|
||||||
|
|
||||||
function ViewConstant()
|
function ViewConstant() {
|
||||||
{
|
if (IsVisibleBlock('idConstantView')) {
|
||||||
if(IsVisibleBlock('idConstantView'))
|
|
||||||
{
|
|
||||||
SetVisibleBlock('idConstantView', false);
|
SetVisibleBlock('idConstantView', false);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
SetVisibleBlock('idConstantView', true);
|
SetVisibleBlock('idConstantView', true);
|
||||||
document.getElementById("idConstant").value = JSON.stringify(CONFIG_DATA.CONSTANTS, "", 2);
|
document.getElementById("idConstant").value = JSON.stringify(CONFIG_DATA.CONSTANTS, "", 2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function SaveConstant(bRestart)
|
function SaveConstant(bRestart) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
var Data = JSON.parse(document.getElementById("idConstant").value);
|
var Data = JSON.parse(document.getElementById("idConstant").value);
|
||||||
}
|
}
|
||||||
catch(e)
|
catch (e) {
|
||||||
{
|
|
||||||
SetError("Error JSON format setting constant");
|
SetError("Error JSON format setting constant");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
Data.DoRestartNode = bRestart;
|
Data.DoRestartNode = bRestart;
|
||||||
GetData("SaveConstant", Data, function (Data)
|
GetData("SaveConstant", Data, function(Data) {
|
||||||
{
|
if (Data && Data.result) {
|
||||||
if(Data && Data.result)
|
|
||||||
{
|
|
||||||
SetStatus("Save Constant OK");
|
SetStatus("Save Constant OK");
|
||||||
SetVisibleBlock('idConstantView', false);
|
SetVisibleBlock('idConstantView', false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if(bRestart)
|
if (bRestart)
|
||||||
DoRestartWallet();
|
DoRestartWallet();
|
||||||
};
|
};
|
||||||
|
|
||||||
function ViewRemoteParams()
|
function ViewRemoteParams() {
|
||||||
{
|
if (IsVisibleBlock('idRemoteView')) {
|
||||||
if(IsVisibleBlock('idRemoteView'))
|
|
||||||
{
|
|
||||||
SetVisibleBlock('idRemoteView', false);
|
SetVisibleBlock('idRemoteView', false);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
SetVisibleBlock('idRemoteView', true);
|
SetVisibleBlock('idRemoteView', true);
|
||||||
if(CONFIG_DATA.HTTPPort)
|
if (CONFIG_DATA.HTTPPort)
|
||||||
document.getElementById("idHTTPPort").value = CONFIG_DATA.HTTPPort;
|
document.getElementById("idHTTPPort").value = CONFIG_DATA.HTTPPort;
|
||||||
document.getElementById("idHTTPPassword").value = CONFIG_DATA.HTTPPassword;
|
document.getElementById("idHTTPPassword").value = CONFIG_DATA.HTTPPassword;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function SetRemoteParams(bRestart)
|
function SetRemoteParams(bRestart) {
|
||||||
{
|
|
||||||
var PrevHTTPPassword = HTTPPassword;
|
var PrevHTTPPassword = HTTPPassword;
|
||||||
var HTTPPort = ParseNum(document.getElementById("idHTTPPort").value);
|
var HTTPPort = ParseNum(document.getElementById("idHTTPPort").value);
|
||||||
var HTTPPassword = document.getElementById("idHTTPPassword").value;
|
var HTTPPassword = document.getElementById("idHTTPPassword").value;
|
||||||
GetData("SetHTTPParams", {HTTPPort:HTTPPort, HTTPPassword:HTTPPassword, DoRestartNode:bRestart}, function (Data)
|
GetData("SetHTTPParams", { HTTPPort: HTTPPort, HTTPPassword: HTTPPassword, DoRestartNode: bRestart }, function(Data) {
|
||||||
{
|
if (!PrevHTTPPassword && HTTPPassword)
|
||||||
if(!PrevHTTPPassword && HTTPPassword)
|
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
SetVisibleBlock('idRemoteView', false);
|
SetVisibleBlock('idRemoteView', false);
|
||||||
SetStatus("Set HTTP params OK");
|
SetStatus("Set HTTP params OK");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if(bRestart)
|
if (bRestart)
|
||||||
DoRestartWallet();
|
DoRestartWallet();
|
||||||
};
|
};
|
||||||
|
|
||||||
function RewriteAllTransactions()
|
function RewriteAllTransactions() {
|
||||||
{
|
|
||||||
DoBlockChainProcess("RewriteAllTransactions", "Rewrite all transactions", 0);
|
DoBlockChainProcess("RewriteAllTransactions", "Rewrite all transactions", 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
function RewriteTransactions()
|
function RewriteTransactions() {
|
||||||
{
|
|
||||||
DoBlockChainProcess("RewriteTransactions", "Rewrite transactions on last %1 blocks", 1);
|
DoBlockChainProcess("RewriteTransactions", "Rewrite transactions on last %1 blocks", 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
function TruncateBlockChain()
|
function TruncateBlockChain() {
|
||||||
{
|
|
||||||
DoBlockChainProcess("TruncateBlockChain", "Truncate last %1 blocks", 1);
|
DoBlockChainProcess("TruncateBlockChain", "Truncate last %1 blocks", 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
function ClearDataBase()
|
function ClearDataBase() {
|
||||||
{
|
|
||||||
DoBlockChainProcess("ClearDataBase", "Clear DataBase", 0);
|
DoBlockChainProcess("ClearDataBase", "Clear DataBase", 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
function CleanChain()
|
function CleanChain() {
|
||||||
{
|
|
||||||
DoBlockChainProcess("CleanChain", "Clean chain on last %1 blocks", 1);
|
DoBlockChainProcess("CleanChain", "Clean chain on last %1 blocks", 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
function DoBlockChainProcess(FuncName,Text,LastBlock)
|
function DoBlockChainProcess(FuncName, Text, LastBlock) {
|
||||||
{
|
|
||||||
SaveValues();
|
SaveValues();
|
||||||
var Params = {};
|
var Params = {};
|
||||||
if(LastBlock)
|
if (LastBlock) {
|
||||||
{
|
|
||||||
Params.BlockCount = ParseNum(document.getElementById("idBlockCount").value);
|
Params.BlockCount = ParseNum(document.getElementById("idBlockCount").value);
|
||||||
Text = Text.replace("%1", Params.BlockCount);
|
Text = Text.replace("%1", Params.BlockCount);
|
||||||
}
|
}
|
||||||
var result = confirm(Text + "?");
|
var result = confirm(Text + "?");
|
||||||
if(!result)
|
if (!result)
|
||||||
return ;
|
return;
|
||||||
SetVisibleBlock("idServerBlock", 1);
|
SetVisibleBlock("idServerBlock", 1);
|
||||||
SetStatus("START: " + Text);
|
SetStatus("START: " + Text);
|
||||||
GetData(FuncName, Params, function (Data)
|
GetData(FuncName, Params, function(Data) {
|
||||||
{
|
if (Data) {
|
||||||
if(Data)
|
|
||||||
{
|
|
||||||
SetStatus("FINISH: " + Text, !Data.result);
|
SetStatus("FINISH: " + Text, !Data.result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
7
src/a.sh
7
src/a.sh
@@ -4,3 +4,10 @@ DIST=ts
|
|||||||
for name in `ls *.${EXT}`; do
|
for name in `ls *.${EXT}`; do
|
||||||
mv $name ${name%.${EXT}}.${DIST}
|
mv $name ${name%.${EXT}}.${DIST}
|
||||||
done
|
done
|
||||||
|
: Function;
|
||||||
|
global.
|
||||||
|
|
||||||
|
BlockNumDB
|
||||||
|
RelayMode
|
||||||
|
LoadHistoryMessage
|
||||||
|
LastLoadedBlockNum
|
||||||
@@ -15,7 +15,7 @@ global.HTTPCaller.CreateAccount = function(Params, response) {
|
|||||||
Type: global.TYPE_TRANSACTION_CREATE, Currency: Params.Currency, PubKey: global.GetArrFromHex(Params.PubKey), Description: Params.Name,
|
Type: global.TYPE_TRANSACTION_CREATE, Currency: Params.Currency, PubKey: global.GetArrFromHex(Params.PubKey), Description: Params.Name,
|
||||||
Smart: Params.Smart, Adviser: 0,
|
Smart: Params.Smart, Adviser: 0,
|
||||||
};
|
};
|
||||||
var Body = global.BufLib.GetBufferFromObject(TR, global.global.FORMAT_CREATE, 1000, {});
|
var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_CREATE, 1000, {});
|
||||||
return { result: 1 };
|
return { result: 1 };
|
||||||
}
|
}
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
|
|||||||
@@ -9,18 +9,34 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
require("./library.js");
|
import "./library"
|
||||||
require("./crypto-library");
|
import "./crypto-library"
|
||||||
require("./terahashmining");
|
import "./terahashmining"
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
const os = require('os');
|
import * as os from 'os'
|
||||||
|
|
||||||
global.glStopNode = false;
|
global.glStopNode = false;
|
||||||
const MAX_TIME_NETWORK_TRANSPORT = 1 * 1000;
|
const MAX_TIME_NETWORK_TRANSPORT = 1 * 1000;
|
||||||
var GlSumUser;
|
var GlSumUser;
|
||||||
var GlSumSys;
|
var GlSumSys;
|
||||||
var GlSumIdle;
|
var GlSumIdle;
|
||||||
global.CountAllNode = 0;
|
global.CountAllNode = 0;
|
||||||
module.exports = class CCommon importasdasd {
|
module.exports = class CCommon {
|
||||||
|
VirtualMode
|
||||||
|
KeyPair
|
||||||
|
PubKeyType
|
||||||
|
addrArr
|
||||||
|
addrStr
|
||||||
|
HashDBArr
|
||||||
|
ServerSign
|
||||||
|
MetaMap1
|
||||||
|
MetaMap2
|
||||||
|
CheckName
|
||||||
|
NodesArr
|
||||||
|
CurrentBlockNum
|
||||||
|
ReadBlockHeaderDB
|
||||||
|
GetActualNodes
|
||||||
|
BlockNumDB
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
global.SERVER = this
|
global.SERVER = this
|
||||||
this.VirtualMode = bVirtual
|
this.VirtualMode = bVirtual
|
||||||
@@ -29,7 +45,7 @@ module.exports = class CCommon importasdasd {
|
|||||||
this.PubKeyType = PubKey[0]
|
this.PubKeyType = PubKey[0]
|
||||||
this.addrArr = PubKey.slice(1)
|
this.addrArr = PubKey.slice(1)
|
||||||
this.addrStr = global.GetHexFromArr(this.addrArr)
|
this.addrStr = global.GetHexFromArr(this.addrArr)
|
||||||
this.HashDBArr = shaarr2(this.KeyPair.getPrivateKey(), [0, 0, 0, 0, 0, 0, 0, 1])
|
this.HashDBArr = global.shaarr2(this.KeyPair.getPrivateKey(), [0, 0, 0, 0, 0, 0, 0, 1])
|
||||||
this.ServerSign = []
|
this.ServerSign = []
|
||||||
}
|
}
|
||||||
AddStatOnTimer() {
|
AddStatOnTimer() {
|
||||||
@@ -37,10 +53,10 @@ module.exports = class CCommon importasdasd {
|
|||||||
var CurTime = global.GetCurrentTime() - 0;
|
var CurTime = global.GetCurrentTime() - 0;
|
||||||
for (var i = 0; i < this.NodesArr.length; i++) {
|
for (var i = 0; i < this.NodesArr.length; i++) {
|
||||||
var Item = this.NodesArr[i];
|
var Item = this.NodesArr[i];
|
||||||
if (Item.LastTime && (CurTime - Item.LastTime) < NODES_DELTA_CALC_HOUR * 3600 * 1000)
|
if (Item.LastTime && (CurTime - Item.LastTime) < global.NODES_DELTA_CALC_HOUR * 3600 * 1000)
|
||||||
CountAll++
|
CountAll++
|
||||||
else
|
else
|
||||||
if (Item.LastTimeGetNode && (CurTime - Item.LastTimeGetNode) < NODES_DELTA_CALC_HOUR * 3600 * 1000)
|
if (Item.LastTimeGetNode && (CurTime - Item.LastTimeGetNode) < global.NODES_DELTA_CALC_HOUR * 3600 * 1000)
|
||||||
CountAll++
|
CountAll++
|
||||||
}
|
}
|
||||||
global.CountAllNode = CountAll
|
global.CountAllNode = CountAll
|
||||||
@@ -52,9 +68,9 @@ module.exports = class CCommon importasdasd {
|
|||||||
global.ADD_TO_STAT("MAX:DELTA_TX", Delta)
|
global.ADD_TO_STAT("MAX:DELTA_TX", Delta)
|
||||||
}
|
}
|
||||||
var bHasCP = 0;
|
var bHasCP = 0;
|
||||||
if (CHECK_POINT.BlockNum) {
|
if (global.CHECK_POINT.BlockNum) {
|
||||||
var Block = this.ReadBlockHeaderDB(CHECK_POINT.BlockNum);
|
var Block = this.ReadBlockHeaderDB(global.CHECK_POINT.BlockNum);
|
||||||
if (Block && global.CompareArr(CHECK_POINT.Hash, Block.Hash) === 0)
|
if (Block && global.CompareArr(global.CHECK_POINT.Hash, Block.Hash) === 0)
|
||||||
bHasCP = 1
|
bHasCP = 1
|
||||||
}
|
}
|
||||||
var MinVer = global.MIN_VER_STAT;
|
var MinVer = global.MIN_VER_STAT;
|
||||||
@@ -73,7 +89,7 @@ module.exports = class CCommon importasdasd {
|
|||||||
var INFO = Node.INFO;
|
var INFO = Node.INFO;
|
||||||
if (!INFO)
|
if (!INFO)
|
||||||
INFO = {}
|
INFO = {}
|
||||||
if (bHasCP && CHECK_POINT.BlockNum && INFO.CheckPointHashDB && global.CompareArr(CHECK_POINT.Hash, INFO.CheckPointHashDB) === 0) {
|
if (bHasCP && global.CHECK_POINT.BlockNum && INFO.CheckPointHashDB && global.CompareArr(global.CHECK_POINT.Hash, INFO.CheckPointHashDB) === 0) {
|
||||||
CountCP++
|
CountCP++
|
||||||
}
|
}
|
||||||
if (INFO.LoadHistoryMode)
|
if (INFO.LoadHistoryMode)
|
||||||
@@ -118,7 +134,7 @@ module.exports = class CCommon importasdasd {
|
|||||||
global.ADD_TO_STAT("MAX:MIN_VERSION", CountVer)
|
global.ADD_TO_STAT("MAX:MIN_VERSION", CountVer)
|
||||||
global.ADD_TO_STAT("MAX:STOP_GET", CountStop)
|
global.ADD_TO_STAT("MAX:STOP_GET", CountStop)
|
||||||
global.ADD_TO_STAT("MAX:AUTOCORRECT", CountAutoCorrectTime)
|
global.ADD_TO_STAT("MAX:AUTOCORRECT", CountAutoCorrectTime)
|
||||||
global.ADD_TO_STAT("MAX:TIME_DELTA", DELTA_CURRENT_TIME)
|
global.ADD_TO_STAT("MAX:TIME_DELTA", global.DELTA_CURRENT_TIME)
|
||||||
if (!Count)
|
if (!Count)
|
||||||
Count = 1
|
Count = 1
|
||||||
if (!CountHot)
|
if (!CountHot)
|
||||||
@@ -202,7 +218,7 @@ class SMemBuffer {
|
|||||||
if (typeof Arr === "number" || typeof Arr === "string") {
|
if (typeof Arr === "number" || typeof Arr === "string") {
|
||||||
return Arr;
|
return Arr;
|
||||||
} else {
|
} else {
|
||||||
return GetHexFromAddres(Arr);
|
return global.GetHexFromAddres(Arr);
|
||||||
}
|
}
|
||||||
throw "NOT RET!";
|
throw "NOT RET!";
|
||||||
}
|
}
|
||||||
@@ -229,7 +245,7 @@ class SMemBuffer {
|
|||||||
this.MetaMap1[Key] = Value
|
this.MetaMap1[Key] = Value
|
||||||
}
|
}
|
||||||
ShiftMapDirect() {
|
ShiftMapDirect() {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
if (this.CheckName) {
|
if (this.CheckName) {
|
||||||
var Count = 0;
|
var Count = 0;
|
||||||
@@ -249,6 +265,10 @@ class SMemBuffer {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
class STreeBuffer {
|
class STreeBuffer {
|
||||||
|
KeyType
|
||||||
|
MetaTree1
|
||||||
|
MetaTree2
|
||||||
|
CheckName
|
||||||
constructor(MaxTime, CompareFunction?, KeyType?, CheckName?) {
|
constructor(MaxTime, CompareFunction?, KeyType?, CheckName?) {
|
||||||
this.KeyType = KeyType
|
this.KeyType = KeyType
|
||||||
this.MetaTree1 = new RBTree(CompareFunction)
|
this.MetaTree1 = new RBTree(CompareFunction)
|
||||||
@@ -364,9 +384,9 @@ function TestCreateTr() {
|
|||||||
var StartData = Date.now();
|
var StartData = Date.now();
|
||||||
var nonce = CreateHashBodyPOWInnerMinPower(Body, 1000, 17);
|
var nonce = CreateHashBodyPOWInnerMinPower(Body, 1000, 17);
|
||||||
var Time = process.hrtime(startTime);
|
var Time = process.hrtime(startTime);
|
||||||
var power = GetPowPower(shaarr(Body));
|
var power = global.GetPowPower(global.shaarr(Body));
|
||||||
var deltaTime = (Time[0] * 1000 + Time[1] / 1e6) / 1000;
|
var deltaTime = (Time[0] * 1000 + Time[1] / 1e6) / 1000;
|
||||||
var DeltaData = (new Date() - StartData) / 1000;
|
var DeltaData = ((new Date() as any) - StartData) / 1000;
|
||||||
global.ToLog("power=" + power + " nonce=" + nonce + " TIME=" + deltaTime + " sec" + " DeltaData=" + DeltaData + " sec");
|
global.ToLog("power=" + power + " nonce=" + nonce + " TIME=" + deltaTime + " sec" + " DeltaData=" + DeltaData + " sec");
|
||||||
return { time1: deltaTime, time2: DeltaData };
|
return { time1: deltaTime, time2: DeltaData };
|
||||||
};
|
};
|
||||||
@@ -381,7 +401,7 @@ function CreateHashBodyPOWInnerMinPower(arr, BlockNum, MinPow) {
|
|||||||
var nonce = 0;
|
var nonce = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
var arrhash = CreateHashBody(arr, BlockNum, nonce);
|
var arrhash = CreateHashBody(arr, BlockNum, nonce);
|
||||||
var power = GetPowPower(arrhash);
|
var power = global.GetPowPower(arrhash);
|
||||||
if (power >= MinPow) {
|
if (power >= MinPow) {
|
||||||
return nonce;
|
return nonce;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ const TX_PROCESS_TIME = 100;
|
|||||||
const TX_DELTA_PROCESS_TIME = 300;
|
const TX_DELTA_PROCESS_TIME = 300;
|
||||||
global.CAN_START = false;
|
global.CAN_START = false;
|
||||||
global.StrWarn = "";
|
global.StrWarn = "";
|
||||||
global.SUM_LIST_LENGTH = 2 * BLOCK_PROCESSING_LENGTH;
|
global.SUM_LIST_LENGTH = 2 * global.BLOCK_PROCESSING_LENGTH;
|
||||||
global.CONSENSUS_TIK_TIME = CONSENSUS_PERIOD_TIME / 10;
|
global.CONSENSUS_TIK_TIME = global.CONSENSUS_PERIOD_TIME / 10;
|
||||||
global.CONSENSUS_CHECK_TIME = CONSENSUS_PERIOD_TIME / 20;
|
global.CONSENSUS_CHECK_TIME = global.CONSENSUS_PERIOD_TIME / 20;
|
||||||
const PERIOD_FOR_NEXT_SEND = CONSENSUS_TIK_TIME * 3;
|
const PERIOD_FOR_NEXT_SEND = global.CONSENSUS_TIK_TIME * 3;
|
||||||
global.BLOCK_DELTA_ACTIVATE = 0;
|
global.BLOCK_DELTA_ACTIVATE = 0;
|
||||||
global.TIME_END_EXCHANGE = - 3;
|
global.TIME_END_EXCHANGE = - 3;
|
||||||
global.TIME_START_POW = - 4;
|
global.TIME_START_POW = - 4;
|
||||||
@@ -40,47 +40,53 @@ var FORMAT_DATA_TRANSFER = "{\
|
|||||||
const WorkStructSend = {};
|
const WorkStructSend = {};
|
||||||
module.exports = class CConsensus extends require("./block-loader")
|
module.exports = class CConsensus extends require("./block-loader")
|
||||||
{
|
{
|
||||||
|
CurrentBlockNum
|
||||||
|
SendBlockID
|
||||||
|
RelayMode
|
||||||
|
TreeSendPacket
|
||||||
|
idBlockChainTimer
|
||||||
|
OwnBlockCount
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
this.CurrentBlockNum = 0
|
this.CurrentBlockNum = 0
|
||||||
this.SendBlockID = 0
|
this.SendBlockID = 0
|
||||||
this.RelayMode = false
|
this.RelayMode = false
|
||||||
this.TreeSendPacket = new RBTree(CompareItemHash)
|
this.TreeSendPacket = new RBTree(global.CompareItemHash)
|
||||||
if (!global.ADDRLIST_MODE && !this.VirtualMode) {
|
if (!global.ADDRLIST_MODE && !this.VirtualMode) {
|
||||||
this.idBlockChainTimer = setInterval(this.StartBlockChain.bind(this), CONSENSUS_PERIOD_TIME - 5)
|
this.idBlockChainTimer = setInterval(this.StartBlockChain.bind(this), global.CONSENSUS_PERIOD_TIME - 5)
|
||||||
setInterval(this.DoTransfer.bind(this), CONSENSUS_CHECK_TIME)
|
setInterval(this.DoTransfer.bind(this), global.CONSENSUS_CHECK_TIME)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StartBlockChain() {
|
StartBlockChain() {
|
||||||
this.OnStartSecond()
|
this.OnStartSecond()
|
||||||
var CurTimeNum = global.GetCurrentTime() - CONSENSUS_PERIOD_TIME / 2;
|
var CurTimeNum = global.GetCurrentTime() - global.CONSENSUS_PERIOD_TIME / 2;
|
||||||
var StartTimeNum = Math.floor((CurTimeNum + CONSENSUS_PERIOD_TIME) / CONSENSUS_PERIOD_TIME) * CONSENSUS_PERIOD_TIME;
|
var StartTimeNum = Math.floor((CurTimeNum + global.CONSENSUS_PERIOD_TIME) / global.CONSENSUS_PERIOD_TIME) * global.CONSENSUS_PERIOD_TIME;
|
||||||
var DeltaForStart = StartTimeNum - CurTimeNum;
|
var DeltaForStart = StartTimeNum - CurTimeNum;
|
||||||
if (DeltaForStart < (CONSENSUS_PERIOD_TIME - 5)) {
|
if (DeltaForStart < (global.CONSENSUS_PERIOD_TIME - 5)) {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (self.idBlockChainTimer)
|
if (self.idBlockChainTimer)
|
||||||
clearInterval(self.idBlockChainTimer)
|
clearInterval(self.idBlockChainTimer)
|
||||||
self.idBlockChainTimer = 0
|
self.idBlockChainTimer = 0
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
self.idBlockChainTimer = setInterval(self.StartBlockChain.bind(self), CONSENSUS_PERIOD_TIME)
|
self.idBlockChainTimer = setInterval(self.StartBlockChain.bind(self), global.CONSENSUS_PERIOD_TIME)
|
||||||
self.OnStartSecond()
|
self.OnStartSecond()
|
||||||
}, DeltaForStart)
|
}, DeltaForStart)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OnStartSecond() {
|
OnStartSecond() {
|
||||||
PrepareStatEverySecond()
|
global.PrepareStatEverySecond()
|
||||||
this.AddStatOnTimer()
|
this.AddStatOnTimer()
|
||||||
this.DoBlockChain()
|
this.DoBlockChain()
|
||||||
}
|
}
|
||||||
CreateBlockContext() {
|
CreateBlockContext() {
|
||||||
var Context = {};
|
var Context: any = {};
|
||||||
Context.AddInfo = AddInfoBlock.bind(Context)
|
Context.AddInfo = global.AddInfoBlock.bind(Context)
|
||||||
Context.Active = false
|
Context.Active = false
|
||||||
Context.TransferFromAddr = {}
|
Context.TransferFromAddr = {}
|
||||||
Context.LevelsTransfer = []
|
Context.LevelsTransfer = []
|
||||||
Context.ErrRun = ""
|
Context.ErrRun = ""
|
||||||
Context.PowTxTree = new RBTree(CompareItemTimePow)
|
Context.PowTxTree = new RBTree(global.CompareItemTimePow)
|
||||||
Context.PowTicketTree = new RBTree(CompareItemTimePow)
|
Context.PowTicketTree = new RBTree(global.CompareItemTimePow)
|
||||||
Context.bSave = false
|
Context.bSave = false
|
||||||
Context.PrevHash = undefined
|
Context.PrevHash = undefined
|
||||||
Context.TreeHash = undefined
|
Context.TreeHash = undefined
|
||||||
@@ -91,7 +97,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
Context.TrCount = 0
|
Context.TrCount = 0
|
||||||
Context.TrDataPos = 0
|
Context.TrDataPos = 0
|
||||||
Context.TrDataLen = 0
|
Context.TrDataLen = 0
|
||||||
Context.Info = "Create at:" + GetStrOnlyTimeUTC()
|
Context.Info = "Create at:" + global.GetStrOnlyTimeUTC()
|
||||||
var Transfer;
|
var Transfer;
|
||||||
var TransferM2;
|
var TransferM2;
|
||||||
var LocalLevel = 0;
|
var LocalLevel = 0;
|
||||||
@@ -100,7 +106,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var arr = Levels[L];
|
var arr = Levels[L];
|
||||||
if (arr && arr.length > 0) {
|
if (arr && arr.length > 0) {
|
||||||
Transfer = {
|
Transfer = {
|
||||||
LocalLevel: LocalLevel, TreeLevel: L, SendCount: 0, GetCount: 0, TransferNodes: {}, WasGet: false, WasSend: false, MustDeltaTime: CONSENSUS_TIK_TIME * (2 + MAX_LEVEL_SPECIALIZATION - L),
|
LocalLevel: LocalLevel, TreeLevel: L, SendCount: 0, GetCount: 0, TransferNodes: {}, WasGet: false, WasSend: false, MustDeltaTime: global.CONSENSUS_TIK_TIME * (2 + global.MAX_LEVEL_SPECIALIZATION - L),
|
||||||
}
|
}
|
||||||
LocalLevel++
|
LocalLevel++
|
||||||
Context.LevelsTransfer.push(Transfer)
|
Context.LevelsTransfer.push(Transfer)
|
||||||
@@ -109,7 +115,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var Node = arr[j];
|
var Node = arr[j];
|
||||||
var Addr = Node.addrStr;
|
var Addr = Node.addrStr;
|
||||||
if (!Transfer.TransferNodes[Addr]) {
|
if (!Transfer.TransferNodes[Addr]) {
|
||||||
let Item = { Node: Node, SendCount: 0, GetCount: 0, addrStr: Addr, TreeLevel: L, GetTiming: 3 * CONSENSUS_PERIOD_TIME, };
|
let Item = { Node: Node, SendCount: 0, GetCount: 0, addrStr: Addr, TreeLevel: L, GetTiming: 3 * global.CONSENSUS_PERIOD_TIME, };
|
||||||
Transfer.TransferNodes[Addr] = Item
|
Transfer.TransferNodes[Addr] = Item
|
||||||
}
|
}
|
||||||
Context.TransferFromAddr[Addr] = Transfer
|
Context.TransferFromAddr[Addr] = Transfer
|
||||||
@@ -120,19 +126,19 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
return Context;
|
return Context;
|
||||||
}
|
}
|
||||||
StartConsensus() {
|
StartConsensus() {
|
||||||
if (!CAN_START)
|
if (!global.global.CAN_START)
|
||||||
return;
|
return;
|
||||||
var StartBlockNum = GetCurrentBlockNumByTime();
|
var StartBlockNum = global.GetCurrentBlockNumByTime();
|
||||||
if (StartBlockNum < global.BLOCK_PROCESSING_LENGTH2)
|
if (StartBlockNum < global.BLOCK_PROCESSING_LENGTH2)
|
||||||
return;
|
return;
|
||||||
this.CurrentBlockNum = StartBlockNum
|
this.CurrentBlockNum = StartBlockNum
|
||||||
var Block0 = this.GetBlockContext(StartBlockNum - BLOCK_DELTA_ACTIVATE);
|
var Block0 = this.GetBlockContext(StartBlockNum - global.BLOCK_DELTA_ACTIVATE);
|
||||||
if (!Block0.Active) {
|
if (!Block0.Active) {
|
||||||
AddInfoBlock(Block0, "Activate")
|
global.AddInfoBlock(Block0, "Activate")
|
||||||
this.StartBlock(Block0)
|
this.StartBlock(Block0)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
AddInfoBlock(Block0, "Was Active")
|
global.AddInfoBlock(Block0, "Was Active")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TrToInfo(Block, Array, StrInfo) {
|
TrToInfo(Block, Array, StrInfo) {
|
||||||
@@ -140,9 +146,9 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
for (var i = 0; i < Array.length; i++) {
|
for (var i = 0; i < Array.length; i++) {
|
||||||
var Item = Array[i];
|
var Item = Array[i];
|
||||||
this.CheckCreateTransactionObject(Item)
|
this.CheckCreateTransactionObject(Item)
|
||||||
Str += this.GetStrFromHashShort(shaarr(Item.body)) + "(" + Item.body.length + "),"
|
Str += this.GetStrFromHashShort(global.shaarr(Item.body)) + "(" + Item.body.length + "),"
|
||||||
}
|
}
|
||||||
AddInfoBlock(Block, "" + StrInfo + ": Arr=[" + Str + "]")
|
global.AddInfoBlock(Block, "" + StrInfo + ": Arr=[" + Str + "]")
|
||||||
}
|
}
|
||||||
TRANSFER(Info, CurTime) {
|
TRANSFER(Info, CurTime) {
|
||||||
var startTime = process.hrtime();
|
var startTime = process.hrtime();
|
||||||
@@ -202,7 +208,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ADD_TO_STAT_TIME("TRANSFER_MS", startTime)
|
global.ADD_TO_STAT_TIME("TRANSFER_MS", startTime)
|
||||||
var Delta = Date.now() - this.StartLoadBlockTime;
|
var Delta = Date.now() - this.StartLoadBlockTime;
|
||||||
if (Delta > 10 * 1000 && Node.TransferCount > 10) {
|
if (Delta > 10 * 1000 && Node.TransferCount > 10) {
|
||||||
Node.BlockProcessCount++
|
Node.BlockProcessCount++
|
||||||
@@ -211,19 +217,19 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
Node.TransferCount++
|
Node.TransferCount++
|
||||||
Node.LastTimeTransfer = global.GetCurrentTime() - 0
|
Node.LastTimeTransfer = global.GetCurrentTime() - 0
|
||||||
var Item = Transfer.TransferNodes[Key];
|
var Item = Transfer.TransferNodes[Key];
|
||||||
Item.GetTiming = GetCurrentTime(Block.DELTA_CURRENT_TIME) - Block.StartTimeNum
|
Item.GetTiming = global.GetCurrentTime(Block.DELTA_CURRENT_TIME) - Block.StartTimeNum
|
||||||
if (!Block.TransferNodesCount)
|
if (!Block.TransferNodesCount)
|
||||||
Block.TransferNodesCount = 0
|
Block.TransferNodesCount = 0
|
||||||
Block.TransferNodesCount++
|
Block.TransferNodesCount++
|
||||||
}
|
}
|
||||||
DoTransfer() {
|
DoTransfer() {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
if (!CAN_START)
|
if (!global.CAN_START)
|
||||||
return;
|
return;
|
||||||
var MaxPOWList;
|
var MaxPOWList;
|
||||||
var MaxSumList;
|
var MaxSumList;
|
||||||
var start = this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH;
|
var start = this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH;
|
||||||
var finish = this.GetLastCorrectBlockNum();
|
var finish = this.GetLastCorrectBlockNum();
|
||||||
for (var b = start; b <= finish; b++) {
|
for (var b = start; b <= finish; b++) {
|
||||||
var Block = this.GetBlock(b);
|
var Block = this.GetBlock(b);
|
||||||
@@ -257,7 +263,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
Transfer.WasSend = true
|
Transfer.WasSend = true
|
||||||
var bNext = Transfer.WasGet;
|
var bNext = Transfer.WasGet;
|
||||||
if (!bNext) {
|
if (!bNext) {
|
||||||
var CurTimeNum = GetCurrentTime(Block.DELTA_CURRENT_TIME) - 0;
|
var CurTimeNum = global.GetCurrentTime(Block.DELTA_CURRENT_TIME) - 0;
|
||||||
var DeltaTime = CurTimeNum - Block.StartTimeNum;
|
var DeltaTime = CurTimeNum - Block.StartTimeNum;
|
||||||
if (DeltaTime > Transfer.MustDeltaTime) {
|
if (DeltaTime > Transfer.MustDeltaTime) {
|
||||||
bNext = true
|
bNext = true
|
||||||
@@ -393,7 +399,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
if (this.CanSendTest())
|
if (this.CanSendTest())
|
||||||
Arr.push(Tr0)
|
Arr.push(Tr0)
|
||||||
BufLength += Tr0.body.length
|
BufLength += Tr0.body.length
|
||||||
if (BufLength > MAX_BLOCK_SIZE)
|
if (BufLength > global.MAX_BLOCK_SIZE)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -479,7 +485,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
FilterArrForSendNode(Block, Node, ArrTx, bTt) {
|
FilterArrForSendNode(Block, Node, ArrTx, bTt?) {
|
||||||
var Arr = [];
|
var Arr = [];
|
||||||
for (var t = 0; t < ArrTx.length; t++) {
|
for (var t = 0; t < ArrTx.length; t++) {
|
||||||
var Tr = ArrTx[t];
|
var Tr = ArrTx[t];
|
||||||
@@ -521,7 +527,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
this.CheckTxExchange(Block, bSend)
|
this.CheckTxExchange(Block, bSend)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CheckTxExchange(Block) {
|
CheckTxExchange(Block, b?) {
|
||||||
return;
|
return;
|
||||||
if (Block.EndExchange)
|
if (Block.EndExchange)
|
||||||
return;
|
return;
|
||||||
@@ -627,7 +633,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
"Version": 5, "BlockNum": Block.BlockNum, "Reserv1": 0, "MaxPOW": MaxPOWList, "Reserv2": 0, "BaseBlockNum": this.CurrentBlockNum - Block.BlockNum,
|
"Version": 5, "BlockNum": Block.BlockNum, "Reserv1": 0, "MaxPOW": MaxPOWList, "Reserv2": 0, "BaseBlockNum": this.CurrentBlockNum - Block.BlockNum,
|
||||||
"MaxSumID": MaxSumID, "BlockList": BlockList, "TicketArray": ArrTt, "TxArray": ArrTx, "NoSendTx": Node.NoSendTx,
|
"MaxSumID": MaxSumID, "BlockList": BlockList, "TicketArray": ArrTt, "TxArray": ArrTx, "NoSendTx": Node.NoSendTx,
|
||||||
}
|
}
|
||||||
var BufWrite = global.BufLib.GetBufferFromObject(Data, FORMAT_DATA_TRANSFER, MAX_BLOCK_SIZE + 30000, WorkStructSend);
|
var BufWrite = global.BufLib.GetBufferFromObject(Data, FORMAT_DATA_TRANSFER, global.MAX_BLOCK_SIZE + 30000, WorkStructSend);
|
||||||
return BufWrite;
|
return BufWrite;
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
@@ -642,11 +648,11 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var StrKey = this.GetStrFromHashShort(LoadHash);
|
var StrKey = this.GetStrFromHashShort(LoadHash);
|
||||||
var StrHashWas = this.GetStrFromHashShort(Block.Hash);
|
var StrHashWas = this.GetStrFromHashShort(Block.Hash);
|
||||||
this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START OTHER:" + StrKey + " WAS:" + StrHashWas, false)
|
this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START OTHER:" + StrKey + " WAS:" + StrHashWas, false)
|
||||||
AddInfoBlock(Block, "REQ H: " + StrKey)
|
global.AddInfoBlock(Block, "REQ H: " + StrKey)
|
||||||
}
|
}
|
||||||
Block.CheckMaxPow = true
|
Block.CheckMaxPow = true
|
||||||
}
|
}
|
||||||
AddToMaxPOW(Block, item, Node) {
|
AddToMaxPOW(Block, item, Node?) {
|
||||||
if (Block && item) {
|
if (Block && item) {
|
||||||
if (!Block.MaxPOW)
|
if (!Block.MaxPOW)
|
||||||
Block.MaxPOW = {}
|
Block.MaxPOW = {}
|
||||||
@@ -655,7 +661,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
return;
|
return;
|
||||||
item.BlockNum = Block.BlockNum
|
item.BlockNum = Block.BlockNum
|
||||||
item.PrevHash = Block.PrevHash
|
item.PrevHash = Block.PrevHash
|
||||||
CalcHashBlockFromSeqAddr(item, Block.PrevHash, global.MINING_VERSION_NUM)
|
global.CalcHashBlockFromSeqAddr(item, Block.PrevHash, global.MINING_VERSION_NUM)
|
||||||
if (POW.SeqHash === undefined || global.CompareArr(item.PowHash, POW.PowHash) < 0) {
|
if (POW.SeqHash === undefined || global.CompareArr(item.PowHash, POW.PowHash) < 0) {
|
||||||
POW.AddrHash = item.AddrHash
|
POW.AddrHash = item.AddrHash
|
||||||
POW.Hash = item.Hash
|
POW.Hash = item.Hash
|
||||||
@@ -678,8 +684,8 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
if (wasLider) {
|
if (wasLider) {
|
||||||
var newLider = POW.MaxTree.min();
|
var newLider = POW.MaxTree.min();
|
||||||
if (newLider !== wasLider) {
|
if (newLider !== wasLider) {
|
||||||
var Power = GetPowPower(newLider.PowHash);
|
var Power = global.GetPowPower(newLider.PowHash);
|
||||||
AddInfoBlock(Block, "MaxPOW: " + Power)
|
global.AddInfoBlock(Block, "MaxPOW: " + Power)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -701,7 +707,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
GetMaxPOWList() {
|
GetMaxPOWList() {
|
||||||
var arr = [];
|
var arr = [];
|
||||||
var start, finish;
|
var start, finish;
|
||||||
start = this.CurrentBlockNum + TIME_START_SAVE - 2
|
start = this.CurrentBlockNum + global.TIME_START_SAVE - 2
|
||||||
finish = this.CurrentBlockNum
|
finish = this.CurrentBlockNum
|
||||||
for (var b = start; b < finish; b++) {
|
for (var b = start; b < finish; b++) {
|
||||||
var Block = this.GetBlock(b);
|
var Block = this.GetBlock(b);
|
||||||
@@ -720,7 +726,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
ToMaxPOWList(Arr) {
|
ToMaxPOWList(Arr) {
|
||||||
for (var i = 0; i < Arr.length; i++) {
|
for (var i = 0; i < Arr.length; i++) {
|
||||||
var item = Arr[i];
|
var item = Arr[i];
|
||||||
if (item && item.BlockNum >= this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH && item.BlockNum < this.CurrentBlockNum) {
|
if (item && item.BlockNum >= this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH && item.BlockNum < this.CurrentBlockNum) {
|
||||||
var Block = this.GetBlock(item.BlockNum);
|
var Block = this.GetBlock(item.BlockNum);
|
||||||
this.AddToMaxPOW(Block, item)
|
this.AddToMaxPOW(Block, item)
|
||||||
}
|
}
|
||||||
@@ -750,7 +756,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var LoadHash = POW.SumHash;
|
var LoadHash = POW.SumHash;
|
||||||
var StrKey = this.GetStrFromHashShort(LoadHash);
|
var StrKey = this.GetStrFromHashShort(LoadHash);
|
||||||
if (this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START POW:" + POW.SumPow + ">" + SumPow + " SH:" + StrKey, true))
|
if (this.StartLoadBlockHeader(LoadHash, LoadBlockNum, "START POW:" + POW.SumPow + ">" + SumPow + " SH:" + StrKey, true))
|
||||||
AddInfoBlock(Block, "REQ SH: " + StrKey)
|
global.AddInfoBlock(Block, "REQ SH: " + StrKey)
|
||||||
}
|
}
|
||||||
Block.CheckMaxSum = true
|
Block.CheckMaxSum = true
|
||||||
}
|
}
|
||||||
@@ -764,7 +770,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
POW.SumPow = SumPow
|
POW.SumPow = SumPow
|
||||||
POW.SumHash = item.SumHash
|
POW.SumHash = item.SumHash
|
||||||
POW.SumList = item.SumList
|
POW.SumList = item.SumList
|
||||||
AddInfoBlock(Block, "SumPow:" + POW.SumPow)
|
global.AddInfoBlock(Block, "SumPow:" + POW.SumPow)
|
||||||
Block.CheckMaxSum = false
|
Block.CheckMaxSum = false
|
||||||
}
|
}
|
||||||
return SumPow;
|
return SumPow;
|
||||||
@@ -774,7 +780,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
GetMaxSumList() {
|
GetMaxSumList() {
|
||||||
var Arr = [];
|
var Arr = [];
|
||||||
var start, finish;
|
var start, finish;
|
||||||
start = this.CurrentBlockNum + TIME_START_LOAD - 2
|
start = this.CurrentBlockNum + global.TIME_START_LOAD - 2
|
||||||
finish = this.CurrentBlockNum
|
finish = this.CurrentBlockNum
|
||||||
for (var b = start; b <= finish; b++) {
|
for (var b = start; b <= finish; b++) {
|
||||||
var Block = this.GetBlock(b);
|
var Block = this.GetBlock(b);
|
||||||
@@ -788,7 +794,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
}
|
}
|
||||||
ToMaxSumList(Arr) {
|
ToMaxSumList(Arr) {
|
||||||
var start, finish;
|
var start, finish;
|
||||||
start = this.CurrentBlockNum + TIME_START_LOAD - 2
|
start = this.CurrentBlockNum + global.TIME_START_LOAD - 2
|
||||||
finish = this.CurrentBlockNum
|
finish = this.CurrentBlockNum
|
||||||
for (var i = 0; i < Arr.length; i++) {
|
for (var i = 0; i < Arr.length; i++) {
|
||||||
var item = Arr[i];
|
var item = Arr[i];
|
||||||
@@ -803,7 +809,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
}
|
}
|
||||||
GetBlockList(CurBlockNum) {
|
GetBlockList(CurBlockNum) {
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for (var b = CurBlockNum - SUM_LIST_LENGTH + 1; b <= CurBlockNum; b++) {
|
for (var b = CurBlockNum - global.SUM_LIST_LENGTH + 1; b <= CurBlockNum; b++) {
|
||||||
var Block = this.GetBlock(b);
|
var Block = this.GetBlock(b);
|
||||||
if (Block && Block.bSave) {
|
if (Block && Block.bSave) {
|
||||||
var item = { AddrHash: Block.AddrHash, SeqHash: Block.SeqHash, };
|
var item = { AddrHash: Block.AddrHash, SeqHash: Block.SeqHash, };
|
||||||
@@ -817,7 +823,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
}
|
}
|
||||||
GetSumFromList(arr, CurBlockNum) {
|
GetSumFromList(arr, CurBlockNum) {
|
||||||
var SumPow = 0;
|
var SumPow = 0;
|
||||||
if (arr.length !== SUM_LIST_LENGTH)
|
if (arr.length !== global.SUM_LIST_LENGTH)
|
||||||
return SumPow;
|
return SumPow;
|
||||||
var CountLoad = 0;
|
var CountLoad = 0;
|
||||||
var BlockNumStart = CurBlockNum - arr.length + 1;
|
var BlockNumStart = CurBlockNum - arr.length + 1;
|
||||||
@@ -825,8 +831,8 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var Item = arr[i];
|
var Item = arr[i];
|
||||||
if (Item) {
|
if (Item) {
|
||||||
Item.BlockNum = BlockNumStart + i
|
Item.BlockNum = BlockNumStart + i
|
||||||
var Value = GetHashFromSeqAddr(Item.SeqHash, Item.AddrHash, Item.BlockNum, undefined, global.MINING_VERSION_NUM);
|
var Value = global.GetHashFromSeqAddr(Item.SeqHash, Item.AddrHash, Item.BlockNum, undefined, global.MINING_VERSION_NUM);
|
||||||
SumPow += GetPowPower(Value.PowHash)
|
SumPow += global.GetPowPower(Value.PowHash)
|
||||||
Item.Hash3 = Value.Hash
|
Item.Hash3 = Value.Hash
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -844,7 +850,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
while ((Item = it.next()) !== null) {
|
while ((Item = it.next()) !== null) {
|
||||||
arr.push(Item)
|
arr.push(Item)
|
||||||
BufLength += Item.body.length
|
BufLength += Item.body.length
|
||||||
if (BufLength > MAX_BLOCK_SIZE)
|
if (BufLength > global.MAX_BLOCK_SIZE)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return arr;
|
return arr;
|
||||||
@@ -866,7 +872,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Tree.insert(Tr)
|
Tree.insert(Tr)
|
||||||
if (Tree.size > MAX_TRANSACTION_LIMIT) {
|
if (Tree.size > global.MAX_TRANSACTION_LIMIT) {
|
||||||
var maxitem = Tree.max();
|
var maxitem = Tree.max();
|
||||||
Tree.remove(maxitem)
|
Tree.remove(maxitem)
|
||||||
if (global.CompareArr(maxitem.HashPow, Tr.HashPow) === 0)
|
if (global.CompareArr(maxitem.HashPow, Tr.HashPow) === 0)
|
||||||
@@ -886,7 +892,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AddTrToBlockQuote(Block, Tr, bTTAdd) {
|
AddTrToBlockQuote(Block, Tr, bTTAdd?) {
|
||||||
if (Block.PowTxTree) {
|
if (Block.PowTxTree) {
|
||||||
var Res = this.IsValidTransaction(Tr, Block.BlockNum);
|
var Res = this.IsValidTransaction(Tr, Block.BlockNum);
|
||||||
if (Res >= 1) {
|
if (Res >= 1) {
|
||||||
@@ -907,8 +913,8 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
if (!Context || !Context.StartTimeNum) {
|
if (!Context || !Context.StartTimeNum) {
|
||||||
Context = this.CreateBlockContext()
|
Context = this.CreateBlockContext()
|
||||||
Context.BlockNum = BlockNum
|
Context.BlockNum = BlockNum
|
||||||
Context.DELTA_CURRENT_TIME = GetDeltaCurrentTime()
|
Context.DELTA_CURRENT_TIME = global.GetDeltaCurrentTime()
|
||||||
Context.StartTimeNum = (BlockNum - 1 + BLOCK_DELTA_ACTIVATE) * CONSENSUS_PERIOD_TIME + START_NETWORK_DATE
|
Context.StartTimeNum = (BlockNum - 1 + global.BLOCK_DELTA_ACTIVATE) * global.CONSENSUS_PERIOD_TIME + global.START_NETWORK_DATE
|
||||||
this.BlockChain[BlockNum] = Context
|
this.BlockChain[BlockNum] = Context
|
||||||
}
|
}
|
||||||
if (!Context.TransferFromAddr) {
|
if (!Context.TransferFromAddr) {
|
||||||
@@ -921,7 +927,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
Block.Active = true
|
Block.Active = true
|
||||||
}
|
}
|
||||||
IsCorrectBlockNum(BlockNum) {
|
IsCorrectBlockNum(BlockNum) {
|
||||||
var start = this.CurrentBlockNum - BLOCK_PROCESSING_LENGTH;
|
var start = this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH;
|
||||||
var finish = this.GetLastCorrectBlockNum();
|
var finish = this.GetLastCorrectBlockNum();
|
||||||
if (BlockNum < start || BlockNum > finish) {
|
if (BlockNum < start || BlockNum > finish) {
|
||||||
return false;
|
return false;
|
||||||
@@ -971,23 +977,23 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
hashStr = Block.ErrRun.substr(0, 5)
|
hashStr = Block.ErrRun.substr(0, 5)
|
||||||
else
|
else
|
||||||
if (Block && Block.TreeHash)
|
if (Block && Block.TreeHash)
|
||||||
hashStr = "-" + GetHexFromAddres(Block.TreeHash).substr(0, 3) + "-"
|
hashStr = "-" + global.GetHexFromAddres(Block.TreeHash).substr(0, 3) + "-"
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (Block && Block.TreeHash) {
|
if (Block && Block.TreeHash) {
|
||||||
hashStr = GetHexFromAddres(Block.TreeHash).substr(0, 5)
|
hashStr = global.GetHexFromAddres(Block.TreeHash).substr(0, 5)
|
||||||
}
|
}
|
||||||
Str = Str + "|" + (hashStr + " ").substr(0, 5)
|
Str = Str + "|" + (hashStr + " ").substr(0, 5)
|
||||||
}
|
}
|
||||||
Str = Str.substr(1)
|
Str = Str.substr(1)
|
||||||
ToInfo("" + finish + " -> " + Str + " " + DopStr)
|
global.ToInfo("" + finish + " -> " + Str + " " + DopStr)
|
||||||
}
|
}
|
||||||
PreparePOWHash(Block) {
|
PreparePOWHash(Block) {
|
||||||
if (!Block.TreeHash)
|
if (!Block.TreeHash)
|
||||||
Block.TreeHash = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
Block.TreeHash = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
var PrevHash = this.GetPrevHash(Block);
|
var PrevHash = this.GetPrevHash(Block);
|
||||||
if (!PrevHash) {
|
if (!PrevHash) {
|
||||||
AddInfoBlock(Block, "-err prev hash-")
|
global.AddInfoBlock(Block, "-err prev hash-")
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Block.PrevHash = PrevHash
|
Block.PrevHash = PrevHash
|
||||||
@@ -996,7 +1002,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
Block.Prepared = true
|
Block.Prepared = true
|
||||||
if (global.USE_MINING && !Block.StartMining) {
|
if (global.USE_MINING && !Block.StartMining) {
|
||||||
Block.StartMining = true
|
Block.StartMining = true
|
||||||
AddInfoBlock(Block, "-send mining-")
|
global.AddInfoBlock(Block, "-send mining-")
|
||||||
global.SetCalcPOW(Block, "FastCalcBlock")
|
global.SetCalcPOW(Block, "FastCalcBlock")
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -1007,7 +1013,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var Tr = arrTr[i];
|
var Tr = arrTr[i];
|
||||||
arrHASH.push(Tr.HASH)
|
arrHASH.push(Tr.HASH)
|
||||||
}
|
}
|
||||||
var Tree = CalcMerklFromArray(BlockNum, arrHASH);
|
var Tree = global.CalcMerklFromArray(BlockNum, arrHASH);
|
||||||
return Tree.Root;
|
return Tree.Root;
|
||||||
}
|
}
|
||||||
CreateTreeHash(Block) {
|
CreateTreeHash(Block) {
|
||||||
@@ -1018,10 +1024,10 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
return;
|
return;
|
||||||
var PrevBlock = this.GetBlock(Block.BlockNum - 1);
|
var PrevBlock = this.GetBlock(Block.BlockNum - 1);
|
||||||
if (PrevBlock && !PrevBlock.EndExchange && !PrevBlock.bSave) {
|
if (PrevBlock && !PrevBlock.EndExchange && !PrevBlock.bSave) {
|
||||||
AddInfoBlock(Block, "Prev Not End Exchange")
|
global.AddInfoBlock(Block, "Prev Not End Exchange")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AddInfoBlock(Block, "End Exchange,N=" + Block.TransferNodesCount)
|
global.AddInfoBlock(Block, "End Exchange,N=" + Block.TransferNodesCount)
|
||||||
var arrContent = [];
|
var arrContent = [];
|
||||||
var arrHASH = [];
|
var arrHASH = [];
|
||||||
var arrTr = this.GetArrayFromTxTree(Block);
|
var arrTr = this.GetArrayFromTxTree(Block);
|
||||||
@@ -1031,7 +1037,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
arrContent.push(Tr.body)
|
arrContent.push(Tr.body)
|
||||||
arrHASH.push(Tr.HASH)
|
arrHASH.push(Tr.HASH)
|
||||||
}
|
}
|
||||||
var Tree = CalcMerklFromArray(Block.BlockNum, arrHASH);
|
var Tree = global.CalcMerklFromArray(Block.BlockNum, arrHASH);
|
||||||
Block.TreeHash = Tree.Root
|
Block.TreeHash = Tree.Root
|
||||||
Block.arrContent = arrContent
|
Block.arrContent = arrContent
|
||||||
Block.TrCount = Block.arrContent.length
|
Block.TrCount = Block.arrContent.length
|
||||||
@@ -1049,49 +1055,49 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (global.CompareArr(BlockDB.Hash, Block.Hash) !== 0) {
|
if (global.CompareArr(BlockDB.Hash, Block.Hash) !== 0) {
|
||||||
AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||||
global.ToLog("#3 WatchdogSaved: Error Hash on Num=" + BlockNum)
|
global.ToLog("#3 WatchdogSaved: Error Hash on Num=" + BlockNum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (global.CompareArr(BlockDB.SumHash, Block.SumHash) !== 0) {
|
if (global.CompareArr(BlockDB.SumHash, Block.SumHash) !== 0) {
|
||||||
AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||||
global.ToLog("#4 WatchdogSaved: Error SumHash on Num=" + BlockNum)
|
global.ToLog("#4 WatchdogSaved: Error SumHash on Num=" + BlockNum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (global.CompareArr(BlockDB.SeqHash, Block.SeqHash) !== 0) {
|
if (global.CompareArr(BlockDB.SeqHash, Block.SeqHash) !== 0) {
|
||||||
AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||||
global.ToLog("#5 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
|
global.ToLog("#5 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var PrevHash = this.GetPrevHash(Block);
|
var PrevHash = this.GetPrevHash(Block);
|
||||||
if (!PrevHash) {
|
if (!PrevHash) {
|
||||||
AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||||
global.ToLog("#6 WatchdogSaved: Error PrevHash on Num=" + BlockNum)
|
global.ToLog("#6 WatchdogSaved: Error PrevHash on Num=" + BlockNum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
||||||
if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) {
|
if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) {
|
||||||
AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||||
global.ToLog("#7 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
|
global.ToLog("#7 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PrevHash = this.GetPrevHashDB(BlockDB)
|
PrevHash = this.GetPrevHashDB(BlockDB)
|
||||||
SeqHash = this.GetSeqHash(BlockDB.BlockNum, PrevHash, BlockDB.TreeHash)
|
SeqHash = this.GetSeqHash(BlockDB.BlockNum, PrevHash, BlockDB.TreeHash)
|
||||||
if (global.CompareArr(SeqHash, BlockDB.SeqHash) !== 0) {
|
if (global.CompareArr(SeqHash, BlockDB.SeqHash) !== 0) {
|
||||||
AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
global.AddInfoBlock(Block, "=ERR:WATCHDOG=")
|
||||||
global.ToLog("#8 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
|
global.ToLog("#8 WatchdogSaved: Error SeqHash on Num=" + BlockNum)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DoBlockChain() {
|
DoBlockChain() {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
if (!CAN_START)
|
if (!global.CAN_START)
|
||||||
return;
|
return;
|
||||||
this.StartConsensus()
|
this.StartConsensus()
|
||||||
var CURRENTBLOCKNUM = this.CurrentBlockNum;
|
var CURRENTBLOCKNUM = this.CurrentBlockNum;
|
||||||
if (GrayConnect()) {
|
if (global.GrayConnect()) {
|
||||||
if (!this.LoadHistoryMode)
|
if (!this.LoadHistoryMode)
|
||||||
this.StartSyncBlockchain(undefined, 1)
|
this.StartSyncBlockchain(undefined, 1)
|
||||||
return;
|
return;
|
||||||
@@ -1101,7 +1107,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var bWasSave = false;
|
var bWasSave = false;
|
||||||
var LoadBlockNum;
|
var LoadBlockNum;
|
||||||
var LoadHash;
|
var LoadHash;
|
||||||
var start_save = CURRENTBLOCKNUM + TIME_START_SAVE;
|
var start_save = CURRENTBLOCKNUM + global.TIME_START_SAVE;
|
||||||
for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < CURRENTBLOCKNUM; BlockNum++) {
|
for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < CURRENTBLOCKNUM; BlockNum++) {
|
||||||
var Block = this.GetBlock(BlockNum);
|
var Block = this.GetBlock(BlockNum);
|
||||||
if (!Block) {
|
if (!Block) {
|
||||||
@@ -1121,10 +1127,10 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
if (Block.bSave) {
|
if (Block.bSave) {
|
||||||
bWasSave = true
|
bWasSave = true
|
||||||
if (Block.MaxSum && !Block.CheckMaxSum) {
|
if (Block.MaxSum && !Block.CheckMaxSum) {
|
||||||
AddInfoBlock(Block, "CheckMaxSum")
|
global.AddInfoBlock(Block, "CheckMaxSum")
|
||||||
this.CheckMaxSum(Block)
|
this.CheckMaxSum(Block)
|
||||||
}
|
}
|
||||||
if (BlockNum <= CURRENTBLOCKNUM - BLOCK_PROCESSING_LENGTH * 4) {
|
if (BlockNum <= CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH * 4) {
|
||||||
Block.TransferFromAddr = undefined
|
Block.TransferFromAddr = undefined
|
||||||
Block.LevelsTransfer = undefined
|
Block.LevelsTransfer = undefined
|
||||||
Block.mapData = undefined
|
Block.mapData = undefined
|
||||||
@@ -1141,39 +1147,39 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var PrevBlock = this.GetBlock(BlockNum - 1);
|
var PrevBlock = this.GetBlock(BlockNum - 1);
|
||||||
if (!PrevBlock) {
|
if (!PrevBlock) {
|
||||||
Block.HasErr = 1
|
Block.HasErr = 1
|
||||||
AddInfoBlock(Block, "!PrevBlock")
|
global.AddInfoBlock(Block, "!PrevBlock")
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (BlockNum >= CURRENTBLOCKNUM + TIME_END_EXCHANGE) {
|
if (BlockNum >= CURRENTBLOCKNUM + global.TIME_END_EXCHANGE) {
|
||||||
if (!Block.Active) {
|
if (!Block.Active) {
|
||||||
AddInfoBlock(Block, "WAIT ACTIVATE")
|
global.AddInfoBlock(Block, "WAIT ACTIVATE")
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (!Block.EndExchange) {
|
if (!Block.EndExchange) {
|
||||||
AddInfoBlock(Block, "WAIT EXCHANGE")
|
global.AddInfoBlock(Block, "WAIT EXCHANGE")
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (BlockNum === CURRENTBLOCKNUM + TIME_START_POW || Block.EndExchange)
|
if (BlockNum === CURRENTBLOCKNUM + global.TIME_START_POW || Block.EndExchange)
|
||||||
if (!Block.Prepared) {
|
if (!Block.Prepared) {
|
||||||
if (!Block.EndExchange)
|
if (!Block.EndExchange)
|
||||||
this.CreateTreeHash(Block)
|
this.CreateTreeHash(Block)
|
||||||
AddInfoBlock(Block, "Start POW")
|
global.AddInfoBlock(Block, "Start POW")
|
||||||
this.PreparePOWHash(Block)
|
this.PreparePOWHash(Block)
|
||||||
if (!Block.Prepared)
|
if (!Block.Prepared)
|
||||||
AddInfoBlock(Block, "!!Prepared")
|
global.AddInfoBlock(Block, "!!Prepared")
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!Block.EndExchange) {
|
if (!Block.EndExchange) {
|
||||||
AddInfoBlock(Block, "Not EndExchange")
|
global.AddInfoBlock(Block, "Not EndExchange")
|
||||||
Block.HasErr = 1
|
Block.HasErr = 1
|
||||||
Block.Prepared = 0
|
Block.Prepared = 0
|
||||||
this.CreateTreeHash(Block)
|
this.CreateTreeHash(Block)
|
||||||
}
|
}
|
||||||
if (!Block.Prepared) {
|
if (!Block.Prepared) {
|
||||||
Block.HasErr = 1
|
Block.HasErr = 1
|
||||||
AddInfoBlock(Block, "Not was Prepared")
|
global.AddInfoBlock(Block, "Not was Prepared")
|
||||||
this.PreparePOWHash(Block)
|
this.PreparePOWHash(Block)
|
||||||
if (!Block.Prepared)
|
if (!Block.Prepared)
|
||||||
continue;
|
continue;
|
||||||
@@ -1187,53 +1193,53 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
||||||
if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) {
|
if (global.CompareArr(SeqHash, Block.SeqHash) !== 0) {
|
||||||
Block.HasErr = 1
|
Block.HasErr = 1
|
||||||
AddInfoBlock(Block, "New fast pow")
|
global.AddInfoBlock(Block, "New fast pow")
|
||||||
this.PreparePOWHash(Block)
|
this.PreparePOWHash(Block)
|
||||||
}
|
}
|
||||||
if (Block.MaxPOW && Block.MaxPOW.SeqHash && Block.MaxPOW.AddrHash && Block.MaxPOW.LocalSeqHash && global.CompareArr(Block.SeqHash,
|
if (Block.MaxPOW && Block.MaxPOW.SeqHash && Block.MaxPOW.AddrHash && Block.MaxPOW.LocalSeqHash && global.CompareArr(Block.SeqHash,
|
||||||
Block.MaxPOW.LocalSeqHash) === 0) {
|
Block.MaxPOW.LocalSeqHash) === 0) {
|
||||||
if (global.CompareArr(Block.SeqHash, Block.MaxPOW.LocalSeqHash) === 0 && global.CompareArr(Block.MaxPOW.PowLocalHash, Block.PowHash) < 0) {
|
if (global.CompareArr(Block.SeqHash, Block.MaxPOW.LocalSeqHash) === 0 && global.CompareArr(Block.MaxPOW.PowLocalHash, Block.PowHash) < 0) {
|
||||||
Block.AddrHash = Block.MaxPOW.LocalAddrHash
|
Block.AddrHash = Block.MaxPOW.LocalAddrHash
|
||||||
CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
global.CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
||||||
AddInfoBlock(Block, "->Local lider:" + GetPowPower(Block.PowHash))
|
global.AddInfoBlock(Block, "->Local lider:" + global.GetPowPower(Block.PowHash))
|
||||||
}
|
}
|
||||||
if (global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) === 0 && global.CompareArr(Block.MaxPOW.AddrHash, Block.AddrHash) !== 0 && global.CompareArr(Block.MaxPOW.PowHash,
|
if (global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) === 0 && global.CompareArr(Block.MaxPOW.AddrHash, Block.AddrHash) !== 0 && global.CompareArr(Block.MaxPOW.PowHash,
|
||||||
Block.PowHash) < 0) {
|
Block.PowHash) < 0) {
|
||||||
Block.AddrHash = Block.MaxPOW.AddrHash
|
Block.AddrHash = Block.MaxPOW.AddrHash
|
||||||
CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
global.CalcHashBlockFromSeqAddr(Block, Block.PrevHash, global.MINING_VERSION_NUM)
|
||||||
AddInfoBlock(Block, "->Max lider")
|
global.AddInfoBlock(Block, "->Max lider")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Block.HasErr = 1
|
Block.HasErr = 1
|
||||||
AddInfoBlock(Block, "ERROR MaxPOW")
|
global.AddInfoBlock(Block, "ERROR MaxPOW")
|
||||||
}
|
}
|
||||||
if (Block.MaxPOW && Block.MaxPOW.SeqHash && !Block.CheckMaxPow && !Block.CheckMaxSum && global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) !== 0) {
|
if (Block.MaxPOW && Block.MaxPOW.SeqHash && !Block.CheckMaxPow && !Block.CheckMaxSum && global.CompareArr(Block.SeqHash, Block.MaxPOW.SeqHash) !== 0) {
|
||||||
AddInfoBlock(Block, "CheckMaxPow")
|
global.AddInfoBlock(Block, "CheckMaxPow")
|
||||||
this.CheckingMaxPowOther(Block)
|
this.CheckingMaxPowOther(Block)
|
||||||
}
|
}
|
||||||
if (BlockNum > start_save)
|
if (BlockNum > start_save)
|
||||||
continue;
|
continue;
|
||||||
if (PrevBlock.bSave && this.BlockNumDB + 1 >= Block.BlockNum) {
|
if (PrevBlock.bSave && this.BlockNumDB + 1 >= Block.BlockNum) {
|
||||||
this.AddToStatBlockConfirmation(Block)
|
this.AddToStatBlockConfirmation(Block)
|
||||||
var Power = GetPowPower(Block.PowHash);
|
var Power = global.GetPowPower(Block.PowHash);
|
||||||
if (this.WriteBlockDB(Block)) {
|
if (this.WriteBlockDB(Block)) {
|
||||||
if (Block.arrContent && Block.arrContent.length)
|
if (Block.arrContent && Block.arrContent.length)
|
||||||
global.ADD_TO_STAT("MAX:TRANSACTION_COUNT", Block.arrContent.length)
|
global.ADD_TO_STAT("MAX:TRANSACTION_COUNT", Block.arrContent.length)
|
||||||
AddInfoBlock(Block, "SAVE:" + Power + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4))
|
global.AddInfoBlock(Block, "SAVE:" + Power + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Block.HasErr = 1
|
Block.HasErr = 1
|
||||||
AddInfoBlock(Block, "ERROR WRITE DB")
|
global.AddInfoBlock(Block, "ERROR WRITE DB")
|
||||||
}
|
}
|
||||||
this.AddToMaxSum(Block, { SumHash: Block.SumHash, SumList: this.GetBlockList(Block.BlockNum), })
|
this.AddToMaxSum(Block, { SumHash: Block.SumHash, SumList: this.GetBlockList(Block.BlockNum), })
|
||||||
if (typeof global.RESYNC_CONDITION === "object") {
|
if (typeof global.RESYNC_CONDITION === "object") {
|
||||||
if (!this.OwnBlockCount)
|
if (!this.OwnBlockCount)
|
||||||
this.OwnBlockCount = 0
|
this.OwnBlockCount = 0
|
||||||
var Miner = ReadUintFromArr(Block.AddrHash, 0);
|
var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||||
var MultK = RESYNC_CONDITION.K_POW;
|
var MultK = global.RESYNC_CONDITION.K_POW;
|
||||||
var MaxBlocks = RESYNC_CONDITION.OWN_BLOCKS;
|
var MaxBlocks = global.RESYNC_CONDITION.OWN_BLOCKS;
|
||||||
if (Miner === GENERATE_BLOCK_ACCOUNT) {
|
if (Miner === global.GENERATE_BLOCK_ACCOUNT) {
|
||||||
this.OwnBlockCount++
|
this.OwnBlockCount++
|
||||||
if (this.OwnBlockCount >= MaxBlocks) {
|
if (this.OwnBlockCount >= MaxBlocks) {
|
||||||
var PrevSumPow = this.GetAvgPowBlock(Block.BlockNum - 2 * MaxBlocks, MaxBlocks);
|
var PrevSumPow = this.GetAvgPowBlock(Block.BlockNum - 2 * MaxBlocks, MaxBlocks);
|
||||||
@@ -1254,9 +1260,9 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
else {
|
else {
|
||||||
Block.HasErr = 1
|
Block.HasErr = 1
|
||||||
if (!PrevBlock.bSave)
|
if (!PrevBlock.bSave)
|
||||||
AddInfoBlock(Block, "Prev block not saved")
|
global.AddInfoBlock(Block, "Prev block not saved")
|
||||||
else
|
else
|
||||||
AddInfoBlock(Block, "Low BlockNumDB")
|
global.AddInfoBlock(Block, "Low BlockNumDB")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1264,15 +1270,15 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
if (CURRENTBLOCKNUM + global.BLOCK_PROCESSING_LENGTH2 > MaxNumBlockDB)
|
if (CURRENTBLOCKNUM + global.BLOCK_PROCESSING_LENGTH2 > MaxNumBlockDB)
|
||||||
for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < start_save; BlockNum++) {
|
for (var BlockNum = CURRENTBLOCKNUM - global.BLOCK_PROCESSING_LENGTH2; BlockNum > global.BLOCK_PROCESSING_LENGTH2 && BlockNum < start_save; BlockNum++) {
|
||||||
var Block = this.GetBlock(BlockNum);
|
var Block = this.GetBlock(BlockNum);
|
||||||
if (Block && !Block.bSave && Block.TrCount && Block.TreeHash && !IsZeroArr(Block.TreeHash) && !Block.WasSaveDataTree) {
|
if (Block && !Block.bSave && Block.TrCount && Block.TreeHash && !global.IsZeroArr(Block.TreeHash) && !Block.WasSaveDataTree) {
|
||||||
this.PreSaveDataTreeToDB(Block)
|
this.PreSaveDataTreeToDB(Block)
|
||||||
Block.WasSaveDataTree = 1
|
Block.WasSaveDataTree = 1
|
||||||
AddInfoBlock(Block, "*PRESAVE DATA TREE*")
|
global.AddInfoBlock(Block, "*PRESAVE DATA TREE*")
|
||||||
global.ToLog("PRESAVE DATA: " + Block.BlockNum)
|
global.ToLog("PRESAVE DATA: " + Block.BlockNum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.RelayMode = !bWasSave
|
this.RelayMode = !bWasSave
|
||||||
this.FREE_MEM_BLOCKS(CURRENTBLOCKNUM - BLOCK_COUNT_IN_MEMORY)
|
this.FREE_MEM_BLOCKS(CURRENTBLOCKNUM - global.BLOCK_COUNT_IN_MEMORY)
|
||||||
}
|
}
|
||||||
GetAvgPowBlock(StartNum, CountNum) {
|
GetAvgPowBlock(StartNum, CountNum) {
|
||||||
var Count = 0;
|
var Count = 0;
|
||||||
@@ -1280,7 +1286,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
for (var Num = StartNum; Num < StartNum + CountNum; Num++) {
|
for (var Num = StartNum; Num < StartNum + CountNum; Num++) {
|
||||||
var Block = this.GetBlock(Num);
|
var Block = this.GetBlock(Num);
|
||||||
if (Block && Block.bSave) {
|
if (Block && Block.bSave) {
|
||||||
var Power = GetPowPower(Block.PowHash);
|
var Power = global.GetPowPower(Block.PowHash);
|
||||||
SumPow += Power
|
SumPow += Power
|
||||||
Count++
|
Count++
|
||||||
}
|
}
|
||||||
@@ -1291,7 +1297,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
return SumPow / Count;
|
return SumPow / Count;
|
||||||
}
|
}
|
||||||
CreatePOWNew(Block) {
|
CreatePOWNew(Block) {
|
||||||
CreateHashMinimal(Block, GENERATE_BLOCK_ACCOUNT)
|
CreateHashMinimal(Block, global.GENERATE_BLOCK_ACCOUNT)
|
||||||
this.AddToMaxPOW(Block, {
|
this.AddToMaxPOW(Block, {
|
||||||
SeqHash: Block.SeqHash, AddrHash: Block.AddrHash, PrevHash: Block.PrevHash, TreeHash: Block.TreeHash,
|
SeqHash: Block.SeqHash, AddrHash: Block.AddrHash, PrevHash: Block.PrevHash, TreeHash: Block.TreeHash,
|
||||||
})
|
})
|
||||||
@@ -1303,7 +1309,7 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
var BlockMem = this.BlockChain[CurNum];
|
var BlockMem = this.BlockChain[CurNum];
|
||||||
if (BlockMem) {
|
if (BlockMem) {
|
||||||
if (BlockMem.Prepared) {
|
if (BlockMem.Prepared) {
|
||||||
AddInfoBlock(BlockMem, "-reset POW:" + RefBlockNum + "/" + bReload)
|
global.AddInfoBlock(BlockMem, "-reset POW:" + RefBlockNum + "/" + bReload)
|
||||||
BlockMem.bSave = false
|
BlockMem.bSave = false
|
||||||
BlockMem.Prepared = false
|
BlockMem.Prepared = false
|
||||||
BlockMem.StartMining = false
|
BlockMem.StartMining = false
|
||||||
@@ -1324,36 +1330,36 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
if (!BlockMining.StartMining || BlockMining.bSave)
|
if (!BlockMining.StartMining || BlockMining.bSave)
|
||||||
return;
|
return;
|
||||||
if (BlockMining && BlockMining.Hash && BlockMining.SeqHash && global.CompareArr(BlockMining.SeqHash, msg.SeqHash) === 0) {
|
if (BlockMining && BlockMining.Hash && BlockMining.SeqHash && global.CompareArr(BlockMining.SeqHash, msg.SeqHash) === 0) {
|
||||||
var ValueOld = GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
|
var ValueOld = global.GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
|
||||||
var ValueMsg = GetHashFromSeqAddr(msg.SeqHash, msg.AddrHash, BlockMining.BlockNum);
|
var ValueMsg = global.GetHashFromSeqAddr(msg.SeqHash, msg.AddrHash, BlockMining.BlockNum);
|
||||||
var bWas = 0;
|
var bWas = 0;
|
||||||
if (global.CompareArr(ValueOld.Hash1, ValueMsg.Hash1) > 0) {
|
if (global.CompareArr(ValueOld.Hash1, ValueMsg.Hash1) > 0) {
|
||||||
var Nonce1 = ReadUintFromArr(msg.AddrHash, 12);
|
var Nonce1 = global.ReadUintFromArr(msg.AddrHash, 12);
|
||||||
var DeltaNum1 = ReadUint16FromArr(msg.AddrHash, 24);
|
var DeltaNum1 = global.ReadUint16FromArr(msg.AddrHash, 24);
|
||||||
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce1, 12)
|
global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce1, 12)
|
||||||
WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum1, 24)
|
global.WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum1, 24)
|
||||||
bWas += 1
|
bWas += 1
|
||||||
}
|
}
|
||||||
if (global.CompareArr(ValueOld.Hash2, ValueMsg.Hash2) > 0) {
|
if (global.CompareArr(ValueOld.Hash2, ValueMsg.Hash2) > 0) {
|
||||||
var Nonce0 = ReadUintFromArr(msg.AddrHash, 6);
|
var Nonce0 = global.ReadUintFromArr(msg.AddrHash, 6);
|
||||||
var Nonce2 = ReadUintFromArr(msg.AddrHash, 18);
|
var Nonce2 = global.ReadUintFromArr(msg.AddrHash, 18);
|
||||||
var DeltaNum2 = ReadUint16FromArr(msg.AddrHash, 26);
|
var DeltaNum2 = global.ReadUint16FromArr(msg.AddrHash, 26);
|
||||||
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce0, 6)
|
global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce0, 6)
|
||||||
WriteUintToArrOnPos(BlockMining.AddrHash, Nonce2, 18)
|
global.WriteUintToArrOnPos(BlockMining.AddrHash, Nonce2, 18)
|
||||||
WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum2, 26)
|
global.WriteUint16ToArrOnPos(BlockMining.AddrHash, DeltaNum2, 26)
|
||||||
bWas += 2
|
bWas += 2
|
||||||
}
|
}
|
||||||
if (!bWas)
|
if (!bWas)
|
||||||
return;
|
return;
|
||||||
var ValueNew = GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
|
var ValueNew = global.GetHashFromSeqAddr(BlockMining.SeqHash, BlockMining.AddrHash, BlockMining.BlockNum);
|
||||||
BlockMining.Hash = ValueNew.Hash
|
BlockMining.Hash = ValueNew.Hash
|
||||||
BlockMining.PowHash = ValueNew.PowHash
|
BlockMining.PowHash = ValueNew.PowHash
|
||||||
BlockMining.Power = GetPowPower(BlockMining.PowHash)
|
BlockMining.Power = global.GetPowPower(BlockMining.PowHash)
|
||||||
global.ADD_TO_STAT("MAX:POWER", BlockMining.Power)
|
global.ADD_TO_STAT("MAX:POWER", BlockMining.Power)
|
||||||
var Power = GetPowPower(BlockMining.PowHash);
|
var Power = global.GetPowPower(BlockMining.PowHash);
|
||||||
var HashCount = Math.pow(2, Power);
|
var HashCount = Math.pow(2, Power);
|
||||||
ADD_HASH_RATE(HashCount)
|
global.ADD_HASH_RATE(HashCount)
|
||||||
AddInfoBlock(BlockMining, "Set POW: " + Power)
|
global.AddInfoBlock(BlockMining, "Set POW: " + Power)
|
||||||
this.SetNoPOW(BlockMining.BlockNum + 8, 0, BlockMining.BlockNum)
|
this.SetNoPOW(BlockMining.BlockNum + 8, 0, BlockMining.BlockNum)
|
||||||
this.AddToMaxPOW(BlockMining, {
|
this.AddToMaxPOW(BlockMining, {
|
||||||
SeqHash: BlockMining.SeqHash, AddrHash: BlockMining.AddrHash, PrevHash: BlockMining.PrevHash, TreeHash: BlockMining.TreeHash,
|
SeqHash: BlockMining.SeqHash, AddrHash: BlockMining.AddrHash, PrevHash: BlockMining.PrevHash, TreeHash: BlockMining.TreeHash,
|
||||||
@@ -1361,7 +1367,8 @@ module.exports = class CConsensus extends require("./block-loader")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
global.TreeBlockBuf = new STreeBuffer(50 * 1000, CompareItemHashSimple, "string");
|
let STreeBuffer = global.STreeBuffer;
|
||||||
|
global.TreeBlockBuf = new STreeBuffer(50 * 1000, global.CompareItemHashSimple, "string");
|
||||||
var PrevTimeIdle = 0;
|
var PrevTimeIdle = 0;
|
||||||
OnTimeIdle();
|
OnTimeIdle();
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,19 @@
|
|||||||
* Telegram: https://t.me/terafoundation
|
* Telegram: https://t.me/terafoundation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
global.PERIOD_GET_BLOCK = 300, global.COUNT_HISTORY_BLOCKS_FOR_LOAD = 600, global.COUNT_BLOCKS_FOR_CHECK_POW = 50, global.MAX_DELTA_COUNT_SUM_FOR_LOAD = 10,
|
global.PERIOD_GET_BLOCK = 300
|
||||||
global.MAX_COUNT_CHAIN_LOAD = 120, global.PACKET_ALIVE_PERIOD = 4 * CONSENSUS_PERIOD_TIME, global.PACKET_ALIVE_PERIOD_NEXT_NODE = PACKET_ALIVE_PERIOD / 2,
|
global.COUNT_HISTORY_BLOCKS_FOR_LOAD = 600
|
||||||
global.MAX_BLOCK_SEND = 8, global.COUNT_TASK_FOR_NODE = 10, global.FORMAT_BLOCK_TRANSFER = "{ BlockNum:uint, TreeHash:hash, arrContent:[tr], }",
|
global.COUNT_BLOCKS_FOR_CHECK_POW = 50
|
||||||
global.WRK_BLOCK_TRANSFER = {}, global.MAX_ACCOUNTS_TRANSFER = 1024, global.MAX_SMARTS_TRANSFER = 10, global.TEST_NETWORK && (global.MAX_ACCOUNTS_TRANSFER = 128,
|
global.MAX_DELTA_COUNT_SUM_FOR_LOAD = 10
|
||||||
global.MAX_SMARTS_TRANSFER = 10), global.FORMAT_REST_TRANSFER = "{ Result:uint, Version:uint, Arr:[arr200], ProofHash:hash, ProofArrL:<hash>, ProofArrR:<hash>, }",
|
global.MAX_COUNT_CHAIN_LOAD = 120
|
||||||
|
global.PACKET_ALIVE_PERIOD = 4 * global.CONSENSUS_PERIOD_TIME
|
||||||
|
global.PACKET_ALIVE_PERIOD_NEXT_NODE = global.PACKET_ALIVE_PERIOD / 2
|
||||||
|
global.MAX_BLOCK_SEND = 8
|
||||||
|
global.COUNT_TASK_FOR_NODE = 10
|
||||||
|
global.FORMAT_BLOCK_TRANSFER = "{ BlockNum:uint, TreeHash:hash, arrContent:[tr], }"
|
||||||
|
global.WRK_BLOCK_TRANSFER = {}
|
||||||
|
global.MAX_ACCOUNTS_TRANSFER = 1024
|
||||||
|
global.MAX_SMARTS_TRANSFER = 10
|
||||||
|
global.TEST_NETWORK && (global.MAX_ACCOUNTS_TRANSFER = 128, global.MAX_SMARTS_TRANSFER = 10)
|
||||||
|
global.FORMAT_REST_TRANSFER = "{ Result:uint, Version:uint, Arr:[arr200], ProofHash:hash, ProofArrL:<hash>, ProofArrR:<hash>, }"
|
||||||
global.FORMAT_SMART_TRANSFER = "{ Result:uint, Arr:[tr], }";
|
global.FORMAT_SMART_TRANSFER = "{ Result:uint, Arr:[tr], }";
|
||||||
|
|||||||
@@ -12,9 +12,26 @@
|
|||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
require('./block-loader-const');
|
require('./block-loader-const');
|
||||||
const STAT_BLOCK_LOAD_PERIOD = CONSENSUS_PERIOD_TIME / 5;
|
const STAT_BLOCK_LOAD_PERIOD = global.CONSENSUS_PERIOD_TIME / 5;
|
||||||
module.exports = class CBlock extends require("./rest-loader.js")
|
module.exports = class CBlock extends require("./rest-loader.js")
|
||||||
{
|
{
|
||||||
|
MapMapLoaded
|
||||||
|
BlockChain
|
||||||
|
ChainID
|
||||||
|
BlockID
|
||||||
|
TaskNodeIndex
|
||||||
|
LoadedChainList
|
||||||
|
LastChainLoad
|
||||||
|
StartLoadBlockTime
|
||||||
|
LoadHistoryMode
|
||||||
|
MapBlockBodyLoad
|
||||||
|
BlockNumDB
|
||||||
|
RelayMode
|
||||||
|
LoadHistoryMessage
|
||||||
|
LastLoadedBlockNum
|
||||||
|
LoadHistoryContext
|
||||||
|
LoadBlockStatNum
|
||||||
|
BADHashCount
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
this.MapMapLoaded = {}
|
this.MapMapLoaded = {}
|
||||||
@@ -43,9 +60,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
GenesisBlockHeaderDB(Num) {
|
GenesisBlockHeaderDB(Num) {
|
||||||
if (Num < 0)
|
if (Num < 0)
|
||||||
return undefined;
|
return undefined;
|
||||||
var Block = {
|
var Block: any = {
|
||||||
BlockNum: Num, TreeHash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
BlockNum: Num, TreeHash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0], AddrHash: DEVELOP_PUB_KEY0, Hash: this.GetHashGenesis(Num), PowHash: this.GetHashGenesis(Num), PrevHash: [0, 0, 0, 0,
|
0, 0, 0], AddrHash: global.DEVELOP_PUB_KEY0, Hash: this.GetHashGenesis(Num), PowHash: this.GetHashGenesis(Num), PrevHash: [0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], SeqHash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], SeqHash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], SumHash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], SumHash: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], Comment1: "GENESIS", Comment2: "", TrCount: 0, TrDataPos: 0, TrDataLen: 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], Comment1: "GENESIS", Comment2: "", TrCount: 0, TrDataPos: 0, TrDataLen: 0,
|
||||||
@@ -59,7 +76,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
this.FindStartBlockNum()
|
this.FindStartBlockNum()
|
||||||
if (this.UseTruncateBlockDB)
|
if (this.UseTruncateBlockDB)
|
||||||
this.TruncateBlockDB(this.UseTruncateBlockDB)
|
this.TruncateBlockDB(this.UseTruncateBlockDB)
|
||||||
var CurNum = GetCurrentBlockNumByTime();
|
var CurNum = global.GetCurrentBlockNumByTime();
|
||||||
if (CurNum <= this.BlockNumDB) {
|
if (CurNum <= this.BlockNumDB) {
|
||||||
this.TruncateBlockDB(CurNum)
|
this.TruncateBlockDB(CurNum)
|
||||||
}
|
}
|
||||||
@@ -70,8 +87,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
if (this.BlockNumDB < global.BLOCK_PROCESSING_LENGTH2)
|
if (this.BlockNumDB < global.BLOCK_PROCESSING_LENGTH2)
|
||||||
this.CreateGenesisBlocks()
|
this.CreateGenesisBlocks()
|
||||||
if (fs.existsSync(GetCodePath("EXPERIMENTAL/_run.js"))) {
|
if (fs.existsSync(global.GetCodePath("EXPERIMENTAL/_run.js"))) {
|
||||||
require(GetCodePath("EXPERIMENTAL/_run.js")).Run()
|
require(global.GetCodePath("EXPERIMENTAL/_run.js")).Run()
|
||||||
}
|
}
|
||||||
this.LoadMemBlocksOnStart()
|
this.LoadMemBlocksOnStart()
|
||||||
}
|
}
|
||||||
@@ -89,7 +106,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
||||||
var Sum = 0;
|
var Sum = 0;
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for (var i = 0; i < BLOCK_PROCESSING_LENGTH; i++) {
|
for (var i = 0; i < global.BLOCK_PROCESSING_LENGTH; i++) {
|
||||||
var PrevBlock = this.GetBlock(startPrev + i);
|
var PrevBlock = this.GetBlock(startPrev + i);
|
||||||
if (PrevBlock && PrevBlock.bSave) {
|
if (PrevBlock && PrevBlock.bSave) {
|
||||||
Sum = Sum + PrevBlock.SumPow
|
Sum = Sum + PrevBlock.SumPow
|
||||||
@@ -99,13 +116,13 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var PrevHash = CalcHashFromArray(arr, true);
|
var PrevHash = global.CalcHashFromArray(arr, true);
|
||||||
return PrevHash;
|
return PrevHash;
|
||||||
}
|
}
|
||||||
GetPrevHashDB(Block) {
|
GetPrevHashDB(Block) {
|
||||||
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
var startPrev = Block.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for (var i = 0; i < BLOCK_PROCESSING_LENGTH; i++) {
|
for (var i = 0; i < global.BLOCK_PROCESSING_LENGTH; i++) {
|
||||||
var num = startPrev + i;
|
var num = startPrev + i;
|
||||||
var PrevBlock = this.ReadBlockHeaderDB(num);
|
var PrevBlock = this.ReadBlockHeaderDB(num);
|
||||||
if (!PrevBlock || !PrevBlock.bSave) {
|
if (!PrevBlock || !PrevBlock.bSave) {
|
||||||
@@ -114,18 +131,18 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
arr.push(PrevBlock.Hash)
|
arr.push(PrevBlock.Hash)
|
||||||
}
|
}
|
||||||
var PrevHash = CalcHashFromArray(arr, true);
|
var PrevHash = global.CalcHashFromArray(arr, true);
|
||||||
return PrevHash;
|
return PrevHash;
|
||||||
}
|
}
|
||||||
StartSyncBlockchain(Node, bSilent, bCheckPoint) {
|
StartSyncBlockchain(Node?, bSilent?, bCheckPoint?) {
|
||||||
this.FREE_ALL_MEM_CHAINS()
|
this.FREE_ALL_MEM_CHAINS()
|
||||||
if (global.NO_HISTORY_MODE) {
|
if (global.NO_HISTORY_MODE) {
|
||||||
this.LoadHistoryMode = 0
|
this.LoadHistoryMode = 0
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (global.CREATE_ON_START && !LOCAL_RUN)
|
if (global.CREATE_ON_START && !global.LOCAL_RUN)
|
||||||
return;
|
return;
|
||||||
if (!GrayConnect())
|
if (!global.GrayConnect())
|
||||||
this.RelayMode = true
|
this.RelayMode = true
|
||||||
else
|
else
|
||||||
this.RelayMode = false
|
this.RelayMode = false
|
||||||
@@ -137,7 +154,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
PrevBlockNum: - 1, Node: Node, BlockNum: this.BlockNumDB, MapSend: {}, Foward: 1, Pause: 0, DeltaBlockNum: 10,
|
PrevBlockNum: - 1, Node: Node, BlockNum: this.BlockNumDB, MapSend: {}, Foward: 1, Pause: 0, DeltaBlockNum: 10,
|
||||||
StartTimeHistory: Date.now(), MaxTimeOut: 30 * 1000
|
StartTimeHistory: Date.now(), MaxTimeOut: 30 * 1000
|
||||||
}
|
}
|
||||||
if (!bSilent && !bCheckPoint && REST_START_COUNT) {
|
if (!bSilent && !bCheckPoint && global.REST_START_COUNT) {
|
||||||
this.CheckSyncRest()
|
this.CheckSyncRest()
|
||||||
}
|
}
|
||||||
if (!this.ActualNodes.size) {
|
if (!this.ActualNodes.size) {
|
||||||
@@ -181,7 +198,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
Context.BlockNum = this.BlockNumDB
|
Context.BlockNum = this.BlockNumDB
|
||||||
}
|
}
|
||||||
var BlockDB = this.ReadBlockHeaderDB(Context.BlockNum);
|
var BlockDB = this.ReadBlockHeaderDB(Context.BlockNum);
|
||||||
if (!BlockDB || this.BlockNumDB >= GetCurrentBlockNumByTime() - BLOCK_PROCESSING_LENGTH - 2) {
|
if (!BlockDB || this.BlockNumDB >= global.GetCurrentBlockNumByTime() - global.BLOCK_PROCESSING_LENGTH - 2) {
|
||||||
this.LoadHistoryMode = false
|
this.LoadHistoryMode = false
|
||||||
if (this.LoadHistoryMessage)
|
if (this.LoadHistoryMessage)
|
||||||
global.ToLog("Finish synchronization")
|
global.ToLog("Finish synchronization")
|
||||||
@@ -200,7 +217,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
if (global.NO_HISTORY_MODE)
|
if (global.NO_HISTORY_MODE)
|
||||||
return;
|
return;
|
||||||
this.StartLoadBlockTime = Date.now()
|
this.StartLoadBlockTime = Date.now()
|
||||||
if (Num > this.CurrentBlockNum + TIME_START_SAVE) {
|
if (Num > this.CurrentBlockNum + global.TIME_START_SAVE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bIsSum = bIsSum || false
|
bIsSum = bIsSum || false
|
||||||
@@ -208,7 +225,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
if (Tree.find({ hash: LoadHash }))
|
if (Tree.find({ hash: LoadHash }))
|
||||||
return false;
|
return false;
|
||||||
Tree.insert({ hash: LoadHash })
|
Tree.insert({ hash: LoadHash })
|
||||||
var chain = {
|
var chain: any = {
|
||||||
id: 0, Count: 16, BlockNum: Num, IsSum: bIsSum, Hash: LoadHash, time: undefined, FindBlockDB: false, LoadDB: false, LoadCountDB: 0,
|
id: 0, Count: 16, BlockNum: Num, IsSum: bIsSum, Hash: LoadHash, time: undefined, FindBlockDB: false, LoadDB: false, LoadCountDB: 0,
|
||||||
LoadSumDB: 0, LoadSum: 0, ParentChain: undefined, RootChain: undefined, BlockNumStart: Num, HashStart: LoadHash, IsSumStart: bIsSum,
|
LoadSumDB: 0, LoadSum: 0, ParentChain: undefined, RootChain: undefined, BlockNumStart: Num, HashStart: LoadHash, IsSumStart: bIsSum,
|
||||||
BlockHead: undefined, MapSend: {}, Comment2: "", StopSend: false, Info: "", Error: false,
|
BlockHead: undefined, MapSend: {}, Comment2: "", StopSend: false, Info: "", Error: false,
|
||||||
@@ -232,7 +249,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
this.LoadedChainList.push(chain)
|
this.LoadedChainList.push(chain)
|
||||||
}
|
}
|
||||||
LoopChainLoad() {
|
LoopChainLoad() {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
if (this.UseTruncateBlockDB)
|
if (this.UseTruncateBlockDB)
|
||||||
this.TruncateBlockDB(this.UseTruncateBlockDB)
|
this.TruncateBlockDB(this.UseTruncateBlockDB)
|
||||||
@@ -248,7 +265,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
this.SendLoadToBegin()
|
this.SendLoadToBegin()
|
||||||
}
|
}
|
||||||
var CountStopSend = 0;
|
var CountStopSend = 0;
|
||||||
var min_num = this.CurrentBlockNum - MAX_COUNT_CHAIN_LOAD;
|
var min_num = this.CurrentBlockNum - global.MAX_COUNT_CHAIN_LOAD;
|
||||||
var min_num_load = this.CurrentBlockNum;
|
var min_num_load = this.CurrentBlockNum;
|
||||||
for (var i = 0; i < this.LoadedChainList.length; i++) {
|
for (var i = 0; i < this.LoadedChainList.length; i++) {
|
||||||
var chain = this.LoadedChainList[i];
|
var chain = this.LoadedChainList[i];
|
||||||
@@ -263,7 +280,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
min_num_load = RootChain.BlockNum
|
min_num_load = RootChain.BlockNum
|
||||||
if (!chain.StopSend) {
|
if (!chain.StopSend) {
|
||||||
if (chain.BlockHead) {
|
if (chain.BlockHead) {
|
||||||
if (chain.BlockNum < this.CurrentBlockNum - COUNT_HISTORY_BLOCKS_FOR_LOAD) {
|
if (chain.BlockNum < this.CurrentBlockNum - global.COUNT_HISTORY_BLOCKS_FOR_LOAD) {
|
||||||
if (global.WATCHDOG_DEV)
|
if (global.WATCHDOG_DEV)
|
||||||
global.ToLog("Very long length of blocks to load history, stop chain with id=" + chain.id + " (" + chain.BlockNum + "-" + chain.BlockNumMax + ")")
|
global.ToLog("Very long length of blocks to load history, stop chain with id=" + chain.id + " (" + chain.BlockNum + "-" + chain.BlockNumMax + ")")
|
||||||
chain.StopSend = true
|
chain.StopSend = true
|
||||||
@@ -302,17 +319,17 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
global.ADD_TO_STAT("MAX:LOADEDCHAINLIST", this.LoadedChainList.length)
|
global.ADD_TO_STAT("MAX:LOADEDCHAINLIST", this.LoadedChainList.length)
|
||||||
this.FREE_MEM_CHAINS(min_num_load)
|
this.FREE_MEM_CHAINS(min_num_load)
|
||||||
this.LastLoadedBlockNum = 0
|
this.LastLoadedBlockNum = 0
|
||||||
if (this.LoadedChainList.length > COUNT_HISTORY_BLOCKS_FOR_LOAD) {
|
if (this.LoadedChainList.length > global.COUNT_HISTORY_BLOCKS_FOR_LOAD) {
|
||||||
if (global.WATCHDOG_DEV)
|
if (global.WATCHDOG_DEV)
|
||||||
global.ToLog("LoadedChainList>COUNT_HISTORY_BLOCKS_FOR_LOAD -> FREE_ALL_MEM_CHAINS")
|
global.ToLog("LoadedChainList>COUNT_HISTORY_BLOCKS_FOR_LOAD -> FREE_ALL_MEM_CHAINS")
|
||||||
this.FREE_ALL_MEM_CHAINS()
|
this.FREE_ALL_MEM_CHAINS()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GetNextNode(task, keyid, checktime, BlockNum) {
|
GetNextNode(task, keyid?, checktime?, BlockNum?) {
|
||||||
var CurTime = GetCurrentTime(0) - 0;
|
var CurTime = global.GetCurrentTime(0) - 0;
|
||||||
if (checktime && task.time) {
|
if (checktime && task.time) {
|
||||||
var Delta = CurTime - task.time;
|
var Delta = CurTime - task.time;
|
||||||
if (Delta < PACKET_ALIVE_PERIOD_NEXT_NODE)
|
if (Delta < global.PACKET_ALIVE_PERIOD_NEXT_NODE)
|
||||||
return { Result: false, timewait: true };
|
return { Result: false, timewait: true };
|
||||||
}
|
}
|
||||||
task.time = undefined
|
task.time = undefined
|
||||||
@@ -337,7 +354,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
Node = arr[this.TaskNodeIndex % arr.length]
|
Node = arr[this.TaskNodeIndex % arr.length]
|
||||||
}
|
}
|
||||||
if (Node.Active) {
|
if (Node.Active) {
|
||||||
if (!Node.INFO || !Node.INFO.WasPing || Node.StopGetBlock || (Node.INFO.CheckPointHashDB && CHECK_POINT.BlockNum && global.CompareArr(CHECK_POINT.Hash,
|
if (!Node.INFO || !Node.INFO.WasPing || Node.StopGetBlock || (Node.INFO.CheckPointHashDB && global.global.CHECK_POINT.BlockNum && global.CompareArr(global.global.CHECK_POINT.Hash,
|
||||||
Node.INFO.CheckPointHashDB) !== 0)) {
|
Node.INFO.CheckPointHashDB) !== 0)) {
|
||||||
timewait = true
|
timewait = true
|
||||||
continue;
|
continue;
|
||||||
@@ -391,7 +408,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
var DopStr = "";
|
var DopStr = "";
|
||||||
if (chain.IsSum)
|
if (chain.IsSum)
|
||||||
DopStr = "SUM:"
|
DopStr = "SUM:"
|
||||||
chain.AddInfo(chain.BlockNum + "/" + DopStr + this.GetStrFromHashShort(chain.Hash) + "->" + GetNodeStrPort(Node))
|
chain.AddInfo(chain.BlockNum + "/" + DopStr + this.GetStrFromHashShort(chain.Hash) + "->" + global.GetNodeStrPort(Node))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -415,9 +432,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}";
|
}";
|
||||||
}
|
}
|
||||||
GetBlockArrFromBuffer_Load(BufRead, Info) {
|
GetBlockArrFromBuffer_Load(BufRead, Info) {
|
||||||
var BlockArr = GetBlockArrFromBuffer(BufRead, Info);
|
var BlockArr = global.GetBlockArrFromBuffer(BufRead, Info);
|
||||||
if (BlockArr.length > 0 && BlockArr[0].BlockNum === global.BLOCK_PROCESSING_LENGTH2)
|
if (BlockArr.length > 0 && BlockArr[0].BlockNum === global.BLOCK_PROCESSING_LENGTH2)
|
||||||
BlockArr.unshift(this.ReadBlockHeaderDB(BLOCK_PROCESSING_LENGTH2 - 1))
|
BlockArr.unshift(this.ReadBlockHeaderDB(global.BLOCK_PROCESSING_LENGTH2 - 1))
|
||||||
return BlockArr;
|
return BlockArr;
|
||||||
}
|
}
|
||||||
RETBLOCKHEADER_FOWARD(Info, CurTime) {
|
RETBLOCKHEADER_FOWARD(Info, CurTime) {
|
||||||
@@ -434,8 +451,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
var Block = arr[i];
|
var Block = arr[i];
|
||||||
if (!Block)
|
if (!Block)
|
||||||
return;
|
return;
|
||||||
if (Block.BlockNum === CHECK_POINT.BlockNum && !IsZeroArr(CHECK_POINT.Hash)) {
|
if (Block.BlockNum === global.CHECK_POINT.BlockNum && !global.IsZeroArr(global.CHECK_POINT.Hash)) {
|
||||||
if (global.CompareArr(CHECK_POINT.Hash, Block.Hash) !== 0) {
|
if (global.CompareArr(global.CHECK_POINT.Hash, Block.Hash) !== 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Context.FindCheckPoint = true
|
Context.FindCheckPoint = true
|
||||||
@@ -450,7 +467,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
arr2.push(Block)
|
arr2.push(Block)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (BlockDB && IsZeroArr(BlockDB.SumHash)) {
|
if (BlockDB && global.IsZeroArr(BlockDB.SumHash)) {
|
||||||
bFindDB = 1
|
bFindDB = 1
|
||||||
arr2.push(Block)
|
arr2.push(Block)
|
||||||
}
|
}
|
||||||
@@ -485,7 +502,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
RETBLOCKHEADER(Info, CurTime) {
|
RETBLOCKHEADER(Info, CurTime) {
|
||||||
Info.Node.NextPing = MIN_PERIOD_PING
|
Info.Node.NextPing = global.MIN_PERIOD_PING
|
||||||
if (Info.Context.Foward)
|
if (Info.Context.Foward)
|
||||||
return this.RETBLOCKHEADER_FOWARD(Info, CurTime);
|
return this.RETBLOCKHEADER_FOWARD(Info, CurTime);
|
||||||
var chain = Info.Context.Chain;
|
var chain = Info.Context.Chain;
|
||||||
@@ -496,10 +513,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
if (arr.length <= 1) {
|
if (arr.length <= 1) {
|
||||||
var keysend = "" + Info.Node.addrStr + ":" + chain.BlockNum;
|
var keysend = "" + Info.Node.addrStr + ":" + chain.BlockNum;
|
||||||
chain.MapSend[keysend] = 1
|
chain.MapSend[keysend] = 1
|
||||||
chain.AddInfo("NO:" + GetNodeStrPort(Info.Node))
|
chain.AddInfo("NO:" + global.GetNodeStrPort(Info.Node))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
chain.AddInfo("L=" + arr.length + " from:" + GetNodeStrPort(Info.Node))
|
chain.AddInfo("L=" + arr.length + " from:" + global.GetNodeStrPort(Info.Node))
|
||||||
var NextLoadBlock;
|
var NextLoadBlock;
|
||||||
var PrevBlock;
|
var PrevBlock;
|
||||||
for (var i = arr.length - 1; i >= 0; i--) {
|
for (var i = arr.length - 1; i >= 0; i--) {
|
||||||
@@ -551,7 +568,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
MapBlockLoaded["TH:" + StrTreeHash] = Block
|
MapBlockLoaded["TH:" + StrTreeHash] = Block
|
||||||
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
||||||
if (BlockDB) {
|
if (BlockDB) {
|
||||||
Block.Power = GetPowPower(Block.PowHash)
|
Block.Power = global.GetPowPower(Block.PowHash)
|
||||||
chain.LoadCountDB++
|
chain.LoadCountDB++
|
||||||
chain.LoadSumDB += BlockDB.Power
|
chain.LoadSumDB += BlockDB.Power
|
||||||
chain.LoadSum += Block.Power
|
chain.LoadSum += Block.Power
|
||||||
@@ -571,11 +588,11 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
if (NextLoadBlock && !NextLoadBlock.chain.StopSend) {
|
if (NextLoadBlock && !NextLoadBlock.chain.StopSend) {
|
||||||
if (arr.length >= chain.Count) {
|
if (arr.length >= chain.Count) {
|
||||||
chain.Count = chain.Count * 2
|
chain.Count = chain.Count * 2
|
||||||
if (chain.Count > COUNT_BLOCKS_FOR_LOAD)
|
if (chain.Count > global.COUNT_BLOCKS_FOR_LOAD)
|
||||||
chain.Count = COUNT_BLOCKS_FOR_LOAD
|
chain.Count = global.COUNT_BLOCKS_FOR_LOAD
|
||||||
}
|
}
|
||||||
if (chain.LoadCountDB >= COUNT_BLOCKS_FOR_CHECK_POW) {
|
if (chain.LoadCountDB >= global.COUNT_BLOCKS_FOR_CHECK_POW) {
|
||||||
if (chain.LoadSumDB - chain.LoadSum > MAX_DELTA_COUNT_SUM_FOR_LOAD) {
|
if (chain.LoadSumDB - chain.LoadSum > global.MAX_DELTA_COUNT_SUM_FOR_LOAD) {
|
||||||
var Str = "ERR LOADED SUM POW chains: SumDB > Sum loaded from: " + NodeInfo(Info.Node);
|
var Str = "ERR LOADED SUM POW chains: SumDB > Sum loaded from: " + NodeInfo(Info.Node);
|
||||||
chain.StopSend = true
|
chain.StopSend = true
|
||||||
chain.AddInfo(Str)
|
chain.AddInfo(Str)
|
||||||
@@ -611,7 +628,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
var PrevBlock = BlockMin;
|
var PrevBlock = BlockMin;
|
||||||
for (var i = 1; i < arr.length; i++) {
|
for (var i = 1; i < arr.length; i++) {
|
||||||
var Block = arr[i];
|
var Block = arr[i];
|
||||||
Block.Power = GetPowPower(Block.PowHash)
|
Block.Power = global.GetPowPower(Block.PowHash)
|
||||||
Block.SumPow = PrevBlock.SumPow + Block.Power
|
Block.SumPow = PrevBlock.SumPow + Block.Power
|
||||||
PrevBlock = Block
|
PrevBlock = Block
|
||||||
}
|
}
|
||||||
@@ -637,7 +654,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
PrepareTransactionsForLoad(chain, arr, bNoSlice) {
|
PrepareTransactionsForLoad(chain, arr, bNoSlice?) {
|
||||||
if (!bNoSlice)
|
if (!bNoSlice)
|
||||||
arr = arr.slice(1)
|
arr = arr.slice(1)
|
||||||
chain.arr = arr
|
chain.arr = arr
|
||||||
@@ -648,7 +665,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
LoopBlockLoad() {
|
LoopBlockLoad() {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
var CountSend = 0;
|
var CountSend = 0;
|
||||||
for (var num = 0; num < this.LoadedChainList.length; num++) {
|
for (var num = 0; num < this.LoadedChainList.length; num++) {
|
||||||
@@ -658,7 +675,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
for (var i = chain.CurNumArrLoad; i < chain.arr.length; i++) {
|
for (var i = chain.CurNumArrLoad; i < chain.arr.length; i++) {
|
||||||
Count++
|
Count++
|
||||||
var Block = chain.arr[i];
|
var Block = chain.arr[i];
|
||||||
if (!IsZeroArr(Block.TreeHash) && !Block.TreeEq && !Block.LoadDBFinaly) {
|
if (!global.IsZeroArr(Block.TreeHash) && !Block.TreeEq && !Block.LoadDBFinaly) {
|
||||||
if (!Block.MapSend) {
|
if (!Block.MapSend) {
|
||||||
if (!Block.BodyLoad) {
|
if (!Block.BodyLoad) {
|
||||||
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
||||||
@@ -676,7 +693,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
if (this.SendBlockNext(Block)) {
|
if (this.SendBlockNext(Block)) {
|
||||||
CountSend++
|
CountSend++
|
||||||
if (CountSend >= MAX_BLOCK_SEND)
|
if (CountSend >= global.MAX_BLOCK_SEND)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -694,7 +711,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
CheckAndWriteLoadedChain(chain) {
|
CheckAndWriteLoadedChain(chain) {
|
||||||
if (chain.CurNumArrLoad >= chain.arr.length) {
|
if (chain.CurNumArrLoad >= chain.arr.length) {
|
||||||
var Block = chain.arr[chain.arr.length - 1];
|
var Block = chain.arr[chain.arr.length - 1];
|
||||||
if (chain.WriteToDBAfterLoad || Block.BlockNum >= this.CurrentBlockNum + TIME_START_SAVE - 2) {
|
if (chain.WriteToDBAfterLoad || Block.BlockNum >= this.CurrentBlockNum + global.TIME_START_SAVE - 2) {
|
||||||
var bAllLoaded = true;
|
var bAllLoaded = true;
|
||||||
if (!chain.WriteToDBAfterLoad) {
|
if (!chain.WriteToDBAfterLoad) {
|
||||||
var cur_parent = chain.ParentChain;
|
var cur_parent = chain.ParentChain;
|
||||||
@@ -728,7 +745,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
var startTime = process.hrtime();
|
var startTime = process.hrtime();
|
||||||
if (this.LoadHistoryMessage)
|
if (this.LoadHistoryMessage)
|
||||||
global.ToLog("WRITE DATA Count:" + arr.length + " " + arr[0].BlockNum + "-" + arr[arr.length - 1].BlockNum, 2)
|
global.ToLog("WRITE DATA Count:" + arr.length + " " + arr[0].BlockNum + "-" + arr[arr.length - 1].BlockNum, 2)
|
||||||
var CurrentBlockNum = GetCurrentBlockNumByTime();
|
var CurrentBlockNum = global.GetCurrentBlockNumByTime();
|
||||||
var Block, FirstBlock;
|
var Block, FirstBlock;
|
||||||
for (var i = 0; i < arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
Block = arr[i]
|
Block = arr[i]
|
||||||
@@ -752,12 +769,12 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
Res = this.WriteBlockDBFinaly(Block)
|
Res = this.WriteBlockDBFinaly(Block)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (IsZeroArr(Block.TreeHash)) {
|
if (global.IsZeroArr(Block.TreeHash)) {
|
||||||
Res = this.WriteBlockDB(Block)
|
Res = this.WriteBlockDB(Block)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ToLogTrace("IsZeroArr(Block.TreeHash)")
|
global.ToLogTrace("global.IsZeroArr(Block.TreeHash)")
|
||||||
throw "IsZeroArr(Block.TreeHash)";
|
throw "global.IsZeroArr(Block.TreeHash)";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!Res) {
|
if (!Res) {
|
||||||
@@ -766,7 +783,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Block.LoadDB = true
|
Block.LoadDB = true
|
||||||
if (Block.BlockNum >= CurrentBlockNum - BLOCK_COUNT_IN_MEMORY) {
|
if (Block.BlockNum >= CurrentBlockNum - global.BLOCK_COUNT_IN_MEMORY) {
|
||||||
this.CopyBlockToMem(Block)
|
this.CopyBlockToMem(Block)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -776,7 +793,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
var BlockMem = this.BlockChain[Block.BlockNum];
|
var BlockMem = this.BlockChain[Block.BlockNum];
|
||||||
if (BlockMem) {
|
if (BlockMem) {
|
||||||
AddInfoBlock(BlockMem, "LOAD:" + GetPowPower(Block.PowHash) + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4))
|
global.AddInfoBlock(BlockMem, "LOAD:" + global.GetPowPower(Block.PowHash) + " TH:" + this.GetStrFromHashShort(Block.TreeHash).substr(0, 4))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Block && FirstBlock) {
|
if (Block && FirstBlock) {
|
||||||
@@ -784,7 +801,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
this.SetNoPOW(CurNumStart, 1, FirstBlock.BlockNum)
|
this.SetNoPOW(CurNumStart, 1, FirstBlock.BlockNum)
|
||||||
}
|
}
|
||||||
this.FREE_ALL_MEM_CHAINS()
|
this.FREE_ALL_MEM_CHAINS()
|
||||||
ADD_TO_STAT_TIME("WRITECHAIN_TO_DB_TIME", startTime)
|
global.ADD_TO_STAT_TIME("WRITECHAIN_TO_DB_TIME", startTime)
|
||||||
}
|
}
|
||||||
CopyBlock(Block, BlockDst) {
|
CopyBlock(Block, BlockDst) {
|
||||||
BlockDst.BlockNum = Block.BlockNum
|
BlockDst.BlockNum = Block.BlockNum
|
||||||
@@ -834,12 +851,12 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
POW.SumPow = Block.SumPow
|
POW.SumPow = Block.SumPow
|
||||||
}
|
}
|
||||||
AddToStatBlockConfirmation(Block) {
|
AddToStatBlockConfirmation(Block) {
|
||||||
if (Block.BlockNum > START_BLOCK_RUN + global.BLOCK_PROCESSING_LENGTH2) {
|
if (Block.BlockNum > global.START_BLOCK_RUN + global.BLOCK_PROCESSING_LENGTH2) {
|
||||||
var TimeDelta = this.CurrentBlockNum - Block.BlockNum;
|
var TimeDelta = this.CurrentBlockNum - Block.BlockNum;
|
||||||
global.ADD_TO_STAT("MAX:BlockConfirmation", TimeDelta)
|
global.ADD_TO_STAT("MAX:BlockConfirmation", TimeDelta)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
global.ADD_TO_STAT("MAX:BlockConfirmation", BLOCK_PROCESSING_LENGTH)
|
global.ADD_TO_STAT("MAX:BlockConfirmation", global.BLOCK_PROCESSING_LENGTH)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SendBlockNext(Block) {
|
SendBlockNext(Block) {
|
||||||
@@ -854,9 +871,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
this.SendF(Node, { "Method": "GETBLOCK", "Context": Block.Context, "Data": { BlockNum: Block.BlockNum, TreeHash: Block.TreeHash } })
|
this.SendF(Node, { "Method": "GETBLOCK", "Context": Block.Context, "Data": { BlockNum: Block.BlockNum, TreeHash: Block.TreeHash } })
|
||||||
Node.SendBlockCount++
|
Node.SendBlockCount++
|
||||||
SendResult = 1
|
SendResult = 1
|
||||||
AddInfoBlock(Block, "SendNext")
|
global.AddInfoBlock(Block, "SendNext")
|
||||||
if (Block.chain)
|
if (Block.chain)
|
||||||
Block.chain.AddInfo("QUERY BL:" + Block.BlockNum + "/" + this.GetStrFromHashShort(Block.TreeHash) + " TO:" + GetNodeStrPort(Node))
|
Block.chain.AddInfo("QUERY BL:" + Block.BlockNum + "/" + this.GetStrFromHashShort(Block.TreeHash) + " TO:" + global.GetNodeStrPort(Node))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!Ret.timewait) {
|
if (!Ret.timewait) {
|
||||||
@@ -867,7 +884,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
return SendResult;
|
return SendResult;
|
||||||
}
|
}
|
||||||
ClearChains(DeleteChain, bShow) {
|
ClearChains(DeleteChain, bShow?) {
|
||||||
if (!DeleteChain) {
|
if (!DeleteChain) {
|
||||||
this.FREE_ALL_MEM_CHAINS()
|
this.FREE_ALL_MEM_CHAINS()
|
||||||
return this.LoadedChainList.length;
|
return this.LoadedChainList.length;
|
||||||
@@ -899,7 +916,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
return;
|
return;
|
||||||
this.LoadBlockStatNum = TimeNum
|
this.LoadBlockStatNum = TimeNum
|
||||||
const PeriodSec = 5;
|
const PeriodSec = 5;
|
||||||
const Period = CONSENSUS_PERIOD_TIME / STAT_BLOCK_LOAD_PERIOD;
|
const Period = global.CONSENSUS_PERIOD_TIME / STAT_BLOCK_LOAD_PERIOD;
|
||||||
const PeriodCount = PeriodSec * Period;
|
const PeriodCount = PeriodSec * Period;
|
||||||
var FreeGet = 64;
|
var FreeGet = 64;
|
||||||
var it = this.ActualNodes.iterator(), Node;
|
var it = this.ActualNodes.iterator(), Node;
|
||||||
@@ -940,41 +957,41 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}";
|
}";
|
||||||
}
|
}
|
||||||
RETGETBLOCK(Info, CurTime) {
|
RETGETBLOCK(Info, CurTime) {
|
||||||
Info.Node.NextPing = MIN_PERIOD_PING
|
Info.Node.NextPing = global.MIN_PERIOD_PING
|
||||||
var Block = Info.Context.Block;
|
var Block = Info.Context.Block;
|
||||||
if (Block && !Block.TreeEq) {
|
if (Block && !Block.TreeEq) {
|
||||||
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, FORMAT_BLOCK_TRANSFER, WRK_BLOCK_TRANSFER);
|
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, global.FORMAT_BLOCK_TRANSFER, global.WRK_BLOCK_TRANSFER);
|
||||||
Info.Data = undefined
|
Info.Data = undefined
|
||||||
if (Data.BlockNum !== Block.BlockNum || global.CompareArr(Data.TreeHash, Block.TreeHash) !== 0) {
|
if (Data.BlockNum !== Block.BlockNum || global.CompareArr(Data.TreeHash, Block.TreeHash) !== 0) {
|
||||||
this.SetBlockNOSendToNode(Block, Info.Node, "NO")
|
this.SetBlockNOSendToNode(Block, Info.Node, "NO")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Block.chain) {
|
if (Block.chain) {
|
||||||
Block.chain.AddInfo("Load TR:" + Data.BlockNum + "/" + this.GetStrFromHashShort(Data.TreeHash) + " from:" + GetNodeStrPort(Info.Node))
|
Block.chain.AddInfo("Load TR:" + Data.BlockNum + "/" + this.GetStrFromHashShort(Data.TreeHash) + " from:" + global.GetNodeStrPort(Info.Node))
|
||||||
AddInfoBlock(Block, "LOAD TR OK")
|
global.AddInfoBlock(Block, "LOAD TR OK")
|
||||||
}
|
}
|
||||||
var arrContent = Data.arrContent;
|
var arrContent = Data.arrContent;
|
||||||
var TreeHash = CalcTreeHashFromArrBody(Block.BlockNum, arrContent);
|
var TreeHash = global.CalcTreeHashFromArrBody(Block.BlockNum, arrContent);
|
||||||
if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) {
|
if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) {
|
||||||
global.ToLog("2. BAD CMP TreeHash block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " TreeHash=" + global.GetHexFromArr(TreeHash) + " BlockTreeHash=" + global.GetHexFromArr(Block.TreeHash))
|
global.ToLog("2. BAD CMP TreeHash block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " TreeHash=" + global.GetHexFromArr(TreeHash) + " BlockTreeHash=" + global.GetHexFromArr(Block.TreeHash))
|
||||||
this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP TreeHash")
|
this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP TreeHash")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (arrContent.length > 0 && Data.BlockNum % PERIOD_ACCOUNT_HASH === 0) {
|
if (arrContent.length > 0 && Data.BlockNum % global.PERIOD_ACCOUNT_HASH === 0) {
|
||||||
var TR = arrContent[0];
|
var TR = arrContent[0];
|
||||||
if (TR[0] === TYPE_TRANSACTION_ACC_HASH) {
|
if (TR[0] === global.TYPE_TRANSACTION_ACC_HASH) {
|
||||||
if (!DApps.Accounts.TRCheckAccountHash(TR, Data.BlockNum)) {
|
if (!global.DApps.Accounts.TRCheckAccountHash(TR, Data.BlockNum)) {
|
||||||
if (!this.BADHashCount)
|
if (!this.BADHashCount)
|
||||||
this.BADHashCount = 0
|
this.BADHashCount = 0
|
||||||
this.BADHashCount++
|
this.BADHashCount++
|
||||||
global.ToLog("**** BAD ACCOUNT Hash in block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " ****")
|
global.ToLog("**** BAD ACCOUNT Hash in block=" + Block.BlockNum + " from:" + NodeName(Info.Node) + " ****")
|
||||||
global.ToLog("May be need to Rewrite transactions from: " + (Block.BlockNum - 2 * DELTA_BLOCK_ACCOUNT_HASH))
|
global.ToLog("May be need to Rewrite transactions from: " + (Block.BlockNum - 2 * global.DELTA_BLOCK_ACCOUNT_HASH))
|
||||||
this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP ACC HASH")
|
this.SetBlockNOSendToNode(Block, Info.Node, "BAD CMP ACC HASH")
|
||||||
if (global.WATCHDOG_BADACCOUNT && this.BADHashCount > 60) {
|
if (global.WATCHDOG_BADACCOUNT && this.BADHashCount > 60) {
|
||||||
global.ToLog("Run WATCHDOG!")
|
global.ToLog("Run WATCHDOG!")
|
||||||
this.BADHashCount = 0
|
this.BADHashCount = 0
|
||||||
this.FREE_ALL_MEM_CHAINS()
|
this.FREE_ALL_MEM_CHAINS()
|
||||||
this.SetTruncateBlockDB(Block.BlockNum - 5 * DELTA_BLOCK_ACCOUNT_HASH)
|
this.SetTruncateBlockDB(Block.BlockNum - 5 * global.DELTA_BLOCK_ACCOUNT_HASH)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
}
|
}
|
||||||
@@ -995,7 +1012,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
Block.Send = undefined
|
Block.Send = undefined
|
||||||
global.ADD_TO_STAT("BLOCK_LOADED", 1)
|
global.ADD_TO_STAT("BLOCK_LOADED", 1)
|
||||||
Info.Node.LoadBlockCount++
|
Info.Node.LoadBlockCount++
|
||||||
if (GrayConnect())
|
if (global.GrayConnect())
|
||||||
Info.Node.BlockProcessCount++
|
Info.Node.BlockProcessCount++
|
||||||
if (this.LoadHistoryMode) {
|
if (this.LoadHistoryMode) {
|
||||||
var Context = this.LoadHistoryContext;
|
var Context = this.LoadHistoryContext;
|
||||||
@@ -1036,7 +1053,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
var keysend = "" + Node.addrStr + ":" + Str;
|
var keysend = "" + Node.addrStr + ":" + Str;
|
||||||
Block.MapSend[keysend] = 1
|
Block.MapSend[keysend] = 1
|
||||||
if (Block.chain)
|
if (Block.chain)
|
||||||
Block.chain.AddInfo("" + Block.BlockNum + " " + Str2 + "<-" + GetNodeStrPort(Node))
|
Block.chain.AddInfo("" + Block.BlockNum + " " + Str2 + "<-" + global.GetNodeStrPort(Node))
|
||||||
}
|
}
|
||||||
FindBlockInLoadedChain(BlockNum, TreeHash) {
|
FindBlockInLoadedChain(BlockNum, TreeHash) {
|
||||||
var StrTreeHash = global.GetHexFromArr(TreeHash);
|
var StrTreeHash = global.GetHexFromArr(TreeHash);
|
||||||
@@ -1050,25 +1067,25 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
CheckSeqHashDB(Block, StrError) {
|
CheckSeqHashDB(Block, StrError) {
|
||||||
if (Block.BlockNum < global.BLOCK_PROCESSING_LENGTH2)
|
if (Block.BlockNum < global.BLOCK_PROCESSING_LENGTH2)
|
||||||
return true;
|
return true;
|
||||||
var TreeHashTest = CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
var TreeHashTest = global.CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
||||||
if (global.CompareArr(TreeHashTest, Block.TreeHash) !== 0) {
|
if (global.CompareArr(TreeHashTest, Block.TreeHash) !== 0) {
|
||||||
var StrHex = global.GetHexFromArr(TreeHashTest);
|
var StrHex = global.GetHexFromArr(TreeHashTest);
|
||||||
var StrHex0 = global.GetHexFromArr(Block.TreeHash);
|
var StrHex0 = global.GetHexFromArr(Block.TreeHash);
|
||||||
var Str = StrError + " #3 ERROR TREEHASH: " + Block.BlockNum + " Hex:" + StrHex0.substr(0, 12) + " != " + StrHex.substr(0,
|
var Str = StrError + " #3 ERROR TREEHASH: " + Block.BlockNum + " Hex:" + StrHex0.substr(0, 12) + " != " + StrHex.substr(0,
|
||||||
12);
|
12);
|
||||||
if (global.WATCHDOG_DEV)
|
if (global.WATCHDOG_DEV)
|
||||||
ToErrorTrace(Str)
|
global.ToErrorTrace(Str)
|
||||||
else
|
else
|
||||||
global.ToError(Str)
|
global.ToError(Str)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var PrevHash = this.GetPrevHashDB(Block);
|
var PrevHash = this.GetPrevHashDB(Block);
|
||||||
var testSeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
var testSeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
||||||
var TestValue = GetHashFromSeqAddr(testSeqHash, Block.AddrHash, Block.BlockNum, PrevHash);
|
var TestValue = global.GetHashFromSeqAddr(testSeqHash, Block.AddrHash, Block.BlockNum, PrevHash);
|
||||||
if (global.CompareArr(TestValue.Hash, Block.Hash) !== 0) {
|
if (global.CompareArr(TestValue.Hash, Block.Hash) !== 0) {
|
||||||
var Str = StrError + " #2 ERROR HASH - block num: " + Block.BlockNum;
|
var Str = StrError + " #2 ERROR HASH - block num: " + Block.BlockNum;
|
||||||
if (global.WATCHDOG_DEV)
|
if (global.WATCHDOG_DEV)
|
||||||
ToErrorTrace(Str)
|
global.ToErrorTrace(Str)
|
||||||
else
|
else
|
||||||
global.ToError(Str)
|
global.ToError(Str)
|
||||||
return false;
|
return false;
|
||||||
@@ -1089,10 +1106,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
global.ToLog("arr[" + i + "]=" + global.GetHexFromArr(arr[i]))
|
global.ToLog("arr[" + i + "]=" + global.GetHexFromArr(arr[i]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GetBlock(num, bToMem, bReadBody) {
|
GetBlock(num, bToMem?, bReadBody?) {
|
||||||
if (bToMem === undefined)
|
if (bToMem === undefined)
|
||||||
bToMem = true
|
bToMem = true
|
||||||
if (num < this.CurrentBlockNum - BLOCK_COUNT_IN_MEMORY)
|
if (num < this.CurrentBlockNum - global.BLOCK_COUNT_IN_MEMORY)
|
||||||
bToMem = false
|
bToMem = false
|
||||||
var Block = this.BlockChain[num];
|
var Block = this.BlockChain[num];
|
||||||
if (!Block) {
|
if (!Block) {
|
||||||
@@ -1109,7 +1126,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
GetMapLoaded(num) {
|
GetMapLoaded(num) {
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
num = 0
|
num = 0
|
||||||
var index = Math.floor(num / BLOCK_COUNT_IN_MEMORY);
|
var index = Math.floor(num / global.BLOCK_COUNT_IN_MEMORY);
|
||||||
var map = this.MapMapLoaded[index];
|
var map = this.MapMapLoaded[index];
|
||||||
if (!map) {
|
if (!map) {
|
||||||
map = {}
|
map = {}
|
||||||
@@ -1129,19 +1146,19 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
FREE_MEM_CHAINS(NumMax) {
|
FREE_MEM_CHAINS(NumMax) {
|
||||||
this.FREE_MEM_BLOCKS(NumMax - BLOCK_COUNT_IN_MEMORY)
|
this.FREE_MEM_BLOCKS(NumMax - global.BLOCK_COUNT_IN_MEMORY)
|
||||||
var maxArrMap = Math.floor(NumMax / BLOCK_COUNT_IN_MEMORY) - 1;
|
var maxArrMap = Math.floor(NumMax / global.BLOCK_COUNT_IN_MEMORY) - 1;
|
||||||
if (maxArrMap >= 0) {
|
if (maxArrMap >= 0) {
|
||||||
var nWasCount = 0;
|
var nWasCount = 0;
|
||||||
for (var key in this.MapMapLoaded)
|
for (var key in this.MapMapLoaded)
|
||||||
if (key < maxArrMap) {
|
if (key as any < maxArrMap) {
|
||||||
nWasCount++
|
nWasCount++
|
||||||
delete this.MapMapLoaded[key]
|
delete this.MapMapLoaded[key]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FREE_ALL_MEM_CHAINS() {
|
FREE_ALL_MEM_CHAINS() {
|
||||||
this.FREE_MEM_BLOCKS(this.BlockNumDB - BLOCK_COUNT_IN_MEMORY)
|
this.FREE_MEM_BLOCKS(this.BlockNumDB - global.BLOCK_COUNT_IN_MEMORY)
|
||||||
for (var i = 0; i < this.LoadedChainList.length; i++) {
|
for (var i = 0; i < this.LoadedChainList.length; i++) {
|
||||||
var chain = this.LoadedChainList[i];
|
var chain = this.LoadedChainList[i];
|
||||||
if (chain) {
|
if (chain) {
|
||||||
@@ -1155,7 +1172,9 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
}
|
}
|
||||||
this.LoadedChainList = []
|
this.LoadedChainList = []
|
||||||
this.MapMapLoaded = {}
|
this.MapMapLoaded = {}
|
||||||
|
//@ts-ignore
|
||||||
if (typeof gc === "function")
|
if (typeof gc === "function")
|
||||||
|
//@ts-ignore
|
||||||
gc()
|
gc()
|
||||||
}
|
}
|
||||||
AddValueToHistory(typedata, val) {
|
AddValueToHistory(typedata, val) {
|
||||||
@@ -1169,7 +1188,7 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
GetHistoryTree(typedata) {
|
GetHistoryTree(typedata) {
|
||||||
var Tree = global.HistoryBlockBuf.LoadValue(typedata, 1);
|
var Tree = global.HistoryBlockBuf.LoadValue(typedata, 1);
|
||||||
if (!Tree) {
|
if (!Tree) {
|
||||||
Tree = new RBTree(CompareItemHash)
|
Tree = new RBTree(global.CompareItemHash)
|
||||||
global.HistoryBlockBuf.SaveValue(typedata, Tree)
|
global.HistoryBlockBuf.SaveValue(typedata, Tree)
|
||||||
}
|
}
|
||||||
return Tree;
|
return Tree;
|
||||||
@@ -1182,8 +1201,8 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
while (root_chain.RootChain) {
|
while (root_chain.RootChain) {
|
||||||
Count++
|
Count++
|
||||||
root_chain = root_chain.RootChain
|
root_chain = root_chain.RootChain
|
||||||
if (Count > MAX_COUNT_CHAIN_LOAD) {
|
if (Count > global.MAX_COUNT_CHAIN_LOAD) {
|
||||||
TO_ERROR_LOG("BLOCK", 10, "Error COUNT GetRootChain")
|
global.TO_ERROR_LOG("BLOCK", 10, "Error COUNT GetRootChain")
|
||||||
global.SERVER.FREE_ALL_MEM_CHAINS()
|
global.SERVER.FREE_ALL_MEM_CHAINS()
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@@ -1200,10 +1219,10 @@ module.exports = class CBlock extends require("./rest-loader.js")
|
|||||||
};
|
};
|
||||||
chain.GetRootChain = GetRootChain.bind(chain)
|
chain.GetRootChain = GetRootChain.bind(chain)
|
||||||
chain.GetFindDB = GetFindDB.bind(chain)
|
chain.GetFindDB = GetFindDB.bind(chain)
|
||||||
chain.AddInfo = AddInfoChain.bind(chain)
|
chain.AddInfo = global.AddInfoChain.bind(chain)
|
||||||
}
|
}
|
||||||
GetMemoryStamp(Str) {
|
GetMemoryStamp(Str) {
|
||||||
return Str + ":##:" + Math.floor(this.CurrentBlockNum / BLOCK_COUNT_IN_MEMORY);
|
return Str + ":##:" + Math.floor(this.CurrentBlockNum / global.BLOCK_COUNT_IN_MEMORY);
|
||||||
}
|
}
|
||||||
GetStrFromHashShort(Hash) {
|
GetStrFromHashShort(Hash) {
|
||||||
var Str = global.GetHexFromArr(Hash);
|
var Str = global.GetHexFromArr(Hash);
|
||||||
@@ -1255,7 +1274,7 @@ global.LoadBlockFromNetwork = function(Params, F) {
|
|||||||
global.SERVER.SendF(Node, {
|
global.SERVER.SendF(Node, {
|
||||||
"Method": "GETBLOCK", "Data": { BlockNum: BlockNum, TreeHash: [] }, "Context": {
|
"Method": "GETBLOCK", "Data": { BlockNum: BlockNum, TreeHash: [] }, "Context": {
|
||||||
F: function(Info) {
|
F: function(Info) {
|
||||||
var Block = global.BufLib.GetObjectFromBuffer(Info.Data, FORMAT_BLOCK_TRANSFER, WRK_BLOCK_TRANSFER);
|
var Block = global.BufLib.GetObjectFromBuffer(Info.Data, global.FORMAT_BLOCK_TRANSFER, global.WRK_BLOCK_TRANSFER);
|
||||||
Info.Data = undefined;
|
Info.Data = undefined;
|
||||||
if (!Block.BlockNum || Block.BlockNum !== Params.BlockNum) {
|
if (!Block.BlockNum || Block.BlockNum !== Params.BlockNum) {
|
||||||
global.ToLog("Error get BlockNum:" + Params.BlockNum + " from " + NodeName(Info.Node), 2);
|
global.ToLog("Error get BlockNum:" + Params.BlockNum + " from " + NodeName(Info.Node), 2);
|
||||||
@@ -1281,4 +1300,4 @@ global.LoadBlockFromNetwork = function(Params, F) {
|
|||||||
F(1);
|
F(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
global.HistoryBlockBuf = new STreeBuffer(HISTORY_BLOCK_COUNT * 1000, CompareItemHashSimple, "string");
|
global.HistoryBlockBuf = new STreeBuffer(global.HISTORY_BLOCK_COUNT * 1000, global.CompareItemHashSimple, "string");
|
||||||
|
|||||||
@@ -9,30 +9,26 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
function Write(e,r,t,n,l)
|
function Write(e, r, t, n?, l?) {
|
||||||
{
|
if (!(e.len >= e.length)) {
|
||||||
if(!(e.len >= e.length))
|
if ("number" == typeof t)
|
||||||
{
|
throw global.ToLogTrace("ERRR StringFormat "), "ERR!!";
|
||||||
if("number" == typeof t)
|
|
||||||
throw ToLogTrace("ERRR StringFormat "), "ERR!!";
|
|
||||||
var a = t;
|
var a = t;
|
||||||
if("buffer" === a.substr(0, 6) && 6 < a.length)
|
if ("buffer" === a.substr(0, 6) && 6 < a.length)
|
||||||
n = parseInt(a.substr(6)), a = "buffer";
|
n = parseInt(a.substr(6)), a = "buffer";
|
||||||
else
|
else
|
||||||
if("arr" === a.substr(0, 3) && 3 < a.length)
|
if ("arr" === a.substr(0, 3) && 3 < a.length)
|
||||||
n = parseInt(a.substr(3)), a = "arr";
|
n = parseInt(a.substr(3)), a = "arr";
|
||||||
else
|
else
|
||||||
if("str" === a.substr(0, 3) && 3 < a.length)
|
if ("str" === a.substr(0, 3) && 3 < a.length) {
|
||||||
{
|
|
||||||
var i = parseInt(a.substr(3));
|
var i = parseInt(a.substr(3));
|
||||||
return r && e.write(r, e.len, i), void (e.len += i);
|
return r && e.write(r, e.len, i), void (e.len += i);
|
||||||
}
|
}
|
||||||
switch(a)
|
switch (a) {
|
||||||
{
|
|
||||||
case "str":
|
case "str":
|
||||||
var f = toUTF8Array(r);
|
var f = global.toUTF8Array(r);
|
||||||
65535 < (i = f.length) && (i = 0), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255, e.len += 2;
|
65535 < (i = f.length) && (i = 0), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255, e.len += 2;
|
||||||
for(var s = 0; s < i; s++)
|
for (var s = 0; s < i; s++)
|
||||||
e[e.len + s] = f[s];
|
e[e.len + s] = f[s];
|
||||||
e.len += i;
|
e.len += i;
|
||||||
break;
|
break;
|
||||||
@@ -58,39 +54,39 @@ function Write(e,r,t,n,l)
|
|||||||
case "addres":
|
case "addres":
|
||||||
case "hash":
|
case "hash":
|
||||||
i = r ? Math.min(32, r.length) : 0;
|
i = r ? Math.min(32, r.length) : 0;
|
||||||
for(s = 0; s < i; s++)
|
for (s = 0; s < i; s++)
|
||||||
e[e.len + s] = r[s];
|
e[e.len + s] = r[s];
|
||||||
e.len += 32;
|
e.len += 32;
|
||||||
break;
|
break;
|
||||||
case "buffer":
|
case "buffer":
|
||||||
i = void 0 === n ? r.length : Math.min(n, r.length);
|
i = void 0 === n ? r.length : Math.min(n, r.length);
|
||||||
for(s = 0; s < i; s++)
|
for (s = 0; s < i; s++)
|
||||||
e[e.len + s] = r[s];
|
e[e.len + s] = r[s];
|
||||||
e.len += n;
|
e.len += n;
|
||||||
break;
|
break;
|
||||||
case "arr":
|
case "arr":
|
||||||
i = r ? Math.min(n, r.length) : 0;
|
i = r ? Math.min(n, r.length) : 0;
|
||||||
for(s = 0; s < i; s++)
|
for (s = 0; s < i; s++)
|
||||||
e[e.len + s] = r[s];
|
e[e.len + s] = r[s];
|
||||||
e.len += n;
|
e.len += n;
|
||||||
break;
|
break;
|
||||||
case "tr":
|
case "tr":
|
||||||
i = r.length;
|
i = r.length;
|
||||||
MAX_TRANSACTION_SIZE > MAX_TRANSACTION_SIZE && (i = MAX_TRANSACTION_SIZE), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255,
|
global.MAX_TRANSACTION_SIZE > global.MAX_TRANSACTION_SIZE && (i = global.MAX_TRANSACTION_SIZE), e[e.len] = 255 & i, e[e.len + 1] = i >>> 8 & 255,
|
||||||
e.len += 2;
|
e.len += 2;
|
||||||
for(s = 0; s < i; s++)
|
for (s = 0; s < i; s++)
|
||||||
e[e.len + s] = r[s];
|
e[e.len + s] = r[s];
|
||||||
e.len += i;
|
e.len += i;
|
||||||
break;
|
break;
|
||||||
case "data":
|
case "data":
|
||||||
i = r.length;
|
i = r.length;
|
||||||
e.writeUInt32LE(i, e.len, 4), e.len += 4;
|
e.writeUInt32LE(i, e.len, 4), e.len += 4;
|
||||||
for(s = 0; s < i; s++)
|
for (s = 0; s < i; s++)
|
||||||
e[e.len + s] = r[s];
|
e[e.len + s] = r[s];
|
||||||
e.len += i;
|
e.len += i;
|
||||||
break;
|
break;
|
||||||
case "hashSTR":
|
case "hashSTR":
|
||||||
var o = GetHexFromAddres(r);
|
var o = global.GetHexFromAddres(r);
|
||||||
e.write(o, e.len, 64), e.len += 64;
|
e.write(o, e.len, 64), e.len += 64;
|
||||||
break;
|
break;
|
||||||
case "uintSTR":
|
case "uintSTR":
|
||||||
@@ -100,33 +96,29 @@ function Write(e,r,t,n,l)
|
|||||||
default:
|
default:
|
||||||
l = l || {};
|
l = l || {};
|
||||||
var d = t.substr(0, 1);
|
var d = t.substr(0, 1);
|
||||||
if("[" === d)
|
if ("[" === d) {
|
||||||
{
|
|
||||||
r && (i = r.length);
|
r && (i = r.length);
|
||||||
var b = GetMiddleString(a);
|
var b = GetMiddleString(a);
|
||||||
Write(e, i, "uint32");
|
Write(e, i, "uint32");
|
||||||
for(s = 0; s < i; s++)
|
for (s = 0; s < i; s++)
|
||||||
Write(e, r[s], b, void 0, l);
|
Write(e, r[s], b, void 0, l);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if("<" === d)
|
if ("<" === d) {
|
||||||
{
|
|
||||||
r && (i = r.length);
|
r && (i = r.length);
|
||||||
b = GetMiddleString(a);
|
b = GetMiddleString(a);
|
||||||
var h = 0, c = e.len;
|
var h = 0, c = e.len;
|
||||||
e.len += 4;
|
e.len += 4;
|
||||||
for(s = 0; s < i; s++)
|
for (s = 0; s < i; s++)
|
||||||
r[s] && (h++, Write(e, s, "uint32"), Write(e, r[s], b, void 0, l));
|
r[s] && (h++ , Write(e, s, "uint32"), Write(e, r[s], b, void 0, l));
|
||||||
e.writeUInt32LE(h, c, 4);
|
e.writeUInt32LE(h, c, 4);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if ("{" !== d)
|
||||||
if("{" !== d)
|
|
||||||
throw "Bad write type params: " + a;
|
throw "Bad write type params: " + a;
|
||||||
var g = l[a];
|
var g = l[a];
|
||||||
g || (g = GetAttributes(GetMiddleString(a)), l[a] = g);
|
g || (g = GetAttributes(GetMiddleString(a)), l[a] = g);
|
||||||
for(s = 0; s < g.length; s++)
|
for (s = 0; s < g.length; s++) {
|
||||||
{
|
|
||||||
var v = g[s];
|
var v = g[s];
|
||||||
Write(e, r[v.Key], v.Value, void 0, l);
|
Write(e, r[v.Key], v.Value, void 0, l);
|
||||||
}
|
}
|
||||||
@@ -135,27 +127,23 @@ function Write(e,r,t,n,l)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function Read(e,r,t,n,l)
|
function Read(e, r, t?, n?, l?) {
|
||||||
{
|
|
||||||
var a;
|
var a;
|
||||||
if("number" == typeof r)
|
if ("number" == typeof r)
|
||||||
throw ToLogTrace("ERR StringFormat"), "ERRR!";
|
throw global.ToLogTrace("ERR StringFormat"), "ERRR!";
|
||||||
var i = r;
|
var i = r;
|
||||||
if("buffer" === i.substr(0, 6))
|
if ("buffer" === i.substr(0, 6))
|
||||||
6 < i.length ? (t = parseInt(i.substr(6)), i = "buffer") : t = 0;
|
6 < i.length ? (t = parseInt(i.substr(6)), i = "buffer") : t = 0;
|
||||||
else
|
else
|
||||||
if("arr" === i.substr(0, 3))
|
if ("arr" === i.substr(0, 3))
|
||||||
3 < i.length ? (t = parseInt(i.substr(3)), i = "arr") : t = 0;
|
3 < i.length ? (t = parseInt(i.substr(3)), i = "arr") : t = 0;
|
||||||
else
|
else
|
||||||
if("str" === i.substr(0, 3))
|
if ("str" === i.substr(0, 3)) {
|
||||||
{
|
if (3 < i.length) {
|
||||||
if(3 < i.length)
|
|
||||||
{
|
|
||||||
var f = parseInt(i.substr(3));
|
var f = parseInt(i.substr(3));
|
||||||
a = e.toString("utf8", e.len, e.len + f), e.len += f;
|
a = e.toString("utf8", e.len, e.len + f), e.len += f;
|
||||||
for(var s = - 1, u = a.length - 1; 0 <= u; u--)
|
for (var s = - 1, u = a.length - 1; 0 <= u; u--)
|
||||||
if(0 !== a.charCodeAt(u))
|
if (0 !== a.charCodeAt(u)) {
|
||||||
{
|
|
||||||
s = u;
|
s = u;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -163,12 +151,11 @@ function Read(e,r,t,n,l)
|
|||||||
}
|
}
|
||||||
t = 0;
|
t = 0;
|
||||||
}
|
}
|
||||||
switch(i)
|
switch (i) {
|
||||||
{
|
|
||||||
case "str":
|
case "str":
|
||||||
f = e.len + 2 <= e.length ? e[e.len] + 256 * e[e.len + 1] : 0, e.len += 2;
|
f = e.len + 2 <= e.length ? e[e.len] + 256 * e[e.len + 1] : 0, e.len += 2;
|
||||||
var o = e.slice(e.len, e.len + f);
|
var o = e.slice(e.len, e.len + f);
|
||||||
a = Utf8ArrayToStr(o), e.len += f;
|
a = global.Utf8ArrayToStr(o), e.len += f;
|
||||||
break;
|
break;
|
||||||
case "byte":
|
case "byte":
|
||||||
a = e.len + 1 <= e.length ? e[e.len] : 0, e.len += 1;
|
a = e.len + 1 <= e.length ? e[e.len] : 0, e.len += 1;
|
||||||
@@ -186,14 +173,14 @@ function Read(e,r,t,n,l)
|
|||||||
a = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0, e.len += 4;
|
a = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0, e.len += 4;
|
||||||
break;
|
break;
|
||||||
case "time":
|
case "time":
|
||||||
if(l)
|
if (l)
|
||||||
throw "Bad read type params: time - DisableTime ON";
|
throw "Bad read type params: time - DisableTime ON";
|
||||||
a = e.len + 6 <= e.length ? e.readUIntLE(e.len, 6) : 0, a = new Date(a), e.len += 6;
|
a = e.len + 6 <= e.length ? e.readUIntLE(e.len, 6) : 0, a = new Date(a), e.len += 6;
|
||||||
break;
|
break;
|
||||||
case "addres":
|
case "addres":
|
||||||
case "hash":
|
case "hash":
|
||||||
a = [];
|
a = [];
|
||||||
for(u = 0; u < 32; u++)
|
for (u = 0; u < 32; u++)
|
||||||
e.len + u <= e.length ? a[u] = e[e.len + u] : a[u] = 0;
|
e.len + u <= e.length ? a[u] = e[e.len + u] : a[u] = 0;
|
||||||
e.len += 32;
|
e.len += 32;
|
||||||
break;
|
break;
|
||||||
@@ -202,8 +189,7 @@ function Read(e,r,t,n,l)
|
|||||||
a = e.len + t <= e.length ? e.slice(e.len, e.len + t) : Buffer.alloc(t), e.len += t;
|
a = e.len + t <= e.length ? e.slice(e.len, e.len + t) : Buffer.alloc(t), e.len += t;
|
||||||
break;
|
break;
|
||||||
case "tr":
|
case "tr":
|
||||||
if(e.len + 1 >= e.length)
|
if (e.len + 1 >= e.length) {
|
||||||
{
|
|
||||||
a = void 0;
|
a = void 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -212,11 +198,11 @@ function Read(e,r,t,n,l)
|
|||||||
break;
|
break;
|
||||||
case "data":
|
case "data":
|
||||||
(f = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0) > e.length - e.len - 4 && (f = 0), e.len += 4, a = e.slice(e.len,
|
(f = e.len + 4 <= e.length ? e.readUInt32LE(e.len, 4) : 0) > e.length - e.len - 4 && (f = 0), e.len += 4, a = e.slice(e.len,
|
||||||
e.len + f), e.len += f;
|
e.len + f), e.len += f;
|
||||||
break;
|
break;
|
||||||
case "hashSTR":
|
case "hashSTR":
|
||||||
var d = e.toString("utf8", e.len, e.len + 64);
|
var d = e.toString("utf8", e.len, e.len + 64);
|
||||||
a = GetAddresFromHex(d), e.len += 64;
|
a = global.GetAddresFromHex(d), e.len += 64;
|
||||||
break;
|
break;
|
||||||
case "uintSTR":
|
case "uintSTR":
|
||||||
d = e.toString("utf8", e.len, e.len + 10);
|
d = e.toString("utf8", e.len, e.len + 10);
|
||||||
@@ -225,24 +211,20 @@ function Read(e,r,t,n,l)
|
|||||||
default:
|
default:
|
||||||
n = n || {};
|
n = n || {};
|
||||||
var b = i.substr(0, 1);
|
var b = i.substr(0, 1);
|
||||||
if("[" === b || "<" === b)
|
if ("[" === b || "<" === b) {
|
||||||
{
|
|
||||||
var h = "<" === b;
|
var h = "<" === b;
|
||||||
a = [];
|
a = [];
|
||||||
var c = GetMiddleString(i);
|
var c = GetMiddleString(i);
|
||||||
for(f = Read(e, "uint32"), u = 0; u < f && e.len <= e.length; u++)
|
for (f = Read(e, "uint32"), u = 0; u < f && e.len <= e.length; u++) {
|
||||||
{
|
|
||||||
h ? a[Read(e, "uint32")] = Read(e, c, void 0, n, l) : a[u] = Read(e, c, void 0, n, l);
|
h ? a[Read(e, "uint32")] = Read(e, c, void 0, n, l) : a[u] = Read(e, c, void 0, n, l);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
if ("{" !== b)
|
||||||
if("{" !== b)
|
|
||||||
throw "Bad read type params: " + i;
|
throw "Bad read type params: " + i;
|
||||||
var g = n[i];
|
var g = n[i];
|
||||||
g || (g = GetAttributes(GetMiddleString(i)), n[i] = g), a = {};
|
g || (g = GetAttributes(GetMiddleString(i)), n[i] = g), a = {};
|
||||||
for(u = 0; u < g.length; u++)
|
for (u = 0; u < g.length; u++) {
|
||||||
{
|
|
||||||
var v = g[u];
|
var v = g[u];
|
||||||
a[v.Key] = Read(e, v.Value, void 0, n, l);
|
a[v.Key] = Read(e, v.Value, void 0, n, l);
|
||||||
}
|
}
|
||||||
@@ -251,58 +233,47 @@ function Read(e,r,t,n,l)
|
|||||||
return a;
|
return a;
|
||||||
};
|
};
|
||||||
|
|
||||||
function BufWriteByte(e)
|
function BufWriteByte(e) {
|
||||||
{
|
|
||||||
this[this.len] = e, this.len += 1;
|
this[this.len] = e, this.len += 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
function BufWrite(e,r,t)
|
function BufWrite(e, r, t) {
|
||||||
{
|
|
||||||
Write(this, e, r, t);
|
Write(this, e, r, t);
|
||||||
};
|
};
|
||||||
|
|
||||||
function BufRead(e,r)
|
function BufRead(e, r) {
|
||||||
{
|
|
||||||
return Read(this, e, r);
|
return Read(this, e, r);
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetNewBuffer(e)
|
function GetNewBuffer(e) {
|
||||||
{
|
|
||||||
var r = Buffer.alloc(e);
|
var r = Buffer.alloc(e);
|
||||||
return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r;
|
return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetReadBuffer(e)
|
function GetReadBuffer(e) {
|
||||||
{
|
|
||||||
var r = Buffer.from(e);
|
var r = Buffer.from(e);
|
||||||
return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r;
|
return r.Read = BufRead.bind(r), r.Write = BufWrite.bind(r), r.len = 0, r;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetObjectFromBuffer(e,r,t,n)
|
function GetObjectFromBuffer(e, r, t, n) {
|
||||||
{
|
|
||||||
var l = Buffer.from(e);
|
var l = Buffer.from(e);
|
||||||
return l.len = 0, Read(l, r, void 0, t, n);
|
return l.len = 0, Read(l, r, void 0, t, n);
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetBufferFromObject(e,r,t,n,l)
|
function GetBufferFromObject(e, r, t?, n?, l?) {
|
||||||
{
|
|
||||||
var a = Buffer.alloc(t);
|
var a = Buffer.alloc(t);
|
||||||
return a.len = 0, Write(a, e, r, void 0, n), l || (a = a.slice(0, a.len)), a;
|
return a.len = 0, Write(a, e, r, void 0, n), l || (a = a.slice(0, a.len)), a;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetMiddleString(e)
|
function GetMiddleString(e) {
|
||||||
{
|
|
||||||
return e.substr(1, e.length - 2);
|
return e.substr(1, e.length - 2);
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetMiddleString2(e,r,t)
|
function GetMiddleString2(e, r, t) {
|
||||||
{
|
for (var n = 0, l = "", a = 0; a < e.length; a++) {
|
||||||
for(var n = 0, l = "", a = 0; a < e.length; a++)
|
|
||||||
{
|
|
||||||
var i = e.substr(a, 1);
|
var i = e.substr(a, 1);
|
||||||
if(" " !== i && "\n" !== i && (i !== r || 1 != ++n))
|
if (" " !== i && "\n" !== i && (i !== r || 1 != ++n)) {
|
||||||
{
|
if (i === t && 0 === --n)
|
||||||
if(i === t && 0 === --n)
|
|
||||||
break;
|
break;
|
||||||
n && (l += i);
|
n && (l += i);
|
||||||
}
|
}
|
||||||
@@ -310,24 +281,20 @@ function GetMiddleString2(e,r,t)
|
|||||||
return l;
|
return l;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetAttributeStrings(e)
|
function GetAttributeStrings(e) {
|
||||||
{
|
for (var r = 0, t = [], n = "", l = 0; l < e.length; l++) {
|
||||||
for(var r = 0, t = [], n = "", l = 0; l < e.length; l++)
|
|
||||||
{
|
|
||||||
var a = e.substr(l, 1);
|
var a = e.substr(l, 1);
|
||||||
if("{" === a)
|
if ("{" === a)
|
||||||
r++;
|
r++;
|
||||||
else
|
else
|
||||||
if("}" === a)
|
if ("}" === a)
|
||||||
r--;
|
r--;
|
||||||
else
|
else {
|
||||||
{
|
if ("," === a && 0 === r) {
|
||||||
if("," === a && 0 === r)
|
|
||||||
{
|
|
||||||
0 < n.length && t.push(n), n = "";
|
0 < n.length && t.push(n), n = "";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(" " === a || "\n" === a)
|
if (" " === a || "\n" === a)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
n += a;
|
n += a;
|
||||||
@@ -335,30 +302,25 @@ function GetAttributeStrings(e)
|
|||||||
return 0 < n.length && t.push(n), t;
|
return 0 < n.length && t.push(n), t;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetKeyValueStrings(e)
|
function GetKeyValueStrings(e) {
|
||||||
{
|
for (var r = "", t = 0; t < e.length; t++) {
|
||||||
for(var r = "", t = 0; t < e.length; t++)
|
|
||||||
{
|
|
||||||
var n = e.substr(t, 1);
|
var n = e.substr(t, 1);
|
||||||
if(" " !== n && "\n" !== n)
|
if (" " !== n && "\n" !== n) {
|
||||||
{
|
if (":" === n)
|
||||||
if(":" === n)
|
return { Key: r, Value: e.substr(t + 1) };
|
||||||
return {Key:r, Value:e.substr(t + 1)};
|
|
||||||
r += n;
|
r += n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw "Error format Key:Value = " + e;
|
throw "Error format Key:Value = " + e;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetAttributes(e)
|
function GetAttributes(e) {
|
||||||
{
|
for (var r = [], t = GetAttributeStrings(e), n = 0; n < t.length; n++) {
|
||||||
for(var r = [], t = GetAttributeStrings(e), n = 0; n < t.length; n++)
|
|
||||||
{
|
|
||||||
var l = GetKeyValueStrings(t[n]);
|
var l = GetKeyValueStrings(t[n]);
|
||||||
r.push(l);
|
r.push(l);
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
};
|
};
|
||||||
module.exports.GetNewBuffer = GetNewBuffer, module.exports.GetReadBuffer = GetReadBuffer, module.exports.alloc = GetNewBuffer,
|
module.exports.GetNewBuffer = GetNewBuffer, module.exports.GetReadBuffer = GetReadBuffer, module.exports.alloc = GetNewBuffer,
|
||||||
module.exports.from = GetReadBuffer, module.exports.Write = Write, module.exports.Read = Read, module.exports.GetObjectFromBuffer = GetObjectFromBuffer,
|
module.exports.from = GetReadBuffer, module.exports.Write = Write, module.exports.Read = Read, module.exports.GetObjectFromBuffer = GetObjectFromBuffer,
|
||||||
module.exports.GetBufferFromObject = GetBufferFromObject;
|
module.exports.GetBufferFromObject = GetBufferFromObject;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ module.exports = class CCode extends require("./base")
|
|||||||
if (bUpdate) {
|
if (bUpdate) {
|
||||||
UpdateCodeFiles(VersionNum)
|
UpdateCodeFiles(VersionNum)
|
||||||
}
|
}
|
||||||
if (global.global.START_LOAD_CODE.StartLoad) {
|
if (global.START_LOAD_CODE.StartLoad) {
|
||||||
global.CODE_VERSION = global.START_LOAD_CODE.StartLoad
|
global.CODE_VERSION = global.START_LOAD_CODE.StartLoad
|
||||||
this.ClearLoadCode()
|
this.ClearLoadCode()
|
||||||
}
|
}
|
||||||
@@ -95,8 +95,8 @@ module.exports = class CCode extends require("./base")
|
|||||||
var file_handle = fs.openSync(fname2, "w");
|
var file_handle = fs.openSync(fname2, "w");
|
||||||
fs.writeSync(file_handle, data, 0, data.length)
|
fs.writeSync(file_handle, data, 0, data.length)
|
||||||
fs.closeSync(file_handle)
|
fs.closeSync(file_handle)
|
||||||
var SignArr = arr2(Hash, GetArrFromValue(Data.VersionNum));
|
var SignArr = global.arr2(Hash, global.GetArrFromValue(Data.VersionNum));
|
||||||
var Sign = secp256k1.sign(SHA3BUF(SignArr), PrivateKey).signature;
|
var Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), PrivateKey).signature;
|
||||||
global.CODE_VERSION = Data
|
global.CODE_VERSION = Data
|
||||||
global.CODE_VERSION.Hash = Hash
|
global.CODE_VERSION.Hash = Hash
|
||||||
global.CODE_VERSION.Sign = Sign
|
global.CODE_VERSION.Sign = Sign
|
||||||
@@ -150,10 +150,10 @@ global.UnpackCodeFile = UnpackCodeFile;
|
|||||||
|
|
||||||
function UnpackCodeFile(fname) {
|
function UnpackCodeFile(fname) {
|
||||||
var data = fs.readFileSync(fname);
|
var data = fs.readFileSync(fname);
|
||||||
var reader = ZIP.Reader(data);
|
var reader = global.ZIP.Reader(data);
|
||||||
reader.forEach(function(entry) {
|
reader.forEach(function(entry) {
|
||||||
var Name = entry.getName();
|
var Name = entry.getName();
|
||||||
var Path = GetCodePath(Name);
|
var Path = global.GetCodePath(Name);
|
||||||
if (entry.isFile()) {
|
if (entry.isFile()) {
|
||||||
var buf = entry.getData();
|
var buf = entry.getData();
|
||||||
global.CheckCreateDir(Path, true, true);
|
global.CheckCreateDir(Path, true, true);
|
||||||
@@ -171,7 +171,7 @@ global.RestartNode = function RestartNode(bForce) {
|
|||||||
setTimeout(DoExit, 5000);
|
setTimeout(DoExit, 5000);
|
||||||
if (global.nw || global.NWMODE) {
|
if (global.nw || global.NWMODE) {
|
||||||
} else {
|
} else {
|
||||||
StopChildProcess();
|
global.StopChildProcess();
|
||||||
global.ToLog("********************************** FORCE RESTART!!!");
|
global.ToLog("********************************** FORCE RESTART!!!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -179,12 +179,12 @@ global.RestartNode = function RestartNode(bForce) {
|
|||||||
var it = this.ActualNodes.iterator(), Node;
|
var it = this.ActualNodes.iterator(), Node;
|
||||||
while ((Node = it.next()) !== null) {
|
while ((Node = it.next()) !== null) {
|
||||||
if (Node.Socket)
|
if (Node.Socket)
|
||||||
CloseSocket(Node.Socket, "Restart");
|
global.CloseSocket(Node.Socket, "Restart");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.StopServer();
|
this.StopServer();
|
||||||
this.StopNode();
|
this.StopNode();
|
||||||
StopChildProcess();
|
global.StopChildProcess();
|
||||||
global.ToLog("****************************************** RESTART!!!");
|
global.ToLog("****************************************** RESTART!!!");
|
||||||
global.ToLog("EXIT 1");
|
global.ToLog("EXIT 1");
|
||||||
};
|
};
|
||||||
@@ -195,7 +195,7 @@ function DoExit() {
|
|||||||
global.ToLog("RESTART NW");
|
global.ToLog("RESTART NW");
|
||||||
var StrRun = '"' + process.argv[0] + '" .\n';
|
var StrRun = '"' + process.argv[0] + '" .\n';
|
||||||
StrRun += '"' + process.argv[0] + '" .\n';
|
StrRun += '"' + process.argv[0] + '" .\n';
|
||||||
SaveToFile("run-next.bat", StrRun);
|
global.SaveToFile("run-next.bat", StrRun);
|
||||||
const child_process = require('child_process');
|
const child_process = require('child_process');
|
||||||
child_process.exec("run-next.bat", { shell: true });
|
child_process.exec("run-next.bat", { shell: true });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ global.PERIOD_FOR_RECONNECT = 3600 * 1000;
|
|||||||
global.CHECK_DELTA_TIME = { Num: 0, bUse: 0, StartBlockNum: 0, EndBlockNum: 0, bAddTime: 0, DeltaTime: 0, Sign: [] };
|
global.CHECK_DELTA_TIME = { Num: 0, bUse: 0, StartBlockNum: 0, EndBlockNum: 0, bAddTime: 0, DeltaTime: 0, Sign: [] };
|
||||||
global.CHECK_POINT = { BlockNum: 0, Hash: [], Sign: [] };
|
global.CHECK_POINT = { BlockNum: 0, Hash: [], Sign: [] };
|
||||||
global.CODE_VERSION = {
|
global.CODE_VERSION = {
|
||||||
BlockNum: 0, addrArr: [], LevelUpdate: 0, BlockPeriod: 0, VersionNum: UPDATE_CODE_VERSION_NUM, Hash: [], Sign: [],
|
BlockNum: 0, addrArr: [], LevelUpdate: 0, BlockPeriod: 0, VersionNum: global.UPDATE_CODE_VERSION_NUM, Hash: [], Sign: [],
|
||||||
StartLoadVersionNum: 0
|
StartLoadVersionNum: 0
|
||||||
};
|
};
|
||||||
global.NET_CONSTANT = {
|
global.NET_CONSTANT = {
|
||||||
Num: 0, BlockNum: 0, MaxTrasactionLimit: MAX_TRANSACTION_LIMIT, Reserv1: 0, Reserv2: 0, Reserv3: 0, Reserv4: 0,
|
Num: 0, BlockNum: 0, MaxTrasactionLimit: global.MAX_TRANSACTION_LIMIT, Reserv1: 0, Reserv2: 0, Reserv3: 0, Reserv4: 0,
|
||||||
Reserv5: 0, Hash: [], Sign: []
|
Reserv5: 0, Hash: [], Sign: []
|
||||||
};
|
};
|
||||||
global.START_LOAD_CODE = {};
|
global.START_LOAD_CODE = {};
|
||||||
@@ -28,7 +28,7 @@ global.MIN_PERIOD_PING = 4 * 1000;
|
|||||||
const MAX_PERIOD_PING = 120 * 1000;
|
const MAX_PERIOD_PING = 120 * 1000;
|
||||||
global.MAX_PING_FOR_CONNECT = 400;
|
global.MAX_PING_FOR_CONNECT = 400;
|
||||||
var MAX_TIME_CORRECT = 3 * 3600 * 1000;
|
var MAX_TIME_CORRECT = 3 * 3600 * 1000;
|
||||||
global.MAX_WAIT_PERIOD_FOR_HOT = 4 * CONSENSUS_PERIOD_TIME;
|
global.MAX_WAIT_PERIOD_FOR_HOT = 4 * global.CONSENSUS_PERIOD_TIME;
|
||||||
const PERIOD_FOR_START_CHECK_TIME = 300;
|
const PERIOD_FOR_START_CHECK_TIME = 300;
|
||||||
module.exports = class CConnect extends require("./transfer-msg")
|
module.exports = class CConnect extends require("./transfer-msg")
|
||||||
{
|
{
|
||||||
@@ -41,6 +41,15 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
NodesIPMap
|
NodesIPMap
|
||||||
PerioadAfterCanStart
|
PerioadAfterCanStart
|
||||||
КодДляРазработчикаХекс
|
КодДляРазработчикаХекс
|
||||||
|
CommonKey
|
||||||
|
KeyToNode
|
||||||
|
NameToNode
|
||||||
|
BlockNumDB
|
||||||
|
idTimerSetConst
|
||||||
|
SignCurrentTimeDev
|
||||||
|
StopDetectGrayMode
|
||||||
|
LastNotZeroNodesTime
|
||||||
|
TransferTree
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
this.StartTime = Date.now()
|
this.StartTime = Date.now()
|
||||||
@@ -69,21 +78,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
СтатДанныеОтладкиИзБлока() {
|
СтатДанныеОтладкиИзБлока() {
|
||||||
var Массив = [];
|
var Массив = [];
|
||||||
if (this.СтатБлок && this.СтатБлок.SeqHash) {
|
if (this.СтатБлок && this.СтатБлок.SeqHash) {
|
||||||
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:BlockNum", this.СтатБлок.BlockNum, "uint"), 6)
|
global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:BlockNum", this.СтатБлок.BlockNum, "uint"), 6)
|
||||||
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:SeqHash", this.СтатБлок.SeqHash, "hash"), 32)
|
global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:SeqHash", this.СтатБлок.SeqHash, "hash"), 32)
|
||||||
WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:AddrHash", this.СтатБлок.AddrHash, "hash"), 32)
|
global.WriteArrToArr(Массив, this.ValueToXORDevelop("Stat:AddrHash", this.СтатБлок.AddrHash, "hash"), 32)
|
||||||
}
|
}
|
||||||
return Массив;
|
return Массив;
|
||||||
}
|
}
|
||||||
ДоступенКлючРазработчика(Node) {
|
ДоступенКлючРазработчика(Node) {
|
||||||
if (Node.PubKey && global.WALLET.WalletOpen !== false && IsDeveloperAccount(WALLET.PubKeyArr)) {
|
if (Node.PubKey && global.WALLET.WalletOpen !== false && global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
БлокИзДанных(Node, Arr) {
|
БлокИзДанных(Node, Arr) {
|
||||||
var Block = {};
|
var Block: any = {};
|
||||||
if (this.ДоступенКлючРазработчика(Node) && !IsZeroArr(Arr)) {
|
if (this.ДоступенКлючРазработчика(Node) && !global.IsZeroArr(Arr)) {
|
||||||
var Data = global.BufLib.GetObjectFromBuffer(Arr, "{BlockNum:arr6,SeqHash:arr32,AddrHash:arr32}", {});
|
var Data = global.BufLib.GetObjectFromBuffer(Arr, "{BlockNum:arr6,SeqHash:arr32,AddrHash:arr32}", {});
|
||||||
Block.BlockNum = this.ValueFromXORDevelop(Node, "Stat:BlockNum", Data.BlockNum, "uint")
|
Block.BlockNum = this.ValueFromXORDevelop(Node, "Stat:BlockNum", Data.BlockNum, "uint")
|
||||||
Block.SeqHash = this.ValueFromXORDevelop(Node, "Stat:SeqHash", Data.SeqHash, "hash")
|
Block.SeqHash = this.ValueFromXORDevelop(Node, "Stat:SeqHash", Data.SeqHash, "hash")
|
||||||
@@ -106,7 +115,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
FindRunNodeContext(addrArr, ip, port, bUpdate) {
|
FindRunNodeContext(addrArr, ip, port, bUpdate) {
|
||||||
var Node, addrStr;
|
var Node, addrStr;
|
||||||
addrStr = GetHexFromAddres(addrArr)
|
addrStr = global.GetHexFromAddres(addrArr)
|
||||||
Node = this.NodesMap[addrStr]
|
Node = this.NodesMap[addrStr]
|
||||||
if (!Node) {
|
if (!Node) {
|
||||||
var key = "" + ip + ":" + port;
|
var key = "" + ip + ":" + port;
|
||||||
@@ -132,7 +141,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var Node2 = this.NodesMap[Node.addrStr];
|
var Node2 = this.NodesMap[Node.addrStr];
|
||||||
if (Node2 && Node2 !== Node) {
|
if (Node2 && Node2 !== Node) {
|
||||||
Node2.Delete = 1
|
Node2.Delete = 1
|
||||||
AddNodeInfo(Node2, "FIND DOUBLE!!")
|
global.AddNodeInfo(Node2, "FIND DOUBLE!!")
|
||||||
delete this.NodesMap[Node.addrStr]
|
delete this.NodesMap[Node.addrStr]
|
||||||
}
|
}
|
||||||
this.NodesMap[Node.addrStr] = Node
|
this.NodesMap[Node.addrStr] = Node
|
||||||
@@ -143,7 +152,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
return this.StartConnectTry(Node);
|
return this.StartConnectTry(Node);
|
||||||
}
|
}
|
||||||
StartPingPong() {
|
StartPingPong() {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
if (global.CAN_START)
|
if (global.CAN_START)
|
||||||
this.PerioadAfterCanStart++
|
this.PerioadAfterCanStart++
|
||||||
@@ -153,9 +162,9 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var Node = arr[i];
|
var Node = arr[i];
|
||||||
if (this.IsCanConnect(Node) && !Node.IsAddrList) {
|
if (this.IsCanConnect(Node) && !Node.IsAddrList) {
|
||||||
if (Node.Hot)
|
if (Node.Hot)
|
||||||
Node.NextPing = MIN_PERIOD_PING
|
Node.NextPing = global.MIN_PERIOD_PING
|
||||||
if (Node.NextPing < MIN_PERIOD_PING)
|
if (Node.NextPing < global.MIN_PERIOD_PING)
|
||||||
Node.NextPing = MIN_PERIOD_PING
|
Node.NextPing = global.MIN_PERIOD_PING
|
||||||
var Delta = Date.now() - Node.PingStart;
|
var Delta = Date.now() - Node.PingStart;
|
||||||
if (Delta >= Node.NextPing) {
|
if (Delta >= Node.NextPing) {
|
||||||
Node.PingStart = Date.now()
|
Node.PingStart = Date.now()
|
||||||
@@ -165,7 +174,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
if (!Node.PingNumber)
|
if (!Node.PingNumber)
|
||||||
Node.PingNumber = 0
|
Node.PingNumber = 0
|
||||||
Node.PingNumber++
|
Node.PingNumber++
|
||||||
var Context = { "StartTime": GetCurrentTime(0), PingNumber: Node.PingNumber };
|
var Context = { "StartTime": global.GetCurrentTime(0), PingNumber: Node.PingNumber };
|
||||||
this.SendF(Node, { "Method": "PING", "Context": Context, "Data": this.GetPingData(Node) })
|
this.SendF(Node, { "Method": "PING", "Context": Context, "Data": this.GetPingData(Node) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,13 +182,13 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
GetPingData(Node) {
|
GetPingData(Node) {
|
||||||
var GrayAddres = 0;
|
var GrayAddres = 0;
|
||||||
if (GrayConnect())
|
if (global.GrayConnect())
|
||||||
GrayAddres = 1
|
GrayAddres = 1
|
||||||
var BlockNumHash = Math.trunc((GetCurrentBlockNumByTime() - global.BLOCK_PROCESSING_LENGTH2) / PERIOD_ACCOUNT_HASH) * PERIOD_ACCOUNT_HASH;
|
var BlockNumHash = Math.trunc((global.GetCurrentBlockNumByTime() - global.BLOCK_PROCESSING_LENGTH2) / global.PERIOD_ACCOUNT_HASH) * global.PERIOD_ACCOUNT_HASH;
|
||||||
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(BlockNumHash);
|
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(BlockNumHash);
|
||||||
var CheckPointHashDB = [];
|
var CheckPointHashDB = [];
|
||||||
if (CHECK_POINT.BlockNum && CHECK_POINT.BlockNum <= this.BlockNumDB) {
|
if (global.CHECK_POINT.BlockNum && global.CHECK_POINT.BlockNum <= this.BlockNumDB) {
|
||||||
var Block = this.ReadBlockHeaderFromMapDB(CHECK_POINT.BlockNum);
|
var Block = this.ReadBlockHeaderFromMapDB(global.CHECK_POINT.BlockNum);
|
||||||
if (Block) {
|
if (Block) {
|
||||||
CheckPointHashDB = Block.Hash
|
CheckPointHashDB = Block.Hash
|
||||||
}
|
}
|
||||||
@@ -199,15 +208,15 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var СтатДанные = [];
|
var СтатДанные = [];
|
||||||
var DirectMAccount = 0;
|
var DirectMAccount = 0;
|
||||||
var Ret = {
|
var Ret = {
|
||||||
VERSIONMAX: DEF_VERSION,
|
VERSIONMAX: global.DEF_VERSION,
|
||||||
FIRST_TIME_BLOCK: 0,
|
FIRST_TIME_BLOCK: 0,
|
||||||
PingVersion: 3,
|
PingVersion: 3,
|
||||||
GrayConnect: GrayAddres, Reserve2: 0, AutoCorrectTime: AUTO_CORRECT_TIME,
|
GrayConnect: GrayAddres, Reserve2: 0, AutoCorrectTime: global.AUTO_CORRECT_TIME,
|
||||||
LevelCount: LevelCount, Time: (GetCurrentTime() - 0), BlockNumDB: this.BlockNumDB, LoadHistoryMode: this.LoadHistoryMode, CanStart: global.CAN_START,
|
LevelCount: LevelCount, Time: (global.GetCurrentTime() - 0), BlockNumDB: this.BlockNumDB, LoadHistoryMode: this.LoadHistoryMode, CanStart: global.CAN_START,
|
||||||
CheckPoint: CHECK_POINT, Reserv3: [], Key: this.KeyToNode, Name: this.NameToNode, TrafficFree: this.SendTrafficFree, AccountBlockNum: BlockNumHash,
|
CheckPoint: global.CHECK_POINT, Reserv3: [], Key: this.KeyToNode, Name: this.NameToNode, TrafficFree: this.SendTrafficFree, AccountBlockNum: BlockNumHash,
|
||||||
AccountsHash: AccountsHash, MemoryUsage: Math.trunc(process.memoryUsage().heapTotal / 1024 / 1024), CheckDeltaTime: CHECK_DELTA_TIME,
|
AccountsHash: AccountsHash, MemoryUsage: Math.trunc(process.memoryUsage().heapTotal / 1024 / 1024), CheckDeltaTime: global.CHECK_DELTA_TIME,
|
||||||
CodeVersion: CODE_VERSION, IsAddrList: global.ADDRLIST_MODE, CheckPointHashDB: CheckPointHashDB, PortWeb: HTTP_HOSTING_PORT, HashDB: HashDB,
|
CodeVersion: global.CODE_VERSION, IsAddrList: global.ADDRLIST_MODE, CheckPointHashDB: CheckPointHashDB, PortWeb: global.HTTP_HOSTING_PORT, HashDB: HashDB,
|
||||||
StopGetBlock: StopGetBlock, NetConstant: NET_CONSTANT,
|
StopGetBlock: StopGetBlock, NetConstant: global.NET_CONSTANT,
|
||||||
};
|
};
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
@@ -286,7 +295,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
if (Info.Context.PingNumber !== Node.PingNumber)
|
if (Info.Context.PingNumber !== Node.PingNumber)
|
||||||
return;
|
return;
|
||||||
this.DoPingData(Info, 0)
|
this.DoPingData(Info, 0)
|
||||||
var DeltaTime = GetCurrentTime(0) - Info.Context.StartTime;
|
var DeltaTime = global.GetCurrentTime(0) - Info.Context.StartTime;
|
||||||
Node.DeltaTimeM = DeltaTime
|
Node.DeltaTimeM = DeltaTime
|
||||||
Node.SumDeltaTime += DeltaTime
|
Node.SumDeltaTime += DeltaTime
|
||||||
Node.CountDeltaTime++
|
Node.CountDeltaTime++
|
||||||
@@ -302,11 +311,11 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
this.CheckNetConstant(Data, Info.Node)
|
this.CheckNetConstant(Data, Info.Node)
|
||||||
this.CheckCodeVersion(Data, Info.Node)
|
this.CheckCodeVersion(Data, Info.Node)
|
||||||
if (!global.CAN_START) {
|
if (!global.CAN_START) {
|
||||||
if (DeltaTime > MAX_PING_FOR_CONNECT)
|
if (DeltaTime > global.MAX_PING_FOR_CONNECT)
|
||||||
global.ToLog("DeltaTime=" + DeltaTime + ">" + MAX_PING_FOR_CONNECT + " ms - " + NodeInfo(Node), 2)
|
global.ToLog("DeltaTime=" + DeltaTime + ">" + global.MAX_PING_FOR_CONNECT + " ms - " + NodeInfo(Node), 2)
|
||||||
}
|
}
|
||||||
var Times;
|
var Times;
|
||||||
if (DeltaTime <= MAX_PING_FOR_CONNECT) {
|
if (DeltaTime <= global.MAX_PING_FOR_CONNECT) {
|
||||||
Times = Node.Times
|
Times = Node.Times
|
||||||
if (!Times || Times.Count >= 10) {
|
if (!Times || Times.Count >= 10) {
|
||||||
Times = { SumDelta: 0, Count: 0, AvgDelta: 0, Arr: [] }
|
Times = { SumDelta: 0, Count: 0, AvgDelta: 0, Arr: [] }
|
||||||
@@ -340,18 +349,18 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
this.CheckDeltaTime(Data, Info.Node)
|
this.CheckDeltaTime(Data, Info.Node)
|
||||||
}
|
}
|
||||||
CheckCheckPoint(Data, Node) {
|
CheckCheckPoint(Data, Node) {
|
||||||
if (CREATE_ON_START)
|
if (global.CREATE_ON_START)
|
||||||
return;
|
return;
|
||||||
if (Data.CheckPoint.BlockNum && Data.CheckPoint.BlockNum > CHECK_POINT.BlockNum) {
|
if (Data.CheckPoint.BlockNum && Data.CheckPoint.BlockNum > global.CHECK_POINT.BlockNum) {
|
||||||
var SignArr = arr2(Data.CheckPoint.Hash, GetArrFromValue(Data.CheckPoint.BlockNum));
|
var SignArr = global.arr2(Data.CheckPoint.Hash, global.SaveToFile(Data.CheckPoint.BlockNum));
|
||||||
if (CheckDevelopSign(SignArr, Data.CheckPoint.Sign)) {
|
if (global.CheckDevelopSign(SignArr, Data.CheckPoint.Sign)) {
|
||||||
global.CHECK_POINT = Data.CheckPoint
|
global.CHECK_POINT = Data.CheckPoint
|
||||||
this.ResetNextPingAllNode()
|
this.ResetNextPingAllNode()
|
||||||
if (Data.CheckPoint.BlockNum < this.BlockNumDBMin)
|
if (Data.CheckPoint.BlockNum < this.BlockNumDBMin)
|
||||||
return;
|
return;
|
||||||
var Block = this.ReadBlockHeaderDB(CHECK_POINT.BlockNum);
|
var Block = this.ReadBlockHeaderDB(global.CHECK_POINT.BlockNum);
|
||||||
if (Block && global.CompareArr(Block.Hash, CHECK_POINT.Hash) !== 0) {
|
if (Block && global.CompareArr(Block.Hash, global.CHECK_POINT.Hash) !== 0) {
|
||||||
this.BlockNumDB = CHECK_POINT.BlockNum - 1
|
this.BlockNumDB = global.CHECK_POINT.BlockNum - 1
|
||||||
this.TruncateBlockDB(this.BlockNumDB)
|
this.TruncateBlockDB(this.BlockNumDB)
|
||||||
this.StartSyncBlockchain(Node, 0, 1)
|
this.StartSyncBlockchain(Node, 0, 1)
|
||||||
}
|
}
|
||||||
@@ -365,10 +374,10 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
CheckDeltaTime(Data, Node) {
|
CheckDeltaTime(Data, Node) {
|
||||||
if (global.AUTO_CORRECT_TIME)
|
if (global.AUTO_CORRECT_TIME)
|
||||||
if (global.CAN_START && !CREATE_ON_START) {
|
if (global.CAN_START && !global.CREATE_ON_START) {
|
||||||
if (Data.CheckDeltaTime.Num > CHECK_DELTA_TIME.Num) {
|
if (Data.CheckDeltaTime.Num > global.CHECK_DELTA_TIME.Num) {
|
||||||
var SignArr = this.GetSignCheckDeltaTime(Data.CheckDeltaTime);
|
var SignArr = this.GetSignCheckDeltaTime(Data.CheckDeltaTime);
|
||||||
if (CheckDevelopSign(SignArr, Data.CheckDeltaTime.Sign)) {
|
if (global.CheckDevelopSign(SignArr, Data.CheckDeltaTime.Sign)) {
|
||||||
global.CHECK_DELTA_TIME = Data.CheckDeltaTime
|
global.CHECK_DELTA_TIME = Data.CheckDeltaTime
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -380,11 +389,11 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
CheckNetConstant(Data, Node) {
|
CheckNetConstant(Data, Node) {
|
||||||
if (Data.NetConstant.Num > NET_CONSTANT.Num) {
|
if (Data.NetConstant.Num > global.NET_CONSTANT.Num) {
|
||||||
var SignArr = this.GetSignCheckNetConstant(Data.NetConstant);
|
var SignArr = this.GetSignCheckNetConstant(Data.NetConstant);
|
||||||
if (CheckDevelopSign(SignArr, Data.NetConstant.Sign)) {
|
if (global.CheckDevelopSign(SignArr, Data.NetConstant.Sign)) {
|
||||||
global.NET_CONSTANT = Data.NetConstant
|
global.NET_CONSTANT = Data.NetConstant
|
||||||
var CurBlockNum = GetCurrentBlockNumByTime();
|
var CurBlockNum = global.GetCurrentBlockNumByTime();
|
||||||
var Delta = Data.NetConstant.BlockNum - CurBlockNum;
|
var Delta = Data.NetConstant.BlockNum - CurBlockNum;
|
||||||
if (Delta < 1)
|
if (Delta < 1)
|
||||||
Delta = 1
|
Delta = 1
|
||||||
@@ -406,12 +415,12 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DoNetConst() {
|
DoNetConst() {
|
||||||
global.MAX_TRANSACTION_LIMIT = NET_CONSTANT.MaxTrasactionLimit
|
global.MAX_TRANSACTION_LIMIT = global.NET_CONSTANT.MaxTrasactionLimit
|
||||||
}
|
}
|
||||||
CheckCodeVersion(Data, Node) {
|
CheckCodeVersion(Data, Node) {
|
||||||
var CodeVersion = Data.CodeVersion;
|
var CodeVersion = Data.CodeVersion;
|
||||||
Node.VersionNum = CodeVersion.VersionNum
|
Node.VersionNum = CodeVersion.VersionNum
|
||||||
if (CodeVersion.VersionNum >= MIN_CODE_VERSION_NUM) {
|
if (CodeVersion.VersionNum >= global.MIN_CODE_VERSION_NUM) {
|
||||||
Node.VersionOK = true
|
Node.VersionOK = true
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -419,8 +428,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
if (Node.VersionOK) {
|
if (Node.VersionOK) {
|
||||||
Node.CanHot = true
|
Node.CanHot = true
|
||||||
if (CHECK_POINT.BlockNum && Data.CheckPoint.BlockNum)
|
if (global.CHECK_POINT.BlockNum && Data.CheckPoint.BlockNum)
|
||||||
if (CHECK_POINT.BlockNum !== Data.CheckPoint.BlockNum || global.CompareArr(CHECK_POINT.Hash, Data.CheckPoint.Hash) !== 0) {
|
if (global.CHECK_POINT.BlockNum !== Data.CheckPoint.BlockNum || global.CompareArr(global.CHECK_POINT.Hash, Data.CheckPoint.Hash) !== 0) {
|
||||||
Node.CanHot = false
|
Node.CanHot = false
|
||||||
Node.NextConnectDelta = 60 * 1000
|
Node.NextConnectDelta = 60 * 1000
|
||||||
}
|
}
|
||||||
@@ -432,24 +441,24 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
var bLoadVer = 0;
|
var bLoadVer = 0;
|
||||||
if (CodeVersion.BlockNum && (CodeVersion.BlockNum <= GetCurrentBlockNumByTime() || CodeVersion.BlockPeriod === 0) && CodeVersion.BlockNum > CODE_VERSION.BlockNum && !IsZeroArr(CodeVersion.Hash) && (CodeVersion.VersionNum > CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum || CodeVersion.VersionNum === CODE_VERSION.VersionNum && IsZeroArr(CODE_VERSION.Hash))) {
|
if (CodeVersion.BlockNum && (CodeVersion.BlockNum <= global.GetCurrentBlockNumByTime() || CodeVersion.BlockPeriod === 0) && CodeVersion.BlockNum > global.CODE_VERSION.BlockNum && !global.IsZeroArr(CodeVersion.Hash) && (CodeVersion.VersionNum > global.CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum || CodeVersion.VersionNum === global.CODE_VERSION.VersionNum && global.IsZeroArr(global.CODE_VERSION.Hash))) {
|
||||||
bLoadVer = 1
|
bLoadVer = 1
|
||||||
}
|
}
|
||||||
if (bLoadVer) {
|
if (bLoadVer) {
|
||||||
var Level = AddrLevelArrFromBegin(this.addrArr, CodeVersion.addrArr);
|
var Level = global.AddrLevelArrFromBegin(this.addrArr, CodeVersion.addrArr);
|
||||||
if (CodeVersion.BlockPeriod) {
|
if (CodeVersion.BlockPeriod) {
|
||||||
var Delta = GetCurrentBlockNumByTime() - CodeVersion.BlockNum;
|
var Delta = global.GetCurrentBlockNumByTime() - CodeVersion.BlockNum;
|
||||||
Level += Delta / CodeVersion.BlockPeriod
|
Level += Delta / CodeVersion.BlockPeriod
|
||||||
}
|
}
|
||||||
if (Level >= CodeVersion.LevelUpdate) {
|
if (Level >= CodeVersion.LevelUpdate) {
|
||||||
var SignArr = arr2(CodeVersion.Hash, GetArrFromValue(CodeVersion.VersionNum));
|
var SignArr = global.arr2(CodeVersion.Hash, global.SaveToFile(CodeVersion.VersionNum));
|
||||||
if (CheckDevelopSign(SignArr, CodeVersion.Sign)) {
|
if (global.CheckDevelopSign(SignArr, CodeVersion.Sign)) {
|
||||||
global.ToLog("Get new CodeVersion = " + CodeVersion.VersionNum + " HASH:" + global.GetHexFromArr(CodeVersion.Hash).substr(0, 20))
|
global.ToLog("Get new CodeVersion = " + CodeVersion.VersionNum + " HASH:" + global.GetHexFromArr(CodeVersion.Hash).substr(0, 20))
|
||||||
if (CodeVersion.VersionNum > CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum) {
|
if (CodeVersion.VersionNum > global.CODE_VERSION.VersionNum && CodeVersion.VersionNum > global.START_LOAD_CODE.StartLoadVersionNum) {
|
||||||
this.StartLoadCode(Node, CodeVersion)
|
this.StartLoadCode(Node, CodeVersion)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
CODE_VERSION = CodeVersion
|
global.CODE_VERSION = CodeVersion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -480,21 +489,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
Node2.NextPing = 5 * 1000
|
Node2.NextPing = 5 * 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StartDisconnectHot(Node, StrError, bDeleteHot) {
|
StartDisconnectHot(Node, StrError, bDeleteHot?) {
|
||||||
AddNodeInfo(Node, "DisconnectHot:" + StrError)
|
global.AddNodeInfo(Node, "DisconnectHot:" + StrError)
|
||||||
if (Node.Active && Node.Hot) {
|
if (Node.Active && Node.Hot) {
|
||||||
AddNodeInfo(Node, "SEND DISCONNECTHOT")
|
global.AddNodeInfo(Node, "SEND DISCONNECTHOT")
|
||||||
this.Send(Node, { "Method": "DISCONNECTHOT", "Context": {}, "Data": StrError }, STR_TYPE)
|
this.Send(Node, { "Method": "DISCONNECTHOT", "Context": {}, "Data": StrError }, global.STR_TYPE)
|
||||||
}
|
}
|
||||||
this.DeleteNodeFromHot(Node)
|
this.DeleteNodeFromHot(Node)
|
||||||
}
|
}
|
||||||
DISCONNECTHOT(Info, CurTime) {
|
DISCONNECTHOT(Info, CurTime) {
|
||||||
this.DeleteNodeFromHot(Info.Node)
|
this.DeleteNodeFromHot(Info.Node)
|
||||||
global.ADD_TO_STAT("DISCONNECTHOT")
|
global.ADD_TO_STAT("DISCONNECTHOT")
|
||||||
AddNodeInfo(Info.Node, "GET DISCONNECTHOT:" + Info.Data)
|
global.AddNodeInfo(Info.Node, "GET DISCONNECTHOT:" + Info.Data)
|
||||||
}
|
}
|
||||||
StartGetNodes(Node) {
|
StartGetNodes(Node) {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
var Delta = Date.now() - Node.StartTimeGetNodes;
|
var Delta = Date.now() - Node.StartTimeGetNodes;
|
||||||
if (Delta >= Node.NextGetNodesDelta) {
|
if (Delta >= Node.NextGetNodesDelta) {
|
||||||
@@ -510,7 +519,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
"Method": "RETGETNODES", "Context": Info.Context, "Data": {
|
"Method": "RETGETNODES", "Context": Info.Context, "Data": {
|
||||||
arr: this.GetDirectNodesArray(false, 0, 1), IsAddrList: global.ADDRLIST_MODE,
|
arr: this.GetDirectNodesArray(false, 0, 1), IsAddrList: global.ADDRLIST_MODE,
|
||||||
}
|
}
|
||||||
}, MAX_NODES_RETURN * 250 + 300)
|
}, global.MAX_NODES_RETURN * 250 + 300)
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
RETGETNODES_F() {
|
RETGETNODES_F() {
|
||||||
@@ -539,7 +548,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Info.Node.IsAddrList = Data.IsAddrList
|
Info.Node.IsAddrList = Data.IsAddrList
|
||||||
AddNodeInfo(Info.Node, "RETGETNODES length=" + arr.length)
|
global.AddNodeInfo(Info.Node, "RETGETNODES length=" + arr.length)
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
RETGETNODES2_F() {
|
RETGETNODES2_F() {
|
||||||
@@ -567,7 +576,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Info.Node.IsAddrList = Data.IsAddrList
|
Info.Node.IsAddrList = Data.IsAddrList
|
||||||
AddNodeInfo(Info.Node, "RETGETNODES2 length=" + arr.length)
|
global.AddNodeInfo(Info.Node, "RETGETNODES2 length=" + arr.length)
|
||||||
}
|
}
|
||||||
GetNewNode(addrStr, ip, port) {
|
GetNewNode(addrStr, ip, port) {
|
||||||
var Node = new CNode(addrStr, ip, port);
|
var Node = new CNode(addrStr, ip, port);
|
||||||
@@ -583,10 +592,10 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
GetDirectNodesArray(bAll, bWebPort, bGetAddrArr) {
|
GetDirectNodesArray(bAll, bWebPort?, bGetAddrArr?) {
|
||||||
var ret = [];
|
var ret = [];
|
||||||
var Value = {
|
var Value: any = {
|
||||||
addrStr: this.addrStr, ip: this.ip, port: this.port, LastTime: 0, DeltaTime: 0, Hot: true, BlockProcessCount: 0, portweb: HTTP_HOSTING_PORT,
|
addrStr: this.addrStr, ip: this.ip, port: this.port, LastTime: 0, DeltaTime: 0, Hot: true, BlockProcessCount: 0, portweb: global.HTTP_HOSTING_PORT,
|
||||||
};
|
};
|
||||||
if (bGetAddrArr)
|
if (bGetAddrArr)
|
||||||
Value.addrArr = global.GetArrFromHex(Value.addrStr)
|
Value.addrArr = global.GetArrFromHex(Value.addrStr)
|
||||||
@@ -594,17 +603,17 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var len = this.NodesArr.length;
|
var len = this.NodesArr.length;
|
||||||
var UseRandom = 0;
|
var UseRandom = 0;
|
||||||
var MaxDeltaTime = 24 * 3600 * 1000;
|
var MaxDeltaTime = 24 * 3600 * 1000;
|
||||||
if (len > MAX_NODES_RETURN && !bAll) {
|
if (len > global.MAX_NODES_RETURN && !bAll) {
|
||||||
UseRandom = 1
|
UseRandom = 1
|
||||||
MaxDeltaTime = NODES_DELTA_CALC_HOUR * 3600 * 1000
|
MaxDeltaTime = global.NODES_DELTA_CALC_HOUR * 3600 * 1000
|
||||||
len = MAX_NODES_RETURN
|
len = global.MAX_NODES_RETURN
|
||||||
}
|
}
|
||||||
var mapWasAdd = {};
|
var mapWasAdd = {};
|
||||||
var CurTime = global.GetCurrentTime();
|
var CurTime = global.GetCurrentTime();
|
||||||
for (var i = 0; i < len; i++) {
|
for (var i = 0; i < len; i++) {
|
||||||
var Item;
|
var Item;
|
||||||
if (UseRandom) {
|
if (UseRandom) {
|
||||||
Item = this.NodesArr[random(this.NodesArr.length)]
|
Item = this.NodesArr[global.random(this.NodesArr.length)]
|
||||||
if (mapWasAdd[Item.addrStr]) {
|
if (mapWasAdd[Item.addrStr]) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -621,9 +630,9 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
continue;
|
continue;
|
||||||
if (Item.BlockProcessCount < 0)
|
if (Item.BlockProcessCount < 0)
|
||||||
continue;
|
continue;
|
||||||
if (!GrayConnect() && Item.LastTime - 0 < CurTime - MaxDeltaTime)
|
if (!global.GrayConnect() && Item.LastTime - 0 < CurTime - MaxDeltaTime)
|
||||||
continue;
|
continue;
|
||||||
var Value = {
|
var Value: any = {
|
||||||
addrStr: Item.addrStr, ip: Item.ip, port: Item.port, FirstTime: Item.FirstTime, FirstTimeStr: Item.FirstTimeStr, LastTime: Item.LastTime - 0,
|
addrStr: Item.addrStr, ip: Item.ip, port: Item.port, FirstTime: Item.FirstTime, FirstTimeStr: Item.FirstTimeStr, LastTime: Item.LastTime - 0,
|
||||||
DeltaTime: Item.DeltaTime, Hot: Item.Hot, BlockProcessCount: Item.BlockProcessCount, Name: Item.Name, portweb: Item.portweb,
|
DeltaTime: Item.DeltaTime, Hot: Item.Hot, BlockProcessCount: Item.BlockProcessCount, Name: Item.Name, portweb: Item.portweb,
|
||||||
};
|
};
|
||||||
@@ -633,7 +642,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
AddToArrNodes(Item) {
|
AddToArrNodes(Item, b?) {
|
||||||
if (Item.addrStr === "" || Item.addrStr === this.addrStr)
|
if (Item.addrStr === "" || Item.addrStr === this.addrStr)
|
||||||
return;
|
return;
|
||||||
var Node;
|
var Node;
|
||||||
@@ -648,7 +657,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
else
|
else
|
||||||
Node = new CNode(Item.addrStr, Item.ip, Item.port)
|
Node = new CNode(Item.addrStr, Item.ip, Item.port)
|
||||||
Node.id = this.NodesArr.length
|
Node.id = this.NodesArr.length
|
||||||
Node.addrArr = GetAddresFromHex(Node.addrStr)
|
Node.addrArr = global.GetAddresFromHex(Node.addrStr)
|
||||||
this.NodesMap[Node.addrStr] = Node
|
this.NodesMap[Node.addrStr] = Node
|
||||||
this.NodesArr.push(Node)
|
this.NodesArr.push(Node)
|
||||||
this.NodesArrUnSort.push(Node)
|
this.NodesArrUnSort.push(Node)
|
||||||
@@ -673,14 +682,14 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
NodesArrSort() {
|
NodesArrSort() {
|
||||||
this.NodesArr.sort(SortNodeBlockProcessCount)
|
this.NodesArr.sort(SortNodeBlockProcessCount)
|
||||||
if ((GrayConnect() || !this.LoadHistoryMode) && Date.now() - this.StartTime > 120 * 1000) {
|
if ((global.GrayConnect() || !this.LoadHistoryMode) && Date.now() - this.StartTime > 120 * 1000) {
|
||||||
var arr0 = this.GetDirectNodesArray(true);
|
var arr0 = this.GetDirectNodesArray(true);
|
||||||
var arr = arr0.slice(1, 2000);
|
var arr = arr0.slice(1, 2000);
|
||||||
SaveParams(global.GetDataPath("nodes.lst"), arr)
|
global.SaveParams(global.GetDataPath("nodes.lst"), arr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LoadNodesFromFile() {
|
LoadNodesFromFile() {
|
||||||
var arr = LoadParams(global.GetDataPath("nodes.lst"), []);
|
var arr = global.LoadParams(global.GetDataPath("nodes.lst"), []);
|
||||||
arr.sort(SortNodeBlockProcessCount)
|
arr.sort(SortNodeBlockProcessCount)
|
||||||
for (var i = 0; i < arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
if (arr[i].LastTime) {
|
if (arr[i].LastTime) {
|
||||||
@@ -733,7 +742,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var Count;
|
var Count;
|
||||||
if (!global.CAN_START)
|
if (!global.CAN_START)
|
||||||
return;
|
return;
|
||||||
if (Info.Node.GrayConnect || GrayConnect())
|
if (Info.Node.GrayConnect || global.GrayConnect())
|
||||||
return;
|
return;
|
||||||
var Count = this.GetLevelEnum(Info.Node);
|
var Count = this.GetLevelEnum(Info.Node);
|
||||||
var bAdd = this.AddLevelConnect(Info.Node);
|
var bAdd = this.AddLevelConnect(Info.Node);
|
||||||
@@ -743,7 +752,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
else {
|
else {
|
||||||
ret = { result: 0, Count: Count }
|
ret = { result: 0, Count: Count }
|
||||||
}
|
}
|
||||||
AddNodeInfo(Info.Node, "GET ADDLEVELCONNECT, DO bAdd=" + bAdd)
|
global.AddNodeInfo(Info.Node, "GET ADDLEVELCONNECT, DO bAdd=" + bAdd)
|
||||||
this.SendF(Info.Node, { "Method": "RETADDLEVELCONNECT", "Context": Info.Context, "Data": ret })
|
this.SendF(Info.Node, { "Method": "RETADDLEVELCONNECT", "Context": Info.Context, "Data": ret })
|
||||||
}
|
}
|
||||||
AddLevelConnect(Node) {
|
AddLevelConnect(Node) {
|
||||||
@@ -765,9 +774,9 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
arr.push(Node)
|
arr.push(Node)
|
||||||
Node.TransferCount = 0
|
Node.TransferCount = 0
|
||||||
if (this.LoadHistoryMode)
|
if (this.LoadHistoryMode)
|
||||||
Node.LastTimeTransfer = (GetCurrentTime() - 0) + 30 * 1000
|
Node.LastTimeTransfer = (global.GetCurrentTime() - 0) + 30 * 1000
|
||||||
else
|
else
|
||||||
Node.LastTimeTransfer = (GetCurrentTime() - 0) + 10 * 1000
|
Node.LastTimeTransfer = (global.GetCurrentTime() - 0) + 10 * 1000
|
||||||
Node.CanHot = true
|
Node.CanHot = true
|
||||||
this.CheckDisconnectHot(Level)
|
this.CheckDisconnectHot(Level)
|
||||||
if (!Node.CanHot)
|
if (!Node.CanHot)
|
||||||
@@ -775,7 +784,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
this.SendGetMessage(Node)
|
this.SendGetMessage(Node)
|
||||||
global.ADD_TO_STAT("NETCONFIGURATION")
|
global.ADD_TO_STAT("NETCONFIGURATION")
|
||||||
global.ADD_TO_STAT("AddLevelConnect")
|
global.ADD_TO_STAT("AddLevelConnect")
|
||||||
AddNodeInfo(Node, "Add Level connect")
|
global.AddNodeInfo(Node, "Add Level connect")
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
@@ -784,7 +793,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
RETADDLEVELCONNECT(Info, CurTime) {
|
RETADDLEVELCONNECT(Info, CurTime) {
|
||||||
var Data = this.DataFromF(Info);
|
var Data = this.DataFromF(Info);
|
||||||
AddNodeInfo(Info.Node, "GET RETADDLEVELCONNECT: " + Data.result)
|
global.AddNodeInfo(Info.Node, "GET RETADDLEVELCONNECT: " + Data.result)
|
||||||
if (Data.result === 1) {
|
if (Data.result === 1) {
|
||||||
this.AddLevelConnect(Info.Node)
|
this.AddLevelConnect(Info.Node)
|
||||||
}
|
}
|
||||||
@@ -794,7 +803,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
Info.Node.LevelCount = Data.Count
|
Info.Node.LevelCount = Data.Count
|
||||||
}
|
}
|
||||||
DeleteBadConnectingByTimer() {
|
DeleteBadConnectingByTimer() {
|
||||||
if (glStopNode)
|
if (global.glStopNode)
|
||||||
return;
|
return;
|
||||||
var CurTime = global.GetCurrentTime();
|
var CurTime = global.GetCurrentTime();
|
||||||
var arr = global.SERVER.NodesArr;
|
var arr = global.SERVER.NodesArr;
|
||||||
@@ -803,8 +812,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var Status = GetSocketStatus(Node.Socket);
|
var Status = GetSocketStatus(Node.Socket);
|
||||||
if (Node.Active && Status < 100) {
|
if (Node.Active && Status < 100) {
|
||||||
var Delta = CurTime - Node.LastTime;
|
var Delta = CurTime - Node.LastTime;
|
||||||
if (Delta > MAX_WAIT_PERIOD_FOR_STATUS) {
|
if (Delta > global.MAX_WAIT_PERIOD_FOR_STATUS) {
|
||||||
AddNodeInfo(Node, "Close bad connecting by time")
|
global.AddNodeInfo(Node, "Close bad connecting by time")
|
||||||
this.DeleteNodeFromActive(Node)
|
this.DeleteNodeFromActive(Node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -816,21 +825,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
if (Level < 3)
|
if (Level < 3)
|
||||||
MaxCountChilds = 4
|
MaxCountChilds = 4
|
||||||
else
|
else
|
||||||
MaxCountChilds = MAX_CONNECT_CHILD
|
MaxCountChilds = global.MAX_CONNECT_CHILD
|
||||||
var arr = this.LevelNodes[Level];
|
var arr = this.LevelNodes[Level];
|
||||||
if (arr) {
|
if (arr) {
|
||||||
for (var n = arr.length - 1; n >= 0; n--) {
|
for (var n = arr.length - 1; n >= 0; n--) {
|
||||||
var Node = arr[n];
|
var Node = arr[n];
|
||||||
if (Node) {
|
if (Node) {
|
||||||
var DeltaTime = CurTime - Node.LastTimeTransfer;
|
var DeltaTime = CurTime - Node.LastTimeTransfer;
|
||||||
if (!Node.Hot || DeltaTime > MAX_WAIT_PERIOD_FOR_HOT) {
|
if (!Node.Hot || DeltaTime > global.MAX_WAIT_PERIOD_FOR_HOT) {
|
||||||
this.StartDisconnectHot(Node, "TimeDisconnectHot")
|
this.StartDisconnectHot(Node, "TimeDisconnectHot")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
arr.sort(SortNodeBlockProcessCount)
|
arr.sort(SortNodeBlockProcessCount)
|
||||||
var ChildCount = arr.length;
|
var ChildCount = arr.length;
|
||||||
for (var n = arr.length - 1; n >= MIN_CONNECT_CHILD; n--) {
|
for (var n = arr.length - 1; n >= global.MIN_CONNECT_CHILD; n--) {
|
||||||
var Node = arr[n];
|
var Node = arr[n];
|
||||||
if (Node) {
|
if (Node) {
|
||||||
if (ChildCount > MaxCountChilds) {
|
if (ChildCount > MaxCountChilds) {
|
||||||
@@ -840,7 +849,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
global.ADD_TO_STAT("DisconnectChild")
|
global.ADD_TO_STAT("DisconnectChild")
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ChildCount > (MIN_CONNECT_CHILD) && Node.LevelCount > MIN_CONNECT_CHILD) {
|
if (ChildCount > (global.MIN_CONNECT_CHILD) && Node.LevelCount > global.MIN_CONNECT_CHILD) {
|
||||||
ChildCount--
|
ChildCount--
|
||||||
Node.CanHot = false
|
Node.CanHot = false
|
||||||
this.AddCheckErrCount(Node, 1)
|
this.AddCheckErrCount(Node, 1)
|
||||||
@@ -855,8 +864,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
SetTime(NewTime) {
|
SetTime(NewTime) {
|
||||||
global.ToLog("Set new time: " + NewTime)
|
global.ToLog("Set new time: " + NewTime)
|
||||||
if (NewTime) {
|
if (NewTime) {
|
||||||
global.DELTA_CURRENT_TIME = NewTime - (GetCurrentTime(0) - 0)
|
global.DELTA_CURRENT_TIME = NewTime - (global.GetCurrentTime(0) - 0)
|
||||||
SAVE_CONST(true)
|
global.SAVE_CONST(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
@@ -864,13 +873,13 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
return "{Time:uint, Sign:arr64}";
|
return "{Time:uint, Sign:arr64}";
|
||||||
}
|
}
|
||||||
SendTimeDev(Node) {
|
SendTimeDev(Node) {
|
||||||
if (!WALLET.WalletOpen) {
|
if (!global.WALLET.WalletOpen) {
|
||||||
global.ToLog("Error Wallet not open")
|
global.ToLog("Error Wallet not open")
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!this.SignCurrentTimeDev) {
|
if (!this.SignCurrentTimeDev) {
|
||||||
var SignArr = global.GetArrFromHex(SERVER.addrStr);
|
var SignArr = global.GetArrFromHex(global.SERVER.addrStr);
|
||||||
this.SignCurrentTimeDev = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature
|
this.SignCurrentTimeDev = global.SaveToFile(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature
|
||||||
}
|
}
|
||||||
var Time = global.GetCurrentTime() - 0;
|
var Time = global.GetCurrentTime() - 0;
|
||||||
global.ToLog("Send time: " + Time + " to " + NodeInfo(Node))
|
global.ToLog("Send time: " + Time + " to " + NodeInfo(Node))
|
||||||
@@ -893,7 +902,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var Node = Info.Node;
|
var Node = Info.Node;
|
||||||
var Data = this.DataFromF(Info);
|
var Data = this.DataFromF(Info);
|
||||||
var SignArr = global.GetArrFromHex(Node.addrStr);
|
var SignArr = global.GetArrFromHex(Node.addrStr);
|
||||||
if (CheckDevelopSign(SignArr, Data.Sign)) {
|
if (global.CheckDevelopSign(SignArr, Data.Sign)) {
|
||||||
this.SetTime(Data.Time)
|
this.SetTime(Data.Time)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -908,10 +917,10 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
for (var i = 0; i < this.NodesArr.length; i++) {
|
for (var i = 0; i < this.NodesArr.length; i++) {
|
||||||
var Node = this.NodesArr[i];
|
var Node = this.NodesArr[i];
|
||||||
if (!Node.Active && this.IsCanConnect(Node) && !Node.WasAddToConnect) {
|
if (!Node.Active && this.IsCanConnect(Node) && !Node.WasAddToConnect) {
|
||||||
AddNodeInfo(Node, "To connect all")
|
global.AddNodeInfo(Node, "To connect all")
|
||||||
Node.NextConnectDelta = 1000
|
Node.NextConnectDelta = 1000
|
||||||
Node.WasAddToConnect = 1
|
Node.WasAddToConnect = 1
|
||||||
ArrConnect.push(Node)
|
global.ArrConnect.push(Node)
|
||||||
Count++
|
Count++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -922,7 +931,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
for (var i = 0; i < this.NodesArr.length; i++) {
|
for (var i = 0; i < this.NodesArr.length; i++) {
|
||||||
var Node = this.NodesArr[i];
|
var Node = this.NodesArr[i];
|
||||||
if (Node.Active) {
|
if (Node.Active) {
|
||||||
AddNodeInfo(Node, "Disconnect hot all")
|
global.AddNodeInfo(Node, "Disconnect hot all")
|
||||||
Node.NextConnectDelta = 10000
|
Node.NextConnectDelta = 10000
|
||||||
this.DeleteNodeFromActive(Node)
|
this.DeleteNodeFromActive(Node)
|
||||||
Count++
|
Count++
|
||||||
@@ -942,7 +951,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var ArrNodes = this.GetHotTimeNodes();
|
var ArrNodes = this.GetHotTimeNodes();
|
||||||
var CountNodes = ArrNodes.length;
|
var CountNodes = ArrNodes.length;
|
||||||
var DeltaArr = [];
|
var DeltaArr = [];
|
||||||
var NodesSet = new Set();
|
var NodesSet: any = new Set();
|
||||||
for (var i = 0; i < ArrNodes.length; i++) {
|
for (var i = 0; i < ArrNodes.length; i++) {
|
||||||
var Node = ArrNodes[i];
|
var Node = ArrNodes[i];
|
||||||
if (!Node.Times)
|
if (!Node.Times)
|
||||||
@@ -983,6 +992,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
var Sum = 0;
|
var Sum = 0;
|
||||||
var Count = 0;
|
var Count = 0;
|
||||||
|
//@ts-ignore
|
||||||
for (var i = start; i <= finish; i++) {
|
for (var i = start; i <= finish; i++) {
|
||||||
Sum = Sum + DeltaArr[i]
|
Sum = Sum + DeltaArr[i]
|
||||||
Count++
|
Count++
|
||||||
@@ -1010,7 +1020,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
global.ADD_TO_STAT("CORRECT_TIME_DOWN", - AvgDelta)
|
global.ADD_TO_STAT("CORRECT_TIME_DOWN", - AvgDelta)
|
||||||
global.DELTA_CURRENT_TIME = Math.trunc(global.DELTA_CURRENT_TIME + AvgDelta)
|
global.DELTA_CURRENT_TIME = Math.trunc(global.DELTA_CURRENT_TIME + AvgDelta)
|
||||||
this.ClearTimeStat()
|
this.ClearTimeStat()
|
||||||
SAVE_CONST()
|
global.SAVE_CONST()
|
||||||
}
|
}
|
||||||
ClearTimeStat() {
|
ClearTimeStat() {
|
||||||
var ArrNodes = this.GetHotTimeNodes();
|
var ArrNodes = this.GetHotTimeNodes();
|
||||||
@@ -1019,19 +1029,19 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
TimeDevCorrect() {
|
TimeDevCorrect() {
|
||||||
if (CHECK_DELTA_TIME.bUse) {
|
if (global.CHECK_DELTA_TIME.bUse) {
|
||||||
var BlockNum = GetCurrentBlockNumByTime();
|
var BlockNum = global.GetCurrentBlockNumByTime();
|
||||||
if (CHECK_DELTA_TIME.StartBlockNum <= BlockNum && CHECK_DELTA_TIME.EndBlockNum > BlockNum) {
|
if (global.CHECK_DELTA_TIME.StartBlockNum <= BlockNum && global.CHECK_DELTA_TIME.EndBlockNum > BlockNum) {
|
||||||
if (!global.DELTA_CURRENT_TIME)
|
if (!global.DELTA_CURRENT_TIME)
|
||||||
global.DELTA_CURRENT_TIME = 0
|
global.DELTA_CURRENT_TIME = 0
|
||||||
var CorrectTime = 0;
|
var CorrectTime = 0;
|
||||||
if (CHECK_DELTA_TIME.bAddTime)
|
if (global.CHECK_DELTA_TIME.bAddTime)
|
||||||
CorrectTime = CHECK_DELTA_TIME.DeltaTime
|
CorrectTime = global.CHECK_DELTA_TIME.DeltaTime
|
||||||
else
|
else
|
||||||
CorrectTime = - CHECK_DELTA_TIME.DeltaTime
|
CorrectTime = - global.CHECK_DELTA_TIME.DeltaTime
|
||||||
global.DELTA_CURRENT_TIME += CorrectTime
|
global.DELTA_CURRENT_TIME += CorrectTime
|
||||||
this.ClearTimeStat()
|
this.ClearTimeStat()
|
||||||
SAVE_CONST(true)
|
global.SAVE_CONST(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1061,7 +1071,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
Node.NextConnectDelta = 1000
|
Node.NextConnectDelta = 1000
|
||||||
if (!Node.FirstTime) {
|
if (!Node.FirstTime) {
|
||||||
Node.FirstTime = global.GetCurrentTime() - 0
|
Node.FirstTime = global.GetCurrentTime() - 0
|
||||||
Node.FirstTimeStr = "" + GetStrTimeUTC()
|
Node.FirstTimeStr = "" + global.GetStrTimeUTC()
|
||||||
}
|
}
|
||||||
global.ADD_TO_STAT("AddToActive")
|
global.ADD_TO_STAT("AddToActive")
|
||||||
}
|
}
|
||||||
@@ -1071,8 +1081,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
this.StartDisconnectHot(Node, "NotActive", 1)
|
this.StartDisconnectHot(Node, "NotActive", 1)
|
||||||
Node.Hot = false
|
Node.Hot = false
|
||||||
this.ActualNodes.remove(Node)
|
this.ActualNodes.remove(Node)
|
||||||
CloseSocket(Node.Socket, "DeleteNodeFromActive")
|
global.CloseSocket(Node.Socket, "DeleteNodeFromActive")
|
||||||
CloseSocket(Node.Socket2, "DeleteNodeFromActive")
|
global.CloseSocket(Node.Socket2, "DeleteNodeFromActive")
|
||||||
Node.ResetNode()
|
Node.ResetNode()
|
||||||
Node.Socket = undefined
|
Node.Socket = undefined
|
||||||
Node.Socket2 = undefined
|
Node.Socket2 = undefined
|
||||||
@@ -1086,8 +1096,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
if (!Node.SocketStart)
|
if (!Node.SocketStart)
|
||||||
Node.SocketStart = Date.now()
|
Node.SocketStart = Date.now()
|
||||||
var DeltaTime = Date.now() - Node.SocketStart;
|
var DeltaTime = Date.now() - Node.SocketStart;
|
||||||
if (DeltaTime >= PERIOD_FOR_RECONNECT) {
|
if (DeltaTime >= global.PERIOD_FOR_RECONNECT) {
|
||||||
if (random(100) >= 90)
|
if (global.random(100) >= 90)
|
||||||
Node.CreateReconnection()
|
Node.CreateReconnection()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1120,8 +1130,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
AddrLevelNode(Node) {
|
AddrLevelNode(Node) {
|
||||||
if (Node.GrayConnect)
|
if (Node.GrayConnect)
|
||||||
return MAX_LEVEL_SPECIALIZATION - 1;
|
return global.MAX_LEVEL_SPECIALIZATION - 1;
|
||||||
return AddrLevelArr(this.addrArr, Node.addrArr);
|
return global.AddrLevelArr(this.addrArr, Node.addrArr);
|
||||||
}
|
}
|
||||||
GetNodesLevelCount() {
|
GetNodesLevelCount() {
|
||||||
var Count = 0;
|
var Count = 0;
|
||||||
@@ -1222,7 +1232,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
global.NET_WORK_MODE = { ip: "", port: "" }
|
global.NET_WORK_MODE = { ip: "", port: "" }
|
||||||
}
|
}
|
||||||
global.NET_WORK_MODE.UseDirectIP = 0
|
global.NET_WORK_MODE.UseDirectIP = 0
|
||||||
SAVE_CONST()
|
global.SAVE_CONST()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SetDirectMode() {
|
SetDirectMode() {
|
||||||
@@ -1230,14 +1240,14 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
if (CountNodes && !global.NET_WORK_MODE) {
|
if (CountNodes && !global.NET_WORK_MODE) {
|
||||||
global.NET_WORK_MODE = { ip: "", port: "30000" }
|
global.NET_WORK_MODE = { ip: "", port: "30000" }
|
||||||
global.NET_WORK_MODE.UseDirectIP = 1
|
global.NET_WORK_MODE.UseDirectIP = 1
|
||||||
SAVE_CONST()
|
global.SAVE_CONST()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StartCheckTransferTree() {
|
StartCheckTransferTree() {
|
||||||
var ArrTree = this.GetTransferTree();
|
var ArrTree = this.GetTransferTree();
|
||||||
this.TransferTree = ArrTree
|
this.TransferTree = ArrTree
|
||||||
var CurTime = Date.now();
|
var CurTime = Date.now();
|
||||||
if (GrayConnect()) {
|
if (global.GrayConnect()) {
|
||||||
var MustCount = GetGrayServerConnections();
|
var MustCount = GetGrayServerConnections();
|
||||||
if (this.ActualNodes.size < MustCount) {
|
if (this.ActualNodes.size < MustCount) {
|
||||||
this.NodesArr.sort(SortNodeBlockProcessCountGray)
|
this.NodesArr.sort(SortNodeBlockProcessCountGray)
|
||||||
@@ -1251,16 +1261,16 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
continue;
|
continue;
|
||||||
var DeltaTime = CurTime - Node.StartTimeConnect;
|
var DeltaTime = CurTime - Node.StartTimeConnect;
|
||||||
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
|
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
|
||||||
AddNodeInfo(Node, "To connect")
|
global.AddNodeInfo(Node, "To connect")
|
||||||
Node.WasAddToConnect = 1
|
Node.WasAddToConnect = 1
|
||||||
ArrConnect.push(Node)
|
global.ArrConnect.push(Node)
|
||||||
WasDoConnect++
|
WasDoConnect++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (this.ActualNodes.size > MustCount) {
|
while (this.ActualNodes.size > MustCount) {
|
||||||
var Node = this.ActualNodes.max();
|
var Node = this.ActualNodes.max();
|
||||||
AddNodeInfo(Node, "DeleteFromActive")
|
global.AddNodeInfo(Node, "DeleteFromActive")
|
||||||
this.DeleteNodeFromActive(Node)
|
this.DeleteNodeFromActive(Node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1278,14 +1288,14 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
var Node = arr[n];
|
var Node = arr[n];
|
||||||
var DeltaTime = CurTime - Node.StartTimeConnect;
|
var DeltaTime = CurTime - Node.StartTimeConnect;
|
||||||
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
|
if (!Node.Active && WasDoConnect < 5 && !Node.WasAddToConnect && DeltaTime >= Node.NextConnectDelta) {
|
||||||
AddNodeInfo(Node, "To connect")
|
global.AddNodeInfo(Node, "To connect")
|
||||||
Node.WasAddToConnect = 1
|
Node.WasAddToConnect = 1
|
||||||
ArrConnect.push(Node)
|
global.ArrConnect.push(Node)
|
||||||
WasDoConnect++
|
WasDoConnect++
|
||||||
}
|
}
|
||||||
DeltaTime = CurTime - Node.StartTimeHot
|
DeltaTime = CurTime - Node.StartTimeHot
|
||||||
if (Node.Active && !Node.Hot && WasDoHot < MIN_CONNECT_CHILD && DeltaTime > Node.NextHotDelta && !Node.GrayConnect) {
|
if (Node.Active && !Node.Hot && WasDoHot < global.MIN_CONNECT_CHILD && DeltaTime > Node.NextHotDelta && !Node.GrayConnect) {
|
||||||
AddNodeInfo(Node, "To hot level")
|
global.AddNodeInfo(Node, "To hot level")
|
||||||
this.StartAddLevelConnect(Node)
|
this.StartAddLevelConnect(Node)
|
||||||
Node.StartTimeHot = CurTime
|
Node.StartTimeHot = CurTime
|
||||||
Node.NextHotDelta = Node.NextHotDelta * 2
|
Node.NextHotDelta = Node.NextHotDelta * 2
|
||||||
@@ -1299,21 +1309,21 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ValueToXOR(StrType, Str) {
|
ValueToXOR(StrType, Str) {
|
||||||
var Arr1 = toUTF8Array(Str);
|
var Arr1 = global.toUTF8Array(Str);
|
||||||
var Arr2 = global.shaarr(this.CommonKey + ":" + this.addrStr + ":" + StrType);
|
var Arr2 = global.shaarr(this.CommonKey + ":" + this.addrStr + ":" + StrType);
|
||||||
return global.WALLET.XORHash(Arr1, Arr2, 32);
|
return global.WALLET.XORHash(Arr1, Arr2, 32);
|
||||||
}
|
}
|
||||||
ValueFromXOR(Node, StrType, Arr1) {
|
ValueFromXOR(Node, StrType, Arr1) {
|
||||||
var Arr2 = global.shaarr(this.CommonKey + ":" + Node.addrStr + ":" + StrType);
|
var Arr2 = global.shaarr(this.CommonKey + ":" + Node.addrStr + ":" + StrType);
|
||||||
var Arr = global.WALLET.XORHash(Arr1, Arr2, 32);
|
var Arr = global.WALLET.XORHash(Arr1, Arr2, 32);
|
||||||
var Str = Utf8ArrayToStr(Arr);
|
var Str = global.Utf8ArrayToStr(Arr);
|
||||||
return Str;
|
return Str;
|
||||||
}
|
}
|
||||||
ValueToXORDevelop(StrName, Data, Type) {
|
ValueToXORDevelop(StrName, Data, Type) {
|
||||||
var Arr1;
|
var Arr1;
|
||||||
if (Type === "uint") {
|
if (Type === "uint") {
|
||||||
Arr1 = []
|
Arr1 = []
|
||||||
WriteUintToArr(Arr1, Data)
|
global.WriteUintToArr(Arr1, Data)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (Type === "hash") {
|
if (Type === "hash") {
|
||||||
@@ -1321,25 +1331,25 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (Type === "str") {
|
if (Type === "str") {
|
||||||
Arr1 = toUTF8Array(Data)
|
Arr1 = global.toUTF8Array(Data)
|
||||||
}
|
}
|
||||||
var Arr2 = global.shaarr(this.КодДляРазработчикаХекс + ":" + StrName);
|
var Arr2 = global.shaarr(this.КодДляРазработчикаХекс + ":" + StrName);
|
||||||
return global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
|
return global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
|
||||||
}
|
}
|
||||||
ValueFromXORDevelop(Node, StrName, Arr1, Type) {
|
ValueFromXORDevelop(Node, StrName, Arr1, Type) {
|
||||||
if (!Node.КодДляРазработчикаХекс) {
|
if (!Node.КодДляРазработчикаХекс) {
|
||||||
Node.КодДляРазработчикаХекс = global.GetHexFromArr(WALLET.KeyPair.computeSecret(Node.PubKey, null))
|
Node.КодДляРазработчикаХекс = global.GetHexFromArr(global.WALLET.KeyPair.computeSecret(Node.PubKey, null))
|
||||||
}
|
}
|
||||||
var Arr2 = global.shaarr(Node.КодДляРазработчикаХекс + ":" + StrName);
|
var Arr2 = global.shaarr(Node.КодДляРазработчикаХекс + ":" + StrName);
|
||||||
var Arr = global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
|
var Arr = global.WALLET.XORHash(Arr1, Arr2, Arr1.length);
|
||||||
if (Type === "uint") {
|
if (Type === "uint") {
|
||||||
return ReadUintFromArr(Arr, 0);
|
return global.ReadUintFromArr(Arr, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (Type === "hash") {
|
if (Type === "hash") {
|
||||||
return Arr;
|
return Arr;
|
||||||
}
|
}
|
||||||
var Str = Utf8ArrayToStr(Arr);
|
var Str = global.Utf8ArrayToStr(Arr);
|
||||||
return Str;
|
return Str;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1363,8 +1373,8 @@ function SortNodeBlockProcessCountGray(a, b) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function GetGrayServerConnections() {
|
function GetGrayServerConnections() {
|
||||||
var Count = MAX_GRAY_CONNECTIONS_TO_SERVER;
|
var Count = global.MAX_GRAY_CONNECTIONS_TO_SERVER;
|
||||||
if (SERVER.LoadHistoryMode && global.SERVER.LoadHistoryMessage)
|
if (global.SERVER.LoadHistoryMode && global.SERVER.LoadHistoryMessage)
|
||||||
Count = Count * 10;
|
Count = Count * 10;
|
||||||
return Count;
|
return Count;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ global.CONST_NAME_ARR = [
|
|||||||
"REST_START_COUNT",
|
"REST_START_COUNT",
|
||||||
"LOAD_TO_BEGIN"
|
"LOAD_TO_BEGIN"
|
||||||
];
|
];
|
||||||
|
global.MAX_LENGTH_SENDER_MAP = 3000;
|
||||||
|
global.DELTA_START_SENDER_MAP = 24;
|
||||||
global.NODES_DELTA_CALC_HOUR = 4;
|
global.NODES_DELTA_CALC_HOUR = 4;
|
||||||
global.USE_HARD_API_V2 = 0;
|
global.USE_HARD_API_V2 = 0;
|
||||||
global.USE_TICKET = 0;
|
global.USE_TICKET = 0;
|
||||||
@@ -196,7 +198,7 @@ if (global.LOCAL_RUN) {
|
|||||||
global.NEW_FORMULA_KTERA = 3;
|
global.NEW_FORMULA_KTERA = 3;
|
||||||
global.NEW_FORMULA_TARGET1 = 0;
|
global.NEW_FORMULA_TARGET1 = 0;
|
||||||
global.NEW_FORMULA_TARGET2 = 1;
|
global.NEW_FORMULA_TARGET2 = 1;
|
||||||
NETWORK = "LOCAL";
|
global.NETWORK = "LOCAL";
|
||||||
global.ALL_VIEW_ROWS = 1;
|
global.ALL_VIEW_ROWS = 1;
|
||||||
global.COUNT_NODE_PROOF = 1;
|
global.COUNT_NODE_PROOF = 1;
|
||||||
global.NEW_SIGN_TIME = 0;
|
global.NEW_SIGN_TIME = 0;
|
||||||
@@ -217,7 +219,7 @@ else
|
|||||||
global.START_BLOCK_ACCOUNT_HASH3 = 2356000;
|
global.START_BLOCK_ACCOUNT_HASH3 = 2356000;
|
||||||
global.BLOCKNUM_TICKET_ALGO = 1;
|
global.BLOCKNUM_TICKET_ALGO = 1;
|
||||||
global.WALLET_NAME = "TEST";
|
global.WALLET_NAME = "TEST";
|
||||||
NETWORK = "TERA-TEST2";
|
global.NETWORK = "TERA-TEST2";
|
||||||
if (global.START_PORT_NUMBER === undefined)
|
if (global.START_PORT_NUMBER === undefined)
|
||||||
global.START_PORT_NUMBER = 40000;
|
global.START_PORT_NUMBER = 40000;
|
||||||
global.ALL_VIEW_ROWS = 1;
|
global.ALL_VIEW_ROWS = 1;
|
||||||
@@ -238,7 +240,7 @@ if (global.LOCAL_RUN) {
|
|||||||
global.CHECK_GLOBAL_TIME = 0;
|
global.CHECK_GLOBAL_TIME = 0;
|
||||||
}
|
}
|
||||||
global.GetNetworkName = function() {
|
global.GetNetworkName = function() {
|
||||||
return NETWORK + "-" + global.DEF_MAJOR_VERSION;
|
return global.NETWORK + "-" + global.DEF_MAJOR_VERSION;
|
||||||
};
|
};
|
||||||
global.DEF_VERSION = global.DEF_MAJOR_VERSION + "." + global.UPDATE_CODE_VERSION_NUM;
|
global.DEF_VERSION = global.DEF_MAJOR_VERSION + "." + global.UPDATE_CODE_VERSION_NUM;
|
||||||
global.DEF_CLIENT = "TERA-CORE";
|
global.DEF_CLIENT = "TERA-CORE";
|
||||||
|
|||||||
@@ -10,15 +10,6 @@
|
|||||||
require("./library.js");
|
require("./library.js");
|
||||||
import * as crypto from 'crypto'
|
import * as crypto from 'crypto'
|
||||||
|
|
||||||
let {
|
|
||||||
sha3,
|
|
||||||
secp256k1,
|
|
||||||
SHA3BUF,
|
|
||||||
GetSignHash,
|
|
||||||
shaarr,
|
|
||||||
ToLog
|
|
||||||
} = global
|
|
||||||
|
|
||||||
global.MAX_SUPER_VALUE_POW = (1 << 30) * 2;
|
global.MAX_SUPER_VALUE_POW = (1 << 30) * 2;
|
||||||
var BuferForStr = Buffer.alloc(32);
|
var BuferForStr = Buffer.alloc(32);
|
||||||
global.GetHexFromAddres = function(arr) {
|
global.GetHexFromAddres = function(arr) {
|
||||||
@@ -79,9 +70,9 @@ global.GetPublicKeyFromAddres = function(Arr) {
|
|||||||
return RetArr;
|
return RetArr;
|
||||||
};
|
};
|
||||||
global.CheckDevelopSign = function(SignArr, Sign) {
|
global.CheckDevelopSign = function(SignArr, Sign) {
|
||||||
var hash = SHA3BUF(SignArr);
|
var hash = global.SHA3BUF(SignArr);
|
||||||
for (var i = 0; i < DEVELOP_PUB_KEY_ARR.length; i++) {
|
for (var i = 0; i < DEVELOP_PUB_KEY_ARR.length; i++) {
|
||||||
var Result = secp256k1.verify(hash, Buffer.from(Sign), DEVELOP_PUB_KEY_ARR[i]);
|
var Result = global.secp256k1.verify(hash, Buffer.from(Sign), DEVELOP_PUB_KEY_ARR[i]);
|
||||||
if (Result)
|
if (Result)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -107,7 +98,7 @@ global.GetSignHash = function(Context, ContextAddrTo, Msg) {
|
|||||||
};
|
};
|
||||||
global.GetVerifyHash = function(Context, ContextAddr, Msg, Sign1) {
|
global.GetVerifyHash = function(Context, ContextAddr, Msg, Sign1) {
|
||||||
try {
|
try {
|
||||||
var Sign2 = GetSignHash(Context, ContextAddr, Msg);
|
var Sign2 = global.GetSignHash(Context, ContextAddr, Msg);
|
||||||
for (var i = 0; i < Sign1.length; i++)
|
for (var i = 0; i < Sign1.length; i++)
|
||||||
if (Sign1[i] !== Sign2[i])
|
if (Sign1[i] !== Sign2[i])
|
||||||
return false;
|
return false;
|
||||||
@@ -170,7 +161,7 @@ global.GetKeyPairTest = function(password, Power) {
|
|||||||
var Data = KeyPair.getPublicKey('', 'compressed');
|
var Data = KeyPair.getPublicKey('', 'compressed');
|
||||||
if (Data[0] === 2) {
|
if (Data[0] === 2) {
|
||||||
if (Power) {
|
if (Power) {
|
||||||
var nBits = GetPowPower(Data.slice(1));
|
var nBits = global.GetPowPower(Data.slice(1));
|
||||||
if (nBits < Power)
|
if (nBits < Power)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -197,7 +188,7 @@ function GetArrFromValue(Num) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function GetHashWithNonce(hash0, nonce) {
|
function GetHashWithNonce(hash0, nonce) {
|
||||||
return shaarr2(hash0, GetArrFromValue(nonce));
|
return global.shaarr2(hash0, global.GetArrFromValue(nonce));
|
||||||
};
|
};
|
||||||
global.GetHashWithValues = GetHashWithValues;
|
global.GetHashWithValues = GetHashWithValues;
|
||||||
|
|
||||||
@@ -246,7 +237,7 @@ function CreateNoncePOWExtern(arr0, BlockNum, count, startnone) {
|
|||||||
if (!startnone)
|
if (!startnone)
|
||||||
startnone = 0;
|
startnone = 0;
|
||||||
var maxnonce = 0;
|
var maxnonce = 0;
|
||||||
var supervalue = MAX_SUPER_VALUE_POW;
|
var supervalue = global.MAX_SUPER_VALUE_POW;
|
||||||
for (var nonce = startnone; nonce <= startnone + count; nonce++) {
|
for (var nonce = startnone; nonce <= startnone + count; nonce++) {
|
||||||
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
|
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
|
||||||
var value = GetPowValue(arrhash);
|
var value = GetPowValue(arrhash);
|
||||||
@@ -266,7 +257,7 @@ function CreateNoncePOWExternMinPower(arr0, BlockNum, MinPow) {
|
|||||||
var nonce = 0;
|
var nonce = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
|
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
|
||||||
var power = GetPowPower(arrhash);
|
var power = global.GetPowPower(arrhash);
|
||||||
if (power >= MinPow) {
|
if (power >= MinPow) {
|
||||||
return nonce;
|
return nonce;
|
||||||
}
|
}
|
||||||
@@ -277,7 +268,7 @@ global.CreateNoncePOWInner = function(arr0, count) {
|
|||||||
var Hash;
|
var Hash;
|
||||||
var arr = arr0.slice();
|
var arr = arr0.slice();
|
||||||
var maxnonce = 0;
|
var maxnonce = 0;
|
||||||
var supervalue = MAX_SUPER_VALUE_POW;
|
var supervalue = global.MAX_SUPER_VALUE_POW;
|
||||||
for (var nonce = 0; nonce < count; nonce++) {
|
for (var nonce = 0; nonce < count; nonce++) {
|
||||||
var hashTest = GetHashWithNonce(arr, nonce);
|
var hashTest = GetHashWithNonce(arr, nonce);
|
||||||
var value = GetPowValue(hashTest);
|
var value = GetPowValue(hashTest);
|
||||||
@@ -297,7 +288,7 @@ global.CreateAddrPOW = function(SeqHash, AddrArr, MaxHash, Start, CountNonce, Bl
|
|||||||
AddrArr[7] = (nonce >>> 8) & 0xFF;
|
AddrArr[7] = (nonce >>> 8) & 0xFF;
|
||||||
AddrArr[8] = (nonce >>> 16) & 0xFF;
|
AddrArr[8] = (nonce >>> 16) & 0xFF;
|
||||||
AddrArr[9] = (nonce >>> 24) & 0xFF;
|
AddrArr[9] = (nonce >>> 24) & 0xFF;
|
||||||
var HashTest = shaarrblock2(SeqHash, AddrArr, BlockNum);
|
var HashTest = global.shaarrblock2(SeqHash, AddrArr, BlockNum);
|
||||||
if (global.CompareArr(MaxHash, HashTest) >= 0) {
|
if (global.CompareArr(MaxHash, HashTest) >= 0) {
|
||||||
MaxHash = HashTest;
|
MaxHash = HashTest;
|
||||||
MaxNonce = nonce;
|
MaxNonce = nonce;
|
||||||
@@ -324,7 +315,7 @@ function IsZeroArr(arr) {
|
|||||||
|
|
||||||
function CalcHashFromArray(ArrHashes, bOriginalSeq) {
|
function CalcHashFromArray(ArrHashes, bOriginalSeq) {
|
||||||
if (bOriginalSeq === undefined)
|
if (bOriginalSeq === undefined)
|
||||||
ArrHashes.sort(CompareArr);
|
ArrHashes.sort(global.CompareArr);
|
||||||
var Buf = [];
|
var Buf = [];
|
||||||
for (var i = 0; i < ArrHashes.length; i++) {
|
for (var i = 0; i < ArrHashes.length; i++) {
|
||||||
var Value = ArrHashes[i];
|
var Value = ArrHashes[i];
|
||||||
@@ -342,7 +333,7 @@ function CalcHashFromArray(ArrHashes, bOriginalSeq) {
|
|||||||
|
|
||||||
function CalcHash3FromArray(ArrHashes, bOriginalSeq) {
|
function CalcHash3FromArray(ArrHashes, bOriginalSeq) {
|
||||||
if (bOriginalSeq === undefined)
|
if (bOriginalSeq === undefined)
|
||||||
ArrHashes.sort(CompareArr);
|
ArrHashes.sort(global.CompareArr);
|
||||||
var Buf = [];
|
var Buf = [];
|
||||||
for (var i = 0; i < ArrHashes.length; i++) {
|
for (var i = 0; i < ArrHashes.length; i++) {
|
||||||
var Value = ArrHashes[i];
|
var Value = ArrHashes[i];
|
||||||
@@ -381,12 +372,12 @@ function CalcMerkl3FromArray(Arr, Tree0?) {
|
|||||||
return Tree;
|
return Tree;
|
||||||
}
|
}
|
||||||
if (bSort) {
|
if (bSort) {
|
||||||
Arr.sort(CompareArr);
|
Arr.sort(global.CompareArr);
|
||||||
}
|
}
|
||||||
var Arr2 = [];
|
var Arr2 = [];
|
||||||
var len = Math.floor(Arr.length / 2);
|
var len = Math.floor(Arr.length / 2);
|
||||||
for (var i = 0; i < len; i++) {
|
for (var i = 0; i < len; i++) {
|
||||||
var Hash = sha3arr2(Arr[i * 2], Arr[i * 2 + 1]);
|
var Hash = global.sha3arr2(Arr[i * 2], Arr[i * 2 + 1]);
|
||||||
Arr2.push(Hash);
|
Arr2.push(Hash);
|
||||||
}
|
}
|
||||||
if (len * 2 !== Arr.length) {
|
if (len * 2 !== Arr.length) {
|
||||||
@@ -418,12 +409,12 @@ function CalcMerkl0FromArray(Arr, Tree0?) {
|
|||||||
return Tree;
|
return Tree;
|
||||||
}
|
}
|
||||||
if (bSort) {
|
if (bSort) {
|
||||||
Arr.sort(CompareArr);
|
Arr.sort(global.CompareArr);
|
||||||
}
|
}
|
||||||
var Arr2 = [];
|
var Arr2 = [];
|
||||||
var len = Math.floor(Arr.length / 2);
|
var len = Math.floor(Arr.length / 2);
|
||||||
for (var i = 0; i < len; i++) {
|
for (var i = 0; i < len; i++) {
|
||||||
var Hash = shaarr2(Arr[i * 2], Arr[i * 2 + 1]);
|
var Hash = global.shaarr2(Arr[i * 2], Arr[i * 2 + 1]);
|
||||||
Arr2.push(Hash);
|
Arr2.push(Hash);
|
||||||
}
|
}
|
||||||
if (len * 2 !== Arr.length) {
|
if (len * 2 !== Arr.length) {
|
||||||
@@ -555,7 +546,7 @@ function CheckMerkleProof(ArrL, ArrM, ArrR) {
|
|||||||
var length2 = Math.floor(Arr.length / 2);
|
var length2 = Math.floor(Arr.length / 2);
|
||||||
Arr2 = [];
|
Arr2 = [];
|
||||||
for (i = 0; i < length2; i++) {
|
for (i = 0; i < length2; i++) {
|
||||||
var Hash = global.sha3(arr2(Arr[i * 2], Arr[i * 2 + 1]));
|
var Hash = global.sha3(global.arr2(Arr[i * 2], Arr[i * 2 + 1]));
|
||||||
Arr2.push(Hash);
|
Arr2.push(Hash);
|
||||||
}
|
}
|
||||||
if (Arr.length / 2 > length2)
|
if (Arr.length / 2 > length2)
|
||||||
@@ -593,7 +584,7 @@ function UpdateMerklTree(Tree, CalcMap: any, NumLevel) {
|
|||||||
if (i2 < len2) {
|
if (i2 < len2) {
|
||||||
Count++;
|
Count++;
|
||||||
CalcMap2[i2] = 1;
|
CalcMap2[i2] = 1;
|
||||||
HashArr2[i2] = global.sha3(arr2(HashArr[i2 * 2], HashArr[i2 * 2 + 1]));
|
HashArr2[i2] = global.sha3(global.arr2(HashArr[i2 * 2], HashArr[i2 * 2 + 1]));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (key as any > LastIndex) {
|
if (key as any > LastIndex) {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
const fs = require('fs');
|
import * as fs from 'fs'
|
||||||
const DBLib = require("./db");
|
const DBLib = require("./db");
|
||||||
const DBRow = require("./db-row");
|
const DBRow = require("./db-row");
|
||||||
global.BlockDB = new DBLib();
|
global.BlockDB = new DBLib();
|
||||||
@@ -35,24 +35,33 @@ const WorkStructHeader2 = {};
|
|||||||
const DEFAULT_DB_VERSION = 2;
|
const DEFAULT_DB_VERSION = 2;
|
||||||
module.exports = class CDB extends require("../code")
|
module.exports = class CDB extends require("../code")
|
||||||
{
|
{
|
||||||
|
DBHeader100
|
||||||
|
BlockNumDB
|
||||||
|
BlockNumDBMin
|
||||||
|
CurrentBlockNum
|
||||||
|
CheckOnStartComplete
|
||||||
|
UseTruncateBlockDB
|
||||||
|
MapHeader
|
||||||
|
StatMap
|
||||||
|
PrevBlockChainArr
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
var bWriteMode = (global.PROCESS_NAME === "MAIN");
|
var bWriteMode = (global.PROCESS_NAME === "MAIN");
|
||||||
global.DB_VERSION = DEFAULT_DB_VERSION
|
global.DB_VERSION = DEFAULT_DB_VERSION
|
||||||
var FileItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, bWriteMode);
|
var FileItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, bWriteMode);
|
||||||
var FileItem2 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, bWriteMode);
|
var FileItem2 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, bWriteMode);
|
||||||
if (FileItem2.size)
|
if (FileItem2.size)
|
||||||
global.DB_VERSION = 2
|
global.DB_VERSION = 2
|
||||||
else
|
else
|
||||||
if (FileItem1.size)
|
if (FileItem1.size)
|
||||||
global.DB_VERSION = 1
|
global.DB_VERSION = 1
|
||||||
BlockDB.OpenDBFile(FILE_NAME_BODY, bWriteMode)
|
global.BlockDB.OpenDBFile(FILE_NAME_BODY, bWriteMode)
|
||||||
this.DBHeader100 = new DBRow("block-header100", 32 + 32, "{Hash100:hash,Hash:hash}", !bWriteMode)
|
this.DBHeader100 = new DBRow("block-header100", 32 + 32, "{Hash100:hash,Hash:hash}", !bWriteMode)
|
||||||
this.BlockNumDB = 0
|
this.BlockNumDB = 0
|
||||||
this.BlockNumDBMin = 0
|
this.BlockNumDBMin = 0
|
||||||
this.ClearBufMap()
|
this.ClearBufMap()
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
SERVER.ReadStateTX()
|
global.SERVER.ReadStateTX()
|
||||||
}, 10)
|
}, 10)
|
||||||
}
|
}
|
||||||
ReadStateTX() {
|
ReadStateTX() {
|
||||||
@@ -62,10 +71,10 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
LoadMemBlocksOnStart() {
|
LoadMemBlocksOnStart() {
|
||||||
this.CurrentBlockNum = GetCurrentBlockNumByTime()
|
this.CurrentBlockNum = global.GetCurrentBlockNumByTime()
|
||||||
for (var i = this.BlockNumDB - BLOCK_COUNT_IN_MEMORY; i <= this.BlockNumDB; i++)
|
for (var i = this.BlockNumDB - global.BLOCK_COUNT_IN_MEMORY; i <= this.BlockNumDB; i++)
|
||||||
if (i >= 0) {
|
if (i >= 0) {
|
||||||
if (i >= this.BlockNumDB - BLOCK_PROCESSING_LENGTH * 5)
|
if (i >= this.BlockNumDB - global.BLOCK_PROCESSING_LENGTH * 5)
|
||||||
this.GetBlock(i, true, true)
|
this.GetBlock(i, true, true)
|
||||||
else
|
else
|
||||||
this.GetBlock(i, true, false)
|
this.GetBlock(i, true, false)
|
||||||
@@ -74,12 +83,12 @@ module.exports = class CDB extends require("../code")
|
|||||||
GetMaxNumBlockDB() {
|
GetMaxNumBlockDB() {
|
||||||
var FileItem, BlockNum;
|
var FileItem, BlockNum;
|
||||||
if (global.DB_VERSION === 2) {
|
if (global.DB_VERSION === 2) {
|
||||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
||||||
BlockNum = (FileItem.size / BLOCK_HEADER_SIZE2) - 1
|
BlockNum = (FileItem.size / global.BLOCK_HEADER_SIZE2) - 1
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER)
|
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER)
|
||||||
BlockNum = (FileItem.size / BLOCK_HEADER_SIZE) - 1
|
BlockNum = (FileItem.size / global.BLOCK_HEADER_SIZE) - 1
|
||||||
}
|
}
|
||||||
return BlockNum;
|
return BlockNum;
|
||||||
}
|
}
|
||||||
@@ -88,7 +97,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
var BlockNum = this.GetMaxNumBlockDB();
|
var BlockNum = this.GetMaxNumBlockDB();
|
||||||
if (global.NO_CHECK_BLOCKNUM_ONSTART) {
|
if (global.NO_CHECK_BLOCKNUM_ONSTART) {
|
||||||
this.BlockNumDB = this.CheckBlocksOnStartFoward(BlockNum - 2, 0)
|
this.BlockNumDB = this.CheckBlocksOnStartFoward(BlockNum - 2, 0)
|
||||||
ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
global.ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BlockNum = this.CheckBlocksOnStartReverse(BlockNum)
|
BlockNum = this.CheckBlocksOnStartReverse(BlockNum)
|
||||||
@@ -97,7 +106,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
if (this.BlockNumDB >= global.BLOCK_PROCESSING_LENGTH2) {
|
if (this.BlockNumDB >= global.BLOCK_PROCESSING_LENGTH2) {
|
||||||
this.TruncateBlockDB(this.BlockNumDB)
|
this.TruncateBlockDB(this.BlockNumDB)
|
||||||
}
|
}
|
||||||
ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
global.ToLog("START_BLOCK_NUM:" + this.BlockNumDB, 2)
|
||||||
this.CheckOnStartComplete = 1
|
this.CheckOnStartComplete = 1
|
||||||
}
|
}
|
||||||
CheckBlocksOnStartReverse(StartNum) {
|
CheckBlocksOnStartReverse(StartNum) {
|
||||||
@@ -106,21 +115,21 @@ module.exports = class CDB extends require("../code")
|
|||||||
var PrevBlock;
|
var PrevBlock;
|
||||||
for (var num = StartNum; num >= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2; num -= delta) {
|
for (var num = StartNum; num >= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2; num -= delta) {
|
||||||
var Block = this.ReadBlockHeaderDB(num);
|
var Block = this.ReadBlockHeaderDB(num);
|
||||||
if (!Block || IsZeroArr(Block.SumHash)) {
|
if (!Block || global.IsZeroArr(Block.SumHash)) {
|
||||||
delta++
|
delta++
|
||||||
Count = 0
|
Count = 0
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var PrevBlock = this.ReadBlockHeaderDB(num - 1);
|
var PrevBlock = this.ReadBlockHeaderDB(num - 1);
|
||||||
if (!PrevBlock || IsZeroArr(PrevBlock.SumHash)) {
|
if (!PrevBlock || global.IsZeroArr(PrevBlock.SumHash)) {
|
||||||
Count = 0
|
Count = 0
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var SumHash = shaarr2(PrevBlock.SumHash, Block.Hash);
|
var SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||||
if (global.CompareArr(SumHash, Block.SumHash) === 0) {
|
if (global.CompareArr(SumHash, Block.SumHash) === 0) {
|
||||||
delta = 1
|
delta = 1
|
||||||
Count++
|
Count++
|
||||||
if (Count > COUNT_BLOCKS_FOR_LOAD / 10)
|
if (Count > global.COUNT_BLOCKS_FOR_LOAD / 10)
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -135,7 +144,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
if (StartNum < this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2)
|
if (StartNum < this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2)
|
||||||
StartNum = this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2
|
StartNum = this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2
|
||||||
var MaxNum = global.DApps.Accounts.GetHashedMaxBlockNum();
|
var MaxNum = global.DApps.Accounts.GetHashedMaxBlockNum();
|
||||||
var BlockNumTime = GetCurrentBlockNumByTime();
|
var BlockNumTime = global.GetCurrentBlockNumByTime();
|
||||||
if (BlockNumTime < MaxNum)
|
if (BlockNumTime < MaxNum)
|
||||||
MaxNum = BlockNumTime
|
MaxNum = BlockNumTime
|
||||||
var arr = [];
|
var arr = [];
|
||||||
@@ -148,37 +157,37 @@ module.exports = class CDB extends require("../code")
|
|||||||
if (!Block)
|
if (!Block)
|
||||||
return num > 0 ? num - 1 : 0;
|
return num > 0 ? num - 1 : 0;
|
||||||
if (num % 100000 === 0)
|
if (num % 100000 === 0)
|
||||||
ToLog("CheckBlocksOnStartFoward: " + num)
|
global.ToLog("CheckBlocksOnStartFoward: " + num)
|
||||||
if (bCheckBody) {
|
if (bCheckBody) {
|
||||||
var TreeHash = CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
var TreeHash = global.CalcTreeHashFromArrBody(Block.BlockNum, Block.arrContent);
|
||||||
if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) {
|
if (global.CompareArr(Block.TreeHash, TreeHash) !== 0) {
|
||||||
ToLog("BAD TreeHash block=" + Block.BlockNum)
|
global.ToLog("BAD TreeHash block=" + Block.BlockNum)
|
||||||
return num > 0 ? num - 1 : 0;
|
return num > 0 ? num - 1 : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (PrevBlock) {
|
if (PrevBlock) {
|
||||||
if (arr.length !== BLOCK_PROCESSING_LENGTH) {
|
if (arr.length !== global.BLOCK_PROCESSING_LENGTH) {
|
||||||
var start = num - global.BLOCK_PROCESSING_LENGTH2;
|
var start = num - global.BLOCK_PROCESSING_LENGTH2;
|
||||||
for (var n = 0; n < BLOCK_PROCESSING_LENGTH; n++) {
|
for (var n = 0; n < global.BLOCK_PROCESSING_LENGTH; n++) {
|
||||||
var Prev = this.ReadBlockHeaderDB(start + n);
|
var Prev = this.ReadBlockHeaderDB(start + n);
|
||||||
arr.push(Prev.Hash)
|
arr.push(Prev.Hash)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
arr.shift()
|
arr.shift()
|
||||||
var Prev = this.ReadBlockHeaderDB(num - BLOCK_PROCESSING_LENGTH - 1);
|
var Prev = this.ReadBlockHeaderDB(num - global.BLOCK_PROCESSING_LENGTH - 1);
|
||||||
arr.push(Prev.Hash)
|
arr.push(Prev.Hash)
|
||||||
}
|
}
|
||||||
var PrevHash = CalcHashFromArray(arr, true);
|
var PrevHash = global.CalcHashFromArray(arr, true);
|
||||||
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
var SeqHash = this.GetSeqHash(Block.BlockNum, PrevHash, Block.TreeHash);
|
||||||
var Value = GetHashFromSeqAddr(SeqHash, Block.AddrHash, Block.BlockNum, PrevHash);
|
var Value = global.GetHashFromSeqAddr(SeqHash, Block.AddrHash, Block.BlockNum, PrevHash);
|
||||||
if (global.CompareArr(Value.Hash, Block.Hash) !== 0) {
|
if (global.CompareArr(Value.Hash, Block.Hash) !== 0) {
|
||||||
ToLog("=================== FIND ERR Hash in " + Block.BlockNum + " bCheckBody=" + bCheckBody)
|
global.ToLog("=================== FIND ERR Hash in " + Block.BlockNum + " bCheckBody=" + bCheckBody)
|
||||||
return num > 0 ? num - 1 : 0;
|
return num > 0 ? num - 1 : 0;
|
||||||
}
|
}
|
||||||
var SumHash = shaarr2(PrevBlock.SumHash, Block.Hash);
|
var SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||||
if (global.CompareArr(SumHash, Block.SumHash) !== 0) {
|
if (global.CompareArr(SumHash, Block.SumHash) !== 0) {
|
||||||
ToLog("=================== FIND ERR SumHash in " + Block.BlockNum)
|
global.ToLog("=================== FIND ERR SumHash in " + Block.BlockNum)
|
||||||
return num > 0 ? num - 1 : 0;
|
return num > 0 ? num - 1 : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,23 +197,23 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
WriteBlockDB(Block) {
|
WriteBlockDB(Block) {
|
||||||
var startTime = process.hrtime();
|
var startTime = process.hrtime();
|
||||||
if (Block.TrCount === 0 && !IsZeroArr(Block.TreeHash)) {
|
if (Block.TrCount === 0 && !global.IsZeroArr(Block.TreeHash)) {
|
||||||
ToLogTrace("ERROR WRITE TrCount BLOCK:" + Block.BlockNum)
|
global.ToLogTrace("ERROR WRITE TrCount BLOCK:" + Block.BlockNum)
|
||||||
throw "ERROR WRITE";
|
throw "ERROR WRITE";
|
||||||
}
|
}
|
||||||
var Ret = this.WriteBodyDB(Block);
|
var Ret = this.WriteBodyDB(Block);
|
||||||
if (Ret) {
|
if (Ret) {
|
||||||
Ret = this.WriteBlockDBFinaly(Block)
|
Ret = this.WriteBlockDBFinaly(Block)
|
||||||
}
|
}
|
||||||
ADD_TO_STAT_TIME("MAX:WriteBlockDB", startTime)
|
global.ADD_TO_STAT_TIME("MAX:WriteBlockDB", startTime)
|
||||||
ADD_TO_STAT_TIME("WriteBlockDB", startTime)
|
global.ADD_TO_STAT_TIME("WriteBlockDB", startTime)
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
WriteBlockDBFinaly(Block) {
|
WriteBlockDBFinaly(Block) {
|
||||||
var Ret = this.WriteBlockHeaderDB(Block);
|
var Ret = this.WriteBlockHeaderDB(Block);
|
||||||
if (Ret) {
|
if (Ret) {
|
||||||
if (Block.TrDataLen === 0 && !IsZeroArr(Block.TreeHash)) {
|
if (Block.TrDataLen === 0 && !global.IsZeroArr(Block.TreeHash)) {
|
||||||
ToLogTrace("ERROR WRITE FINAL TrDataLen BLOCK")
|
global.ToLogTrace("ERROR WRITE FINAL TrDataLen BLOCK")
|
||||||
throw "ERROR WRITE";
|
throw "ERROR WRITE";
|
||||||
}
|
}
|
||||||
this.OnWriteBlock(Block)
|
this.OnWriteBlock(Block)
|
||||||
@@ -224,28 +233,28 @@ module.exports = class CDB extends require("../code")
|
|||||||
WriteBodyResultDB(Block) {
|
WriteBodyResultDB(Block) {
|
||||||
var arrTr = Block.arrContentResult;
|
var arrTr = Block.arrContentResult;
|
||||||
if (Block.TrDataPos && Block.TrDataLen && Block.VersionBody && arrTr && arrTr.length) {
|
if (Block.TrDataPos && Block.TrDataLen && Block.VersionBody && arrTr && arrTr.length) {
|
||||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
||||||
var FD = FileItem.fd;
|
var FD = FileItem.fd;
|
||||||
var Size = arrTr.length * 6;
|
var Size = arrTr.length * 6;
|
||||||
var Position = Block.TrDataPos + Block.TrDataLen - Size;
|
var Position = Block.TrDataPos + Block.TrDataLen - Size;
|
||||||
if (FileItem.size < Position + Size) {
|
if (FileItem.size < Position + Size) {
|
||||||
TO_ERROR_LOG("DB", 241, "Error Position in WriteBodyResultDB on block: " + Block.BlockNum)
|
global.TO_ERROR_LOG("DB", 241, "Error Position in WriteBodyResultDB on block: " + Block.BlockNum)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var BufWrite = BufLib.GetNewBuffer(Size);
|
var BufWrite = global.BufLib.GetNewBuffer(Size);
|
||||||
for (var i = 0; i < arrTr.length; i++) {
|
for (var i = 0; i < arrTr.length; i++) {
|
||||||
BufWrite.Write(arrTr[i], "uint")
|
BufWrite.Write(arrTr[i], "uint")
|
||||||
}
|
}
|
||||||
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
||||||
if (written !== BufWrite.length) {
|
if (written !== BufWrite.length) {
|
||||||
TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
|
global.TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
WriteBodyDB(Block) {
|
WriteBodyDB(Block) {
|
||||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
||||||
var FD = FileItem.fd;
|
var FD = FileItem.fd;
|
||||||
var Position = FileItem.size;
|
var Position = FileItem.size;
|
||||||
Block.TrDataPos = Position
|
Block.TrDataPos = Position
|
||||||
@@ -264,7 +273,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
Block.VersionBody = 1
|
Block.VersionBody = 1
|
||||||
TrDataLen += arrTr.length * 6
|
TrDataLen += arrTr.length * 6
|
||||||
var BufWrite = BufLib.GetNewBuffer(TrDataLen);
|
var BufWrite = global.BufLib.GetNewBuffer(TrDataLen);
|
||||||
BufWrite.Write(arrTr.length, "uint16")
|
BufWrite.Write(arrTr.length, "uint16")
|
||||||
BufWrite.Write(Block.VersionBody, "uint16")
|
BufWrite.Write(Block.VersionBody, "uint16")
|
||||||
for (var i = 0; i < arrTr.length; i++) {
|
for (var i = 0; i < arrTr.length; i++) {
|
||||||
@@ -273,7 +282,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
||||||
if (written !== BufWrite.length) {
|
if (written !== BufWrite.length) {
|
||||||
TO_ERROR_LOG("DB", 240, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
|
global.TO_ERROR_LOG("DB", 240, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FileItem.size += TrDataLen
|
FileItem.size += TrDataLen
|
||||||
@@ -281,9 +290,9 @@ module.exports = class CDB extends require("../code")
|
|||||||
Block.TrDataLen = TrDataLen
|
Block.TrDataLen = TrDataLen
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
WriteBlockHeaderDB(Block, bPreSave) {
|
WriteBlockHeaderDB(Block, bPreSave?) {
|
||||||
if (!bPreSave && Block.BlockNum > this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) {
|
if (!bPreSave && Block.BlockNum > this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) {
|
||||||
if (USE_CHECK_SAVE_DB)
|
if (global.USE_CHECK_SAVE_DB)
|
||||||
if (!this.CheckSeqHashDB(Block, "WriteBlockHeaderDB"))
|
if (!this.CheckSeqHashDB(Block, "WriteBlockHeaderDB"))
|
||||||
return false;
|
return false;
|
||||||
this.WriteBlockHeader100(Block)
|
this.WriteBlockHeader100(Block)
|
||||||
@@ -291,17 +300,17 @@ module.exports = class CDB extends require("../code")
|
|||||||
this.BlockNumDB = Block.BlockNum - 1
|
this.BlockNumDB = Block.BlockNum - 1
|
||||||
var PrevBlock = this.ReadBlockHeaderDB(Block.BlockNum - 1);
|
var PrevBlock = this.ReadBlockHeaderDB(Block.BlockNum - 1);
|
||||||
if (!PrevBlock) {
|
if (!PrevBlock) {
|
||||||
ToLogTrace("Cant write header block:" + Block.BlockNum + " prev block not found")
|
global.ToLogTrace("Cant write header block:" + Block.BlockNum + " prev block not found")
|
||||||
throw "ERR: PREV BLOCK NOT FOUND";
|
throw "ERR: PREV BLOCK NOT FOUND";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Block.SumHash = shaarr2(PrevBlock.SumHash, Block.Hash)
|
Block.SumHash = global.shaarr2(PrevBlock.SumHash, Block.Hash)
|
||||||
Block.SumPow = PrevBlock.SumPow + GetPowPower(Block.PowHash)
|
Block.SumPow = PrevBlock.SumPow + global.GetPowPower(Block.PowHash)
|
||||||
}
|
}
|
||||||
if (global.DB_VERSION === 2) {
|
if (global.DB_VERSION === 2) {
|
||||||
return this.WriteBlockHeaderToFile2(Block);
|
return this.WriteBlockHeaderToFile2(Block);
|
||||||
}
|
}
|
||||||
var BufWrite = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE);
|
var BufWrite = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE);
|
||||||
this.BlockHeaderToBuf(BufWrite, Block)
|
this.BlockHeaderToBuf(BufWrite, Block)
|
||||||
var Res = this.WriteBufHeaderToFile1(BufWrite, Block.BlockNum);
|
var Res = this.WriteBufHeaderToFile1(BufWrite, Block.BlockNum);
|
||||||
return Res;
|
return Res;
|
||||||
@@ -311,8 +320,8 @@ module.exports = class CDB extends require("../code")
|
|||||||
var BlockNum = Math.trunc(Block.BlockNum);
|
var BlockNum = Math.trunc(Block.BlockNum);
|
||||||
this.ClearBufMap()
|
this.ClearBufMap()
|
||||||
Block.VersionDB = global.DB_VERSION
|
Block.VersionDB = global.DB_VERSION
|
||||||
BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader)
|
BufWrite = global.BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader)
|
||||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1)
|
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1)
|
||||||
if (!Block.FilePos) {
|
if (!Block.FilePos) {
|
||||||
if (!FileItem.size)
|
if (!FileItem.size)
|
||||||
FileItem.size = 100
|
FileItem.size = 100
|
||||||
@@ -320,21 +329,21 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Block.FilePos)
|
written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Block.FilePos)
|
||||||
if (written !== BufWrite.length) {
|
if (written !== BufWrite.length) {
|
||||||
TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
|
global.TO_ERROR_LOG("DB", 242, "Error write to file block-chain : " + written + " <> " + BufWrite.length)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (Block.FilePos >= FileItem.size) {
|
if (Block.FilePos >= FileItem.size) {
|
||||||
FileItem.size = Block.FilePos + BufWrite.length
|
FileItem.size = Block.FilePos + BufWrite.length
|
||||||
}
|
}
|
||||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
||||||
var Position = BlockNum * BLOCK_HEADER_SIZE2;
|
var Position = BlockNum * global.BLOCK_HEADER_SIZE2;
|
||||||
BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_HEADER_VERSION2, BLOCK_HEADER_SIZE2, WorkStructHeader2)
|
BufWrite = global.BufLib.GetBufferFromObject(Block, FORMAT_HEADER_VERSION2, global.BLOCK_HEADER_SIZE2, WorkStructHeader2)
|
||||||
written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position)
|
written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position)
|
||||||
if (Position >= FileItem.size) {
|
if (Position >= FileItem.size) {
|
||||||
FileItem.size = Position + BufWrite.length
|
FileItem.size = Position + BufWrite.length
|
||||||
}
|
}
|
||||||
if (written !== BufWrite.length) {
|
if (written !== BufWrite.length) {
|
||||||
TO_ERROR_LOG("DB", 262, "Error write to file block-header :" + written + " <> " + BufWrite.length)
|
global.TO_ERROR_LOG("DB", 262, "Error write to file block-header :" + written + " <> " + BufWrite.length)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -344,14 +353,14 @@ module.exports = class CDB extends require("../code")
|
|||||||
WriteBufHeaderToFile1(BufWrite, BlockNum) {
|
WriteBufHeaderToFile1(BufWrite, BlockNum) {
|
||||||
BlockNum = Math.trunc(BlockNum)
|
BlockNum = Math.trunc(BlockNum)
|
||||||
this.ClearBufMap()
|
this.ClearBufMap()
|
||||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
|
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
|
||||||
var Position = BlockNum * BLOCK_HEADER_SIZE;
|
var Position = BlockNum * global.BLOCK_HEADER_SIZE;
|
||||||
var written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position);
|
var written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position);
|
||||||
if (Position >= FileItem.size) {
|
if (Position >= FileItem.size) {
|
||||||
FileItem.size = Position + BufWrite.length
|
FileItem.size = Position + BufWrite.length
|
||||||
}
|
}
|
||||||
if (written !== BufWrite.length) {
|
if (written !== BufWrite.length) {
|
||||||
TO_ERROR_LOG("DB", 260, "Error write to file block-header :" + written + " <> " + BufWrite.length)
|
global.TO_ERROR_LOG("DB", 260, "Error write to file block-header :" + written + " <> " + BufWrite.length)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -375,10 +384,10 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (Num > 1) {
|
if (Num > 1) {
|
||||||
ToLog("NOT FIND PEVHASH100 BlockNum=" + Block.BlockNum, 2)
|
global.ToLog("NOT FIND PEVHASH100 BlockNum=" + Block.BlockNum, 2)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Hash100 = sha3arr2(PrevHash100, Block.Hash)
|
Hash100 = global.sha3arr2(PrevHash100, Block.Hash)
|
||||||
}
|
}
|
||||||
this.DBHeader100.Write({ Num: Num, Hash100: Hash100, Hash: Block.Hash })
|
this.DBHeader100.Write({ Num: Num, Hash100: Hash100, Hash: Block.Hash })
|
||||||
}
|
}
|
||||||
@@ -397,31 +406,31 @@ module.exports = class CDB extends require("../code")
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Block && !IsZeroArr(Block.TreeHash)) {
|
if (Block && !global.IsZeroArr(Block.TreeHash)) {
|
||||||
ToLogTrace("ERROR arrContent on BlockNum=" + Num)
|
global.ToLogTrace("ERROR arrContent on BlockNum=" + Num)
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Block;
|
return Block;
|
||||||
}
|
}
|
||||||
ReadBlockBodyDB(Block) {
|
ReadBlockBodyDB(Block) {
|
||||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY);
|
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY);
|
||||||
if (Block.TrDataLen > MAX_BLOCK_SIZE * 2) {
|
if (Block.TrDataLen > global.MAX_BLOCK_SIZE * 2) {
|
||||||
ToLogTrace("Error value TrDataLen, BlockNum=" + Block.BlockNum)
|
global.ToLogTrace("Error value TrDataLen, BlockNum=" + Block.BlockNum)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var Position = Block.TrDataPos;
|
var Position = Block.TrDataPos;
|
||||||
var BufRead = BufLib.GetNewBuffer(Block.TrDataLen);
|
var BufRead = global.BufLib.GetNewBuffer(Block.TrDataLen);
|
||||||
var bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position);
|
var bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position);
|
||||||
if (bytesRead !== BufRead.length) {
|
if (bytesRead !== BufRead.length) {
|
||||||
TO_ERROR_LOG("DB", 272, "Error read block-body file: " + FileItem.name + " from POS:" + Position + " bytesRead=" + bytesRead + " of " + BufRead.length + " BlockNum=" + Block.BlockNum)
|
global.TO_ERROR_LOG("DB", 272, "Error read block-body file: " + FileItem.name + " from POS:" + Position + " bytesRead=" + bytesRead + " of " + BufRead.length + " BlockNum=" + Block.BlockNum)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Block.arrContent = []
|
Block.arrContent = []
|
||||||
Block.arrContentResult = []
|
Block.arrContentResult = []
|
||||||
var TrCount = BufRead.Read("uint16");
|
var TrCount = BufRead.Read("uint16");
|
||||||
Block.VersionBody = BufRead.Read("uint16")
|
Block.VersionBody = BufRead.Read("uint16")
|
||||||
if (TrCount <= MAX_TRANSACTION_COUNT) {
|
if (TrCount <= global.MAX_TRANSACTION_COUNT) {
|
||||||
for (var i = 0; i < TrCount; i++) {
|
for (var i = 0; i < TrCount; i++) {
|
||||||
var body = BufRead.Read("tr");
|
var body = BufRead.Read("tr");
|
||||||
if (!body)
|
if (!body)
|
||||||
@@ -448,9 +457,9 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
BlockNum = Math.trunc(BlockNum)
|
BlockNum = Math.trunc(BlockNum)
|
||||||
var Block, BufRead, FileItem, bytesRead, Position;
|
var Block, BufRead, FileItem, bytesRead, Position;
|
||||||
BufRead = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE)
|
BufRead = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE)
|
||||||
Position = BlockNum * BLOCK_HEADER_SIZE
|
Position = BlockNum * global.BLOCK_HEADER_SIZE
|
||||||
var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER);
|
var FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER);
|
||||||
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
||||||
if (bytesRead !== BufRead.length)
|
if (bytesRead !== BufRead.length)
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -467,21 +476,21 @@ module.exports = class CDB extends require("../code")
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
BlockNum = Math.trunc(BlockNum)
|
BlockNum = Math.trunc(BlockNum)
|
||||||
Position = BlockNum * BLOCK_HEADER_SIZE2
|
Position = BlockNum * global.BLOCK_HEADER_SIZE2
|
||||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2)
|
||||||
BufRead = BufLib.GetNewBuffer(BLOCK_HEADER_SIZE2)
|
BufRead = global.BufLib.GetNewBuffer(global.BLOCK_HEADER_SIZE2)
|
||||||
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
||||||
if (bytesRead !== BufRead.length)
|
if (bytesRead !== BufRead.length)
|
||||||
return undefined;
|
return undefined;
|
||||||
Block = BufLib.GetObjectFromBuffer(BufRead, FORMAT_HEADER_VERSION2, WorkStructHeader2)
|
Block = global.BufLib.GetObjectFromBuffer(BufRead, FORMAT_HEADER_VERSION2, WorkStructHeader2)
|
||||||
if (!Block.FilePos) {
|
if (!Block.FilePos) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
Position = Block.FilePos
|
Position = Block.FilePos
|
||||||
FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY)
|
FileItem = global.BlockDB.OpenDBFile(FILE_NAME_BODY)
|
||||||
BufRead = BufLib.GetNewBuffer(200)
|
BufRead = global.BufLib.GetNewBuffer(200)
|
||||||
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
bytesRead = fs.readSync(FileItem.fd, BufRead, 0, BufRead.length, Position)
|
||||||
Block = BufLib.GetObjectFromBuffer(BufRead, FORMAT_STREAM_HEADER, WorkStructStreamHeader)
|
Block = global.BufLib.GetObjectFromBuffer(BufRead, FORMAT_STREAM_HEADER, WorkStructStreamHeader)
|
||||||
if (Block.VersionDB !== global.DB_VERSION) {
|
if (Block.VersionDB !== global.DB_VERSION) {
|
||||||
throw ("ERROR Block.VersionDB");
|
throw ("ERROR Block.VersionDB");
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -516,7 +525,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
this.UseTruncateBlockDB = undefined
|
this.UseTruncateBlockDB = undefined
|
||||||
var Block = this.ReadBlockDB(LastBlockNum);
|
var Block = this.ReadBlockDB(LastBlockNum);
|
||||||
if (!Block) {
|
if (!Block) {
|
||||||
ToLog("************ ERROR TruncateBlockDB - not found block=" + LastBlockNum, 2)
|
global.ToLog("************ ERROR TruncateBlockDB - not found block=" + LastBlockNum, 2)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.WriteBlockDB(Block)
|
this.WriteBlockDB(Block)
|
||||||
@@ -524,12 +533,12 @@ module.exports = class CDB extends require("../code")
|
|||||||
TruncateBlockDBInner(LastBlock) {
|
TruncateBlockDBInner(LastBlock) {
|
||||||
var FItem1, size;
|
var FItem1, size;
|
||||||
if (global.DB_VERSION === 2) {
|
if (global.DB_VERSION === 2) {
|
||||||
FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1)
|
||||||
size = (LastBlock.BlockNum + 1) * BLOCK_HEADER_SIZE2
|
size = (LastBlock.BlockNum + 1) * global.BLOCK_HEADER_SIZE2
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1)
|
FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1)
|
||||||
size = (LastBlock.BlockNum + 1) * BLOCK_HEADER_SIZE
|
size = (LastBlock.BlockNum + 1) * global.BLOCK_HEADER_SIZE
|
||||||
}
|
}
|
||||||
if (size < 0)
|
if (size < 0)
|
||||||
size = 0
|
size = 0
|
||||||
@@ -543,13 +552,13 @@ module.exports = class CDB extends require("../code")
|
|||||||
ClearDataBase() {
|
ClearDataBase() {
|
||||||
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC)
|
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC)
|
||||||
global.TX_PROCESS.RunRPC("ClearDataBase", {})
|
global.TX_PROCESS.RunRPC("ClearDataBase", {})
|
||||||
var FItem1 = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
|
var FItem1 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
|
||||||
FItem1.size = 0
|
FItem1.size = 0
|
||||||
fs.ftruncateSync(FItem1.fd, FItem1.size)
|
fs.ftruncateSync(FItem1.fd, FItem1.size)
|
||||||
var FItem12 = BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1);
|
var FItem12 = global.BlockDB.OpenDBFile(FILE_NAME_HEADER2, 1);
|
||||||
FItem12.size = 0
|
FItem12.size = 0
|
||||||
fs.ftruncateSync(FItem12.fd, FItem12.size)
|
fs.ftruncateSync(FItem12.fd, FItem12.size)
|
||||||
var FItem2 = BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
var FItem2 = global.BlockDB.OpenDBFile(FILE_NAME_BODY, 1);
|
||||||
FItem2.size = 0
|
FItem2.size = 0
|
||||||
fs.ftruncateSync(FItem2.fd, FItem2.size)
|
fs.ftruncateSync(FItem2.fd, FItem2.size)
|
||||||
this.DBHeader100.Truncate(- 1)
|
this.DBHeader100.Truncate(- 1)
|
||||||
@@ -567,13 +576,13 @@ module.exports = class CDB extends require("../code")
|
|||||||
Close() {
|
Close() {
|
||||||
this.ClearBufMap()
|
this.ClearBufMap()
|
||||||
this.ReadStateTX()
|
this.ReadStateTX()
|
||||||
BlockDB.CloseDBFile(FILE_NAME_HEADER)
|
global.BlockDB.CloseDBFile(FILE_NAME_HEADER)
|
||||||
BlockDB.CloseDBFile(FILE_NAME_HEADER2)
|
global.BlockDB.CloseDBFile(FILE_NAME_HEADER2)
|
||||||
BlockDB.CloseDBFile(FILE_NAME_BODY)
|
global.BlockDB.CloseDBFile(FILE_NAME_BODY)
|
||||||
this.DBHeader100.Close()
|
this.DBHeader100.Close()
|
||||||
}
|
}
|
||||||
RewriteAllTransactions() {
|
RewriteAllTransactions() {
|
||||||
if (TX_PROCESS.Worker) {
|
if (global.TX_PROCESS.Worker) {
|
||||||
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC) {
|
if (global.TX_PROCESS && global.TX_PROCESS.RunRPC) {
|
||||||
global.TX_PROCESS.RunRPC("RewriteAllTransactions", {})
|
global.TX_PROCESS.RunRPC("RewriteAllTransactions", {})
|
||||||
return 1;
|
return 1;
|
||||||
@@ -592,10 +601,10 @@ module.exports = class CDB extends require("../code")
|
|||||||
BufWrite.Write(Block.Reserv500, "uint")
|
BufWrite.Write(Block.Reserv500, "uint")
|
||||||
BufWrite.Write(Block.TrDataPos, "uint")
|
BufWrite.Write(Block.TrDataPos, "uint")
|
||||||
BufWrite.Write(Block.TrDataLen, "uint32")
|
BufWrite.Write(Block.TrDataLen, "uint32")
|
||||||
BufWrite.len = len + BLOCK_HEADER_SIZE
|
BufWrite.len = len + global.BLOCK_HEADER_SIZE
|
||||||
}
|
}
|
||||||
BufToBlockHeader(BufRead, Num) {
|
BufToBlockHeader(BufRead, Num) {
|
||||||
var Block = {};
|
var Block: any = {};
|
||||||
var len = BufRead.len;
|
var len = BufRead.len;
|
||||||
Block.TreeHash = BufRead.Read("hash")
|
Block.TreeHash = BufRead.Read("hash")
|
||||||
Block.AddrHash = BufRead.Read("hash")
|
Block.AddrHash = BufRead.Read("hash")
|
||||||
@@ -606,23 +615,23 @@ module.exports = class CDB extends require("../code")
|
|||||||
Block.TrDataPos = BufRead.Read("uint")
|
Block.TrDataPos = BufRead.Read("uint")
|
||||||
Block.TrDataLen = BufRead.Read("uint32")
|
Block.TrDataLen = BufRead.Read("uint32")
|
||||||
Block.TrCount = 0
|
Block.TrCount = 0
|
||||||
BufRead.len = len + BLOCK_HEADER_SIZE
|
BufRead.len = len + global.BLOCK_HEADER_SIZE
|
||||||
return this.PrepareBlockFields(Block, Num);
|
return this.PrepareBlockFields(Block, Num);
|
||||||
}
|
}
|
||||||
PrepareBlockFields(Block, Num) {
|
PrepareBlockFields(Block, Num) {
|
||||||
Block.AddInfo = AddInfoBlock.bind(Block)
|
Block.AddInfo = global.AddInfoBlock.bind(Block)
|
||||||
Block.Info = ""
|
Block.Info = ""
|
||||||
Block.BlockNum = Num
|
Block.BlockNum = Num
|
||||||
Block.SeqHash = this.GetSeqHash(Block.BlockNum, Block.PrevHash, Block.TreeHash)
|
Block.SeqHash = this.GetSeqHash(Block.BlockNum, Block.PrevHash, Block.TreeHash)
|
||||||
if (Block.BlockNum >= global.BLOCK_PROCESSING_LENGTH2) {
|
if (Block.BlockNum >= global.BLOCK_PROCESSING_LENGTH2) {
|
||||||
CalcHashBlockFromSeqAddr(Block)
|
global.CalcHashBlockFromSeqAddr(Block)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Block.Hash = this.GetHashGenesis(Block.BlockNum)
|
Block.Hash = this.GetHashGenesis(Block.BlockNum)
|
||||||
Block.PowHash = Block.Hash
|
Block.PowHash = Block.Hash
|
||||||
}
|
}
|
||||||
Block.Power = GetPowPower(Block.PowHash)
|
Block.Power = global.GetPowPower(Block.PowHash)
|
||||||
if (IsZeroArr(Block.Hash))
|
if (global.IsZeroArr(Block.Hash))
|
||||||
return undefined;
|
return undefined;
|
||||||
return Block;
|
return Block;
|
||||||
}
|
}
|
||||||
@@ -640,7 +649,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
break;
|
break;
|
||||||
Block.Num = Block.BlockNum
|
Block.Num = Block.BlockNum
|
||||||
if (Block.AddrHash) {
|
if (Block.AddrHash) {
|
||||||
Block.Miner = ReadUintFromArr(Block.AddrHash, 0)
|
Block.Miner = global.ReadUintFromArr(Block.AddrHash, 0)
|
||||||
if (Block.BlockNum < 16 || Block.Miner > MaxAccount)
|
if (Block.BlockNum < 16 || Block.Miner > MaxAccount)
|
||||||
Block.Miner = 0
|
Block.Miner = 0
|
||||||
if (bMinerName && Block.Miner) {
|
if (bMinerName && Block.Miner) {
|
||||||
@@ -650,7 +659,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
else
|
else
|
||||||
Block.MinerName = ""
|
Block.MinerName = ""
|
||||||
}
|
}
|
||||||
var Value = GetHashFromSeqAddr(Block.SeqHash, Block.AddrHash, Block.BlockNum, Block.PrevHash);
|
var Value = global.GetHashFromSeqAddr(Block.SeqHash, Block.AddrHash, Block.BlockNum, Block.PrevHash);
|
||||||
Block.Hash1 = Value.Hash1
|
Block.Hash1 = Value.Hash1
|
||||||
Block.Hash2 = Value.Hash2
|
Block.Hash2 = Value.Hash2
|
||||||
}
|
}
|
||||||
@@ -659,14 +668,14 @@ module.exports = class CDB extends require("../code")
|
|||||||
var Bytes = Block.TrDataLen;
|
var Bytes = Block.TrDataLen;
|
||||||
var Pow = Block.Power;
|
var Pow = Block.Power;
|
||||||
var Miner = Block.Miner;
|
var Miner = Block.Miner;
|
||||||
var Date = DateFromBlock(Block.BlockNum);
|
var Date = global.DateFromBlock(Block.BlockNum);
|
||||||
try {
|
try {
|
||||||
if (!eval(Filter))
|
if (!eval(Filter))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
if (!WasError)
|
if (!WasError)
|
||||||
ToLog(e)
|
global.ToLog(e)
|
||||||
WasError = 1
|
WasError = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -686,7 +695,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
continue;
|
continue;
|
||||||
if (num >= Block.arrContent.length)
|
if (num >= Block.arrContent.length)
|
||||||
break;
|
break;
|
||||||
var Tr = { body: Block.arrContent[num] };
|
var Tr: any = { body: Block.arrContent[num] };
|
||||||
this.CheckCreateTransactionObject(Tr, 1)
|
this.CheckCreateTransactionObject(Tr, 1)
|
||||||
Tr.Num = num
|
Tr.Num = num
|
||||||
Tr.Type = Tr.body[0]
|
Tr.Type = Tr.body[0]
|
||||||
@@ -694,7 +703,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
Tr.Body = []
|
Tr.Body = []
|
||||||
for (var j = 0; j < Tr.body.length; j++)
|
for (var j = 0; j < Tr.body.length; j++)
|
||||||
Tr.Body[j] = Tr.body[j]
|
Tr.Body[j] = Tr.body[j]
|
||||||
var App = DAppByType[Tr.Type];
|
var App = global.DAppByType[Tr.Type];
|
||||||
if (App) {
|
if (App) {
|
||||||
Tr.Script = App.GetScriptTransaction(Tr.body)
|
Tr.Script = App.GetScriptTransaction(Tr.body)
|
||||||
if (BlockNum >= this.BlockNumDBMin)
|
if (BlockNum >= this.BlockNumDBMin)
|
||||||
@@ -722,7 +731,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
ClearStat() {
|
ClearStat() {
|
||||||
var MAX_ARR_PERIOD = MAX_STAT_PERIOD * 2 + 10;
|
var MAX_ARR_PERIOD = global.MAX_STAT_PERIOD * 2 + 10;
|
||||||
this.StatMap = {
|
this.StatMap = {
|
||||||
StartPos: 0, StartBlockNum: 0, Length: 0, "ArrPower": new Float64Array(MAX_ARR_PERIOD), "ArrPowerMy": new Float64Array(MAX_ARR_PERIOD),
|
StartPos: 0, StartBlockNum: 0, Length: 0, "ArrPower": new Float64Array(MAX_ARR_PERIOD), "ArrPowerMy": new Float64Array(MAX_ARR_PERIOD),
|
||||||
}
|
}
|
||||||
@@ -755,9 +764,9 @@ module.exports = class CDB extends require("../code")
|
|||||||
if (num <= this.BlockNumDB) {
|
if (num <= this.BlockNumDB) {
|
||||||
var Block = this.ReadBlockHeaderDB(num);
|
var Block = this.ReadBlockHeaderDB(num);
|
||||||
if (Block) {
|
if (Block) {
|
||||||
Power = GetPowPower(Block.PowHash)
|
Power = global.GetPowPower(Block.PowHash)
|
||||||
var Miner = ReadUintFromArr(Block.AddrHash, 0);
|
var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||||
var Nonce = ReadUintFromArr(Block.AddrHash, 6);
|
Nonce = global.ReadUintFromArr(Block.AddrHash, 6);
|
||||||
if (Param.Miner < 0) {
|
if (Param.Miner < 0) {
|
||||||
if (Param.Adviser) {
|
if (Param.Adviser) {
|
||||||
var Adviser = global.DApps.Accounts.GetAdviserByMiner(Map, Miner);
|
var Adviser = global.DApps.Accounts.GetAdviserByMiner(Map, Miner);
|
||||||
@@ -794,9 +803,9 @@ module.exports = class CDB extends require("../code")
|
|||||||
var StepTime = 1;
|
var StepTime = 1;
|
||||||
while (ArrList.length >= MaxSizeArr) {
|
while (ArrList.length >= MaxSizeArr) {
|
||||||
if (Param.bNonce)
|
if (Param.bNonce)
|
||||||
ArrList = ResizeArrMax(ArrList)
|
ArrList = global.ResizeArrMax(ArrList)
|
||||||
else
|
else
|
||||||
ArrList = ResizeArrAvg(ArrList)
|
ArrList = global.ResizeArrAvg(ArrList)
|
||||||
StepTime = StepTime * 2
|
StepTime = StepTime * 2
|
||||||
}
|
}
|
||||||
return { ArrList: ArrList, AvgValue: AvgValue, steptime: StepTime };
|
return { ArrList: ArrList, AvgValue: AvgValue, steptime: StepTime };
|
||||||
@@ -804,7 +813,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
GetStatBlockchain(name, MinLength) {
|
GetStatBlockchain(name, MinLength) {
|
||||||
if (!MinLength)
|
if (!MinLength)
|
||||||
return [];
|
return [];
|
||||||
var MAX_ARR_PERIOD = MAX_STAT_PERIOD * 2 + 10;
|
var MAX_ARR_PERIOD = global.MAX_STAT_PERIOD * 2 + 10;
|
||||||
if (!this.StatMap) {
|
if (!this.StatMap) {
|
||||||
this.ClearStat()
|
this.ClearStat()
|
||||||
}
|
}
|
||||||
@@ -835,9 +844,9 @@ module.exports = class CDB extends require("../code")
|
|||||||
if (num <= MaxNumBlockDB) {
|
if (num <= MaxNumBlockDB) {
|
||||||
var Block = this.ReadBlockHeaderDB(num);
|
var Block = this.ReadBlockHeaderDB(num);
|
||||||
if (Block) {
|
if (Block) {
|
||||||
Power = GetPowPower(Block.PowHash)
|
Power = global.GetPowPower(Block.PowHash)
|
||||||
var Miner = ReadUintFromArr(Block.AddrHash, 0);
|
var Miner = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||||
if (Miner === GENERATE_BLOCK_ACCOUNT) {
|
if (Miner === global.GENERATE_BLOCK_ACCOUNT) {
|
||||||
PowerMy = Power
|
PowerMy = Power
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -860,7 +869,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
this.StatMap["POWER_BLOCKCHAIN"] = arr
|
this.StatMap["POWER_BLOCKCHAIN"] = arr
|
||||||
this.StatMap["POWER_MY_WIN"] = arrmy
|
this.StatMap["POWER_MY_WIN"] = arrmy
|
||||||
}
|
}
|
||||||
var arr = this.StatMap[name];
|
arr = this.StatMap[name];
|
||||||
if (!arr)
|
if (!arr)
|
||||||
arr = []
|
arr = []
|
||||||
var arrT = this.StatMap["POWER_BLOCKCHAIN"];
|
var arrT = this.StatMap["POWER_BLOCKCHAIN"];
|
||||||
@@ -875,8 +884,8 @@ module.exports = class CDB extends require("../code")
|
|||||||
return [Num + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Num + 1];
|
return [Num + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Num + 1];
|
||||||
}
|
}
|
||||||
GetSeqHash(BlockNum, PrevHash, TreeHash) {
|
GetSeqHash(BlockNum, PrevHash, TreeHash) {
|
||||||
var arr = [GetArrFromValue(BlockNum), PrevHash, TreeHash];
|
var arr = [global.GetArrFromValue(BlockNum), PrevHash, TreeHash];
|
||||||
var SeqHash = CalcHashFromArray(arr, true);
|
var SeqHash = global.CalcHashFromArray(arr, true);
|
||||||
return SeqHash;
|
return SeqHash;
|
||||||
}
|
}
|
||||||
CheckCreateTicketObject(Tr, BlockNum, SetTxID) {
|
CheckCreateTicketObject(Tr, BlockNum, SetTxID) {
|
||||||
@@ -885,28 +894,28 @@ module.exports = class CDB extends require("../code")
|
|||||||
var FullHashTicket = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
var FullHashTicket = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||||
for (var i = 0; i < global.TR_TICKET_HASH_LENGTH; i++)
|
for (var i = 0; i < global.TR_TICKET_HASH_LENGTH; i++)
|
||||||
FullHashTicket[i] = Tr.HashTicket[i]
|
FullHashTicket[i] = Tr.HashTicket[i]
|
||||||
WriteUintToArrOnPos(FullHashTicket, Tr.num, global.TR_TICKET_HASH_LENGTH)
|
global.WriteUintToArrOnPos(FullHashTicket, Tr.num, global.TR_TICKET_HASH_LENGTH)
|
||||||
Tr.HashPow = global.sha3(FullHashTicket)
|
Tr.HashPow = global.sha3(FullHashTicket)
|
||||||
Tr.power = GetPowPower(Tr.HashPow)
|
Tr.power = global.GetPowPower(Tr.HashPow)
|
||||||
Tr.TimePow = Tr.power
|
Tr.TimePow = Tr.power
|
||||||
if (SetTxID)
|
if (SetTxID)
|
||||||
Tr.TxID = GetHexFromArr(FullHashTicket.slice(0, TR_TICKET_HASH_LENGTH + 6))
|
Tr.TxID = global.GetHexFromArr(FullHashTicket.slice(0, global.TR_TICKET_HASH_LENGTH + 6))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CheckCreateTransactionObject(Tr, SetTxID, NotPrioritet) {
|
CheckCreateTransactionObject(Tr, SetTxID, NotPrioritet?) {
|
||||||
if (!Tr.HashPow) {
|
if (!Tr.HashPow) {
|
||||||
var Body = Tr.body;
|
var Body = Tr.body;
|
||||||
Tr.IsTx = 1
|
Tr.IsTx = 1
|
||||||
Tr.num = ReadUintFromArr(Body, Body.length - 12)
|
Tr.num = global.ReadUintFromArr(Body, Body.length - 12)
|
||||||
if (Tr.num >= global.BLOCKNUM_TICKET_ALGO)
|
if (Tr.num >= global.BLOCKNUM_TICKET_ALGO)
|
||||||
Tr.HASH = global.sha3(Body)
|
Tr.HASH = global.sha3(Body)
|
||||||
else
|
else
|
||||||
Tr.HASH = global.shaarr(Body)
|
Tr.HASH = global.shaarr(Body)
|
||||||
Tr.HashTicket = Tr.HASH.slice(0, global.TR_TICKET_HASH_LENGTH)
|
Tr.HashTicket = Tr.HASH.slice(0, global.TR_TICKET_HASH_LENGTH)
|
||||||
this.CheckCreateTicketObject(Tr, Tr.num, SetTxID)
|
this.CheckCreateTicketObject(Tr, Tr.num, SetTxID)
|
||||||
Tr.Prioritet = MAX_LENGTH_SENDER_MAP
|
Tr.Prioritet = global.MAX_LENGTH_SENDER_MAP
|
||||||
if (!NotPrioritet && this.GetSenderPrioritet) {
|
if (!NotPrioritet && this.GetSenderPrioritet) {
|
||||||
var App = DAppByType[Body[0]];
|
var App = global.DAppByType[Body[0]];
|
||||||
if (App) {
|
if (App) {
|
||||||
Tr.SenderNum = App.GetSenderNum(Tr.num, Body)
|
Tr.SenderNum = App.GetSenderNum(Tr.num, Body)
|
||||||
if (Tr.SenderNum && Tr.SenderNum > 0) {
|
if (Tr.SenderNum && Tr.SenderNum > 0) {
|
||||||
@@ -919,7 +928,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
}
|
}
|
||||||
BlockChainToBuf(WriteNum, StartNum, EndBlockNum) {
|
BlockChainToBuf(WriteNum, StartNum, EndBlockNum) {
|
||||||
if (StartNum === undefined)
|
if (StartNum === undefined)
|
||||||
return BufLib.GetNewBuffer(10);
|
return global.BufLib.GetNewBuffer(10);
|
||||||
var GetLength = EndBlockNum - StartNum + 1;
|
var GetLength = EndBlockNum - StartNum + 1;
|
||||||
var arr = [];
|
var arr = [];
|
||||||
var arr0 = this.PrevBlockChainArr;
|
var arr0 = this.PrevBlockChainArr;
|
||||||
@@ -927,7 +936,7 @@ module.exports = class CDB extends require("../code")
|
|||||||
var Block = arr0[arr0.length - 1];
|
var Block = arr0[arr0.length - 1];
|
||||||
if (Block.BlockNum >= StartNum && Block.BlockNum <= EndBlockNum) {
|
if (Block.BlockNum >= StartNum && Block.BlockNum <= EndBlockNum) {
|
||||||
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
var BlockDB = this.ReadBlockHeaderDB(Block.BlockNum);
|
||||||
if (!BlockDB || global.CompareArr(Block.SumHash, BlockDB.SumHash) !== 0) {
|
if (!BlockDB || global.CompareArr(Block.SumHash, global.BlockDB.SumHash) !== 0) {
|
||||||
arr0 = undefined
|
arr0 = undefined
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -960,11 +969,11 @@ module.exports = class CDB extends require("../code")
|
|||||||
var CountSend = arr.length - global.BLOCK_PROCESSING_LENGTH2;
|
var CountSend = arr.length - global.BLOCK_PROCESSING_LENGTH2;
|
||||||
var BufWrite;
|
var BufWrite;
|
||||||
if (CountSend <= 0) {
|
if (CountSend <= 0) {
|
||||||
BufWrite = BufLib.GetNewBuffer(10)
|
BufWrite = global.BufLib.GetNewBuffer(10)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var BufSize = 6 + 4 + global.BLOCK_PROCESSING_LENGTH2 * 32 + 32 + 6 + CountSend * 64;
|
var BufSize = 6 + 4 + global.BLOCK_PROCESSING_LENGTH2 * 32 + 32 + 6 + CountSend * 64;
|
||||||
BufWrite = BufLib.GetNewBuffer(BufSize)
|
BufWrite = global.BufLib.GetNewBuffer(BufSize)
|
||||||
BufWrite.Write(StartNum, "uint")
|
BufWrite.Write(StartNum, "uint")
|
||||||
BufWrite.Write(CountSend, "uint32")
|
BufWrite.Write(CountSend, "uint32")
|
||||||
for (var i = 0; i < arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
@@ -993,8 +1002,8 @@ function AddInfo(Block, Str, BlockNumStart) {
|
|||||||
Block.Info = Str;
|
Block.Info = Str;
|
||||||
else
|
else
|
||||||
if (Block.Info.length < 2000) {
|
if (Block.Info.length < 2000) {
|
||||||
var timesend = "" + SERVER.CurrentBlockNum - BlockNumStart;
|
var timesend: any = "" as any + global.SERVER.CurrentBlockNum - BlockNumStart;
|
||||||
var now = GetCurrentTime();
|
var now = global.GetCurrentTime();
|
||||||
timesend += ".[" + now.getSeconds().toStringZ(2) + "." + now.getMilliseconds().toStringZ(3) + "]";
|
timesend += ".[" + now.getSeconds().toStringZ(2) + "." + now.getMilliseconds().toStringZ(3) + "]";
|
||||||
Str = timesend + ": " + Str;
|
Str = timesend + ": " + Str;
|
||||||
Block.Info += "\n" + Str;
|
Block.Info += "\n" + Str;
|
||||||
@@ -1003,19 +1012,19 @@ function AddInfo(Block, Str, BlockNumStart) {
|
|||||||
global.AddInfoChain = function(Str) {
|
global.AddInfoChain = function(Str) {
|
||||||
if (!global.STAT_MODE)
|
if (!global.STAT_MODE)
|
||||||
return;
|
return;
|
||||||
if (this.BlockNumStart > GetCurrentBlockNumByTime() - HISTORY_BLOCK_COUNT)
|
if (this.BlockNumStart > global.GetCurrentBlockNumByTime() - global.HISTORY_BLOCK_COUNT)
|
||||||
AddInfo(this, Str, this.BlockNumStart);
|
AddInfo(this, Str, this.BlockNumStart);
|
||||||
};
|
};
|
||||||
global.AddInfoBlock = function(Block, Str) {
|
global.AddInfoBlock = function(Block, Str) {
|
||||||
if (!global.STAT_MODE)
|
if (!global.STAT_MODE)
|
||||||
return;
|
return;
|
||||||
if (Block && Block.BlockNum && Block.BlockNum > GetCurrentBlockNumByTime() - HISTORY_BLOCK_COUNT)
|
if (Block && Block.BlockNum && Block.BlockNum > global.GetCurrentBlockNumByTime() - global.HISTORY_BLOCK_COUNT)
|
||||||
AddInfo(Block, Str, Block.BlockNum);
|
AddInfo(Block, Str, Block.BlockNum);
|
||||||
};
|
};
|
||||||
global.GetNodeStrPort = function(Node) {
|
global.GetNodeStrPort = function(Node) {
|
||||||
if (!Node)
|
if (!Node)
|
||||||
return "";
|
return "";
|
||||||
if (LOCAL_RUN)
|
if (global.LOCAL_RUN)
|
||||||
return "" + Node.port;
|
return "" + Node.port;
|
||||||
else {
|
else {
|
||||||
if (!Node.ip)
|
if (!Node.ip)
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ module.exports = class {
|
|||||||
this.DBMap = {}
|
this.DBMap = {}
|
||||||
}
|
}
|
||||||
CheckPathDB() {
|
CheckPathDB() {
|
||||||
var Path = global.global.GetDataPath("DB");
|
var Path = global.GetDataPath("DB");
|
||||||
global.global.CheckCreateDir(Path)
|
global.CheckCreateDir(Path)
|
||||||
}
|
}
|
||||||
CloseDBFile(name, bdelete) {
|
CloseDBFile(name, bdelete) {
|
||||||
this.LastHash = undefined
|
this.LastHash = undefined
|
||||||
@@ -34,7 +34,7 @@ module.exports = class {
|
|||||||
fs.close(Item.fd, function(err) {
|
fs.close(Item.fd, function(err) {
|
||||||
if (!err) {
|
if (!err) {
|
||||||
if (bDelete) {
|
if (bDelete) {
|
||||||
var fname = global.global.GetDataPath("DB/" + Name);
|
var fname = global.GetDataPath("DB/" + Name);
|
||||||
fs.unlink(fname, function(err) {
|
fs.unlink(fname, function(err) {
|
||||||
if (err)
|
if (err)
|
||||||
global.ToLog(err)
|
global.ToLog(err)
|
||||||
@@ -63,7 +63,7 @@ module.exports = class {
|
|||||||
this.CheckPathDB()
|
this.CheckPathDB()
|
||||||
this.WasCheckPathDB = true
|
this.WasCheckPathDB = true
|
||||||
}
|
}
|
||||||
var fname = global.global.GetDataPath("DB/" + name);
|
var fname = global.GetDataPath("DB/" + name);
|
||||||
if (!fs.existsSync(fname)) {
|
if (!fs.existsSync(fname)) {
|
||||||
if (bExist) {
|
if (bExist) {
|
||||||
this.DBMap[name] = null
|
this.DBMap[name] = null
|
||||||
@@ -90,7 +90,7 @@ function CheckStartOneProcess(Name) {
|
|||||||
if (global.READ_ONLY_DB || MapCheckProcess[Name])
|
if (global.READ_ONLY_DB || MapCheckProcess[Name])
|
||||||
return;
|
return;
|
||||||
MapCheckProcess[Name] = 1;
|
MapCheckProcess[Name] = 1;
|
||||||
var path = global.global.GetDataPath("DB/" + Name);
|
var path = global.GetDataPath("DB/" + Name);
|
||||||
if (fs.existsSync(path)) {
|
if (fs.existsSync(path)) {
|
||||||
fs.unlinkSync(path);
|
fs.unlinkSync(path);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,15 +41,7 @@ ContenTypeMap[".js"] = "application/javascript";
|
|||||||
ContenTypeMap["html"] = "text/html";
|
ContenTypeMap["html"] = "text/html";
|
||||||
ContenTypeMap["psd"] = "application/octet-stream";
|
ContenTypeMap["psd"] = "application/octet-stream";
|
||||||
global.HTTPCaller = {};
|
global.HTTPCaller = {};
|
||||||
|
let HTTPCaller = global.HTTPCaller
|
||||||
let {
|
|
||||||
ToLog,
|
|
||||||
ToError,
|
|
||||||
DApps,
|
|
||||||
SERVER,
|
|
||||||
MAX_TRANSACTION_COUNT
|
|
||||||
} = global
|
|
||||||
|
|
||||||
function DoCommand(response, Type, Path, params, remoteAddress) {
|
function DoCommand(response, Type, Path, params, remoteAddress) {
|
||||||
var F = global.HTTPCaller[params[0]];
|
var F = global.HTTPCaller[params[0]];
|
||||||
if (F) {
|
if (F) {
|
||||||
@@ -188,7 +180,7 @@ function DappClientCodeFile(response, StrNum) {
|
|||||||
response.end();
|
response.end();
|
||||||
};
|
};
|
||||||
global.HTTPCaller.DappSmartHTMLFile = function(Params) {
|
global.HTTPCaller.DappSmartHTMLFile = function(Params) {
|
||||||
var Data = global.DApps.Smart.ReadSmart(ParseNum(Params.Smart));
|
var Data = global.DApps.Smart.ReadSmart(global.ParseNum(Params.Smart));
|
||||||
if (Data) {
|
if (Data) {
|
||||||
if (global.DEV_MODE && Params.DebugPath) {
|
if (global.DEV_MODE && Params.DebugPath) {
|
||||||
global.ToLog("Load: " + Params.DebugPath);
|
global.ToLog("Load: " + Params.DebugPath);
|
||||||
@@ -203,7 +195,7 @@ global.SendBlockFile = SendBlockFile;
|
|||||||
function SendBlockFile(response, BlockNum, TrNum) {
|
function SendBlockFile(response, BlockNum, TrNum) {
|
||||||
BlockNum = parseInt(BlockNum);
|
BlockNum = parseInt(BlockNum);
|
||||||
TrNum = parseInt(TrNum);
|
TrNum = parseInt(TrNum);
|
||||||
if (BlockNum && BlockNum <= global.SERVER.GetMaxNumBlockDB() && TrNum <= MAX_TRANSACTION_COUNT) {
|
if (BlockNum && BlockNum <= global.SERVER.GetMaxNumBlockDB() && TrNum <= global.MAX_TRANSACTION_COUNT) {
|
||||||
var Block = global.SERVER.ReadBlockDB(BlockNum);
|
var Block = global.SERVER.ReadBlockDB(BlockNum);
|
||||||
if (Block && Block.arrContent) {
|
if (Block && Block.arrContent) {
|
||||||
SendToResponceFile(response, Block, TrNum);
|
SendToResponceFile(response, Block, TrNum);
|
||||||
@@ -211,7 +203,7 @@ function SendBlockFile(response, BlockNum, TrNum) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (!Block || !Block.TrDataPos) {
|
if (!Block || !Block.TrDataPos) {
|
||||||
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||||
if (Err) {
|
if (Err) {
|
||||||
SendToResponce404(response);
|
SendToResponce404(response);
|
||||||
}
|
}
|
||||||
@@ -247,11 +239,11 @@ function SendToResponce404(response) {
|
|||||||
response.end();
|
response.end();
|
||||||
};
|
};
|
||||||
HTTPCaller.DappBlockFile = function(Params, response) {
|
HTTPCaller.DappBlockFile = function(Params, response) {
|
||||||
Params.BlockNum = ParseNum(Params.BlockNum);
|
Params.BlockNum = global.ParseNum(Params.BlockNum);
|
||||||
Params.TrNum = ParseNum(Params.TrNum);
|
Params.TrNum = global.ParseNum(Params.TrNum);
|
||||||
if (!Params.TrNum)
|
if (!Params.TrNum)
|
||||||
Params.TrNum = 0;
|
Params.TrNum = 0;
|
||||||
if (Params.BlockNum && Params.BlockNum <= global.SERVER.GetMaxNumBlockDB() && Params.TrNum <= MAX_TRANSACTION_COUNT) {
|
if (Params.BlockNum && Params.BlockNum <= global.SERVER.GetMaxNumBlockDB() && Params.TrNum <= global.MAX_TRANSACTION_COUNT) {
|
||||||
var Block = global.SERVER.ReadBlockDB(Params.BlockNum);
|
var Block = global.SERVER.ReadBlockDB(Params.BlockNum);
|
||||||
if (Block && Block.arrContent) {
|
if (Block && Block.arrContent) {
|
||||||
SendToResponceDappFile(response, Block, Params.TrNum);
|
SendToResponceDappFile(response, Block, Params.TrNum);
|
||||||
@@ -259,7 +251,7 @@ HTTPCaller.DappBlockFile = function(Params, response) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (!Block || !Block.TrDataPos) {
|
if (!Block || !Block.TrDataPos) {
|
||||||
LoadBlockFromNetwork(Params, function(Err, Block) {
|
global.LoadBlockFromNetwork(Params, function(Err, Block) {
|
||||||
if (Err) {
|
if (Err) {
|
||||||
SendToResponceResult0(response);
|
SendToResponceResult0(response);
|
||||||
}
|
}
|
||||||
@@ -274,7 +266,7 @@ HTTPCaller.DappBlockFile = function(Params, response) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function SendToResponceDappFile(response, Block, TrNum) {
|
function SendToResponceDappFile(response, Block, TrNum) {
|
||||||
var Result = { result: 0 };
|
var Result: any = { result: 0 };
|
||||||
var Body = Block.arrContent[TrNum];
|
var Body = Block.arrContent[TrNum];
|
||||||
if (Body) {
|
if (Body) {
|
||||||
var Type = Body[0];
|
var Type = Body[0];
|
||||||
@@ -283,7 +275,7 @@ function SendToResponceDappFile(response, Block, TrNum) {
|
|||||||
Result = { result: 1, Type: Type, ContentType: TR.ContentType, Name: TR.Name, Body: TR.Data.toString('utf8') };
|
Result = { result: 1, Type: Type, ContentType: TR.ContentType, Name: TR.Name, Body: TR.Data.toString('utf8') };
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var App = DAppByType[Type];
|
var App = global.DAppByType[Type];
|
||||||
if (App) {
|
if (App) {
|
||||||
Body = JSON.parse(App.GetScriptTransaction(Body));
|
Body = JSON.parse(App.GetScriptTransaction(Body));
|
||||||
}
|
}
|
||||||
@@ -303,7 +295,7 @@ HTTPCaller.DappStaticCall = function(Params, response) {
|
|||||||
global.DApps.Accounts.BeginBlock();
|
global.DApps.Accounts.BeginBlock();
|
||||||
global.DApps.Accounts.BeginTransaction();
|
global.DApps.Accounts.BeginTransaction();
|
||||||
global.TickCounter = 100000;
|
global.TickCounter = 100000;
|
||||||
var Account = global.DApps.Accounts.ReadStateTR(ParseNum(Params.Account));
|
var Account = global.DApps.Accounts.ReadStateTR(global.ParseNum(Params.Account));
|
||||||
if (!Account) {
|
if (!Account) {
|
||||||
return { result: 0, RetValue: "Error account Num: " + Params.Account };
|
return { result: 0, RetValue: "Error account Num: " + Params.Account };
|
||||||
}
|
}
|
||||||
@@ -324,7 +316,7 @@ HTTPCaller.DappStaticCall = function(Params, response) {
|
|||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
||||||
var SmartNum = ParseNum(Params.Smart);
|
var SmartNum = global.ParseNum(Params.Smart);
|
||||||
if (global.TX_PROCESS && global.TX_PROCESS.Worker)
|
if (global.TX_PROCESS && global.TX_PROCESS.Worker)
|
||||||
global.TX_PROCESS.Worker.send({ cmd: "SetSmartEvent", Smart: SmartNum });
|
global.TX_PROCESS.Worker.send({ cmd: "SetSmartEvent", Smart: SmartNum });
|
||||||
var Account;
|
var Account;
|
||||||
@@ -349,15 +341,15 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
|||||||
var EArr = GetEventArray(SmartNum, Context);
|
var EArr = GetEventArray(SmartNum, Context);
|
||||||
var WLData = HTTPCaller.DappWalletList(Params);
|
var WLData = HTTPCaller.DappWalletList(Params);
|
||||||
var ArrLog = [];
|
var ArrLog = [];
|
||||||
for (var i = 0; i < ArrLogClient.length; i++) {
|
for (var i = 0; i < global.ArrLogClient.length; i++) {
|
||||||
var Item = ArrLogClient[i];
|
var Item = global.ArrLogClient[i];
|
||||||
if (!Item.final)
|
if (!Item.final)
|
||||||
continue;
|
continue;
|
||||||
ArrLog.push(Item);
|
ArrLog.push(Item);
|
||||||
}
|
}
|
||||||
var Ret = {
|
var Ret: any = {
|
||||||
result: 1, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, MIN_POWER_POW_TR: MIN_POWER_POW_TR, FIRST_TIME_BLOCK: FIRST_TIME_BLOCK,
|
result: 1, DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME, MIN_POWER_POW_TR: global.MIN_POWER_POW_TR, FIRST_TIME_BLOCK: global.FIRST_TIME_BLOCK,
|
||||||
CONSENSUS_PERIOD_TIME: CONSENSUS_PERIOD_TIME, PRICE_DAO: PRICE_DAO(SERVER.BlockNumDB), NEW_SIGN_TIME: NEW_SIGN_TIME, Smart: Smart,
|
CONSENSUS_PERIOD_TIME: global.CONSENSUS_PERIOD_TIME, PRICE_DAO: global.PRICE_DAO(global.SERVER.BlockNumDB), NEW_SIGN_TIME: global.NEW_SIGN_TIME, Smart: Smart,
|
||||||
Account: Account, ArrWallet: WLData.arr, ArrEvent: EArr, ArrLog: ArrLog,
|
Account: Account, ArrWallet: WLData.arr, ArrEvent: EArr, ArrLog: ArrLog,
|
||||||
};
|
};
|
||||||
if (global.WALLET) {
|
if (global.WALLET) {
|
||||||
@@ -367,7 +359,7 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
|||||||
}
|
}
|
||||||
if (!ObjectOnly) {
|
if (!ObjectOnly) {
|
||||||
Ret.CurTime = Date.now();
|
Ret.CurTime = Date.now();
|
||||||
Ret.CurBlockNum = GetCurrentBlockNumByTime();
|
Ret.CurBlockNum = global.GetCurrentBlockNumByTime();
|
||||||
Ret.BlockNumDB = global.SERVER.BlockNumDB;
|
Ret.BlockNumDB = global.SERVER.BlockNumDB;
|
||||||
Ret.MaxAccID = global.DApps.Accounts.GetMaxAccount();
|
Ret.MaxAccID = global.DApps.Accounts.GetMaxAccount();
|
||||||
Ret.MaxDappsID = global.DApps.Smart.GetMaxNum();
|
Ret.MaxDappsID = global.DApps.Smart.GetMaxNum();
|
||||||
@@ -375,14 +367,14 @@ HTTPCaller.DappInfo = function(Params, responce, ObjectOnly) {
|
|||||||
return Ret;
|
return Ret;
|
||||||
};
|
};
|
||||||
HTTPCaller.DappWalletList = function(Params) {
|
HTTPCaller.DappWalletList = function(Params) {
|
||||||
var arr0 = global.DApps.Accounts.GetWalletAccountsByMap(WALLET.AccountMap);
|
var arr0 = global.DApps.Accounts.GetWalletAccountsByMap(global.WALLET.AccountMap);
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for (var i = 0; i < arr0.length; i++) {
|
for (var i = 0; i < arr0.length; i++) {
|
||||||
if (Params.AllAccounts || arr0[i].Value.Smart === Params.Smart) {
|
if (Params.AllAccounts || arr0[i].Value.Smart === Params.Smart) {
|
||||||
arr.push(arr0[i]);
|
arr.push(arr0[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var Ret = { result: 1, arr: arr, };
|
var Ret: any = { result: 1, arr: arr, };
|
||||||
return Ret;
|
return Ret;
|
||||||
};
|
};
|
||||||
HTTPCaller.DappAccountList = function(Params) {
|
HTTPCaller.DappAccountList = function(Params) {
|
||||||
@@ -402,13 +394,13 @@ HTTPCaller.DappTransactionList = function(Params, response) {
|
|||||||
Params.Param3 = Params.BlockNum;
|
Params.Param3 = Params.BlockNum;
|
||||||
return HTTPCaller.GetTransactionAll(Params, response);
|
return HTTPCaller.GetTransactionAll(Params, response);
|
||||||
};
|
};
|
||||||
var sessionid = GetHexFromAddres(crypto.randomBytes(20));
|
var sessionid = global.GetHexFromAddres(crypto.randomBytes(20));
|
||||||
HTTPCaller.RestartNode = function(Params) {
|
HTTPCaller.RestartNode = function(Params) {
|
||||||
global.RestartNode();
|
global.RestartNode();
|
||||||
return { result: 1 };
|
return { result: 1 };
|
||||||
};
|
};
|
||||||
HTTPCaller.ToLogServer = function(Str) {
|
HTTPCaller.ToLogServer = function(Str) {
|
||||||
ToLogClient(Str);
|
global.ToLogClient(Str);
|
||||||
return { result: 1 };
|
return { result: 1 };
|
||||||
};
|
};
|
||||||
HTTPCaller.FindMyAccounts = function(Params) {
|
HTTPCaller.FindMyAccounts = function(Params) {
|
||||||
@@ -443,11 +435,11 @@ HTTPCaller.GetBlockList = function(Params, response, bOnlyNum) {
|
|||||||
if (!Block) {
|
if (!Block) {
|
||||||
CountWait++;
|
CountWait++;
|
||||||
WasWait = 1;
|
WasWait = 1;
|
||||||
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||||
CountWait--;
|
CountWait--;
|
||||||
if (CountWait === 0) {
|
if (CountWait === 0) {
|
||||||
var arr = global.SERVER.GetRows(Params.StartNum, Params.CountNum, Params.Filter);
|
var arr = global.SERVER.GetRows(Params.StartNum, Params.CountNum, Params.Filter);
|
||||||
var Result = { arr: arr, result: 1 };
|
var Result: any = { arr: arr, result: 1 };
|
||||||
response.end(JSON.stringify(Result));
|
response.end(JSON.stringify(Result));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -466,7 +458,7 @@ HTTPCaller.GetTransactionAll = function(Params, response) {
|
|||||||
if (BlockNum < global.SERVER.BlockNumDBMin) {
|
if (BlockNum < global.SERVER.BlockNumDBMin) {
|
||||||
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||||
if (!Block) {
|
if (!Block) {
|
||||||
LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
global.LoadBlockFromNetwork({ BlockNum: BlockNum }, function(Err, Block) {
|
||||||
var Result;
|
var Result;
|
||||||
if (Err) {
|
if (Err) {
|
||||||
Result = { arr: [], result: 0 };
|
Result = { arr: [], result: 0 };
|
||||||
@@ -492,7 +484,7 @@ HTTPCaller.GetHashList = function(Params) {
|
|||||||
var arr = global.DApps.Accounts.DBAccountsHash.GetRows(Params.StartNum, Params.CountNum, Params.Filter);
|
var arr = global.DApps.Accounts.DBAccountsHash.GetRows(Params.StartNum, Params.CountNum, Params.Filter);
|
||||||
for (var i = 0; i < arr.length; i++) {
|
for (var i = 0; i < arr.length; i++) {
|
||||||
var item = arr[i];
|
var item = arr[i];
|
||||||
item.BlockNum = item.Num * PERIOD_ACCOUNT_HASH;
|
item.BlockNum = item.Num * global.PERIOD_ACCOUNT_HASH;
|
||||||
item.Hash100 = [];
|
item.Hash100 = [];
|
||||||
if (item.BlockNum % 100 === 0) {
|
if (item.BlockNum % 100 === 0) {
|
||||||
var Data = global.SERVER.DBHeader100.Read(item.BlockNum / 100);
|
var Data = global.SERVER.DBHeader100.Read(item.BlockNum / 100);
|
||||||
@@ -527,24 +519,24 @@ HTTPCaller.GetWalletInfo = function(Params) {
|
|||||||
var TXBlockNum = 0;
|
var TXBlockNum = 0;
|
||||||
if (StateTX)
|
if (StateTX)
|
||||||
TXBlockNum = StateTX.BlockNum;
|
TXBlockNum = StateTX.BlockNum;
|
||||||
var Ret = {
|
var Ret: any = {
|
||||||
result: 1, WalletOpen: global.WALLET.WalletOpen, WalletIsOpen: (global.WALLET.WalletOpen !== false), WalletCanSign: (global.WALLET.WalletOpen !== false && global.WALLET.KeyPair.WasInit),
|
result: 1, WalletOpen: global.WALLET.WalletOpen, WalletIsOpen: (global.WALLET.WalletOpen !== false), WalletCanSign: (global.WALLET.WalletOpen !== false && global.WALLET.KeyPair.WasInit),
|
||||||
CODE_VERSION: CODE_VERSION, MAX_TRANSACTION_LIMIT: MAX_TRANSACTION_LIMIT, VersionNum: global.UPDATE_CODE_VERSION_NUM, RelayMode: global.SERVER.RelayMode,
|
CODE_VERSION: global.CODE_VERSION, MAX_TRANSACTION_LIMIT: global.MAX_TRANSACTION_LIMIT, VersionNum: global.UPDATE_CODE_VERSION_NUM, RelayMode: global.SERVER.RelayMode,
|
||||||
BlockNumDB: global.SERVER.BlockNumDB, CurBlockNum: GetCurrentBlockNumByTime(), CurTime: Date.now(), IsDevelopAccount: IsDeveloperAccount(WALLET.PubKeyArr),
|
BlockNumDB: global.SERVER.BlockNumDB, CurBlockNum: global.GetCurrentBlockNumByTime(), CurTime: Date.now(), IsDevelopAccount: global.IsDeveloperAccount(global.WALLET.PubKeyArr),
|
||||||
AccountMap: global.WALLET.AccountMap, ArrLog: ArrLogClient, MaxAccID: global.DApps.Accounts.GetMaxAccount(), MaxActNum: global.DApps.Accounts.GetActsMaxNum(),
|
AccountMap: global.WALLET.AccountMap, ArrLog: global.global.ArrLogClient, MaxAccID: global.DApps.Accounts.GetMaxAccount(), MaxActNum: global.DApps.Accounts.GetActsMaxNum(),
|
||||||
MaxDappsID: global.DApps.Smart.GetMaxNum(), NeedRestart: global.NeedRestart, ip: global.SERVER.ip, port: global.SERVER.port, NET_WORK_MODE: global.NET_WORK_MODE,
|
MaxDappsID: global.DApps.Smart.GetMaxNum(), NeedRestart: global.NeedRestart, ip: global.SERVER.ip, port: global.SERVER.port, NET_WORK_MODE: global.NET_WORK_MODE,
|
||||||
INTERNET_IP_FROM_STUN: global.INTERNET_IP_FROM_STUN, HistoryMaxNum: MaxHistory, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, FIRST_TIME_BLOCK: FIRST_TIME_BLOCK,
|
INTERNET_IP_FROM_STUN: global.INTERNET_IP_FROM_STUN, HistoryMaxNum: MaxHistory, DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME, FIRST_TIME_BLOCK: global.FIRST_TIME_BLOCK,
|
||||||
CONSENSUS_PERIOD_TIME: CONSENSUS_PERIOD_TIME, NEW_SIGN_TIME: NEW_SIGN_TIME, DATA_PATH: (DATA_PATH.substr(1, 1) === ":" ? DATA_PATH : GetNormalPathString(process.cwd() + "/" + DATA_PATH)),
|
CONSENSUS_PERIOD_TIME: global.CONSENSUS_PERIOD_TIME, NEW_SIGN_TIME: global.NEW_SIGN_TIME, DATA_PATH: (global.DATA_PATH.substr(1, 1) === ":" ? global.DATA_PATH : global.GetNormalPathString(process.cwd() + "/" + global.DATA_PATH)),
|
||||||
NodeAddrStr: global.SERVER.addrStr, STAT_MODE: global.STAT_MODE, HTTPPort: global.HTTP_PORT_NUMBER, HTTPPassword: HTTP_PORT_PASSWORD,
|
NodeAddrStr: global.SERVER.addrStr, STAT_MODE: global.STAT_MODE, HTTPPort: global.HTTP_PORT_NUMBER, HTTPPassword: global.HTTP_PORT_PASSWORD,
|
||||||
CONSTANTS: Constants, CheckPointBlockNum: CHECK_POINT.BlockNum, MiningAccount: global.GENERATE_BLOCK_ACCOUNT, CountMiningCPU: GetCountMiningCPU(),
|
CONSTANTS: Constants, CheckPointBlockNum: global.CHECK_POINT.BlockNum, MiningAccount: global.GENERATE_BLOCK_ACCOUNT, CountMiningCPU: global.GetCountMiningCPU(),
|
||||||
CountRunCPU: global.ArrMiningWrk.length, MiningPaused: global.MiningPaused, HashRate: HashRateOneSec, MIN_POWER_POW_TR: MIN_POWER_POW_TR,
|
CountRunCPU: global.ArrMiningWrk.length, MiningPaused: global.MiningPaused, HashRate: HashRateOneSec, MIN_POWER_POW_TR: global.MIN_POWER_POW_TR,
|
||||||
PRICE_DAO: PRICE_DAO(SERVER.BlockNumDB), NWMODE: global.NWMODE, PERIOD_ACCOUNT_HASH: PERIOD_ACCOUNT_HASH, MAX_ACCOUNT_HASH: global.DApps.Accounts.DBAccountsHash.GetMaxNum(),
|
PRICE_DAO: global.PRICE_DAO(global.SERVER.BlockNumDB), NWMODE: global.NWMODE, PERIOD_ACCOUNT_HASH: global.PERIOD_ACCOUNT_HASH, MAX_ACCOUNT_HASH: global.DApps.Accounts.DBAccountsHash.GetMaxNum(),
|
||||||
TXBlockNum: TXBlockNum, SpeedSignLib: global.SpeedSignLib,
|
TXBlockNum: TXBlockNum, SpeedSignLib: global.SpeedSignLib,
|
||||||
};
|
};
|
||||||
if (Params.Account)
|
if (Params.Account)
|
||||||
Ret.PrivateKey = global.GetHexFromArr(WALLET.GetPrivateKey(WALLET.AccountMap[Params.Account]));
|
Ret.PrivateKey = global.GetHexFromArr(global.WALLET.GetPrivateKey(global.WALLET.AccountMap[Params.Account]));
|
||||||
else
|
else
|
||||||
Ret.PrivateKey = global.GetHexFromArr(WALLET.GetPrivateKey());
|
Ret.PrivateKey = global.GetHexFromArr(global.WALLET.GetPrivateKey());
|
||||||
Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr;
|
Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr;
|
||||||
return Ret;
|
return Ret;
|
||||||
};
|
};
|
||||||
@@ -553,7 +545,7 @@ HTTPCaller.TestSignLib = function() {
|
|||||||
global.TestSignLib();
|
global.TestSignLib();
|
||||||
};
|
};
|
||||||
HTTPCaller.GetWalletAccounts = function() {
|
HTTPCaller.GetWalletAccounts = function() {
|
||||||
var Ret = { result: 1, arr: global.DApps.Accounts.GetWalletAccountsByMap(WALLET.AccountMap), };
|
var Ret: any = { result: 1, arr: global.DApps.Accounts.GetWalletAccountsByMap(global.WALLET.AccountMap), };
|
||||||
Ret.PrivateKey = global.WALLET.KeyPair.PrivKeyStr;
|
Ret.PrivateKey = global.WALLET.KeyPair.PrivKeyStr;
|
||||||
Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr;
|
Ret.PublicKey = global.WALLET.KeyPair.PubKeyStr;
|
||||||
return Ret;
|
return Ret;
|
||||||
@@ -589,14 +581,14 @@ HTTPCaller.GetSignFromHEX = function(Params) {
|
|||||||
};
|
};
|
||||||
HTTPCaller.SendTransactionHex = function(Params) {
|
HTTPCaller.SendTransactionHex = function(Params) {
|
||||||
var body = global.GetArrFromHex(Params.Hex);
|
var body = global.GetArrFromHex(Params.Hex);
|
||||||
var Result = { result: 1 };
|
var Result: any = { result: 1 };
|
||||||
var Res = global.SERVER.AddTransactionOwn({ body: body, ToAll: 1 });
|
var Res = global.SERVER.AddTransactionOwn({ body: body, ToAll: 1 });
|
||||||
Result.sessionid = sessionid;
|
Result.sessionid = sessionid;
|
||||||
Result.text = AddTrMap[Res];
|
Result.text = global.AddTrMap[Res];
|
||||||
var final = false;
|
var final = false;
|
||||||
if (Res <= 0 && Res !== - 3)
|
if (Res <= 0 && Res !== - 3)
|
||||||
final = true;
|
final = true;
|
||||||
ToLogClient("Send: " + Result.text, global.GetHexFromArr(sha3(body)), final);
|
global.ToLogClient("Send: " + Result.text, global.GetHexFromArr(global.sha3(body)), final);
|
||||||
return Result;
|
return Result;
|
||||||
};
|
};
|
||||||
HTTPCaller.SendDirectCode = function(Params, response) {
|
HTTPCaller.SendDirectCode = function(Params, response) {
|
||||||
@@ -617,7 +609,7 @@ HTTPCaller.SendDirectCode = function(Params, response) {
|
|||||||
else {
|
else {
|
||||||
try {
|
try {
|
||||||
var ret = eval(Params.Code);
|
var ret = eval(Params.Code);
|
||||||
Result = JSON.stringify(ret, "", 4);
|
Result = JSON.stringify(ret, undefined, 4);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
Result = "" + e;
|
Result = "" + e;
|
||||||
@@ -634,12 +626,12 @@ HTTPCaller.SetMining = function(MiningAccount) {
|
|||||||
function CheckCorrectDevKey() {
|
function CheckCorrectDevKey() {
|
||||||
if (global.WALLET.WalletOpen === false) {
|
if (global.WALLET.WalletOpen === false) {
|
||||||
var StrErr = "Not open wallet";
|
var StrErr = "Not open wallet";
|
||||||
ToLogClient(StrErr);
|
global.ToLogClient(StrErr);
|
||||||
return { result: 0, text: StrErr };
|
return { result: 0, text: StrErr };
|
||||||
}
|
}
|
||||||
if (!IsDeveloperAccount(WALLET.PubKeyArr)) {
|
if (!global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
|
||||||
var StrErr = "Not developer key";
|
var StrErr = "Not developer key";
|
||||||
ToLogClient(StrErr);
|
global.ToLogClient(StrErr);
|
||||||
return { result: 0, text: StrErr };
|
return { result: 0, text: StrErr };
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -685,8 +677,8 @@ function SetCheckPointOnBlock(BlockNum) {
|
|||||||
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||||
if (!Block)
|
if (!Block)
|
||||||
return 0;
|
return 0;
|
||||||
var SignArr = arr2(Block.Hash, GetArrFromValue(Block.BlockNum));
|
var SignArr = global.arr2(Block.Hash, global.GetArrFromValue(Block.BlockNum));
|
||||||
var Sign = secp256k1.sign(SHA3BUF(SignArr, Block.BlockNum), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
var Sign = global.secp256k1.sign(global.SHA3BUF(SignArr, Block.BlockNum), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
||||||
global.CHECK_POINT = { BlockNum: BlockNum, Hash: Block.Hash, Sign: Sign };
|
global.CHECK_POINT = { BlockNum: BlockNum, Hash: Block.Hash, Sign: Sign };
|
||||||
global.SERVER.ResetNextPingAllNode();
|
global.SERVER.ResetNextPingAllNode();
|
||||||
return 1;
|
return 1;
|
||||||
@@ -708,17 +700,17 @@ var SumCheckPow = 0;
|
|||||||
var CountCheckPow = 0;
|
var CountCheckPow = 0;
|
||||||
|
|
||||||
function RunSetCheckPoint() {
|
function RunSetCheckPoint() {
|
||||||
if (!SERVER.BlockNumDB)
|
if (!global.SERVER.BlockNumDB)
|
||||||
return;
|
return;
|
||||||
if (SERVER.BlockNumDB < 2100000)
|
if (global.SERVER.BlockNumDB < 2100000)
|
||||||
return;
|
return;
|
||||||
var Delta = GetCurrentBlockNumByTime() - global.SERVER.BlockNumDB;
|
var Delta = global.GetCurrentBlockNumByTime() - global.SERVER.BlockNumDB;
|
||||||
if (Delta > 16)
|
if (Delta > 16)
|
||||||
return;
|
return;
|
||||||
var BlockNum = global.SERVER.BlockNumDB - global.CheckPointDelta;
|
var BlockNum = global.SERVER.BlockNumDB - global.CheckPointDelta;
|
||||||
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
var Block = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||||
if (Block) {
|
if (Block) {
|
||||||
var Power = GetPowPower(Block.PowHash);
|
var Power = global.GetPowPower(Block.PowHash);
|
||||||
if (Power < 30) {
|
if (Power < 30) {
|
||||||
global.ToLog("CANNOT SET CHECK POINT Power=" + Power + " BlockNum=" + BlockNum);
|
global.ToLog("CANNOT SET CHECK POINT Power=" + Power + " BlockNum=" + BlockNum);
|
||||||
return;
|
return;
|
||||||
@@ -737,7 +729,7 @@ function RunSetCheckPoint() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
HTTPCaller.SetNewCodeVersion = function(Data) {
|
HTTPCaller.SetNewCodeVersion = function(Data) {
|
||||||
var Ret = CheckCorrectDevKey();
|
var Ret: any = CheckCorrectDevKey();
|
||||||
if (Ret !== true)
|
if (Ret !== true)
|
||||||
return Ret;
|
return Ret;
|
||||||
var Ret = global.SERVER.SetNewCodeVersion(Data, global.WALLET.KeyPair.getPrivateKey(''));
|
var Ret = global.SERVER.SetNewCodeVersion(Data, global.WALLET.KeyPair.getPrivateKey(''));
|
||||||
@@ -745,17 +737,17 @@ HTTPCaller.SetNewCodeVersion = function(Data) {
|
|||||||
return { result: 1, text: Ret };
|
return { result: 1, text: Ret };
|
||||||
};
|
};
|
||||||
HTTPCaller.SetCheckNetConstant = function(Data) {
|
HTTPCaller.SetCheckNetConstant = function(Data) {
|
||||||
var Ret = CheckCorrectDevKey();
|
var Ret: any = CheckCorrectDevKey();
|
||||||
if (Ret !== true)
|
if (Ret !== true)
|
||||||
return Ret;
|
return Ret;
|
||||||
if (!Data) {
|
if (!Data) {
|
||||||
ToLogClient("Data not set");
|
global.ToLogClient("Data not set");
|
||||||
return { result: 0, text: "Data not set" };
|
return { result: 0, text: "Data not set" };
|
||||||
}
|
}
|
||||||
Data.Num = GetCurrentBlockNumByTime();
|
Data.Num = global.GetCurrentBlockNumByTime();
|
||||||
Data.BlockNum = GetCurrentBlockNumByTime() + 10;
|
Data.BlockNum = global.GetCurrentBlockNumByTime() + 10;
|
||||||
var SignArr = global.SERVER.GetSignCheckNetConstant(Data);
|
var SignArr = global.SERVER.GetSignCheckNetConstant(Data);
|
||||||
Data.Sign = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
Data.Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
||||||
global.SERVER.CheckNetConstant({ NetConstant: Data }, { addrStr: "local" });
|
global.SERVER.CheckNetConstant({ NetConstant: Data }, { addrStr: "local" });
|
||||||
global.SERVER.ResetNextPingAllNode();
|
global.SERVER.ResetNextPingAllNode();
|
||||||
return { result: 1, text: "Set NET_CONSTANT BlockNum=" + Data.BlockNum };
|
return { result: 1, text: "Set NET_CONSTANT BlockNum=" + Data.BlockNum };
|
||||||
@@ -765,11 +757,11 @@ HTTPCaller.SetCheckDeltaTime = function(Data) {
|
|||||||
if (Ret !== true)
|
if (Ret !== true)
|
||||||
return Ret;
|
return Ret;
|
||||||
if (!Data || !Data.Num) {
|
if (!Data || !Data.Num) {
|
||||||
ToLogClient("Num not set");
|
global.ToLogClient("Num not set");
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
}
|
}
|
||||||
var SignArr = global.SERVER.GetSignCheckDeltaTime(Data);
|
var SignArr = global.SERVER.GetSignCheckDeltaTime(Data);
|
||||||
Data.Sign = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
Data.Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
||||||
global.CHECK_DELTA_TIME = Data;
|
global.CHECK_DELTA_TIME = Data;
|
||||||
global.SERVER.ResetNextPingAllNode();
|
global.SERVER.ResetNextPingAllNode();
|
||||||
return { result: 1, text: "Set check time Num=" + Data.Num };
|
return { result: 1, text: "Set check time Num=" + Data.Num };
|
||||||
@@ -791,9 +783,9 @@ var StartCheckTimeNum = 0;
|
|||||||
function RunAutoCorrTime() {
|
function RunAutoCorrTime() {
|
||||||
if (global.WALLET.WalletOpen === false)
|
if (global.WALLET.WalletOpen === false)
|
||||||
return;
|
return;
|
||||||
if (GetCurrentBlockNumByTime() > StartCheckTimeNum && Math.abs(global.DELTA_CURRENT_TIME) >= 120) {
|
if (global.GetCurrentBlockNumByTime() > StartCheckTimeNum && Math.abs(global.DELTA_CURRENT_TIME) >= 120) {
|
||||||
var AutoDelta = - Math.trunc(global.DELTA_CURRENT_TIME);
|
var AutoDelta = - Math.trunc(global.DELTA_CURRENT_TIME);
|
||||||
var Data = { Num: GetCurrentBlockNumByTime(), bUse: 1, bAddTime: 1 };
|
var Data: any = { Num: global.GetCurrentBlockNumByTime(), bUse: 1, bAddTime: 1 };
|
||||||
if (AutoDelta < 0) {
|
if (AutoDelta < 0) {
|
||||||
AutoDelta = - AutoDelta;
|
AutoDelta = - AutoDelta;
|
||||||
Data.bAddTime = 0;
|
Data.bAddTime = 0;
|
||||||
@@ -802,7 +794,7 @@ function RunAutoCorrTime() {
|
|||||||
Data.StartBlockNum = Data.Num + 5;
|
Data.StartBlockNum = Data.Num + 5;
|
||||||
Data.EndBlockNum = Data.StartBlockNum + Math.trunc(AutoDelta / Data.DeltaTime);
|
Data.EndBlockNum = Data.StartBlockNum + Math.trunc(AutoDelta / Data.DeltaTime);
|
||||||
var SignArr = global.SERVER.GetSignCheckDeltaTime(Data);
|
var SignArr = global.SERVER.GetSignCheckDeltaTime(Data);
|
||||||
Data.Sign = secp256k1.sign(SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
Data.Sign = global.secp256k1.sign(global.SHA3BUF(SignArr), global.WALLET.KeyPair.getPrivateKey('')).signature;
|
||||||
global.CHECK_DELTA_TIME = Data;
|
global.CHECK_DELTA_TIME = Data;
|
||||||
global.SERVER.ResetNextPingAllNode();
|
global.SERVER.ResetNextPingAllNode();
|
||||||
StartCheckTimeNum = Data.EndBlockNum + 1;
|
StartCheckTimeNum = Data.EndBlockNum + 1;
|
||||||
@@ -814,10 +806,10 @@ HTTPCaller.SaveConstant = function(SetObj) {
|
|||||||
for (var key in SetObj) {
|
for (var key in SetObj) {
|
||||||
global[key] = SetObj[key];
|
global[key] = SetObj[key];
|
||||||
}
|
}
|
||||||
SAVE_CONST(true);
|
global.SAVE_CONST(true);
|
||||||
global.SERVER.DO_CONSTANT();
|
global.SERVER.DO_CONSTANT();
|
||||||
if (!WasUpdate && global.USE_AUTO_UPDATE && CODE_VERSION.VersionNum && global.UPDATE_CODE_VERSION_NUM < CODE_VERSION.VersionNum) {
|
if (!WasUpdate && global.USE_AUTO_UPDATE && global.CODE_VERSION.VersionNum && global.UPDATE_CODE_VERSION_NUM < global.CODE_VERSION.VersionNum) {
|
||||||
global.SERVER.UseCode(CODE_VERSION.VersionNum, true);
|
global.SERVER.UseCode(global.CODE_VERSION.VersionNum, true);
|
||||||
}
|
}
|
||||||
if (SetObj.DoRestartNode)
|
if (SetObj.DoRestartNode)
|
||||||
global.RestartNode();
|
global.RestartNode();
|
||||||
@@ -830,7 +822,7 @@ HTTPCaller.SaveConstant = function(SetObj) {
|
|||||||
HTTPCaller.SetHTTPParams = function(SetObj) {
|
HTTPCaller.SetHTTPParams = function(SetObj) {
|
||||||
global.HTTP_PORT_NUMBER = SetObj.HTTPPort;
|
global.HTTP_PORT_NUMBER = SetObj.HTTPPort;
|
||||||
global.HTTP_PORT_PASSWORD = SetObj.HTTPPassword;
|
global.HTTP_PORT_PASSWORD = SetObj.HTTPPassword;
|
||||||
SAVE_CONST(true);
|
global.SAVE_CONST(true);
|
||||||
if (SetObj.DoRestartNode)
|
if (SetObj.DoRestartNode)
|
||||||
global.RestartNode();
|
global.RestartNode();
|
||||||
return { result: 1 };
|
return { result: 1 };
|
||||||
@@ -841,17 +833,17 @@ HTTPCaller.SetNetMode = function(SetObj) {
|
|||||||
for (var key in SetObj) {
|
for (var key in SetObj) {
|
||||||
global.NET_WORK_MODE[key] = SetObj[key];
|
global.NET_WORK_MODE[key] = SetObj[key];
|
||||||
}
|
}
|
||||||
if (NET_WORK_MODE) {
|
if (global.NET_WORK_MODE) {
|
||||||
global.START_IP = NET_WORK_MODE.ip;
|
global.START_IP = global.NET_WORK_MODE.ip;
|
||||||
global.START_PORT_NUMBER = NET_WORK_MODE.port;
|
global.START_PORT_NUMBER = global.NET_WORK_MODE.port;
|
||||||
}
|
}
|
||||||
SAVE_CONST(true);
|
global.SAVE_CONST(true);
|
||||||
if (SetObj.DoRestartNode)
|
if (SetObj.DoRestartNode)
|
||||||
global.RestartNode();
|
global.RestartNode();
|
||||||
return { result: 1 };
|
return { result: 1 };
|
||||||
};
|
};
|
||||||
HTTPCaller.GetAccountKey = function(Num) {
|
HTTPCaller.GetAccountKey = function(Num) {
|
||||||
var Result = {};
|
var Result: any = {};
|
||||||
Result.result = 0;
|
Result.result = 0;
|
||||||
var KeyPair = global.WALLET.GetAccountKey(Num);
|
var KeyPair = global.WALLET.GetAccountKey(Num);
|
||||||
if (KeyPair) {
|
if (KeyPair) {
|
||||||
@@ -924,7 +916,7 @@ function GetCopyNode(Node, BlockCounts) {
|
|||||||
var Item = {
|
var Item = {
|
||||||
VersionNum: Node.VersionNum, NoSendTx: Node.NoSendTx, GetNoSendTx: Node.GetNoSendTx, DirectMAccount: Node.DirectMAccount,
|
VersionNum: Node.VersionNum, NoSendTx: Node.NoSendTx, GetNoSendTx: Node.GetNoSendTx, DirectMAccount: Node.DirectMAccount,
|
||||||
id: Node.id, ip: Node.ip, portweb: Node.portweb, port: Node.port, TransferCount: Node.TransferCount, GetTiming: GetTiming, ErrCountAll: Node.ErrCountAll,
|
id: Node.id, ip: Node.ip, portweb: Node.portweb, port: Node.port, TransferCount: Node.TransferCount, GetTiming: GetTiming, ErrCountAll: Node.ErrCountAll,
|
||||||
LevelCount: Node.LevelCount, LevelEnum: Node.LevelEnum, TimeTransfer: GetStrOnlyTimeUTC(new Date(Node.LastTimeTransfer)), BlockProcessCount: Node.BlockProcessCount,
|
LevelCount: Node.LevelCount, LevelEnum: Node.LevelEnum, TimeTransfer: global.GetStrOnlyTimeUTC(new Date(Node.LastTimeTransfer)), BlockProcessCount: Node.BlockProcessCount,
|
||||||
DeltaTime: Node.DeltaTime, DeltaTimeM: Node.DeltaTimeM, DeltaGlobTime: Node.DeltaGlobTime, PingNumber: Node.PingNumber, NextConnectDelta: Node.NextConnectDelta,
|
DeltaTime: Node.DeltaTime, DeltaTimeM: Node.DeltaTimeM, DeltaGlobTime: Node.DeltaGlobTime, PingNumber: Node.PingNumber, NextConnectDelta: Node.NextConnectDelta,
|
||||||
NextGetNodesDelta: Node.NextGetNodesDelta, NextHotDelta: Node.NextHotDelta, Name: Node.Name, addrStr: Node.addrStr, CanHot: Node.CanHot,
|
NextGetNodesDelta: Node.NextGetNodesDelta, NextHotDelta: Node.NextHotDelta, Name: Node.Name, addrStr: Node.addrStr, CanHot: Node.CanHot,
|
||||||
Active: Node.Active, Hot: Node.Hot, Info: Node.PrevInfo + Node.Info, InConnectArr: Node.WasAddToConnect, Level: Node.Level, TransferBlockNum: Node.TransferBlockNum,
|
Active: Node.Active, Hot: Node.Hot, Info: Node.PrevInfo + Node.Info, InConnectArr: Node.WasAddToConnect, Level: Node.Level, TransferBlockNum: Node.TransferBlockNum,
|
||||||
@@ -939,7 +931,7 @@ HTTPCaller.GetBlockchainStat = function(Param) {
|
|||||||
return Result;
|
return Result;
|
||||||
};
|
};
|
||||||
HTTPCaller.GetAllCounters = function(Params, response) {
|
HTTPCaller.GetAllCounters = function(Params, response) {
|
||||||
let Result = GET_STATS();
|
let Result = global.GET_STATS();
|
||||||
Result.result = 1;
|
Result.result = 1;
|
||||||
Result.sessionid = sessionid;
|
Result.sessionid = sessionid;
|
||||||
Result.STAT_MODE = global.STAT_MODE;
|
Result.STAT_MODE = global.STAT_MODE;
|
||||||
@@ -976,9 +968,9 @@ function AddStatData(Params, Result, Prefix) {
|
|||||||
};
|
};
|
||||||
HTTPCaller.SetStatMode = function(flag) {
|
HTTPCaller.SetStatMode = function(flag) {
|
||||||
if (flag)
|
if (flag)
|
||||||
StartCommonStat();
|
global.StartCommonStat();
|
||||||
global.STAT_MODE = flag;
|
global.STAT_MODE = flag;
|
||||||
SAVE_CONST(true);
|
global.SAVE_CONST(true);
|
||||||
global.TX_PROCESS.RunRPC("LOAD_CONST");
|
global.TX_PROCESS.RunRPC("LOAD_CONST");
|
||||||
return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE };
|
return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE };
|
||||||
};
|
};
|
||||||
@@ -995,7 +987,7 @@ HTTPCaller.ClearStat = function() {
|
|||||||
return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE };
|
return { result: 1, sessionid: sessionid, STAT_MODE: global.STAT_MODE };
|
||||||
};
|
};
|
||||||
HTTPCaller.RewriteAllTransactions = function(Param) {
|
HTTPCaller.RewriteAllTransactions = function(Param) {
|
||||||
RewriteAllTransactions();
|
global.RewriteAllTransactions();
|
||||||
return { result: 1, sessionid: sessionid };
|
return { result: 1, sessionid: sessionid };
|
||||||
};
|
};
|
||||||
HTTPCaller.RewriteTransactions = function(Param) {
|
HTTPCaller.RewriteTransactions = function(Param) {
|
||||||
@@ -1006,7 +998,7 @@ HTTPCaller.TruncateBlockChain = function(Param) {
|
|||||||
var StartNum = global.SERVER.BlockNumDB - Param.BlockCount;
|
var StartNum = global.SERVER.BlockNumDB - Param.BlockCount;
|
||||||
var MinBlock = global.DApps.Accounts.GetMinBlockAct();
|
var MinBlock = global.DApps.Accounts.GetMinBlockAct();
|
||||||
if (MinBlock > StartNum) {
|
if (MinBlock > StartNum) {
|
||||||
global.ToLog("Cant Truncate BlockChain. Very long length. Max length=" + (SERVER.BlockNumDB - MinBlock), 0);
|
global.ToLog("Cant Truncate BlockChain. Very long length. Max length=" + (global.SERVER.BlockNumDB - MinBlock), 0);
|
||||||
return { result: 0, sessionid: sessionid };
|
return { result: 0, sessionid: sessionid };
|
||||||
}
|
}
|
||||||
global.SERVER.TruncateBlockDB(StartNum);
|
global.SERVER.TruncateBlockDB(StartNum);
|
||||||
@@ -1026,8 +1018,8 @@ HTTPCaller.CleanChain = function(Param) {
|
|||||||
return { result: 0, sessionid: sessionid };
|
return { result: 0, sessionid: sessionid };
|
||||||
};
|
};
|
||||||
HTTPCaller.GetArrStats = function(Keys, response) {
|
HTTPCaller.GetArrStats = function(Keys, response) {
|
||||||
var arr = GET_STATDIAGRAMS(Keys);
|
var arr = global.GET_STATDIAGRAMS(Keys);
|
||||||
let Result = { result: 1, sessionid: sessionid, arr: arr, STAT_MODE: global.STAT_MODE };
|
let Result: any = { result: 1, sessionid: sessionid, arr: arr, STAT_MODE: global.STAT_MODE };
|
||||||
if (!global.TX_PROCESS || !global.TX_PROCESS.RunRPC)
|
if (!global.TX_PROCESS || !global.TX_PROCESS.RunRPC)
|
||||||
return Result;
|
return Result;
|
||||||
var Keys2 = [];
|
var Keys2 = [];
|
||||||
@@ -1051,7 +1043,7 @@ HTTPCaller.GetArrStats = function(Keys, response) {
|
|||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
HTTPCaller.GetBlockChain = function(type) {
|
HTTPCaller.GetBlockChain = function(type) {
|
||||||
if (!global.SERVER || !SERVER.LoadedChainList) {
|
if (!global.SERVER || !global.SERVER.LoadedChainList) {
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
}
|
}
|
||||||
var MainChains = {};
|
var MainChains = {};
|
||||||
@@ -1081,13 +1073,13 @@ HTTPCaller.GetBlockChain = function(type) {
|
|||||||
for (var List of ArrMapMapLoaded) {
|
for (var List of ArrMapMapLoaded) {
|
||||||
AddMapList(arrLoadedBlocks, type, List);
|
AddMapList(arrLoadedBlocks, type, List);
|
||||||
}
|
}
|
||||||
var obj = {
|
var obj: any = {
|
||||||
LastCurrentBlockNum: global.SERVER.GetLastCorrectBlockNum(), CurrentBlockNum: global.SERVER.CurrentBlockNum, LoadedChainList: arrLoadedChainList,
|
LastCurrentBlockNum: global.SERVER.GetLastCorrectBlockNum(), CurrentBlockNum: global.SERVER.CurrentBlockNum, LoadedChainList: arrLoadedChainList,
|
||||||
LoadedBlocks: arrLoadedBlocks, BlockChain: arrBlocks, port: global.SERVER.port, DELTA_CURRENT_TIME: DELTA_CURRENT_TIME, memoryUsage: process.memoryUsage(),
|
LoadedBlocks: arrLoadedBlocks, BlockChain: arrBlocks, port: global.SERVER.port, DELTA_CURRENT_TIME: global.DELTA_CURRENT_TIME, memoryUsage: process.memoryUsage(),
|
||||||
IsDevelopAccount: IsDeveloperAccount(WALLET.PubKeyArr), LoadedChainCount: global.SERVER.LoadedChainList.length, StartLoadBlockTime: global.SERVER.StartLoadBlockTime,
|
IsDevelopAccount: global.IsDeveloperAccount(global.WALLET.PubKeyArr), LoadedChainCount: global.SERVER.LoadedChainList.length, StartLoadBlockTime: global.SERVER.StartLoadBlockTime,
|
||||||
sessionid: sessionid, result: 1
|
sessionid: sessionid, result: 1
|
||||||
};
|
};
|
||||||
var obj2 = HTTPCaller.GetHotArray();
|
var obj2: any = HTTPCaller.GetHotArray();
|
||||||
obj.ArrTree = obj2.ArrTree;
|
obj.ArrTree = obj2.ArrTree;
|
||||||
arrBlocks = [];
|
arrBlocks = [];
|
||||||
arrLoadedChainList = [];
|
arrLoadedChainList = [];
|
||||||
@@ -1116,9 +1108,9 @@ HTTPCaller.GetHistoryTransactions = function(Params) {
|
|||||||
Item.Description = TR.Description;
|
Item.Description = TR.Description;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var Result = {
|
var Result: any = {
|
||||||
Value: { SumCOIN: Account.Value.SumCOIN, SumCENT: Account.Value.SumCENT }, Name: Account.Name, Currency: Account.Currency,
|
Value: { SumCOIN: Account.Value.SumCOIN, SumCENT: Account.Value.SumCENT }, Name: Account.Name, Currency: Account.Currency,
|
||||||
MaxBlockNum: GetCurrentBlockNumByTime(), FIRST_TIME_BLOCK: FIRST_TIME_BLOCK, result: arr.length > 0 ? 1 : 0, History: arr
|
MaxBlockNum: global.GetCurrentBlockNumByTime(), FIRST_TIME_BLOCK: global.FIRST_TIME_BLOCK, result: arr.length > 0 ? 1 : 0, History: arr
|
||||||
};
|
};
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
@@ -1126,10 +1118,10 @@ HTTPCaller.GetHistoryTransactions = function(Params) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function GetCopyBlock(Block) {
|
function GetCopyBlock(Block) {
|
||||||
var Result = {
|
var Result: any = {
|
||||||
BlockNum: Block.BlockNum, bSave: Block.bSave, TreeHash: GetHexFromAddres(Block.TreeHash), AddrHash: GetHexFromAddres(Block.AddrHash),
|
BlockNum: Block.BlockNum, bSave: Block.bSave, TreeHash: global.GetHexFromAddres(Block.TreeHash), AddrHash: global.GetHexFromAddres(Block.AddrHash),
|
||||||
PrevHash: GetHexFromAddres(Block.PrevHash), SumHash: GetHexFromAddres(Block.SumHash), SumPow: Block.SumPow, TrDataPos: Block.TrDataPos,
|
PrevHash: global.GetHexFromAddres(Block.PrevHash), SumHash: global.GetHexFromAddres(Block.SumHash), SumPow: Block.SumPow, TrDataPos: Block.TrDataPos,
|
||||||
TrDataLen: Block.TrDataLen, SeqHash: GetHexFromAddres(Block.SeqHash), Hash: GetHexFromAddres(Block.Hash), Power: GetPowPower(Block.PowHash),
|
TrDataLen: Block.TrDataLen, SeqHash: global.GetHexFromAddres(Block.SeqHash), Hash: global.GetHexFromAddres(Block.Hash), Power: global.GetPowPower(Block.PowHash),
|
||||||
TrCount: Block.TrCount, arrContent: Block.arrContent,
|
TrCount: Block.TrCount, arrContent: Block.arrContent,
|
||||||
};
|
};
|
||||||
return Result;
|
return Result;
|
||||||
@@ -1137,7 +1129,7 @@ function GetCopyBlock(Block) {
|
|||||||
var AddrLength = 16;
|
var AddrLength = 16;
|
||||||
|
|
||||||
function GetHexFromAddresShort(Hash) {
|
function GetHexFromAddresShort(Hash) {
|
||||||
return GetHexFromAddres(Hash).substr(0, AddrLength);
|
return global.GetHexFromAddres(Hash).substr(0, AddrLength);
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetHexFromStrShort(Str) {
|
function GetHexFromStrShort(Str) {
|
||||||
@@ -1162,27 +1154,27 @@ function CopyBlockDraw(Block, MainChains) {
|
|||||||
var MinerID = 0;
|
var MinerID = 0;
|
||||||
var MinerName = "";
|
var MinerName = "";
|
||||||
if (Block.AddrHash) {
|
if (Block.AddrHash) {
|
||||||
var Num = ReadUintFromArr(Block.AddrHash, 0);
|
var Num = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||||
MinerID = Num;
|
MinerID = Num;
|
||||||
var Item = global.DApps.Accounts.ReadState(Num);
|
var Item = global.DApps.Accounts.ReadState(Num);
|
||||||
if (Item && Item.Name)
|
if (Item && Item.Name)
|
||||||
MinerName = Item.Name.substr(0, 8);
|
MinerName = Item.Name.substr(0, 8);
|
||||||
}
|
}
|
||||||
var CheckPoint = 0;
|
var CheckPoint = 0;
|
||||||
if (Block.BlockNum === CHECK_POINT.BlockNum)
|
if (Block.BlockNum === global.CHECK_POINT.BlockNum)
|
||||||
CheckPoint = 1;
|
CheckPoint = 1;
|
||||||
var Mining;
|
var Mining;
|
||||||
if (SERVER.MiningBlock === Block)
|
if (global.SERVER.MiningBlock === Block)
|
||||||
Mining = 1;
|
Mining = 1;
|
||||||
else
|
else
|
||||||
Mining = 0;
|
Mining = 0;
|
||||||
GetGUID(Block);
|
GetGUID(Block);
|
||||||
var Item = {
|
Item = {
|
||||||
guid: Block.guid, Active: Block.Active, bSave: Block.bSave, Prepared: Block.Prepared, BlockNum: Block.BlockNum, Hash: GetHexFromAddresShort(Block.Hash),
|
guid: Block.guid, Active: Block.Active, bSave: Block.bSave, Prepared: Block.Prepared, BlockNum: Block.BlockNum, Hash: GetHexFromAddresShort(Block.Hash),
|
||||||
SumHash: GetHexFromAddresShort(Block.SumHash), SeqHash: GetHexFromAddresShort(Block.SeqHash), TreeHash: GetHexFromAddresShort(Block.TreeHash),
|
SumHash: GetHexFromAddresShort(Block.SumHash), SeqHash: GetHexFromAddresShort(Block.SeqHash), TreeHash: GetHexFromAddresShort(Block.TreeHash),
|
||||||
AddrHash: GetHexFromAddresShort(Block.AddrHash), MinerID: MinerID, MinerName: MinerName, Comment1: Block.Comment1, Comment2: Block.Comment2,
|
AddrHash: GetHexFromAddresShort(Block.AddrHash), MinerID: MinerID, MinerName: MinerName, Comment1: Block.Comment1, Comment2: Block.Comment2,
|
||||||
SumPow: Block.SumPow, Info: Block.Info, TreeLoaded: Block.TreeEq, AddToLoad: Block.AddToLoad, LoadDB: Block.LoadDB, FindBlockDB: Block.FindBlockDB,
|
SumPow: Block.SumPow, Info: Block.Info, TreeLoaded: Block.TreeEq, AddToLoad: Block.AddToLoad, LoadDB: Block.LoadDB, FindBlockDB: Block.FindBlockDB,
|
||||||
TrCount: Block.TrCount, ArrLength: 0, TrDataLen: Block.TrDataLen, Power: GetPowPower(Block.PowHash), CheckPoint: CheckPoint, Mining: Mining,
|
TrCount: Block.TrCount, ArrLength: 0, TrDataLen: Block.TrDataLen, Power: global.GetPowPower(Block.PowHash), CheckPoint: CheckPoint, Mining: Mining,
|
||||||
TransferSize: Block.TransferSize, HasErr: Block.HasErr,
|
TransferSize: Block.TransferSize, HasErr: Block.HasErr,
|
||||||
};
|
};
|
||||||
if (Block.chain)
|
if (Block.chain)
|
||||||
@@ -1198,11 +1190,11 @@ function CopyBlockDraw(Block, MainChains) {
|
|||||||
return Item;
|
return Item;
|
||||||
};
|
};
|
||||||
|
|
||||||
function CopyChainDraw(Chain, bWasRecursive, bMain) {
|
function CopyChainDraw(Chain, bWasRecursive, bMain?) {
|
||||||
if (!Chain)
|
if (!Chain)
|
||||||
return Chain;
|
return Chain;
|
||||||
GetGUID(Chain);
|
GetGUID(Chain);
|
||||||
var Item = {
|
var Item: any = {
|
||||||
guid: Chain.guid, id: Chain.id, chainid: Chain.id, bSave: Chain.LoadDB, FindBlockDB: Chain.FindBlockDB, GetFindDB: Chain.GetFindDB(),
|
guid: Chain.guid, id: Chain.id, chainid: Chain.id, bSave: Chain.LoadDB, FindBlockDB: Chain.FindBlockDB, GetFindDB: Chain.GetFindDB(),
|
||||||
BlockNum: Chain.BlockNumStart, Hash: GetHexFromAddresShort(Chain.HashStart), Comment1: Chain.Comment1, Comment2: Chain.Comment2,
|
BlockNum: Chain.BlockNumStart, Hash: GetHexFromAddresShort(Chain.HashStart), Comment1: Chain.Comment1, Comment2: Chain.Comment2,
|
||||||
StopSend: Chain.StopSend, SumPow: 0, Info: Chain.Info, IsSum: Chain.IsSum, Main: bMain,
|
StopSend: Chain.StopSend, SumPow: 0, Info: Chain.Info, IsSum: Chain.IsSum, Main: bMain,
|
||||||
@@ -1231,7 +1223,7 @@ function CopyChainDraw(Chain, bWasRecursive, bMain) {
|
|||||||
return Item;
|
return Item;
|
||||||
};
|
};
|
||||||
|
|
||||||
function AddChainList(arrLoadedChainList, LoadedChainList, bMain) {
|
function AddChainList(arrLoadedChainList, LoadedChainList, bMain?) {
|
||||||
for (var chain of LoadedChainList) {
|
for (var chain of LoadedChainList) {
|
||||||
if (chain) {
|
if (chain) {
|
||||||
arrLoadedChainList.push(CopyChainDraw(chain, false, bMain));
|
arrLoadedChainList.push(CopyChainDraw(chain, false, bMain));
|
||||||
@@ -1239,7 +1231,7 @@ function AddChainList(arrLoadedChainList, LoadedChainList, bMain) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function AddMapList(arrLoadedBlocks, type, MapMapLoaded, MainChains) {
|
function AddMapList(arrLoadedBlocks, type, MapMapLoaded, MainChains?) {
|
||||||
for (var key in MapMapLoaded) {
|
for (var key in MapMapLoaded) {
|
||||||
var map = MapMapLoaded[key];
|
var map = MapMapLoaded[key];
|
||||||
if (map) {
|
if (map) {
|
||||||
@@ -1278,8 +1270,7 @@ function SendWebFile(response, name?, StrCookie?, bParsing?) {
|
|||||||
if (StrCookie)
|
if (StrCookie)
|
||||||
Headers['Set-Cookie'] = StrCookie;
|
Headers['Set-Cookie'] = StrCookie;
|
||||||
response.writeHead(200, Headers);
|
response.writeHead(200, Headers);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
if (StrContentType === "application/font-woff") {
|
if (StrContentType === "application/font-woff") {
|
||||||
response.writeHead(200, { 'Content-Type': StrContentType, 'Access-Control-Allow-Origin': "*" });
|
response.writeHead(200, { 'Content-Type': StrContentType, 'Access-Control-Allow-Origin': "*" });
|
||||||
}
|
}
|
||||||
@@ -1287,7 +1278,7 @@ function SendWebFile(response, name?, StrCookie?, bParsing?) {
|
|||||||
response.writeHead(200, { 'Content-Type': StrContentType });
|
response.writeHead(200, { 'Content-Type': StrContentType });
|
||||||
}
|
}
|
||||||
if (bParsing && StrContentType === "text/html") {
|
if (bParsing && StrContentType === "text/html") {
|
||||||
var data = GetFileHTMLWithParsing(Path);
|
data = GetFileHTMLWithParsing(Path);
|
||||||
response.end(data);
|
response.end(data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1322,11 +1313,13 @@ function ParseTag(Str, TagName, bEdit) {
|
|||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
var index2 = Str.indexOf("}}", index + 3 + TagName.length);
|
var index2 = Str.indexOf("}}", index + 3 + TagName.length);
|
||||||
if (index2 < 0) {
|
if (index2 < 0) {
|
||||||
|
//@ts-ignore
|
||||||
global.ToLog("Error teg " + TagName + " in " + Path);
|
global.ToLog("Error teg " + TagName + " in " + Path);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var Delta = index2 - index;
|
var Delta = index2 - index;
|
||||||
if (Delta > 210) {
|
if (Delta > 210) {
|
||||||
|
//@ts-ignore
|
||||||
global.ToLog("Error length (more 200) teg File in " + Path);
|
global.ToLog("Error length (more 200) teg File in " + Path);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1383,7 +1376,7 @@ function SaveFileSimple(Path, Str) {
|
|||||||
global.SendHTMLMap = {};
|
global.SendHTMLMap = {};
|
||||||
var Key = "GetFileSimple-" + Path;
|
var Key = "GetFileSimple-" + Path;
|
||||||
global.SendHTMLMap[Key] = Str;
|
global.SendHTMLMap[Key] = Str;
|
||||||
SaveToFile(Path, Str);
|
global.SaveToFile(Path, Str);
|
||||||
};
|
};
|
||||||
global.SendHTMLMap = {};
|
global.SendHTMLMap = {};
|
||||||
global.SendWebFile = SendWebFile;
|
global.SendWebFile = SendWebFile;
|
||||||
@@ -1394,7 +1387,7 @@ global.SaveFileSimple = SaveFileSimple;
|
|||||||
|
|
||||||
function GetStrTime(now) {
|
function GetStrTime(now) {
|
||||||
if (!now)
|
if (!now)
|
||||||
now = GetCurrentTime(0);
|
now = global.GetCurrentTime(0);
|
||||||
var Str = "" + now.getHours().toStringZ(2);
|
var Str = "" + now.getHours().toStringZ(2);
|
||||||
Str = Str + ":" + now.getMinutes().toStringZ(2);
|
Str = Str + ":" + now.getMinutes().toStringZ(2);
|
||||||
Str = Str + ":" + now.getSeconds().toStringZ(2);
|
Str = Str + ":" + now.getSeconds().toStringZ(2);
|
||||||
@@ -1499,7 +1492,7 @@ if (global.HTTP_PORT_NUMBER) {
|
|||||||
global.ToLog("Path: " + Path, 0);
|
global.ToLog("Path: " + Path, 0);
|
||||||
}
|
}
|
||||||
if (CheckPassword && global.HTTP_PORT_PASSWORD) {
|
if (CheckPassword && global.HTTP_PORT_PASSWORD) {
|
||||||
var StrPort = "";
|
var StrPort: any = "";
|
||||||
if (global.HTTP_PORT_NUMBER !== 80)
|
if (global.HTTP_PORT_NUMBER !== 80)
|
||||||
StrPort = global.HTTP_PORT_NUMBER;
|
StrPort = global.HTTP_PORT_NUMBER;
|
||||||
var cookies = parseCookies(request.headers.cookie);
|
var cookies = parseCookies(request.headers.cookie);
|
||||||
@@ -1517,7 +1510,7 @@ if (global.HTTP_PORT_NUMBER) {
|
|||||||
if (!nonce)
|
if (!nonce)
|
||||||
nonce = 0;
|
nonce = 0;
|
||||||
}
|
}
|
||||||
var hash = ClientHex(cookies_token + "-" + global.HTTP_PORT_PASSWORD, nonce);
|
var hash = global.ClientHex(cookies_token + "-" + global.HTTP_PORT_PASSWORD, nonce);
|
||||||
if (hash === cookies_hash) {
|
if (hash === cookies_hash) {
|
||||||
ClientTokenMap[cookies_token] = 1;
|
ClientTokenMap[cookies_token] = 1;
|
||||||
}
|
}
|
||||||
@@ -1563,9 +1556,9 @@ if (global.HTTP_PORT_NUMBER) {
|
|||||||
else {
|
else {
|
||||||
DoCommand(response, Type, Path, params, remoteAddress);
|
DoCommand(response, Type, Path, params, remoteAddress);
|
||||||
}
|
}
|
||||||
}).listen(port, LISTEN_IP, function() {
|
}).listen(port, global.LISTEN_IP, function() {
|
||||||
global.HTTP_SERVER_START_OK = 1;
|
global.HTTP_SERVER_START_OK = 1;
|
||||||
global.ToLog("Run HTTP-server on " + LISTEN_IP + ":" + port);
|
global.ToLog("Run HTTP-server on " + global.LISTEN_IP + ":" + port);
|
||||||
});
|
});
|
||||||
HTTPServer.on('error', function(err) {
|
HTTPServer.on('error', function(err) {
|
||||||
global.ToError("H##3");
|
global.ToError("H##3");
|
||||||
@@ -1654,7 +1647,7 @@ function GetEventArray(SmartNum, Context) {
|
|||||||
return ArrRet;
|
return ArrRet;
|
||||||
};
|
};
|
||||||
HTTPCaller.GetHashRate = function(ArrParams) {
|
HTTPCaller.GetHashRate = function(ArrParams) {
|
||||||
var CurBlockNum = GetCurrentBlockNumByTime();
|
var CurBlockNum = global.GetCurrentBlockNumByTime();
|
||||||
var ResArr = [];
|
var ResArr = [];
|
||||||
for (var i = 0; i < ArrParams.length; i++) {
|
for (var i = 0; i < ArrParams.length; i++) {
|
||||||
var Item = ArrParams[i];
|
var Item = ArrParams[i];
|
||||||
@@ -1693,7 +1686,7 @@ HTTPCaller.GetHashRate = function(ArrParams) {
|
|||||||
var Block = global.SERVER.ReadBlockHeaderDB(Num + d);
|
var Block = global.SERVER.ReadBlockHeaderDB(Num + d);
|
||||||
if (Block) {
|
if (Block) {
|
||||||
CountSum++;
|
CountSum++;
|
||||||
Sum += GetPowPower(Block.PowHash);
|
Sum += global.GetPowPower(Block.PowHash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!CountSum)
|
if (!CountSum)
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import './constant'
|
|||||||
import './log'
|
import './log'
|
||||||
|
|
||||||
let {
|
let {
|
||||||
CONSENSUS_PERIOD_TIME,
|
|
||||||
ToLog,
|
ToLog,
|
||||||
TO_ERROR_LOG,
|
TO_ERROR_LOG,
|
||||||
SaveToFile,
|
SaveToFile,
|
||||||
@@ -82,7 +81,7 @@ require('../HTML/JS/sha3.js');
|
|||||||
require('../HTML/JS/coinlib.js');
|
require('../HTML/JS/coinlib.js');
|
||||||
global.GetCurrentBlockNumByTime = function GetCurrentBlockNumByTime() {
|
global.GetCurrentBlockNumByTime = function GetCurrentBlockNumByTime() {
|
||||||
var CurTimeNum = global.GetCurrentTime() - global.FIRST_TIME_BLOCK;
|
var CurTimeNum = global.GetCurrentTime() - global.FIRST_TIME_BLOCK;
|
||||||
var StartBlockNum = Math.trunc((CurTimeNum + CONSENSUS_PERIOD_TIME) / CONSENSUS_PERIOD_TIME);
|
var StartBlockNum = Math.trunc((CurTimeNum + global.CONSENSUS_PERIOD_TIME) / global.CONSENSUS_PERIOD_TIME);
|
||||||
return StartBlockNum;
|
return StartBlockNum;
|
||||||
};
|
};
|
||||||
global.DelDir = function(Path) {
|
global.DelDir = function(Path) {
|
||||||
@@ -168,7 +167,7 @@ global.LoadParams = function(filename, DefaultValue) {
|
|||||||
return DefaultValue;
|
return DefaultValue;
|
||||||
};
|
};
|
||||||
global.SaveParams = function(filename, data) {
|
global.SaveParams = function(filename, data) {
|
||||||
SaveToFile(filename, Buffer.from(JSON.stringify(data, undefined, 4)));
|
global.SaveToFile(filename, Buffer.from(JSON.stringify(data, undefined, 4)));
|
||||||
};
|
};
|
||||||
global.StartTime = function() {
|
global.StartTime = function() {
|
||||||
global.TimeStart = global.GetCurrentTime();
|
global.TimeStart = global.GetCurrentTime();
|
||||||
|
|||||||
@@ -13,14 +13,8 @@ import './constant'
|
|||||||
import './log-strict'
|
import './log-strict'
|
||||||
|
|
||||||
let {
|
let {
|
||||||
GetDataPath,
|
|
||||||
START_PORT_NUMBER,
|
START_PORT_NUMBER,
|
||||||
CheckSizeLogFile,
|
CheckSizeLogFile,
|
||||||
ToError,
|
|
||||||
ToLog,
|
|
||||||
GetCurrentTime,
|
|
||||||
DEBUG_MODE,
|
|
||||||
SERVER
|
|
||||||
} = global
|
} = global
|
||||||
|
|
||||||
var file_name_info = global.GetDataPath("info.log"), file_name_infoPrev = global.GetDataPath("info-prev.log");
|
var file_name_info = global.GetDataPath("info.log"), file_name_infoPrev = global.GetDataPath("info-prev.log");
|
||||||
@@ -172,7 +166,7 @@ global.PrepareStatEverySecond = function() {
|
|||||||
AddToStatContext(CONTEXT_STATS, e, t);
|
AddToStatContext(CONTEXT_STATS, e, t);
|
||||||
}
|
}
|
||||||
}, global.GET_STATDIAGRAMS = function(e) {
|
}, global.GET_STATDIAGRAMS = function(e) {
|
||||||
GetCurrentTime();
|
global.GetCurrentTime();
|
||||||
var t = GetCurrentStatIndex();
|
var t = GetCurrentStatIndex();
|
||||||
if (!e || !e.length)
|
if (!e || !e.length)
|
||||||
return [];
|
return [];
|
||||||
@@ -219,8 +213,8 @@ global.PrepareStatEverySecond = function() {
|
|||||||
}, global.ClearCommonStat = function() {
|
}, global.ClearCommonStat = function() {
|
||||||
StartStatTime = void (CurStatIndex = 0), CONTEXT_STATS = { Total: {}, Interval: [] }, CONTEXT_ERRORS = { Total: {}, Interval: [] },
|
StartStatTime = void (CurStatIndex = 0), CONTEXT_STATS = { Total: {}, Interval: [] }, CONTEXT_ERRORS = { Total: {}, Interval: [] },
|
||||||
global.HASH_RATE = 0, global.SERVER.ClearStat();
|
global.HASH_RATE = 0, global.SERVER.ClearStat();
|
||||||
}, global.ResizeArrAvg = ResizeArrAvg, global.ResizeArrMax = ResizeArrMax, DEBUG_MODE ? global.TO_DEBUG_LOG = function(e, t, r, o) {
|
}, global.ResizeArrAvg = ResizeArrAvg, global.ResizeArrMax = ResizeArrMax, global.DEBUG_MODE ? global.TO_DEBUG_LOG = function(e, t, r, o) {
|
||||||
DEBUG_MODE && ("rinfo" === t && (e += " from: " + r.address + ":" + r.port + " - " + o.length), global.ToLog(e));
|
global.DEBUG_MODE && ("rinfo" === t && (e += " from: " + r.address + ":" + r.port + " - " + o.length), global.ToLog(e));
|
||||||
} : global.TO_DEBUG_LOG = function(e, t, r, o) {
|
} : global.TO_DEBUG_LOG = function(e, t, r, o) {
|
||||||
}, global.GetStrOnlyTime = function(e) {
|
}, global.GetStrOnlyTime = function(e) {
|
||||||
if (!global.GetCurrentTime)
|
if (!global.GetCurrentTime)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
require("./library.js");
|
require("./library.js");
|
||||||
const net = require("net");
|
const net = require("net");
|
||||||
var ConnectIDCount = 1;
|
var ConnectIDCount = 1;
|
||||||
|
let RBTree = global.RBTree;
|
||||||
module.exports = class CNode {
|
module.exports = class CNode {
|
||||||
addrStr
|
addrStr
|
||||||
ip
|
ip
|
||||||
@@ -81,6 +82,16 @@ module.exports = class CNode {
|
|||||||
SendPacketNum
|
SendPacketNum
|
||||||
Socket
|
Socket
|
||||||
Socket2
|
Socket2
|
||||||
|
ReconnectFromServer
|
||||||
|
SecretForReconnect
|
||||||
|
Self
|
||||||
|
addrStrTemp
|
||||||
|
DoubleConnection
|
||||||
|
PubKey
|
||||||
|
addrArr
|
||||||
|
SocketStart
|
||||||
|
WaitConnectFromServer
|
||||||
|
WaitConnectIP
|
||||||
constructor(addrStr, ip, port) {
|
constructor(addrStr, ip, port) {
|
||||||
this.addrStr = addrStr
|
this.addrStr = addrStr
|
||||||
this.ip = ip.trim()
|
this.ip = ip.trim()
|
||||||
@@ -131,7 +142,7 @@ module.exports = class CNode {
|
|||||||
this.StartTimeGetNodes = 0
|
this.StartTimeGetNodes = 0
|
||||||
this.NextGetNodesDelta = 1000
|
this.NextGetNodesDelta = 1000
|
||||||
this.PingStart = 0
|
this.PingStart = 0
|
||||||
this.NextPing = MIN_PERIOD_PING
|
this.NextPing = global.MIN_PERIOD_PING
|
||||||
this.SendBlockArr = []
|
this.SendBlockArr = []
|
||||||
this.LoadBlockArr = []
|
this.LoadBlockArr = []
|
||||||
this.SendBlockCount = 0
|
this.SendBlockCount = 0
|
||||||
@@ -175,7 +186,7 @@ module.exports = class CNode {
|
|||||||
NODE.SocketStart = Date.now()
|
NODE.SocketStart = Date.now()
|
||||||
NODE.Socket = net.createConnection(NODE.port, NODE.ip, function() {
|
NODE.Socket = net.createConnection(NODE.port, NODE.ip, function() {
|
||||||
if (NODE.Socket) {
|
if (NODE.Socket) {
|
||||||
socketInit(NODE.Socket, "s")
|
global.socketInit(NODE.Socket, "s")
|
||||||
global.AddNodeInfo(NODE, "OK connected *" + NODE.Socket.ConnectID)
|
global.AddNodeInfo(NODE, "OK connected *" + NODE.Socket.ConnectID)
|
||||||
NODE.Socket.ConnectToServer = true
|
NODE.Socket.ConnectToServer = true
|
||||||
SetSocketStatus(NODE.Socket, 2)
|
SetSocketStatus(NODE.Socket, 2)
|
||||||
@@ -194,7 +205,7 @@ module.exports = class CNode {
|
|||||||
NODE.SocketStart = Date.now()
|
NODE.SocketStart = Date.now()
|
||||||
NODE.Socket2 = net.createConnection(NODE.port, NODE.ip, function() {
|
NODE.Socket2 = net.createConnection(NODE.port, NODE.ip, function() {
|
||||||
if (NODE.Socket2) {
|
if (NODE.Socket2) {
|
||||||
socketInit(NODE.Socket2, "s")
|
global.socketInit(NODE.Socket2, "s")
|
||||||
global.AddNodeInfo(NODE, "OK Reconnected *" + NODE.Socket2.ConnectID)
|
global.AddNodeInfo(NODE, "OK Reconnected *" + NODE.Socket2.ConnectID)
|
||||||
NODE.Socket2.ConnectToServer = true
|
NODE.Socket2.ConnectToServer = true
|
||||||
SetSocketStatus(NODE.Socket2, 2)
|
SetSocketStatus(NODE.Socket2, 2)
|
||||||
@@ -287,7 +298,7 @@ module.exports = class CNode {
|
|||||||
global.CloseSocket(SOCKET, Buf ? "Method=" + Buf.Method + ":" + Str : "=CLIENT ON DATA=")
|
global.CloseSocket(SOCKET, Buf ? "Method=" + Buf.Method + ":" + Str : "=CLIENT ON DATA=")
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
socketRead(Socket, data)
|
global.socketRead(Socket, data)
|
||||||
global.SERVER.OnGetFromTCP(NODE, Socket, data)
|
global.SERVER.OnGetFromTCP(NODE, Socket, data)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -323,13 +334,13 @@ module.exports = class CNode {
|
|||||||
var Info = this.GetPOWClientData(0);
|
var Info = this.GetPOWClientData(0);
|
||||||
Info.Reconnect = 1
|
Info.Reconnect = 1
|
||||||
Info.SecretForReconnect = Node.SecretForReconnect
|
Info.SecretForReconnect = Node.SecretForReconnect
|
||||||
var BufWrite = global.BufLib.GetBufferFromObject(Info, FORMAT_POW_TO_SERVER, 1200, {});
|
var BufWrite = global.BufLib.GetBufferFromObject(Info, global.FORMAT_POW_TO_SERVER, 1200, {});
|
||||||
var BufAll = global.SERVER.GetBufFromData("POW_CONNECT7", BufWrite, 1);
|
var BufAll = global.SERVER.GetBufFromData("POW_CONNECT7", BufWrite, 1);
|
||||||
Socket.write(BufAll)
|
Socket.write(BufAll)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var Buf = global.BufLib.GetObjectFromBuffer(data, FORMAT_POW_TO_CLIENT, {});
|
var Buf = global.BufLib.GetObjectFromBuffer(data, global.FORMAT_POW_TO_CLIENT, {});
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
global.SERVER.Sendglobal.CloseSocket(Socket, "FORMAT_POW_TO_CLIENT")
|
global.SERVER.Sendglobal.CloseSocket(Socket, "FORMAT_POW_TO_CLIENT")
|
||||||
@@ -341,7 +352,7 @@ module.exports = class CNode {
|
|||||||
global.SERVER.Sendglobal.CloseSocket(Socket, "SELF")
|
global.SERVER.Sendglobal.CloseSocket(Socket, "SELF")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var addrStr = GetHexFromAddres(Buf.addrArr);
|
var addrStr = global.GetHexFromAddres(Buf.addrArr);
|
||||||
if (!Node.StartFindList && addrStr !== Node.addrStr) {
|
if (!Node.StartFindList && addrStr !== Node.addrStr) {
|
||||||
global.AddNodeInfo(Node, "END: CHANGED ADDR: " + Node.addrStr.substr(0, 16) + "->" + addrStr.substr(0, 16))
|
global.AddNodeInfo(Node, "END: CHANGED ADDR: " + Node.addrStr.substr(0, 16) + "->" + addrStr.substr(0, 16))
|
||||||
global.SERVER.Sendglobal.CloseSocket(Socket, "ADDRESS_HAS_BEEN_CHANGED")
|
global.SERVER.Sendglobal.CloseSocket(Socket, "ADDRESS_HAS_BEEN_CHANGED")
|
||||||
@@ -354,9 +365,9 @@ module.exports = class CNode {
|
|||||||
}
|
}
|
||||||
var Result = false;
|
var Result = false;
|
||||||
if (Buf.PubKeyType === 2 || Buf.PubKeyType === 3) {
|
if (Buf.PubKeyType === 2 || Buf.PubKeyType === 3) {
|
||||||
Result = secp256k1.verify(Buffer.from(shaarr(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr)))
|
Result = global.secp256k1.verify(Buffer.from(global.shaarr(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr)))
|
||||||
if (!Result) {
|
if (!Result) {
|
||||||
Result = secp256k1.verify(Buffer.from(sha3(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr)))
|
Result = global.secp256k1.verify(Buffer.from(global.sha3(addrStr)), Buffer.from(Buf.Sign), Buffer.from([Buf.PubKeyType].concat(Buf.addrArr)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!Result) {
|
if (!Result) {
|
||||||
@@ -365,7 +376,7 @@ module.exports = class CNode {
|
|||||||
global.SERVER.Sendglobal.CloseSocket(Socket, "ERROR_SIGN_SERVER")
|
global.SERVER.Sendglobal.CloseSocket(Socket, "ERROR_SIGN_SERVER")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Buf.MIN_POWER_POW_HANDSHAKE > 1 + MIN_POWER_POW_HANDSHAKE) {
|
if (Buf.MIN_POWER_POW_HANDSHAKE > 1 + global.MIN_POWER_POW_HANDSHAKE) {
|
||||||
global.ToLog("END: BIG_MIN_POWER_POW_HANDSHAKE ADDR: " + addrStr.substr(0, 16) + " from ip: " + Socket.remoteAddress)
|
global.ToLog("END: BIG_MIN_POWER_POW_HANDSHAKE ADDR: " + addrStr.substr(0, 16) + " from ip: " + Socket.remoteAddress)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -384,18 +395,18 @@ module.exports = class CNode {
|
|||||||
Node.PubKey = Buffer.from([Buf.PubKeyType].concat(Buf.addrArr))
|
Node.PubKey = Buffer.from([Buf.PubKeyType].concat(Buf.addrArr))
|
||||||
Node.addrArr = Buf.addrArr
|
Node.addrArr = Buf.addrArr
|
||||||
Node.addrStr = addrStr
|
Node.addrStr = addrStr
|
||||||
if (global.CompareArr(SERVER.addrArr, Node.addrArr) === 0) {
|
if (global.CompareArr(global.SERVER.addrArr, Node.addrArr) === 0) {
|
||||||
Node.Self = 1
|
Node.Self = 1
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
var Hash = shaarr2(Buf.addrArr, Buf.HashRND);
|
var Hash = global.shaarr2(Buf.addrArr, Buf.HashRND);
|
||||||
var nonce = CreateNoncePOWExternMinPower(Hash, 0, Buf.MIN_POWER_POW_HANDSHAKE);
|
var nonce = global.CreateNoncePOWExternMinPower(Hash, 0, Buf.MIN_POWER_POW_HANDSHAKE);
|
||||||
var Info;
|
var Info;
|
||||||
if (WALLET.WalletOpen && IsDeveloperAccount(WALLET.PubKeyArr)) {
|
if (global.WALLET.WalletOpen && global.IsDeveloperAccount(global.WALLET.PubKeyArr)) {
|
||||||
Info = this.GetPOWClientData(0)
|
Info = this.GetPOWClientData(0)
|
||||||
Info.Reconnect = 255
|
Info.Reconnect = 255
|
||||||
Info.Sign = secp256k1.sign(SHA3BUF(Hash), WALLET.KeyPair.getPrivateKey('')).signature
|
Info.Sign = global.secp256k1.sign(global.SHA3BUF(Hash), global.WALLET.KeyPair.getPrivateKey('')).signature
|
||||||
Result = CheckDevelopSign(Hash, Info.Sign)
|
Result = global.CheckDevelopSign(Hash, Info.Sign)
|
||||||
if (!Result) {
|
if (!Result) {
|
||||||
throw "ERROR DEVELOPSIGN!";
|
throw "ERROR DEVELOPSIGN!";
|
||||||
}
|
}
|
||||||
@@ -403,19 +414,19 @@ module.exports = class CNode {
|
|||||||
else {
|
else {
|
||||||
Info = this.GetPOWClientData(nonce)
|
Info = this.GetPOWClientData(nonce)
|
||||||
Info.PubKeyType = global.SERVER.PubKeyType
|
Info.PubKeyType = global.SERVER.PubKeyType
|
||||||
Info.Sign = secp256k1.sign(Buffer.from(Hash), global.SERVER.KeyPair.getPrivateKey('')).signature
|
Info.Sign = global.secp256k1.sign(Buffer.from(Hash), global.SERVER.KeyPair.getPrivateKey('')).signature
|
||||||
}
|
}
|
||||||
var BufWrite = global.BufLib.GetBufferFromObject(Info, FORMAT_POW_TO_SERVER, 1200, {});
|
var BufWrite = global.BufLib.GetBufferFromObject(Info, global.FORMAT_POW_TO_SERVER, 1200, {});
|
||||||
var BufAll = global.SERVER.GetBufFromData("POW_CONNECT6", BufWrite, 1);
|
var BufAll = global.SERVER.GetBufFromData("POW_CONNECT6", BufWrite, 1);
|
||||||
Socket.write(BufAll)
|
Socket.write(BufAll)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GetPOWClientData(nonce) {
|
GetPOWClientData(nonce) {
|
||||||
var Node = this;
|
var Node = this;
|
||||||
var Info = {};
|
var Info: any = {};
|
||||||
Info.DEF_NETWORK = GetNetworkName()
|
Info.DEF_NETWORK = global.GetNetworkName()
|
||||||
Info.DEF_VERSION = DEF_VERSION
|
Info.DEF_VERSION = global.DEF_VERSION
|
||||||
Info.DEF_CLIENT = DEF_CLIENT
|
Info.DEF_CLIENT = global.DEF_CLIENT
|
||||||
Info.addrArr = global.SERVER.addrArr
|
Info.addrArr = global.SERVER.addrArr
|
||||||
Info.ToIP = Node.ip
|
Info.ToIP = Node.ip
|
||||||
Info.ToPort = Node.port
|
Info.ToPort = Node.port
|
||||||
@@ -426,7 +437,7 @@ module.exports = class CNode {
|
|||||||
Info.SendBytes = 0
|
Info.SendBytes = 0
|
||||||
Info.SecretForReconnect = []
|
Info.SecretForReconnect = []
|
||||||
Info.Reserv = []
|
Info.Reserv = []
|
||||||
if (GrayConnect())
|
if (global.GrayConnect())
|
||||||
Info.GrayConnect = 1
|
Info.GrayConnect = 1
|
||||||
return Info;
|
return Info;
|
||||||
}
|
}
|
||||||
@@ -480,7 +491,7 @@ global.CloseSocket = function(Socket, StrError?, bHide?) {
|
|||||||
function SetSocketStatus(Socket, Status) {
|
function SetSocketStatus(Socket, Status) {
|
||||||
if (Socket && Socket.SocketStatus !== Status) {
|
if (Socket && Socket.SocketStatus !== Status) {
|
||||||
if (Status === 100 && (Socket.SocketStatus !== 3 && Socket.SocketStatus !== 200)) {
|
if (Status === 100 && (Socket.SocketStatus !== 3 && Socket.SocketStatus !== 200)) {
|
||||||
ToLogTrace("===================ERROR=================== " + Status);
|
global.ToLogTrace("===================ERROR=================== " + Status);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Status === 100 && Socket.Node)
|
if (Status === 100 && Socket.Node)
|
||||||
@@ -494,7 +505,7 @@ function GetSocketStatus(Socket) {
|
|||||||
if (Socket && Socket.SocketStatus) {
|
if (Socket && Socket.SocketStatus) {
|
||||||
if (Socket.SocketStatus !== 100) {
|
if (Socket.SocketStatus !== 100) {
|
||||||
var Delta = Date.now() - Socket.TimeStatus;
|
var Delta = Date.now() - Socket.TimeStatus;
|
||||||
if (Delta > MAX_WAIT_PERIOD_FOR_STATUS) {
|
if (Delta > global.MAX_WAIT_PERIOD_FOR_STATUS) {
|
||||||
global.CloseSocket(Socket, "MAX_WAIT_PERIOD_FOR_STATUS = " + Socket.SocketStatus + " time = " + Delta);
|
global.CloseSocket(Socket, "MAX_WAIT_PERIOD_FOR_STATUS = " + Socket.SocketStatus + " time = " + Delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -543,7 +554,7 @@ function NodeName(Node) {
|
|||||||
return "";
|
return "";
|
||||||
if (Node.Name)
|
if (Node.Name)
|
||||||
return Node.Name;
|
return Node.Name;
|
||||||
if (LOCAL_RUN)
|
if (global.LOCAL_RUN)
|
||||||
return "" + Node.port;
|
return "" + Node.port;
|
||||||
else {
|
else {
|
||||||
return "" + Node.ip + ":" + Node.addrStr.substr(0, 6);
|
return "" + Node.ip + ":" + Node.addrStr.substr(0, 6);
|
||||||
@@ -583,7 +594,7 @@ function AddNodeInfo(Node, Str, bSet) {
|
|||||||
Node.Info = "";
|
Node.Info = "";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
var timesend = GetStrOnlyTimeUTC();
|
var timesend = global.GetStrOnlyTimeUTC();
|
||||||
Str = timesend + " " + Str;
|
Str = timesend + " " + Str;
|
||||||
Node.Info += Str + "\n";
|
Node.Info += Str + "\n";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,14 +11,19 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
module.exports = class CRest extends require("./db/block-db")
|
module.exports = class CRest extends require("./db/block-db")
|
||||||
{
|
{
|
||||||
|
LoadRestContext
|
||||||
|
BlockNumDB
|
||||||
|
BlockNumDBMin
|
||||||
|
UseTruncateBlockDB
|
||||||
|
ContextSendLoadToBegin
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
}
|
}
|
||||||
CheckSyncRest() {
|
CheckSyncRest() {
|
||||||
var BlockNumTime = GetCurrentBlockNumByTime();
|
var BlockNumTime = global.GetCurrentBlockNumByTime();
|
||||||
var Delta = BlockNumTime - this.BlockNumDB;
|
var Delta = BlockNumTime - this.BlockNumDB;
|
||||||
if (Delta > REST_START_COUNT + DELTA_BLOCK_ACCOUNT_HASH + 500) {
|
if (Delta > global.REST_START_COUNT + global.DELTA_BLOCK_ACCOUNT_HASH + 500) {
|
||||||
var BlockNumRest = GetCurrentRestNum(REST_START_COUNT + DELTA_BLOCK_ACCOUNT_HASH + 500);
|
var BlockNumRest = GetCurrentRestNum(global.REST_START_COUNT + global.DELTA_BLOCK_ACCOUNT_HASH + 500);
|
||||||
if (this.BlockNumDB >= this.BlockNumDBMin && this.BlockNumDB <= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) {
|
if (this.BlockNumDB >= this.BlockNumDBMin && this.BlockNumDB <= this.BlockNumDBMin + global.BLOCK_PROCESSING_LENGTH2) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -29,8 +34,8 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.LoadRestContext = {
|
this.LoadRestContext = {
|
||||||
Mode: 0, BlockNum: BlockNumRest, BlockNumRest: BlockNumRest, WasDelta: Delta, BlockNumProof: BlockNumRest + DELTA_BLOCK_ACCOUNT_HASH,
|
Mode: 0, BlockNum: BlockNumRest, BlockNumRest: BlockNumRest, WasDelta: Delta, BlockNumProof: BlockNumRest + global.DELTA_BLOCK_ACCOUNT_HASH,
|
||||||
CountProof: COUNT_BLOCKS_FOR_LOAD, StartTimeHistory: Date.now(), MaxTimeOut: 600 * 1000, LoopSyncRest: 1, SendGetHeaderCount: 0,
|
CountProof: global.COUNT_BLOCKS_FOR_LOAD, StartTimeHistory: Date.now(), MaxTimeOut: 600 * 1000, LoopSyncRest: 1, SendGetHeaderCount: 0,
|
||||||
ReceiveHeaderCount: 0, ArrProof: [], MapSend: {}
|
ReceiveHeaderCount: 0, ArrProof: [], MapSend: {}
|
||||||
}
|
}
|
||||||
for (var i = 0; i < this.NodesArr.length; i++) {
|
for (var i = 0; i < this.NodesArr.length; i++) {
|
||||||
@@ -60,7 +65,7 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
Context.SendGetHeaderCount++
|
Context.SendGetHeaderCount++
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Context.ReceiveHeaderCount >= COUNT_NODE_PROOF) {
|
if (Context.ReceiveHeaderCount >= global.COUNT_NODE_PROOF) {
|
||||||
Context.Mode = 2
|
Context.Mode = 2
|
||||||
global.ToLog("Next mode: " + Context.Mode + " Receive:" + Context.ReceiveHeaderCount + "/" + Context.SendGetHeaderCount, 2)
|
global.ToLog("Next mode: " + Context.Mode + " Receive:" + Context.ReceiveHeaderCount + "/" + Context.SendGetHeaderCount, 2)
|
||||||
}
|
}
|
||||||
@@ -133,13 +138,13 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
F: function(Info) {
|
F: function(Info) {
|
||||||
if (Context.TxProof)
|
if (Context.TxProof)
|
||||||
return;
|
return;
|
||||||
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, FORMAT_BLOCK_TRANSFER, WRK_BLOCK_TRANSFER);
|
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, global.FORMAT_BLOCK_TRANSFER, global.WRK_BLOCK_TRANSFER);
|
||||||
Info.Data = undefined
|
Info.Data = undefined
|
||||||
if (Data.BlockNum !== BlockProof.BlockNum || global.CompareArr(Data.TreeHash, BlockProof.TreeHash) !== 0) {
|
if (Data.BlockNum !== BlockProof.BlockNum || global.CompareArr(Data.TreeHash, BlockProof.TreeHash) !== 0) {
|
||||||
global.ToLog("Error get proof block from " + NodeName(Item.Node), 2)
|
global.ToLog("Error get proof block from " + NodeName(Item.Node), 2)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var TreeHash = CalcTreeHashFromArrBody(Data.BlockNum, Data.arrContent);
|
var TreeHash = global.CalcTreeHashFromArrBody(Data.BlockNum, Data.arrContent);
|
||||||
if (global.CompareArr(BlockProof.TreeHash, TreeHash) !== 0) {
|
if (global.CompareArr(BlockProof.TreeHash, TreeHash) !== 0) {
|
||||||
global.ToLog("Error TreeHash in proof block from " + NodeName(Item.Node), 2)
|
global.ToLog("Error TreeHash in proof block from " + NodeName(Item.Node), 2)
|
||||||
return;
|
return;
|
||||||
@@ -148,9 +153,9 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
var FindTx = undefined;
|
var FindTx = undefined;
|
||||||
for (var n = 0; n < Data.arrContent.length; n++) {
|
for (var n = 0; n < Data.arrContent.length; n++) {
|
||||||
var Body = Data.arrContent[n];
|
var Body = Data.arrContent[n];
|
||||||
if (Body[0] === TYPE_TRANSACTION_ACC_HASH) {
|
if (Body[0] === global.TYPE_TRANSACTION_ACC_HASH) {
|
||||||
try {
|
try {
|
||||||
FindTx = global.BufLib.GetObjectFromBuffer(Body, FORMAT_ACCOUNT_HASH3, {})
|
FindTx = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_ACCOUNT_HASH3, {})
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
global.ToLog("Error parsing Body[" + n + "] block proof: " + e, 2)
|
global.ToLog("Error parsing Body[" + n + "] block proof: " + e, 2)
|
||||||
@@ -167,16 +172,16 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
Context.AccTaskList = []
|
Context.AccTaskList = []
|
||||||
Context.AccTaskFinished = 0
|
Context.AccTaskFinished = 0
|
||||||
var AccCount = FindTx.AccountMax + 1;
|
var AccCount = FindTx.AccountMax + 1;
|
||||||
for (var n = 0; n < AccCount; n += MAX_ACCOUNTS_TRANSFER) {
|
for (var n = 0; n < AccCount; n += global.MAX_ACCOUNTS_TRANSFER) {
|
||||||
var Task = { StartNum: n, Count: MAX_ACCOUNTS_TRANSFER, Time: 0, MapSend: {} };
|
var Task = { StartNum: n, Count: global.MAX_ACCOUNTS_TRANSFER, Time: 0, MapSend: {} };
|
||||||
if (Task.StartNum + Task.Count > AccCount)
|
if (Task.StartNum + Task.Count > AccCount)
|
||||||
Task.Count = AccCount - Task.StartNum
|
Task.Count = AccCount - Task.StartNum
|
||||||
Context.AccTaskList.push(Task)
|
Context.AccTaskList.push(Task)
|
||||||
}
|
}
|
||||||
Context.SmartTaskList = []
|
Context.SmartTaskList = []
|
||||||
Context.SmartTaskFinished = 0
|
Context.SmartTaskFinished = 0
|
||||||
for (var n = 0; n < FindTx.SmartCount; n += MAX_SMARTS_TRANSFER) {
|
for (var n = 0; n < FindTx.SmartCount; n += global.MAX_SMARTS_TRANSFER) {
|
||||||
var Task = { StartNum: n, Count: MAX_SMARTS_TRANSFER, Time: 0, MapSend: {} };
|
var Task = { StartNum: n, Count: global.MAX_SMARTS_TRANSFER, Time: 0, MapSend: {} };
|
||||||
if (Task.StartNum + Task.Count > FindTx.SmartCount)
|
if (Task.StartNum + Task.Count > FindTx.SmartCount)
|
||||||
Task.Count = FindTx.SmartCount - Task.StartNum
|
Task.Count = FindTx.SmartCount - Task.StartNum
|
||||||
Context.SmartTaskList.push(Task)
|
Context.SmartTaskList.push(Task)
|
||||||
@@ -221,7 +226,7 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
global.ToLog("ERROR Version Result GETREST Num:" + Task.StartNum + " from " + NodeName(Info.Node), 2)
|
global.ToLog("ERROR Version Result GETREST Num:" + Task.StartNum + " from " + NodeName(Info.Node), 2)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (CompareArrL(Data.ProofHash, Context.TxProof.AccHash) !== 0) {
|
if (global.CompareArrL(Data.ProofHash, Context.TxProof.AccHash) !== 0) {
|
||||||
global.ToLog("ERROR PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(Data.ProofHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
|
global.ToLog("ERROR PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(Data.ProofHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
|
||||||
2)
|
2)
|
||||||
return;
|
return;
|
||||||
@@ -230,8 +235,8 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
for (var i = 0; i < Data.Arr.length; i++) {
|
for (var i = 0; i < Data.Arr.length; i++) {
|
||||||
ArrM[i] = global.shaarr(Data.Arr[i])
|
ArrM[i] = global.shaarr(Data.Arr[i])
|
||||||
}
|
}
|
||||||
var GetHash = CheckMerkleProof(Data.ProofArrL, ArrM, Data.ProofArrR);
|
var GetHash = global.CheckMerkleProof(Data.ProofArrL, ArrM, Data.ProofArrR);
|
||||||
if (CompareArrL(GetHash, Context.TxProof.AccHash) !== 0) {
|
if (global.CompareArrL(GetHash, Context.TxProof.AccHash) !== 0) {
|
||||||
global.ToLog("ERROR CALC PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(GetHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
|
global.ToLog("ERROR CALC PROOF HASH Result GETREST Num:" + Task.StartNum + " Hash: " + global.GetHexFromArr(GetHash) + "/" + global.GetHexFromArr(Context.TxProof.AccHash) + " from " + NodeName(Info.Node),
|
||||||
2)
|
2)
|
||||||
return;
|
return;
|
||||||
@@ -302,7 +307,7 @@ module.exports = class CRest extends require("./db/block-db")
|
|||||||
if (ErrSmartNum > 0) {
|
if (ErrSmartNum > 0) {
|
||||||
var Str = "Error hash in smart num: " + ErrSmartNum;
|
var Str = "Error hash in smart num: " + ErrSmartNum;
|
||||||
global.ToLog(Str, 2)
|
global.ToLog(Str, 2)
|
||||||
var t = Math.trunc(ErrSmartNum / MAX_SMARTS_TRANSFER);
|
var t = Math.trunc(ErrSmartNum / global.MAX_SMARTS_TRANSFER);
|
||||||
var Task = Context.SmartTaskList[t];
|
var Task = Context.SmartTaskList[t];
|
||||||
if (!Task) {
|
if (!Task) {
|
||||||
global.ToLog("error task number: " + t)
|
global.ToLog("error task number: " + t)
|
||||||
@@ -444,7 +449,7 @@ function CheckHashSmarts(LastSumHash) {
|
|||||||
Item.SumHash = [];
|
Item.SumHash = [];
|
||||||
var Buf = global.BufLib.GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, WorkStruct);
|
var Buf = global.BufLib.GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, WorkStruct);
|
||||||
var Hash = global.sha3(Buf);
|
var Hash = global.sha3(Buf);
|
||||||
var SumHash = sha3arr2(PrevItem.SumHash, Hash);
|
var SumHash = global.sha3arr2(PrevItem.SumHash, Hash);
|
||||||
if (global.CompareArr(SumHash, WasSumHash) !== 0)
|
if (global.CompareArr(SumHash, WasSumHash) !== 0)
|
||||||
return Num;
|
return Num;
|
||||||
Item = PrevItem;
|
Item = PrevItem;
|
||||||
|
|||||||
@@ -9,65 +9,59 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
function DoRest(r,t,e)
|
function DoRest(r, t, e) {
|
||||||
{
|
var u = r.Arr[0], o = Math.floor(e / global.REST_BLOCK_SCALE);
|
||||||
var u = r.Arr[0], o = Math.floor(e / REST_BLOCK_SCALE);
|
if (o !== Math.floor((u.BlockNum - 1) / global.REST_BLOCK_SCALE)) {
|
||||||
if(o !== Math.floor((u.BlockNum - 1) / REST_BLOCK_SCALE))
|
for (var n = GetRestArr(o), l = [], a = n.length - 2; 0 <= a; a--)
|
||||||
{
|
l.push(n[a] * global.REST_BLOCK_SCALE);
|
||||||
for(var n = GetRestArr(o), l = [], a = n.length - 2; 0 <= a; a--)
|
|
||||||
l.push(n[a] * REST_BLOCK_SCALE);
|
|
||||||
RestPush(r, l, e, 1);
|
RestPush(r, l, e, 1);
|
||||||
}
|
}
|
||||||
r.Arr[0] = {BlockNum:e, Value:t.Value};
|
r.Arr[0] = { BlockNum: e, Value: t.Value };
|
||||||
};
|
};
|
||||||
|
|
||||||
function RestPush(r,t,e,u)
|
function RestPush(r, t, e, u) {
|
||||||
{
|
|
||||||
var o = r.Arr[u - 1], n = r.Arr[u];
|
var o = r.Arr[u - 1], n = r.Arr[u];
|
||||||
if(1 < u)
|
if (1 < u) {
|
||||||
{
|
|
||||||
var l = t[u - 2];
|
var l = t[u - 2];
|
||||||
if(o.BlockNum > l)
|
if (o.BlockNum > l)
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
if(n.BlockNum && n.BlockNum >= e || o.BlockNum >= e)
|
if (n.BlockNum && n.BlockNum >= e || o.BlockNum >= e)
|
||||||
return n.BlockNum = 0, void (n.Value = {});
|
return n.BlockNum = 0, void (n.Value = {});
|
||||||
n.BlockNum && u < r.Arr.length - 1 && RestPush(r, t, e, u + 1), r.Arr[u] = o;
|
n.BlockNum && u < r.Arr.length - 1 && RestPush(r, t, e, u + 1), r.Arr[u] = o;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetRestArr(r)
|
function GetRestArr(r) {
|
||||||
{
|
for (var t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e = t.length, u = 0; u <= r; u++)
|
||||||
for(var t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e = t.length, u = 0; u <= r; u++)
|
for (var o = 0, n = u, l = e - 1; 0 <= l; l--) {
|
||||||
for(var o = 0, n = u, l = e - 1; 0 <= l; l--)
|
|
||||||
{
|
|
||||||
var a = t[l];
|
var a = t[l];
|
||||||
if(t[l] = n, n = a, 0 == ((o = o << 4 | 15) & u))
|
if (t[l] = n, n = a, 0 == ((o = o << 4 | 15) & u))
|
||||||
break;
|
break;
|
||||||
if(0 != (o & n))
|
if (0 != (o & n))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return t;
|
return t;
|
||||||
};
|
};
|
||||||
var RestArrMap = {};
|
var RestArrMap = {};
|
||||||
|
|
||||||
function GetCurrentRestArr()
|
function GetCurrentRestArr() {
|
||||||
{
|
var r = global.GetCurrentBlockNumByTime(), t = Math.floor(r / global.REST_BLOCK_SCALE), e = RestArrMap[t];
|
||||||
var r = GetCurrentBlockNumByTime(), t = Math.floor(r / REST_BLOCK_SCALE), e = RestArrMap[t];
|
if (void 0 === e) {
|
||||||
if(void 0 === e)
|
|
||||||
{
|
|
||||||
RestArrMap = {}, (e = GetRestArr(t)).length = e.length - 1;
|
RestArrMap = {}, (e = GetRestArr(t)).length = e.length - 1;
|
||||||
for(var u = 0; u < e.length; u++)
|
for (var u = 0; u < e.length; u++)
|
||||||
e[u] = e[u] * REST_BLOCK_SCALE;
|
e[u] = e[u] * global.REST_BLOCK_SCALE;
|
||||||
RestArrMap[t] = e;
|
RestArrMap[t] = e;
|
||||||
}
|
}
|
||||||
return e;
|
return e;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetCurrentRestNum(r)
|
function GetCurrentRestNum(r) {
|
||||||
{
|
for (var t = global.GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--)
|
||||||
for(var t = GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--)
|
if (e[u] <= t)
|
||||||
if(e[u] <= t)
|
|
||||||
return e[u];
|
return e[u];
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
global.DoRest = DoRest, global.GetRestArr = GetRestArr, global.GetCurrentRestArr = GetCurrentRestArr, global.GetCurrentRestNum = GetCurrentRestNum;
|
global.DoRest = DoRest
|
||||||
|
global.GetRestArr = GetRestArr
|
||||||
|
global.GetCurrentRestArr = GetCurrentRestArr
|
||||||
|
global.GetCurrentRestNum = GetCurrentRestNum;
|
||||||
|
|||||||
@@ -20,16 +20,16 @@ global.STR_TYPE = 2;
|
|||||||
global.MAX_STR_BUF_DATA = 200;
|
global.MAX_STR_BUF_DATA = 200;
|
||||||
global.MAX_CONNECTION_ACTIVE = 40;
|
global.MAX_CONNECTION_ACTIVE = 40;
|
||||||
var MAX_CONNECTION_ANOTHER = 40;
|
var MAX_CONNECTION_ANOTHER = 40;
|
||||||
const TRAFIC_LIMIT_NODE_1S = MAX_BLOCK_SIZE * 1.25;
|
const TRAFIC_LIMIT_NODE_1S = global.MAX_BLOCK_SIZE * 1.25;
|
||||||
const TRAFIC_LIMIT_1S = 8 * TRAFIC_LIMIT_NODE_1S;
|
const TRAFIC_LIMIT_1S = 8 * TRAFIC_LIMIT_NODE_1S;
|
||||||
global.STAT_PERIOD = CONSENSUS_PERIOD_TIME / 5;
|
global.STAT_PERIOD = global.CONSENSUS_PERIOD_TIME / 5;
|
||||||
const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * STAT_PERIOD / 1000;
|
const TRAFIC_LIMIT_SEND = TRAFIC_LIMIT_1S * global.STAT_PERIOD / 1000;
|
||||||
const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * STAT_PERIOD / 1000;
|
const TRAFIC_LIMIT_NODE = TRAFIC_LIMIT_NODE_1S * global.STAT_PERIOD / 1000;
|
||||||
const BUF_PACKET_SIZE = 32 * 1024;
|
const BUF_PACKET_SIZE = 32 * 1024;
|
||||||
global.FORMAT_POW_TO_CLIENT = "{addrArr:hash,HashRND:hash,MIN_POWER_POW_HANDSHAKE:uint,PubKeyType:byte,Sign:arr64,Reserve:arr33}";
|
global.FORMAT_POW_TO_CLIENT = "{addrArr:hash,HashRND:hash,MIN_POWER_POW_HANDSHAKE:uint,PubKeyType:byte,Sign:arr64,Reserve:arr33}";
|
||||||
global.FORMAT_POW_TO_SERVER = "{\
|
global.FORMAT_POW_TO_SERVER = "{\
|
||||||
DEF_NETWORK:str15,\
|
DEF_NETWORK:str15,\
|
||||||
DEF_VERSION:str9,\
|
global.DEF_VERSION:str9,\
|
||||||
DEF_CLIENT:str16, \
|
DEF_CLIENT:str16, \
|
||||||
addrArr:addres, \
|
addrArr:addres, \
|
||||||
ToIP:str26,\
|
ToIP:str26,\
|
||||||
@@ -57,8 +57,31 @@ const FORMAT_PACKET_SEND_TCP = "{\
|
|||||||
Hash:hash,\
|
Hash:hash,\
|
||||||
Data:data,\
|
Data:data,\
|
||||||
}";
|
}";
|
||||||
|
let RBTree = global.RBTree;
|
||||||
|
let STreeBuffer = global.STreeBuffer;
|
||||||
module.exports = class CTransport extends require("./connect")
|
module.exports = class CTransport extends require("./connect")
|
||||||
{
|
{
|
||||||
|
UseRNDHeader
|
||||||
|
BAN_IP
|
||||||
|
ip
|
||||||
|
port
|
||||||
|
CanSend
|
||||||
|
SendFormatMap
|
||||||
|
ActualNodes
|
||||||
|
SendTrafficFree
|
||||||
|
LoadedPacketNum
|
||||||
|
LoadedSocketNum
|
||||||
|
LoadBufSocketList
|
||||||
|
BusyLevel
|
||||||
|
LastTimeHard
|
||||||
|
LastTimeHardOK
|
||||||
|
HardPacketForSend
|
||||||
|
MethodTiming
|
||||||
|
CurrentTimeStart
|
||||||
|
CurrentTimeValues
|
||||||
|
SendStatNum
|
||||||
|
Server
|
||||||
|
ServerSign
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
this.UseRNDHeader = UseRNDHeader
|
this.UseRNDHeader = UseRNDHeader
|
||||||
@@ -107,10 +130,10 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
Map["DISCONNECTHOT"] = { Period: 1000, Hard: 1 }
|
Map["DISCONNECTHOT"] = { Period: 1000, Hard: 1 }
|
||||||
Map["GETMESSAGE"] = { Period: 1000, Hard: 1 }
|
Map["GETMESSAGE"] = { Period: 1000, Hard: 1 }
|
||||||
Map["MESSAGE"] = { Period: 1000, Hard: 1 }
|
Map["MESSAGE"] = { Period: 1000, Hard: 1 }
|
||||||
Map["TRANSACTION"] = { Period: PERIOD_GET_BLOCK, Hard: 1 }
|
Map["TRANSACTION"] = { Period: global.PERIOD_GET_BLOCK, Hard: 1 }
|
||||||
Map["GETBLOCKHEADER"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
Map["GETBLOCKHEADER"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||||
Map["GETBLOCKHEADER100"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
Map["GETBLOCKHEADER100"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||||
Map["GETBLOCK"] = { Period: PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
Map["GETBLOCK"] = { Period: global.PERIOD_GET_BLOCK, Hard: 2, Process: global.STATIC_PROCESS }
|
||||||
Map["GETNODES"] = { Period: 1000, Hard: 1, LowVersion: 1, IsAddrList: 1 }
|
Map["GETNODES"] = { Period: 1000, Hard: 1, LowVersion: 1, IsAddrList: 1 }
|
||||||
Map["RETGETNODES"] = { Period: 0, IsAddrList: 1 }
|
Map["RETGETNODES"] = { Period: 0, IsAddrList: 1 }
|
||||||
Map["RETGETNODES2"] = { Period: 0, IsAddrList: 1 }
|
Map["RETGETNODES2"] = { Period: 0, IsAddrList: 1 }
|
||||||
@@ -152,7 +175,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
Info.Data = global.BufLib.GetBufferFromObject(Info.Data, format.struct, Length, format.wrk)
|
Info.Data = global.BufLib.GetBufferFromObject(Info.Data, format.struct, Length, format.wrk)
|
||||||
this.Send(Node, Info, 1)
|
this.Send(Node, Info, 1)
|
||||||
}
|
}
|
||||||
DataFromF(Info, bSendFormat) {
|
DataFromF(Info, bSendFormat?) {
|
||||||
var format = this.GetF(Info.Method, bSendFormat);
|
var format = this.GetF(Info.Method, bSendFormat);
|
||||||
try {
|
try {
|
||||||
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, format.struct, format.wrk);
|
var Data = global.BufLib.GetObjectFromBuffer(Info.Data, format.struct, format.wrk);
|
||||||
@@ -164,7 +187,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ADD_CURRENT_STAT_TIME(Key, Value) {
|
ADD_CURRENT_STAT_TIME(Key, Value) {
|
||||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||||
if (this.CurrentTimeStart !== TimeNum)
|
if (this.CurrentTimeStart !== TimeNum)
|
||||||
this.CurrentTimeValues = {}
|
this.CurrentTimeValues = {}
|
||||||
this.CurrentTimeStart = TimeNum
|
this.CurrentTimeStart = TimeNum
|
||||||
@@ -173,7 +196,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
this.CurrentTimeValues[Key] += Value
|
this.CurrentTimeValues[Key] += Value
|
||||||
}
|
}
|
||||||
GET_CURRENT_STAT_TIME(Key) {
|
GET_CURRENT_STAT_TIME(Key) {
|
||||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||||
if (this.CurrentTimeStart === TimeNum) {
|
if (this.CurrentTimeStart === TimeNum) {
|
||||||
var Value = this.CurrentTimeValues[Key];
|
var Value = this.CurrentTimeValues[Key];
|
||||||
if (Value === undefined)
|
if (Value === undefined)
|
||||||
@@ -186,11 +209,11 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
RecalcSendStatictic() {
|
RecalcSendStatictic() {
|
||||||
var TimeNum = Math.floor(Date.now() / STAT_PERIOD);
|
var TimeNum = Math.floor(Date.now() / global.STAT_PERIOD);
|
||||||
if (this.SendStatNum === TimeNum)
|
if (this.SendStatNum === TimeNum)
|
||||||
return;
|
return;
|
||||||
this.SendStatNum = TimeNum
|
this.SendStatNum = TimeNum
|
||||||
var Period = CONSENSUS_PERIOD_TIME / STAT_PERIOD;
|
var Period = global.CONSENSUS_PERIOD_TIME / global.STAT_PERIOD;
|
||||||
this.SendTrafficFree = TRAFIC_LIMIT_SEND
|
this.SendTrafficFree = TRAFIC_LIMIT_SEND
|
||||||
var it = this.ActualNodes.iterator(), Node;
|
var it = this.ActualNodes.iterator(), Node;
|
||||||
while ((Node = it.next()) !== null) {
|
while ((Node = it.next()) !== null) {
|
||||||
@@ -212,17 +235,17 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
this.SendTrafficFree -= Node.SendTrafficLimit
|
this.SendTrafficFree -= Node.SendTrafficLimit
|
||||||
}
|
}
|
||||||
Node.SendTrafficCurrent = 0
|
Node.SendTrafficCurrent = 0
|
||||||
global.ADD_TO_STAT("MAX:NODE_TRAFFIC_LIMIT:" + NodeName(Node), 1000 / STAT_PERIOD * Node.SendTrafficLimit / 1024, 1)
|
global.ADD_TO_STAT("MAX:NODE_TRAFFIC_LIMIT:" + NodeName(Node), 1000 / global.STAT_PERIOD * Node.SendTrafficLimit / 1024, 1)
|
||||||
}
|
}
|
||||||
this.SendTrafficFree += TRAFIC_LIMIT_NODE
|
this.SendTrafficFree += TRAFIC_LIMIT_NODE
|
||||||
global.ADD_TO_STAT("SEND_TRAFFIC_FREE", this.SendTrafficFree / 1024)
|
global.ADD_TO_STAT("SEND_TRAFFIC_FREE", this.SendTrafficFree / 1024)
|
||||||
}
|
}
|
||||||
OnGetMethod(Info, CurTime) {
|
OnGetMethod(Info, CurTime) {
|
||||||
if (DEBUG_MODE) {
|
if (global.DEBUG_MODE) {
|
||||||
var Str = "";
|
var Str = "";
|
||||||
if (Info.Data && Info.Data.Length)
|
if (Info.Data && Info.Data.Length)
|
||||||
Str = " LENGTH=" + Info.Data.Length
|
Str = " LENGTH=" + Info.Data.Length
|
||||||
TO_DEBUG_LOG("GET:" + Info.Method + Str + " from: Node=" + NodeInfo(Info.Node))
|
global.TO_DEBUG_LOG("GET:" + Info.Method + Str + " from: Node=" + NodeInfo(Info.Node))
|
||||||
}
|
}
|
||||||
if (global.ADDRLIST_MODE) {
|
if (global.ADDRLIST_MODE) {
|
||||||
var StrOK = ",HAND,GETNODES,";
|
var StrOK = ",HAND,GETNODES,";
|
||||||
@@ -239,7 +262,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
F.bind(this)(Info, CurTime)
|
F.bind(this)(Info, CurTime)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
TO_ERROR_LOG("TRANSPORT", 20, "Method '" + Info.Method + "' not found Socket=*" + Info.Socket.ConnectID, "node", Info.Node)
|
global.TO_ERROR_LOG("TRANSPORT", 20, "Method '" + Info.Method + "' not found Socket=*" + Info.Socket.ConnectID, "node", Info.Node)
|
||||||
this.AddCheckErrCount(Info.Node, 1, "Method not found")
|
this.AddCheckErrCount(Info.Node, 1, "Method not found")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -277,7 +300,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
var Key = "" + rinfo.address.trim();
|
var Key = "" + rinfo.address.trim();
|
||||||
var Stat = this.BAN_IP[Key];
|
var Stat = this.BAN_IP[Key];
|
||||||
if (Stat) {
|
if (Stat) {
|
||||||
if (Stat.TimeTo > (GetCurrentTime(0) - 0))
|
if (Stat.TimeTo > (global.GetCurrentTime(0) - 0))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -306,17 +329,17 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
if (Node.DeltaBan > 1000000)
|
if (Node.DeltaBan > 1000000)
|
||||||
Node.DeltaBan = 1000000
|
Node.DeltaBan = 1000000
|
||||||
Node.DeltaBan = Node.DeltaBan * 2
|
Node.DeltaBan = Node.DeltaBan * 2
|
||||||
var TimeTo = (GetCurrentTime(0) - 0) + Node.DeltaBan * 1000;
|
var TimeTo = (global.GetCurrentTime(0) - 0) + Node.DeltaBan * 1000;
|
||||||
this.BAN_IP[Key] = { TimeTo: TimeTo }
|
this.BAN_IP[Key] = { TimeTo: TimeTo }
|
||||||
Node.BlockProcessCount = 0
|
Node.BlockProcessCount = 0
|
||||||
this.DeleteNodeFromActiveByIP(Node.ip)
|
this.DeleteNodeFromActiveByIP(Node.ip)
|
||||||
global.ADD_TO_STAT("AddToBan")
|
global.ADD_TO_STAT("AddToBan")
|
||||||
}
|
}
|
||||||
AddToBanIP(ip, Str, Period) {
|
AddToBanIP(ip, Str, Period?) {
|
||||||
if (!Period)
|
if (!Period)
|
||||||
Period = 600 * 1000
|
Period = 600 * 1000
|
||||||
var Key = "" + ip.trim();
|
var Key = "" + ip.trim();
|
||||||
this.BAN_IP[Key] = { TimeTo: (GetCurrentTime(0) - 0) + Period }
|
this.BAN_IP[Key] = { TimeTo: (global.GetCurrentTime(0) - 0) + Period }
|
||||||
this.DeleteNodeFromActiveByIP(ip)
|
this.DeleteNodeFromActiveByIP(ip)
|
||||||
global.ToLog("ADD TO BAN:: " + Key + " " + Str)
|
global.ToLog("ADD TO BAN:: " + Key + " " + Str)
|
||||||
global.ADD_TO_STAT("AddToBanIP")
|
global.ADD_TO_STAT("AddToBanIP")
|
||||||
@@ -333,29 +356,29 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
else {
|
else {
|
||||||
this.OnGetMethod(Meta, CurTime)
|
this.OnGetMethod(Meta, CurTime)
|
||||||
}
|
}
|
||||||
ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET", startTime)
|
global.ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET", startTime)
|
||||||
ADD_TO_STAT_TIME("TIME_USE_PACKET", startTime)
|
global.ADD_TO_STAT_TIME("TIME_USE_PACKET", startTime)
|
||||||
ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET:" + Meta.Method, startTime)
|
global.ADD_TO_STAT_TIME("MAX:TIME_USE_PACKET:" + Meta.Method, startTime)
|
||||||
}
|
}
|
||||||
GetBufFromData(Method, Data, TypeData, ContextID) {
|
GetBufFromData(Method, Data, TypeData, ContextID?) {
|
||||||
var BufData;
|
var BufData;
|
||||||
if (TypeData === BUF_TYPE) {
|
if (TypeData === global.BUF_TYPE) {
|
||||||
BufData = Data
|
BufData = Data
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (TypeData === STR_TYPE) {
|
if (TypeData === global.STR_TYPE) {
|
||||||
BufData = Buffer.from(Data.substr(0, MAX_STR_BUF_DATA))
|
BufData = Buffer.from(Data.substr(0, global.MAX_STR_BUF_DATA))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Data === undefined) {
|
if (Data === undefined) {
|
||||||
TypeData = BUF_TYPE
|
TypeData = global.BUF_TYPE
|
||||||
BufData = Buffer.alloc(0)
|
BufData = Buffer.alloc(0)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw "ERROR TYPE DATA";
|
throw "ERROR TYPE DATA";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var BUF = {};
|
var BUF: any = {};
|
||||||
BUF.PacketSize = 0
|
BUF.PacketSize = 0
|
||||||
BUF.NumXORRND = 0
|
BUF.NumXORRND = 0
|
||||||
BUF.Method = Method
|
BUF.Method = Method
|
||||||
@@ -375,7 +398,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
var Meta = global.BufLib.GetObjectFromBuffer(buf, FORMAT_PACKET_SEND_TCP, WorkStructPacketSend);
|
var Meta = global.BufLib.GetObjectFromBuffer(buf, FORMAT_PACKET_SEND_TCP, WorkStructPacketSend);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer")
|
global.TO_ERROR_LOG("TRANSPORT", 640, "Error parsing Buffer")
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
var Hash = this.GetHashFromData(Meta);
|
var Hash = this.GetHashFromData(Meta);
|
||||||
@@ -384,8 +407,8 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
global.ToLog("TRANSPORT", 645, "Error hash Buffer", 2)
|
global.ToLog("TRANSPORT", 645, "Error hash Buffer", 2)
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
if (Meta.TypeData === STR_TYPE) {
|
if (Meta.TypeData === global.STR_TYPE) {
|
||||||
Meta.Data = Meta.Data.slice(0, MAX_STR_BUF_DATA).toString()
|
Meta.Data = Meta.Data.slice(0, global.MAX_STR_BUF_DATA).toString()
|
||||||
}
|
}
|
||||||
return Meta;
|
return Meta;
|
||||||
}
|
}
|
||||||
@@ -422,7 +445,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
global.ADD_TO_STAT("MAX:BUFFE_LOAD_SIZE", Socket.Buf.length / 1024)
|
global.ADD_TO_STAT("MAX:BUFFE_LOAD_SIZE", Socket.Buf.length / 1024)
|
||||||
Socket.Buf.len = 0
|
Socket.Buf.len = 0
|
||||||
var PacketSize = global.BufLib.Read(Socket.Buf, "uint");
|
var PacketSize = global.BufLib.Read(Socket.Buf, "uint");
|
||||||
if (PacketSize > MAX_PACKET_LENGTH) {
|
if (PacketSize > global.MAX_PACKET_LENGTH) {
|
||||||
this.SendCloseSocket(Socket, "MAX_PACKET_LENGTH")
|
this.SendCloseSocket(Socket, "MAX_PACKET_LENGTH")
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -464,7 +487,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
if (this.StopDoSendPacket(Param, Node, Buf.Method)) {
|
if (this.StopDoSendPacket(Param, Node, Buf.Method)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (!IsZeroArr(Buf.ContextID)) {
|
if (!global.IsZeroArr(Buf.ContextID)) {
|
||||||
Buf.Context = global.ContextPackets.LoadValue(Buf.ContextID)
|
Buf.Context = global.ContextPackets.LoadValue(Buf.ContextID)
|
||||||
}
|
}
|
||||||
if (!Buf.Context) {
|
if (!Buf.Context) {
|
||||||
@@ -494,11 +517,11 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
this.OnPacketTCP(Buf)
|
this.OnPacketTCP(Buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime)
|
global.ADD_TO_STAT_TIME("MAX:TIMEDOGETDATA", startTime)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
StopDoSendPacket(Param, Node, Name) {
|
StopDoSendPacket(Param, Node, Name) {
|
||||||
var CurTime = GetCurrentTime(0) - 0;
|
var CurTime = global.GetCurrentTime(0) - 0;
|
||||||
if (!Param) {
|
if (!Param) {
|
||||||
global.ADD_TO_STAT("STOP_METHOD")
|
global.ADD_TO_STAT("STOP_METHOD")
|
||||||
global.ADD_TO_STAT("STOP_METHOD:NO")
|
global.ADD_TO_STAT("STOP_METHOD:NO")
|
||||||
@@ -589,7 +612,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
global.ADD_TO_STAT("DO_HARD_PACKET")
|
global.ADD_TO_STAT("DO_HARD_PACKET")
|
||||||
global.ADD_TO_STAT("DO_HARD_PACKET:" + Info.Method)
|
global.ADD_TO_STAT("DO_HARD_PACKET:" + Info.Method)
|
||||||
var DeltaTime = Date.now() - Info.TimeLoad;
|
var DeltaTime = Date.now() - Info.TimeLoad;
|
||||||
if (this.HardPacketForSend.size && DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
if (this.HardPacketForSend.size && DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||||
global.ADD_TO_STAT("DELETE_HARD_PACKET_OLD", this.HardPacketForSend.size)
|
global.ADD_TO_STAT("DELETE_HARD_PACKET_OLD", this.HardPacketForSend.size)
|
||||||
this.HardPacketForSend.clear()
|
this.HardPacketForSend.clear()
|
||||||
return;
|
return;
|
||||||
@@ -597,9 +620,9 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
var MaxCount = 20;
|
var MaxCount = 20;
|
||||||
while (Info = this.HardPacketForSend.max()) {
|
while (Info = this.HardPacketForSend.max()) {
|
||||||
var DeltaTime = Date.now() - Info.TimeLoad;
|
var DeltaTime = Date.now() - Info.TimeLoad;
|
||||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2 || !Info.Node.Socket || Info.Node.Socket.WasClose) {
|
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2 || !Info.Node.Socket || Info.Node.Socket.WasClose) {
|
||||||
this.HardPacketForSend.remove(Info)
|
this.HardPacketForSend.remove(Info)
|
||||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||||
this.RiseBusyLevelByInfo(Info)
|
this.RiseBusyLevelByInfo(Info)
|
||||||
Info.Node.NextPing = 1 * 1000
|
Info.Node.NextPing = 1 * 1000
|
||||||
this.AddCheckErrCount(Info.Node, 0.2)
|
this.AddCheckErrCount(Info.Node, 0.2)
|
||||||
@@ -645,10 +668,10 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
DoSendPacketNode(Node) {
|
DoSendPacketNode(Node) {
|
||||||
var TimeNum = Date.now();
|
var TimeNum = Date.now();
|
||||||
var Info = Node.SendPacket.max();
|
var Info = Node.SendPacket.max();
|
||||||
if (Info && TimeNum - Info.TimeNum > PACKET_ALIVE_PERIOD)
|
if (Info && TimeNum - Info.TimeNum > global.PACKET_ALIVE_PERIOD)
|
||||||
while (Info = Node.SendPacket.max()) {
|
while (Info = Node.SendPacket.max()) {
|
||||||
var DeltaTime = TimeNum - Info.TimeNum;
|
var DeltaTime = TimeNum - Info.TimeNum;
|
||||||
if (DeltaTime > PACKET_ALIVE_PERIOD / 2) {
|
if (DeltaTime > global.PACKET_ALIVE_PERIOD / 2) {
|
||||||
Node.SendPacket.remove(Info)
|
Node.SendPacket.remove(Info)
|
||||||
global.ADD_TO_STAT("DELETE_OLD_PACKET")
|
global.ADD_TO_STAT("DELETE_OLD_PACKET")
|
||||||
}
|
}
|
||||||
@@ -678,7 +701,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
global.ADD_TO_STAT("SEND:" + Info.Method)
|
global.ADD_TO_STAT("SEND:" + Info.Method)
|
||||||
global.ADD_TO_STAT("SEND:(KB)" + Info.Method, BufWrite.length / 1024)
|
global.ADD_TO_STAT("SEND:(KB)" + Info.Method, BufWrite.length / 1024)
|
||||||
global.ADD_TO_STAT("SEND:" + Info.Method + ":" + NodeName(Node), 1, 1)
|
global.ADD_TO_STAT("SEND:" + Info.Method + ":" + NodeName(Node), 1, 1)
|
||||||
TO_DEBUG_LOG("SEND " + Info.Method + " to " + NodeInfo(Node) + " LENGTH=" + BufWrite.length)
|
global.TO_DEBUG_LOG("SEND " + Info.Method + " to " + NodeInfo(Node) + " LENGTH=" + BufWrite.length)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
DoSendPacket() {
|
DoSendPacket() {
|
||||||
@@ -723,36 +746,36 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
}
|
}
|
||||||
CheckPOWTicketConnect(Socket, data) {
|
CheckPOWTicketConnect(Socket, data) {
|
||||||
try {
|
try {
|
||||||
var Info = global.BufLib.GetObjectFromBuffer(data, FORMAT_POW_TO_SERVER, {});
|
var Info = global.BufLib.GetObjectFromBuffer(data, global.FORMAT_POW_TO_SERVER, {});
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
this.SendCloseSocket(Socket, "FORMAT_POW_TO_SERVER")
|
this.SendCloseSocket(Socket, "FORMAT_POW_TO_SERVER")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Info.DEF_NETWORK !== GetNetworkName()) {
|
if (Info.DEF_NETWORK !== global.GetNetworkName()) {
|
||||||
this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + GetNetworkName())
|
this.SendCloseSocket(Socket, "DEF_NETWORK=" + Info.DEF_NETWORK + " MUST:" + global.GetNetworkName())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var Node = this.FindRunNodeContext(Info.addrArr, Info.FromIP, Info.FromPort, true);
|
var Node = this.FindRunNodeContext(Info.addrArr, Info.FromIP, Info.FromPort, true);
|
||||||
if (global.CompareArr(Info.addrArr, this.addrArr) === 0) {
|
if (global.CompareArr(Info.addrArr, this.addrArr) === 0) {
|
||||||
AddNodeInfo(Node, "SERV: GET SELF")
|
global.AddNodeInfo(Node, "SERV: GET SELF")
|
||||||
this.SendCloseSocket(Socket, "SELF")
|
this.SendCloseSocket(Socket, "SELF")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var Hash = shaarr2(this.addrArr, Socket.HashRND);
|
var Hash = global.shaarr2(this.addrArr, Socket.HashRND);
|
||||||
var hashInfo = GetHashWithValues(Hash, Info.nonce, 0);
|
var hashInfo = global.GetHashWithValues(Hash, Info.nonce, 0);
|
||||||
var power = GetPowPower(hashInfo);
|
var power = global.GetPowPower(hashInfo);
|
||||||
if (Info.Reconnect) {
|
if (Info.Reconnect) {
|
||||||
if ((Node.SecretForReconnect && Node.WaitConnectFromServer && global.CompareArr(Node.SecretForReconnect, Info.SecretForReconnect) === 0) || Info.Reconnect === 255) {
|
if ((Node.SecretForReconnect && Node.WaitConnectFromServer && global.CompareArr(Node.SecretForReconnect, Info.SecretForReconnect) === 0) || Info.Reconnect === 255) {
|
||||||
var Result = 1;
|
let Result = 1;
|
||||||
if (Info.Reconnect === 255) {
|
if (Info.Reconnect === 255) {
|
||||||
Result = CheckDevelopSign(Hash, Info.Sign)
|
Result = global.CheckDevelopSign(Hash, Info.Sign)
|
||||||
}
|
}
|
||||||
if (Result) {
|
if (Result) {
|
||||||
Node.NextConnectDelta = 1000
|
Node.NextConnectDelta = 1000
|
||||||
Node.WaitConnectFromServer = 0
|
Node.WaitConnectFromServer = 0
|
||||||
Node.GrayConnect = 0
|
Node.GrayConnect = 0
|
||||||
AddNodeInfo(Node, "3. SERVER OK CONNECT for client node " + SocketInfo(Socket))
|
global.AddNodeInfo(Node, "3. SERVER OK CONNECT for client node " + SocketInfo(Socket))
|
||||||
this.AddNodeToActive(Node)
|
this.AddNodeToActive(Node)
|
||||||
Node.Socket = Socket
|
Node.Socket = Socket
|
||||||
SetSocketStatus(Socket, 3)
|
SetSocketStatus(Socket, 3)
|
||||||
@@ -767,39 +790,39 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
this.AddCheckErrCount(Node, 10, "Error Sign Node")
|
this.AddCheckErrCount(Node, 10, "Error Sign Node")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AddNodeInfo(Node, "SERV: ERROR_RECONNECT")
|
global.AddNodeInfo(Node, "SERV: ERROR_RECONNECT")
|
||||||
Socket.end(this.GetBufFromData("POW_CONNEC11", "ERROR_RECONNECT", 2))
|
Socket.end(this.GetBufFromData("POW_CONNEC11", "ERROR_RECONNECT", 2))
|
||||||
CloseSocket(Socket, "ERROR_RECONNECT")
|
global.CloseSocket(Socket, "ERROR_RECONNECT")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (power < MIN_POWER_POW_HANDSHAKE) {
|
if (power < global.MIN_POWER_POW_HANDSHAKE) {
|
||||||
global.ToLog("END: MIN_POWER_POW_HANDSHAKE")
|
global.ToLog("END: MIN_POWER_POW_HANDSHAKE")
|
||||||
AddNodeInfo(Node, "SERV: ERR MIN_POWER_POW_HANDSHAKE")
|
global.AddNodeInfo(Node, "SERV: ERR MIN_POWER_POW_HANDSHAKE")
|
||||||
Socket.end(this.GetBufFromData("POW_CONNECT2", "MIN_POWER_POW_HANDSHAKE", 2))
|
Socket.end(this.GetBufFromData("POW_CONNECT2", "MIN_POWER_POW_HANDSHAKE", 2))
|
||||||
CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE")
|
global.CloseSocket(Socket, "MIN_POWER_POW_HANDSHAKE")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!Node.BlockProcessCount)
|
if (!Node.BlockProcessCount)
|
||||||
Node.BlockProcessCount = 0
|
Node.BlockProcessCount = 0
|
||||||
if (this.ActualNodes.size >= MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) {
|
if (this.ActualNodes.size >= global.MAX_CONNECTIONS_COUNT && Node.BlockProcessCount < global.TRUST_PROCESS_COUNT) {
|
||||||
AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS")
|
global.AddNodeInfo(Node, "SERV: ERROR_MAX_CLIENTS")
|
||||||
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_MAX_CLIENTS", 2))
|
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_MAX_CLIENTS", 2))
|
||||||
CloseSocket(Socket, "ERROR_MAX_CLIENTS")
|
global.CloseSocket(Socket, "ERROR_MAX_CLIENTS")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var Result = false;
|
let Result = false;
|
||||||
if (Info.PubKeyType === 2 || Info.PubKeyType === 3)
|
if (Info.PubKeyType === 2 || Info.PubKeyType === 3)
|
||||||
Result = secp256k1.verify(Buffer.from(Hash), Buffer.from(Info.Sign), Buffer.from([Info.PubKeyType].concat(Info.addrArr)))
|
Result = global.secp256k1.verify(Buffer.from(Hash), Buffer.from(Info.Sign), Buffer.from([Info.PubKeyType].concat(Info.addrArr)))
|
||||||
if (!Result) {
|
if (!Result) {
|
||||||
AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT")
|
global.AddNodeInfo(Node, "SERV: ERROR_SIGN_CLIENT")
|
||||||
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_SIGN_CLIENT", 2))
|
Socket.end(this.GetBufFromData("POW_CONNECT8", "ERROR_SIGN_CLIENT", 2))
|
||||||
CloseSocket(Socket, "ERROR_SIGN_CLIENT")
|
global.CloseSocket(Socket, "ERROR_SIGN_CLIENT")
|
||||||
this.AddToBanIP(Socket.remoteAddress, "ERROR_SIGN_CLIENT")
|
this.AddToBanIP(Socket.remoteAddress, "ERROR_SIGN_CLIENT")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AddNodeInfo(Node, "1. SERVER OK POW for client node " + SocketInfo(Socket))
|
global.AddNodeInfo(Node, "1. SERVER OK POW for client node " + SocketInfo(Socket))
|
||||||
Node.FromIP = Info.FromIP
|
Node.FromIP = Info.FromIP
|
||||||
Node.FromPort = Info.FromPort
|
Node.FromPort = Info.FromPort
|
||||||
Node.SecretForReconnect = crypto.randomBytes(20)
|
Node.SecretForReconnect = crypto.randomBytes(20)
|
||||||
@@ -808,7 +831,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
Node.NextConnectDelta = 1000
|
Node.NextConnectDelta = 1000
|
||||||
Node.WaitConnectFromServer = 0
|
Node.WaitConnectFromServer = 0
|
||||||
Node.GrayConnect = 1
|
Node.GrayConnect = 1
|
||||||
AddNodeInfo(Node, "5. CLIENT OK GRAY CONNECT " + SocketInfo(Socket))
|
global.AddNodeInfo(Node, "5. CLIENT OK GRAY CONNECT " + SocketInfo(Socket))
|
||||||
this.AddNodeToActive(Node)
|
this.AddNodeToActive(Node)
|
||||||
Node.Socket = Socket
|
Node.Socket = Socket
|
||||||
SetSocketStatus(Socket, 3)
|
SetSocketStatus(Socket, 3)
|
||||||
@@ -831,7 +854,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
this.Server.close()
|
this.Server.close()
|
||||||
}
|
}
|
||||||
StartServer() {
|
StartServer() {
|
||||||
if (GrayConnect()) {
|
if (global.GrayConnect()) {
|
||||||
this.CanSend++
|
this.CanSend++
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -839,20 +862,20 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
this.Server = net.createServer(function(sock) {
|
this.Server = net.createServer(function(sock) {
|
||||||
if (SELF.WasBanIP({ address: sock.remoteAddress })) {
|
if (SELF.WasBanIP({ address: sock.remoteAddress })) {
|
||||||
sock.ConnectID = "new"
|
sock.ConnectID = "new"
|
||||||
CloseSocket(sock, "WAS BAN", true)
|
global.CloseSocket(sock, "WAS BAN", true)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let SOCKET = sock;
|
let SOCKET = sock;
|
||||||
socketInit(SOCKET, "c")
|
global.socketInit(SOCKET, "c")
|
||||||
SetSocketStatus(SOCKET, 0)
|
SetSocketStatus(SOCKET, 0)
|
||||||
AddNodeInfo(SOCKET, "Client *" + SOCKET.ConnectID + " connected from " + SOCKET.remoteAddress + ":" + SOCKET.remotePort, 1)
|
global.AddNodeInfo(SOCKET, "Client *" + SOCKET.ConnectID + " connected from " + SOCKET.remoteAddress + ":" + SOCKET.remotePort, 1)
|
||||||
global.ADD_TO_STAT("ClientConnected")
|
global.ADD_TO_STAT("ClientConnected")
|
||||||
SOCKET.HashRND = crypto.randomBytes(32)
|
SOCKET.HashRND = crypto.randomBytes(32)
|
||||||
var Data = {
|
var Data = {
|
||||||
addrArr: SELF.addrArr, HashRND: SOCKET.HashRND, MIN_POWER_POW_HANDSHAKE: MIN_POWER_POW_HANDSHAKE, PubKeyType: SELF.PubKeyType,
|
addrArr: SELF.addrArr, HashRND: SOCKET.HashRND, MIN_POWER_POW_HANDSHAKE: global.MIN_POWER_POW_HANDSHAKE, PubKeyType: SELF.PubKeyType,
|
||||||
Sign: SELF.ServerSign, Reserve: []
|
Sign: SELF.ServerSign, Reserve: []
|
||||||
};
|
};
|
||||||
var BufData = global.BufLib.GetBufferFromObject(Data, FORMAT_POW_TO_CLIENT, 300, {});
|
var BufData = global.BufLib.GetBufferFromObject(Data, global.FORMAT_POW_TO_CLIENT, 300, {});
|
||||||
var BufWrite = SELF.GetBufFromData("POW_CONNECT5", BufData, 1);
|
var BufWrite = SELF.GetBufFromData("POW_CONNECT5", BufData, 1);
|
||||||
try {
|
try {
|
||||||
SOCKET.write(BufWrite)
|
SOCKET.write(BufWrite)
|
||||||
@@ -873,10 +896,10 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
SOCKET.ConnectToServer = 0
|
SOCKET.ConnectToServer = 0
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CloseSocket(SOCKET, "=SERVER ON DATA=")
|
global.CloseSocket(SOCKET, "=SERVER ON DATA=")
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
socketRead(SOCKET, data)
|
global.socketRead(SOCKET, data)
|
||||||
SELF.OnGetFromTCP(SOCKET.Node, SOCKET, data)
|
SELF.OnGetFromTCP(SOCKET.Node, SOCKET, data)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -885,7 +908,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
var Node = SOCKET.Node;
|
var Node = SOCKET.Node;
|
||||||
var Status = GetSocketStatus(SOCKET);
|
var Status = GetSocketStatus(SOCKET);
|
||||||
if (Status)
|
if (Status)
|
||||||
AddNodeInfo(Node, "Get socket end *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
global.AddNodeInfo(Node, "Get socket end *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
||||||
if (Node && Status === 200) {
|
if (Node && Status === 200) {
|
||||||
Node.SwapSockets()
|
Node.SwapSockets()
|
||||||
SOCKET.WasClose = 1
|
SOCKET.WasClose = 1
|
||||||
@@ -894,15 +917,15 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
SOCKET.on('close', function(err) {
|
SOCKET.on('close', function(err) {
|
||||||
global.ADD_TO_STAT("ClientClose")
|
global.ADD_TO_STAT("ClientClose")
|
||||||
if (SOCKET.ConnectID && GetSocketStatus(SOCKET))
|
if (SOCKET.ConnectID && GetSocketStatus(SOCKET))
|
||||||
AddNodeInfo(SOCKET.Node, "Get socket close *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
global.AddNodeInfo(SOCKET.Node, "Get socket close *" + SOCKET.ConnectID + " from client Stat: " + SocketStatistic(SOCKET))
|
||||||
if (!SOCKET.WasClose && SOCKET.Node) {
|
if (!SOCKET.WasClose && SOCKET.Node) {
|
||||||
CloseSocket(SOCKET, "GET CLOSE")
|
global.CloseSocket(SOCKET, "GET CLOSE")
|
||||||
}
|
}
|
||||||
SetSocketStatus(SOCKET, 0)
|
SetSocketStatus(SOCKET, 0)
|
||||||
})
|
})
|
||||||
SOCKET.on('error', function(err) {
|
SOCKET.on('error', function(err) {
|
||||||
global.ADD_TO_STAT("ERRORS")
|
global.ADD_TO_STAT("ERRORS")
|
||||||
CloseSocket(SOCKET, "ERRORS")
|
global.CloseSocket(SOCKET, "ERRORS")
|
||||||
if (SOCKET.Node)
|
if (SOCKET.Node)
|
||||||
SELF.AddCheckErrCount(SOCKET.Node, 1, "ERR##2 : socket")
|
SELF.AddCheckErrCount(SOCKET.Node, 1, "ERR##2 : socket")
|
||||||
})
|
})
|
||||||
@@ -911,7 +934,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
})
|
})
|
||||||
this.Server.on('error', function(err) {
|
this.Server.on('error', function(err) {
|
||||||
if (err.code === 'EADDRINUSE') {
|
if (err.code === 'EADDRINUSE') {
|
||||||
ToLogClient('Port ' + SELF.port + ' in use, retrying...')
|
global.ToLogClient('Port ' + SELF.port + ' in use, retrying...')
|
||||||
if (SELF.Server)
|
if (SELF.Server)
|
||||||
SELF.Server.close()
|
SELF.Server.close()
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
@@ -931,21 +954,22 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
RunListenServer() {
|
RunListenServer() {
|
||||||
if (!START_PORT_NUMBER || START_PORT_NUMBER === "undefined")
|
if (!global.START_PORT_NUMBER || global.START_PORT_NUMBER === "undefined")
|
||||||
START_PORT_NUMBER = 30000
|
global.START_PORT_NUMBER = 30000
|
||||||
let SELF = this;
|
let SELF = this;
|
||||||
SELF.port = START_PORT_NUMBER
|
SELF.port = global.START_PORT_NUMBER
|
||||||
ToLogClient("Prepare to run TCP server on " + LISTEN_IP + ":" + SELF.port)
|
global.ToLogClient("Prepare to run TCP server on " + global.LISTEN_IP + ":" + SELF.port)
|
||||||
this.Server.listen(SELF.port, LISTEN_IP, function() {
|
this.Server.listen(SELF.port, global.LISTEN_IP, function() {
|
||||||
if (SELF.CanSend < 2)
|
if (SELF.CanSend < 2)
|
||||||
ToLogClient("Run TCP server on " + SELF.ip + ":" + SELF.port)
|
global.ToLogClient("Run TCP server on " + SELF.ip + ":" + SELF.port)
|
||||||
SELF.CanSend++
|
SELF.CanSend++
|
||||||
var Hash;
|
var Hash;
|
||||||
Hash = global.sha3(SELF.addrStr)
|
Hash = global.sha3(SELF.addrStr)
|
||||||
SELF.ServerSign = secp256k1.sign(Buffer.from(Hash), SELF.KeyPair.getPrivateKey('')).signature
|
SELF.ServerSign = global.secp256k1.sign(Buffer.from(Hash), SELF.KeyPair.getPrivateKey('')).signature
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
FindInternetIP() {
|
FindInternetIP() {
|
||||||
|
let Stun = global.Stun;
|
||||||
let SELF = this;
|
let SELF = this;
|
||||||
let server = Stun.createServer();
|
let server = Stun.createServer();
|
||||||
const request = Stun.createMessage(Stun.constants.STUN_BINDING_REQUEST);
|
const request = Stun.createMessage(Stun.constants.STUN_BINDING_REQUEST);
|
||||||
@@ -958,7 +982,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
SELF.CanSend++
|
SELF.CanSend++
|
||||||
global.INTERNET_IP_FROM_STUN = value.address
|
global.INTERNET_IP_FROM_STUN = value.address
|
||||||
if (!SELF.ip)
|
if (!SELF.ip)
|
||||||
SELF.ip = INTERNET_IP_FROM_STUN
|
SELF.ip = global.INTERNET_IP_FROM_STUN
|
||||||
if (server)
|
if (server)
|
||||||
server.close()
|
server.close()
|
||||||
SELF.RunListenServer()
|
SELF.RunListenServer()
|
||||||
@@ -973,11 +997,11 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
CLOSE_SOCKET(Context, CurTime) {
|
CLOSE_SOCKET(Context, CurTime) {
|
||||||
AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString())
|
global.AddNodeInfo(Context.Socket.Node, "GET CLOSE_SOCKET *" + Context.Socket.ConnectID + ": " + Context.Data.toString())
|
||||||
CloseSocket(Context.Socket, "CLOSE_SOCKET")
|
global.CloseSocket(Context.Socket, "CLOSE_SOCKET")
|
||||||
}
|
}
|
||||||
SendCloseSocket(Socket, Str) {
|
SendCloseSocket(Socket, Str) {
|
||||||
AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str)
|
global.AddNodeInfo(Socket.Node, "CLOSE_SOCKET " + SocketInfo(Socket) + " - " + Str)
|
||||||
if (Socket.WasClose) {
|
if (Socket.WasClose) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -985,12 +1009,12 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
if (Socket.Node && Socket.Node.BufWrite && Socket.Node.BufWrite.length > 0) {
|
if (Socket.Node && Socket.Node.BufWrite && Socket.Node.BufWrite.length > 0) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str)
|
global.AddNodeInfo(Socket.Node, "END *" + Socket.ConnectID + ": " + Str)
|
||||||
Socket.end(this.GetBufFromData("CLOSE_SOCKET", Str, 2))
|
Socket.end(this.GetBufFromData("CLOSE_SOCKET", Str, 2))
|
||||||
}
|
}
|
||||||
CloseSocket(Socket, Str)
|
global.CloseSocket(Socket, Str)
|
||||||
}
|
}
|
||||||
AddCheckErrCount(Node, Count, StrErr) {
|
AddCheckErrCount(Node, Count, StrErr?) {
|
||||||
if (!Node)
|
if (!Node)
|
||||||
return;
|
return;
|
||||||
if (!Count)
|
if (!Count)
|
||||||
@@ -1016,7 +1040,7 @@ module.exports = class CTransport extends require("./connect")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
global.ContextPackets = new STreeBuffer(10 * 1000, CompareItemHash32, "object");
|
global.ContextPackets = new STreeBuffer(10 * 1000, global.CompareItemHash32, "object");
|
||||||
|
|
||||||
function CalcStatArr(arr, arrAvg, arrNext, Period) {
|
function CalcStatArr(arr, arrAvg, arrNext, Period) {
|
||||||
var arrSum = [arr[0]];
|
var arrSum = [arr[0]];
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ function CreateHashMinimal(Block, MinerID) {
|
|||||||
throw "BlockNum < BLOCKNUM_ALGO2";
|
throw "BlockNum < BLOCKNUM_ALGO2";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var PrevHashNum = ReadUint32FromArr(Block.PrevHash, 28);
|
var PrevHashNum = global.ReadUint32FromArr(Block.PrevHash, 28);
|
||||||
var Ret = GetHash(Block.SeqHash, PrevHashNum, Block.BlockNum, MinerID, 0, 0, 0, 0, 0);
|
var Ret = global.GetHash(Block.SeqHash, PrevHashNum, Block.BlockNum, MinerID, 0, 0, 0, 0, 0);
|
||||||
Block.Hash = Ret.Hash;
|
Block.Hash = Ret.Hash;
|
||||||
Block.PowHash = Ret.PowHash;
|
Block.PowHash = Ret.PowHash;
|
||||||
Block.Power = GetPowPower(Block.PowHash);
|
Block.Power = global.GetPowPower(Block.PowHash);
|
||||||
Block.AddrHash = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
Block.AddrHash = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||||
WriteUintToArrOnPos(Block.AddrHash, MinerID, 0);
|
global.WriteUintToArrOnPos(Block.AddrHash, MinerID, 0);
|
||||||
WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
global.WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
var MAX_MEMORY3 = 0, SHIFT_MASKA3;
|
var MAX_MEMORY3 = 0, SHIFT_MASKA3;
|
||||||
@@ -61,8 +61,7 @@ function InitVer3(Block) {
|
|||||||
try {
|
try {
|
||||||
BufferNonce3 = new Uint32Array(MAX_MEMORY3);
|
BufferNonce3 = new Uint32Array(MAX_MEMORY3);
|
||||||
BufferBlockNum3 = new Uint32Array(MAX_MEMORY3);
|
BufferBlockNum3 = new Uint32Array(MAX_MEMORY3);
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
SHIFT_MASKA3 = SHIFT_MASKA3 + 1;
|
SHIFT_MASKA3 = SHIFT_MASKA3 + 1;
|
||||||
MAX_MEMORY3 = MAX_MEMORY3 / 2;
|
MAX_MEMORY3 = MAX_MEMORY3 / 2;
|
||||||
global.ToLog("WAS ALLOC MEMORY ERROR. NEW TRY: " + MAX_MEMORY3);
|
global.ToLog("WAS ALLOC MEMORY ERROR. NEW TRY: " + MAX_MEMORY3);
|
||||||
@@ -88,10 +87,13 @@ function CreatePOWVersion3(Block, bHashPump) {
|
|||||||
if (!Block.MaxLider) {
|
if (!Block.MaxLider) {
|
||||||
Block.HashCount = 0;
|
Block.HashCount = 0;
|
||||||
Block.MaxLider = {
|
Block.MaxLider = {
|
||||||
Nonce0: 0, Nonce1: 0, Nonce2: 0, DeltaNum1: 0, DeltaNum2: 0, Hash1: [255, 255, 255, 255, 255, 255, 255, 255, 255,
|
Nonce0: 0,
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], Hash2: [255,
|
Nonce1: 0,
|
||||||
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
|
Nonce2: 0,
|
||||||
255, 255, 255, 255, 255, 255],
|
DeltaNum1: 0,
|
||||||
|
DeltaNum2: 0,
|
||||||
|
Hash1: [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
|
||||||
|
Hash2: [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
var MaxLider = Block.MaxLider;
|
var MaxLider = Block.MaxLider;
|
||||||
@@ -99,7 +101,7 @@ function CreatePOWVersion3(Block, bHashPump) {
|
|||||||
var BlockNum = Block.BlockNum;
|
var BlockNum = Block.BlockNum;
|
||||||
var Miner = Block.MinerID;
|
var Miner = Block.MinerID;
|
||||||
var StartNonceRnd = DELTA_NONCE + Block.LastNonce + Math.trunc(3000000000 * Math.random());
|
var StartNonceRnd = DELTA_NONCE + Block.LastNonce + Math.trunc(3000000000 * Math.random());
|
||||||
var List = GetNonceHashArr(BlockNum, Miner, StartNonceRnd, RunCount);
|
var List = global.GetNonceHashArr(BlockNum, Miner, StartNonceRnd, RunCount);
|
||||||
for (var n = 0; n < RunCount; n++) {
|
for (var n = 0; n < RunCount; n++) {
|
||||||
var Nonce = List.ArrNonce[n];
|
var Nonce = List.ArrNonce[n];
|
||||||
var HashNum = List.ArrHash[n] >>> SHIFT_MASKA3;
|
var HashNum = List.ArrHash[n] >>> SHIFT_MASKA3;
|
||||||
@@ -110,11 +112,11 @@ function CreatePOWVersion3(Block, bHashPump) {
|
|||||||
if (bHashPump)
|
if (bHashPump)
|
||||||
return;
|
return;
|
||||||
var Ret = 0;
|
var Ret = 0;
|
||||||
var PrevHashNum = ReadUint32FromArr(Block.PrevHash, 28);
|
var PrevHashNum = global.ReadUint32FromArr(Block.PrevHash, 28);
|
||||||
var HashBase = GetHashFromNum2(BlockNum, PrevHashNum);
|
var HashBase = global.GetHashFromNum2(BlockNum, PrevHashNum);
|
||||||
var Value1 = FindHashBuffer3(HashBase, BlockNum, Miner, 1);
|
var Value1 = FindHashBuffer3(HashBase, BlockNum, Miner, 1);
|
||||||
if (Value1) {
|
if (Value1) {
|
||||||
var Hash1 = XORArr(HashBase, Value1.Hash);
|
var Hash1 = global.XORArr(HashBase, Value1.Hash);
|
||||||
if (global.CompareArr(MaxLider.Hash1, Hash1) > 0) {
|
if (global.CompareArr(MaxLider.Hash1, Hash1) > 0) {
|
||||||
MaxLider.Hash1 = Hash1;
|
MaxLider.Hash1 = Hash1;
|
||||||
MaxLider.Nonce1 = Value1.Nonce;
|
MaxLider.Nonce1 = Value1.Nonce;
|
||||||
@@ -126,10 +128,10 @@ function CreatePOWVersion3(Block, bHashPump) {
|
|||||||
var CountEnd = START_NONCE + 50000;
|
var CountEnd = START_NONCE + 50000;
|
||||||
var Nonce0;
|
var Nonce0;
|
||||||
for (Nonce0 = START_NONCE; Nonce0 < CountEnd; Nonce0++) {
|
for (Nonce0 = START_NONCE; Nonce0 < CountEnd; Nonce0++) {
|
||||||
var HashCurrent = GetHashFromArrNum2(Block.SeqHash, Miner, Nonce0);
|
var HashCurrent = global.GetHashFromArrNum2(Block.SeqHash, Miner, Nonce0);
|
||||||
var Value2 = FindHashBuffer3(HashCurrent, BlockNum, Miner, 1);
|
var Value2 = FindHashBuffer3(HashCurrent, BlockNum, Miner, 1);
|
||||||
if (Value2) {
|
if (Value2) {
|
||||||
var Hash2 = XORArr(HashCurrent, Value2.Hash);
|
var Hash2 = global.XORArr(HashCurrent, Value2.Hash);
|
||||||
if (global.CompareArr(MaxLider.Hash2, Hash2) > 0) {
|
if (global.CompareArr(MaxLider.Hash2, Hash2) > 0) {
|
||||||
MaxLider.Nonce0 = Nonce0;
|
MaxLider.Nonce0 = Nonce0;
|
||||||
MaxLider.Hash2 = Hash2;
|
MaxLider.Hash2 = Hash2;
|
||||||
@@ -145,13 +147,13 @@ function CreatePOWVersion3(Block, bHashPump) {
|
|||||||
Block.LastNonce0 = Nonce0;
|
Block.LastNonce0 = Nonce0;
|
||||||
if (Ret) {
|
if (Ret) {
|
||||||
Block.AddrHash = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
Block.AddrHash = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||||
WriteUintToArrOnPos(Block.AddrHash, Miner, 0);
|
global.WriteUintToArrOnPos(Block.AddrHash, Miner, 0);
|
||||||
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce0, 6);
|
global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce0, 6);
|
||||||
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce1, 12);
|
global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce1, 12);
|
||||||
WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce2, 18);
|
global.WriteUintToArrOnPos(Block.AddrHash, MaxLider.Nonce2, 18);
|
||||||
WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum1, 24);
|
global.WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum1, 24);
|
||||||
WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum2, 26);
|
global.WriteUint16ToArrOnPos(Block.AddrHash, MaxLider.DeltaNum2, 26);
|
||||||
WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
global.WriteUint32ToArrOnPos(Block.AddrHash, PrevHashNum, 28);
|
||||||
Block.Hash = MaxLider.Hash2;
|
Block.Hash = MaxLider.Hash2;
|
||||||
if (global.CompareArr(MaxLider.Hash1, MaxLider.Hash2) > 0) {
|
if (global.CompareArr(MaxLider.Hash1, MaxLider.Hash2) > 0) {
|
||||||
Block.PowHash = MaxLider.Hash1;
|
Block.PowHash = MaxLider.Hash1;
|
||||||
@@ -160,10 +162,10 @@ function CreatePOWVersion3(Block, bHashPump) {
|
|||||||
Block.PowHash = MaxLider.Hash2;
|
Block.PowHash = MaxLider.Hash2;
|
||||||
}
|
}
|
||||||
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO)
|
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO)
|
||||||
Block.Hash = sha3arr2(MaxLider.Hash1, MaxLider.Hash2);
|
Block.Hash = global.sha3arr2(MaxLider.Hash1, MaxLider.Hash2);
|
||||||
else
|
else
|
||||||
Block.Hash = shaarr2(MaxLider.Hash1, MaxLider.Hash2);
|
Block.Hash = global.shaarr2(MaxLider.Hash1, MaxLider.Hash2);
|
||||||
var Power = GetPowPower(Block.PowHash);
|
var Power = global.GetPowPower(Block.PowHash);
|
||||||
Block.HashCount = (1 << Power) >>> 0;
|
Block.HashCount = (1 << Power) >>> 0;
|
||||||
}
|
}
|
||||||
return Ret;
|
return Ret;
|
||||||
@@ -176,7 +178,7 @@ function FindHashBuffer3(HashFind, BlockNum, Miner, CountFind) {
|
|||||||
var BlockNum2 = BufferBlockNum3[Index];
|
var BlockNum2 = BufferBlockNum3[Index];
|
||||||
if (BlockNum2 && BlockNum2 > BlockNum - DELTA_LONG_MINING) {
|
if (BlockNum2 && BlockNum2 > BlockNum - DELTA_LONG_MINING) {
|
||||||
var Nonce2 = DELTA_NONCE + BufferNonce3[Index];
|
var Nonce2 = DELTA_NONCE + BufferNonce3[Index];
|
||||||
var Hash2 = GetHashFromNum3(BlockNum2, Miner, Nonce2);
|
var Hash2 = global.GetHashFromNum3(BlockNum2, Miner, Nonce2);
|
||||||
return { Hash: Hash2, DeltaNum: BlockNum - BlockNum2, Nonce: Nonce2 };
|
return { Hash: Hash2, DeltaNum: BlockNum - BlockNum2, Nonce: Nonce2 };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -193,7 +195,7 @@ global.GetNonceHashArr = function(BlockNum, Miner, StartNonceRnd, CountNonce) {
|
|||||||
var ArrHash = [];
|
var ArrHash = [];
|
||||||
for (var n = 0; n < CountNonce; n++) {
|
for (var n = 0; n < CountNonce; n++) {
|
||||||
var Nonce = StartNonceRnd + n;
|
var Nonce = StartNonceRnd + n;
|
||||||
var HashNonce = GetHashFromNum3(BlockNum, Miner, Nonce);
|
var HashNonce = global.GetHashFromNum3(BlockNum, Miner, Nonce);
|
||||||
var HashNum = (HashNonce[0] << 23) * 2 + (HashNonce[1] << 16) + (HashNonce[2] << 8) + HashNonce[3];
|
var HashNum = (HashNonce[0] << 23) * 2 + (HashNonce[1] << 16) + (HashNonce[2] << 8) + HashNonce[3];
|
||||||
ArrNonce[n] = Nonce;
|
ArrNonce[n] = Nonce;
|
||||||
ArrHash[n] = HashNum;
|
ArrHash[n] = HashNum;
|
||||||
|
|||||||
@@ -19,9 +19,10 @@ if (global.PROCESS_NAME === "MAIN" || global.PROCESS_NAME === "TX")
|
|||||||
require("./wallet");
|
require("./wallet");
|
||||||
module.exports = class CSmartContract extends require("./block-exchange")
|
module.exports = class CSmartContract extends require("./block-exchange")
|
||||||
{
|
{
|
||||||
|
BufHashTree
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
this.BufHashTree = new RBTree(CompareArr)
|
this.BufHashTree = new RBTree(global.CompareArr)
|
||||||
this.BufHashTree.LastAddNum = 0
|
this.BufHashTree.LastAddNum = 0
|
||||||
}
|
}
|
||||||
AddBlockToHashTree(Block) {
|
AddBlockToHashTree(Block) {
|
||||||
@@ -73,8 +74,8 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].OnWriteBlockStart(Block)
|
global.DApps[key].OnWriteBlockStart(Block)
|
||||||
}
|
}
|
||||||
var arrContentResult = [];
|
var arrContentResult = [];
|
||||||
var BlockNum = Block.BlockNum;
|
var BlockNum = Block.BlockNum;
|
||||||
@@ -86,11 +87,11 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var type = arr[i][0];
|
var type = arr[i][0];
|
||||||
var App = DAppByType[type];
|
var App = global.DAppByType[type];
|
||||||
if (App) {
|
if (App) {
|
||||||
App.ResultTx = 0
|
App.ResultTx = 0
|
||||||
global.DApps.Accounts.BeginTransaction()
|
global.DApps.Accounts.BeginTransaction()
|
||||||
var StrHex = global.GetHexFromArr(sha3(arr[i]));
|
var StrHex = global.GetHexFromArr(global.sha3(arr[i]));
|
||||||
var item;
|
var item;
|
||||||
global.CurTrItem = undefined
|
global.CurTrItem = undefined
|
||||||
if (global.TreeFindTX) {
|
if (global.TreeFindTX) {
|
||||||
@@ -103,7 +104,7 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
if (Result === true) {
|
if (Result === true) {
|
||||||
if (App.ResultTx)
|
if (App.ResultTx)
|
||||||
SetResult = App.ResultTx
|
SetResult = App.ResultTx
|
||||||
if (!DApps.Accounts.CommitTransaction(BlockNum, i))
|
if (!global.DApps.Accounts.CommitTransaction(BlockNum, i))
|
||||||
SetResult = 0
|
SetResult = 0
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -137,40 +138,40 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
}
|
}
|
||||||
if (arrContentResult.length)
|
if (arrContentResult.length)
|
||||||
process.send({ cmd: "WriteBodyResult", BlockNum: Block.BlockNum, arrContentResult: arrContentResult })
|
process.send({ cmd: "WriteBodyResult", BlockNum: Block.BlockNum, arrContentResult: arrContentResult })
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].OnWriteBlockFinish(Block)
|
global.DApps[key].OnWriteBlockFinish(Block)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BlockDeleteTX(Block) {
|
BlockDeleteTX(Block) {
|
||||||
this.BufHashTree.LastAddNum = 0
|
this.BufHashTree.LastAddNum = 0
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].OnDeleteBlock(Block)
|
global.DApps[key].OnDeleteBlock(Block)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OnDelete(Block) {
|
OnDelete(Block) {
|
||||||
}
|
}
|
||||||
IsValidTicket(Tr, BlockNum) {
|
IsValidTicket(Tr, BlockNum) {
|
||||||
this.CheckCreateTicketObject(Tr, BlockNum)
|
this.CheckCreateTicketObject(Tr, BlockNum)
|
||||||
if (Tr.power < MIN_POWER_POW_TR)
|
if (Tr.power < global.MIN_POWER_POW_TR)
|
||||||
return - 2;
|
return - 2;
|
||||||
if (Tr.num !== BlockNum)
|
if (Tr.num !== BlockNum)
|
||||||
return - 3;
|
return - 3;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
IsValidTransaction(Tr, BlockNum) {
|
IsValidTransaction(Tr, BlockNum) {
|
||||||
if (!Tr.body || Tr.body.length < MIN_TRANSACTION_SIZE || Tr.body.length > MAX_TRANSACTION_SIZE)
|
if (!Tr.body || Tr.body.length < global.MIN_TRANSACTION_SIZE || Tr.body.length > global.MAX_TRANSACTION_SIZE)
|
||||||
return - 1;
|
return - 1;
|
||||||
this.CheckCreateTransactionObject(Tr)
|
this.CheckCreateTransactionObject(Tr)
|
||||||
if (Tr.power - Math.log2(Tr.body.length / 128) < MIN_POWER_POW_TR)
|
if (Tr.power - Math.log2(Tr.body.length / 128) < global.MIN_POWER_POW_TR)
|
||||||
return - 2;
|
return - 2;
|
||||||
if (Tr.num !== BlockNum)
|
if (Tr.num !== BlockNum)
|
||||||
return - 3;
|
return - 3;
|
||||||
if (Tr.body[0] === TYPE_TRANSACTION_ACC_HASH)
|
if (Tr.body[0] === global.TYPE_TRANSACTION_ACC_HASH)
|
||||||
return - 4;
|
return - 4;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ReWriteDAppTransactions(Length) {
|
ReWriteDAppTransactions(Length) {
|
||||||
if (!TX_PROCESS.Worker)
|
if (!global.TX_PROCESS.Worker)
|
||||||
return 0;
|
return 0;
|
||||||
if (!Length)
|
if (!Length)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -188,22 +189,22 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
AddDAppTransactions(BlockNum, Arr) {
|
AddDAppTransactions(BlockNum, Arr) {
|
||||||
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||||
return;
|
return;
|
||||||
var BlockNumHash = BlockNum - DELTA_BLOCK_ACCOUNT_HASH;
|
var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH;
|
||||||
if (BlockNumHash < 0)
|
if (BlockNumHash < 0)
|
||||||
return;
|
return;
|
||||||
var Item = global.DApps.Accounts.GetAccountHashItem(BlockNumHash);
|
var Item = global.DApps.Accounts.GetAccountHashItem(BlockNumHash);
|
||||||
if (Item) {
|
if (Item) {
|
||||||
var Body = [TYPE_TRANSACTION_ACC_HASH];
|
var Body = [global.TYPE_TRANSACTION_ACC_HASH];
|
||||||
WriteUintToArr(Body, BlockNumHash)
|
global.WriteUintToArr(Body, BlockNumHash)
|
||||||
WriteArrToArr(Body, Item.AccHash, 32)
|
global.WriteArrToArr(Body, Item.AccHash, 32)
|
||||||
if (BlockNumHash >= START_BLOCK_ACCOUNT_HASH3) {
|
if (BlockNumHash >= global.START_BLOCK_ACCOUNT_HASH3) {
|
||||||
WriteUintToArr(Body, Item.AccountMax)
|
global.WriteUintToArr(Body, Item.AccountMax)
|
||||||
WriteArrToArr(Body, Item.SmartHash, 32)
|
global.WriteArrToArr(Body, Item.SmartHash, 32)
|
||||||
WriteUintToArr(Body, Item.SmartCount)
|
global.WriteUintToArr(Body, Item.SmartCount)
|
||||||
WriteUintToArr(Body, BlockNum)
|
global.WriteUintToArr(Body, BlockNum)
|
||||||
WriteUintToArr(Body, 0)
|
global.WriteUintToArr(Body, 0)
|
||||||
}
|
}
|
||||||
var Tr = { body: Body };
|
var Tr = { body: Body };
|
||||||
this.CheckCreateTransactionObject(Tr)
|
this.CheckCreateTransactionObject(Tr)
|
||||||
@@ -213,7 +214,7 @@ module.exports = class CSmartContract extends require("./block-exchange")
|
|||||||
AddTransactionOwn(Tr) {
|
AddTransactionOwn(Tr) {
|
||||||
if (!global.TX_PROCESS.Worker)
|
if (!global.TX_PROCESS.Worker)
|
||||||
return - 6;
|
return - 6;
|
||||||
var StrHex = global.GetHexFromArr(sha3(Tr.body));
|
var StrHex = global.GetHexFromArr(global.sha3(Tr.body));
|
||||||
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex })
|
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex })
|
||||||
return this.AddTransaction(Tr, 1);
|
return this.AddTransaction(Tr, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,17 +12,19 @@
|
|||||||
const MAX_MESSAGE_COUNT = 1000;
|
const MAX_MESSAGE_COUNT = 1000;
|
||||||
module.exports = class CMessages extends require("./transaction-validator")
|
module.exports = class CMessages extends require("./transaction-validator")
|
||||||
{
|
{
|
||||||
|
MemPoolMsg
|
||||||
|
|
||||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||||
this.MemPoolMsg = []
|
this.MemPoolMsg = []
|
||||||
for (var i = 0; i <= MAX_LEVEL_SPECIALIZATION; i++)
|
for (var i = 0; i <= global.MAX_LEVEL_SPECIALIZATION; i++)
|
||||||
this.MemPoolMsg[i] = new RBTree(CompareItemTimePow)
|
this.MemPoolMsg[i] = new RBTree(global.CompareItemTimePow)
|
||||||
}
|
}
|
||||||
AddMsgToQuote(Msg) {
|
AddMsgToQuote(Msg) {
|
||||||
var Tree = this.MemPoolMsg[Msg.Level];
|
var Tree = this.MemPoolMsg[Msg.Level];
|
||||||
if (Tree) {
|
if (Tree) {
|
||||||
if (Tree.insert(Msg)) {
|
if (Tree.insert(Msg)) {
|
||||||
if (Tree.size > MEM_POOL_MSG_COUNT) {
|
if (Tree.size > global.MEM_POOL_MSG_COUNT) {
|
||||||
var maxitem = Tree.max();
|
var maxitem = Tree.max();
|
||||||
Tree.remove(maxitem)
|
Tree.remove(maxitem)
|
||||||
if (maxitem === Msg)
|
if (maxitem === Msg)
|
||||||
@@ -38,7 +40,7 @@ module.exports = class CMessages extends require("./transaction-validator")
|
|||||||
}
|
}
|
||||||
IsValidMsg(Msg) {
|
IsValidMsg(Msg) {
|
||||||
this.CheckCreateMsgHASH(Msg)
|
this.CheckCreateMsgHASH(Msg)
|
||||||
if (Msg.power < MIN_POWER_POW_MSG)
|
if (Msg.power < global.MIN_POWER_POW_MSG)
|
||||||
return - 1;
|
return - 1;
|
||||||
if (Msg.time > this.CurrentBlockNum)
|
if (Msg.time > this.CurrentBlockNum)
|
||||||
return - 1;
|
return - 1;
|
||||||
@@ -47,18 +49,18 @@ module.exports = class CMessages extends require("./transaction-validator")
|
|||||||
CheckCreateMsgHASH(Msg) {
|
CheckCreateMsgHASH(Msg) {
|
||||||
if (!Msg.HashPow) {
|
if (!Msg.HashPow) {
|
||||||
Msg.HASH = global.sha3(Msg.body)
|
Msg.HASH = global.sha3(Msg.body)
|
||||||
Msg.HashPow = GetHashWithValues(Msg.HASH, Msg.nonce, Msg.time)
|
Msg.HashPow = global.GetHashWithValues(Msg.HASH, Msg.nonce, Msg.time)
|
||||||
Msg.power = GetPowPower(Msg.HashPow)
|
Msg.power = global.GetPowPower(Msg.HashPow)
|
||||||
Msg.TimePow = Msg.time + Msg.power - Math.log2(Msg.body.length / 128)
|
Msg.TimePow = Msg.time + Msg.power - Math.log2(Msg.body.length / 128)
|
||||||
Msg.Level = AddrLevelArr(this.addrArr, Msg.addrArr)
|
Msg.Level = global.AddrLevelArr(this.addrArr, Msg.addrArr)
|
||||||
if (Msg.Level >= MAX_LEVEL_SPECIALIZATION)
|
if (Msg.Level >= global.MAX_LEVEL_SPECIALIZATION)
|
||||||
Msg.Level = MAX_LEVEL_SPECIALIZATION
|
Msg.Level = global.MAX_LEVEL_SPECIALIZATION
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CreateMsgFromBody(Body, ToAddr) {
|
CreateMsgFromBody(Body, ToAddr) {
|
||||||
var HASH = global.sha3(Body);
|
var HASH = global.sha3(Body);
|
||||||
var Msg = {
|
var Msg = {
|
||||||
HASH: HASH, body: Body, addrArr: ToAddr, nonce: CreateNoncePOWExtern(HASH, this.CurrentBlockNum, 3 * (1 << MIN_POWER_POW_MSG)),
|
HASH: HASH, body: Body, addrArr: ToAddr, nonce: global.CreateNoncePOWExtern(HASH, this.CurrentBlockNum, 3 * (1 << global.MIN_POWER_POW_MSG)),
|
||||||
time: this.CurrentBlockNum,
|
time: this.CurrentBlockNum,
|
||||||
};
|
};
|
||||||
this.CheckCreateMsgHASH(Msg)
|
this.CheckCreateMsgHASH(Msg)
|
||||||
@@ -97,8 +99,9 @@ module.exports = class CMessages extends require("./transaction-validator")
|
|||||||
var Msg = arr[i];
|
var Msg = arr[i];
|
||||||
if (this.IsValidMsg(Msg)) {
|
if (this.IsValidMsg(Msg)) {
|
||||||
if (global.CompareArr(this.addrArr, Msg.addrArr) === 0) {
|
if (global.CompareArr(this.addrArr, Msg.addrArr) === 0) {
|
||||||
var App = DAppByType[Msg.body[0]];
|
var App = global.DAppByType[Msg.body[0]];
|
||||||
if (App) {
|
if (App) {
|
||||||
|
//@ts-ignore
|
||||||
App.OnMessage(Msg, BlockNum, i)
|
App.OnMessage(Msg, BlockNum, i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,7 +120,7 @@ module.exports = class CMessages extends require("./transaction-validator")
|
|||||||
GETMESSAGE(Info, CurTime) {
|
GETMESSAGE(Info, CurTime) {
|
||||||
var arr = [];
|
var arr = [];
|
||||||
var BufLength = 300;
|
var BufLength = 300;
|
||||||
var Level = AddrLevelArr(this.addrArr, Info.Node.addrArr);
|
var Level = global.AddrLevelArr(this.addrArr, Info.Node.addrArr);
|
||||||
var Tree = this.MemPoolMsg[Level];
|
var Tree = this.MemPoolMsg[Level];
|
||||||
if (Tree) {
|
if (Tree) {
|
||||||
var it = Tree.iterator(), Item;
|
var it = Tree.iterator(), Item;
|
||||||
@@ -145,10 +148,10 @@ module.exports = class CMessages extends require("./transaction-validator")
|
|||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
var Res = SELF.AddTransaction(TR, TR.ToAll);
|
var Res = SELF.AddTransaction(TR, TR.ToAll);
|
||||||
if (TR.ToAll)
|
if (TR.ToAll)
|
||||||
ToLogClient("#3 Added " + TrName(TR) + " for block: " + TR.num + " on timer Res=" + Res)
|
global.ToLogClient("#3 Added " + TrName(TR) + " for block: " + TR.num + " on timer Res=" + Res)
|
||||||
}, (delta - 3) * 1000)
|
}, (delta - 3) * 1000)
|
||||||
if (Tr.ToAll)
|
if (Tr.ToAll)
|
||||||
ToLogClient("#2 Added " + TrName(Tr) + " for block: " + Tr.num + " to timer. Send transaction after " + (delta - 3) + " sec")
|
global.ToLogClient("#2 Added " + TrName(Tr) + " for block: " + Tr.num + " to timer. Send transaction after " + (delta - 3) + " sec")
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
return - 3;
|
return - 3;
|
||||||
@@ -170,10 +173,10 @@ module.exports = class CMessages extends require("./transaction-validator")
|
|||||||
SendTransaction(Tr) {
|
SendTransaction(Tr) {
|
||||||
if (!Tr.ToAll)
|
if (!Tr.ToAll)
|
||||||
return;
|
return;
|
||||||
var CurTime = GetCurrentTime(0) - 0;
|
var CurTime = global.GetCurrentTime(0) - 0;
|
||||||
var Count;
|
var Count;
|
||||||
if (GrayConnect())
|
if (global.GrayConnect())
|
||||||
Count = Math.trunc(MAX_GRAY_CONNECTIONS_TO_SERVER / 2)
|
Count = Math.trunc(global.MAX_GRAY_CONNECTIONS_TO_SERVER / 2)
|
||||||
else
|
else
|
||||||
Count = Math.min(this.ActualNodes.size, 16)
|
Count = Math.min(this.ActualNodes.size, 16)
|
||||||
if (Count < 2)
|
if (Count < 2)
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ global.RunOnUpdate = RunOnUpdate;
|
|||||||
|
|
||||||
function RunOnUpdate() {
|
function RunOnUpdate() {
|
||||||
var fname = global.GetDataPath("DB/update.lst");
|
var fname = global.GetDataPath("DB/update.lst");
|
||||||
var UpdateInfo = LoadParams(fname, { UPDATE_NUM_COMPLETE: 1071 });
|
var UpdateInfo = global.LoadParams(fname, { UPDATE_NUM_COMPLETE: 1071 });
|
||||||
if (!UpdateInfo.UPDATE_NUM_COMPLETE)
|
if (!UpdateInfo.UPDATE_NUM_COMPLETE)
|
||||||
UpdateInfo.UPDATE_NUM_COMPLETE = 0;
|
UpdateInfo.UPDATE_NUM_COMPLETE = 0;
|
||||||
var CurNum = UpdateInfo.UPDATE_NUM_COMPLETE;
|
var CurNum = UpdateInfo.UPDATE_NUM_COMPLETE;
|
||||||
if (CurNum !== UPDATE_CODE_VERSION_NUM) {
|
if (CurNum !== global.UPDATE_CODE_VERSION_NUM) {
|
||||||
UpdateInfo.UPDATE_NUM_COMPLETE = UPDATE_CODE_VERSION_NUM;
|
UpdateInfo.UPDATE_NUM_COMPLETE = global.UPDATE_CODE_VERSION_NUM;
|
||||||
global.ToLog("UPDATER Start");
|
global.ToLog("UPDATER Start");
|
||||||
SaveParams(fname, UpdateInfo);
|
global.SaveParams(fname, UpdateInfo);
|
||||||
if (global.TEST_NETWORK || global.LOCAL_RUN) {
|
if (global.TEST_NETWORK || global.LOCAL_RUN) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -43,7 +43,7 @@ function CreateHeadersHash100() {
|
|||||||
if (Num === 0)
|
if (Num === 0)
|
||||||
Hash100 = [];
|
Hash100 = [];
|
||||||
else
|
else
|
||||||
Hash100 = sha3arr2(PrevHash100, Block.Hash);
|
Hash100 = global.sha3arr2(PrevHash100, Block.Hash);
|
||||||
DB.Write({ Num: Num / 100, Hash100: Hash100, Hash: Block.Hash });
|
DB.Write({ Num: Num / 100, Hash100: Hash100, Hash: Block.Hash });
|
||||||
if (Num % 1000000 === 0)
|
if (Num % 1000000 === 0)
|
||||||
global.ToLog("Create Hash100:" + Num);
|
global.ToLog("Create Hash100:" + Num);
|
||||||
@@ -54,12 +54,12 @@ function CreateHeadersHash100() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function CheckRewriteTr(Num, StrHash, StartRewrite) {
|
function CheckRewriteTr(Num, StrHash, StartRewrite) {
|
||||||
if (SERVER.BlockNumDB < StartRewrite)
|
if (global.SERVER.BlockNumDB < StartRewrite)
|
||||||
return "NO";
|
return "NO";
|
||||||
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
||||||
if (!AccountsHash || global.GetHexFromArr(AccountsHash) !== StrHash) {
|
if (!AccountsHash || global.GetHexFromArr(AccountsHash) !== StrHash) {
|
||||||
global.ToLog("START REWRITE ERR ACTS TRANSACTIONS");
|
global.ToLog("START REWRITE ERR ACTS TRANSACTIONS");
|
||||||
global.SERVER.ReWriteDAppTransactions(SERVER.BlockNumDB - StartRewrite);
|
global.SERVER.ReWriteDAppTransactions(global.SERVER.BlockNumDB - StartRewrite);
|
||||||
return "Rewrite";
|
return "Rewrite";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -71,7 +71,7 @@ function CheckRewriteAllTr2(Num, StrHash, Num2, StrHash2) {
|
|||||||
if (global.LOCAL_RUN || global.TEST_NETWORK)
|
if (global.LOCAL_RUN || global.TEST_NETWORK)
|
||||||
return "NONE";
|
return "NONE";
|
||||||
var MaxNum = global.SERVER.GetMaxNumBlockDB();
|
var MaxNum = global.SERVER.GetMaxNumBlockDB();
|
||||||
if (MaxNum < START_BLOCK_ACCOUNT_HASH)
|
if (MaxNum < global.START_BLOCK_ACCOUNT_HASH)
|
||||||
return "NONE";
|
return "NONE";
|
||||||
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
||||||
var AccountsHash2 = global.DApps.Accounts.GetHashOrUndefined(Num2);
|
var AccountsHash2 = global.DApps.Accounts.GetHashOrUndefined(Num2);
|
||||||
@@ -80,8 +80,8 @@ function CheckRewriteAllTr2(Num, StrHash, Num2, StrHash2) {
|
|||||||
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
|
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
|
||||||
global.ToLog("***************** START REWRITE ALL DAPPS");
|
global.ToLog("***************** START REWRITE ALL DAPPS");
|
||||||
global.UpdateMode = 1;
|
global.UpdateMode = 1;
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].ClearDataBase();
|
global.DApps[key].ClearDataBase();
|
||||||
}
|
}
|
||||||
global.UpdateMode = 0;
|
global.UpdateMode = 0;
|
||||||
return "Rewrite";
|
return "Rewrite";
|
||||||
@@ -95,14 +95,14 @@ function CheckRewriteAllTr(Num, StrHash, Num2, StrHash2) {
|
|||||||
if (global.LOCAL_RUN || global.TEST_NETWORK)
|
if (global.LOCAL_RUN || global.TEST_NETWORK)
|
||||||
return "NONE";
|
return "NONE";
|
||||||
var MaxNum = global.SERVER.GetMaxNumBlockDB();
|
var MaxNum = global.SERVER.GetMaxNumBlockDB();
|
||||||
if (MaxNum < START_BLOCK_ACCOUNT_HASH)
|
if (MaxNum < global.START_BLOCK_ACCOUNT_HASH)
|
||||||
return "NONE";
|
return "NONE";
|
||||||
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
var AccountsHash = global.DApps.Accounts.GetHashOrUndefined(Num);
|
||||||
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
|
if (AccountsHash && global.GetHexFromArr(AccountsHash) !== StrHash) {
|
||||||
global.ToLog("***************** START REWRITE ALL DAPPS");
|
global.ToLog("***************** START REWRITE ALL DAPPS");
|
||||||
global.UpdateMode = 1;
|
global.UpdateMode = 1;
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].ClearDataBase();
|
global.DApps[key].ClearDataBase();
|
||||||
}
|
}
|
||||||
global.UpdateMode = 0;
|
global.UpdateMode = 0;
|
||||||
return "Rewrite";
|
return "Rewrite";
|
||||||
@@ -154,7 +154,7 @@ function ReWriteDBSmartWrite() {
|
|||||||
var Item = global.DApps.Smart.DBSmart.Read(num);
|
var Item = global.DApps.Smart.DBSmart.Read(num);
|
||||||
if (!Item)
|
if (!Item)
|
||||||
break;
|
break;
|
||||||
var Body = (global.GetArrFromHex(GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, {});
|
var Body = global.GetArrFromHex(GetBufferFromObject(Item, global.DApps.Smart.FORMAT_ROW, 20000, {}));
|
||||||
if (Body.length > 15000)
|
if (Body.length > 15000)
|
||||||
global.ToLog("Smart " + Item.Num + ". " + Item.Name + " length=" + Body.length);
|
global.ToLog("Smart " + Item.Num + ". " + Item.Name + " length=" + Body.length);
|
||||||
global.DApps.Smart.DBSmartWrite(Item);
|
global.DApps.Smart.DBSmartWrite(Item);
|
||||||
|
|||||||
@@ -17,12 +17,18 @@ const WalletPath = "WALLET";
|
|||||||
const DBRow = require("./db/db-row");
|
const DBRow = require("./db/db-row");
|
||||||
const CONFIG_NAME = global.GetDataPath(WalletPath + "/config.lst");
|
const CONFIG_NAME = global.GetDataPath(WalletPath + "/config.lst");
|
||||||
class CApp {
|
class CApp {
|
||||||
|
Password
|
||||||
|
WalletOpen
|
||||||
|
AccountMap
|
||||||
|
KeyPair
|
||||||
|
KeyXOR
|
||||||
|
PubKeyArr
|
||||||
constructor() {
|
constructor() {
|
||||||
CheckCreateDir(global.GetDataPath(WalletPath))
|
global.CheckCreateDir(global.GetDataPath(WalletPath))
|
||||||
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
||||||
this.Password = ""
|
this.Password = ""
|
||||||
this.WalletOpen = undefined
|
this.WalletOpen = undefined
|
||||||
var Params = LoadParams(CONFIG_NAME, undefined);
|
var Params = global.LoadParams(CONFIG_NAME, undefined);
|
||||||
if (!Params) {
|
if (!Params) {
|
||||||
Params = {}
|
Params = {}
|
||||||
if (global.TEST_NETWORK) {
|
if (global.TEST_NETWORK) {
|
||||||
@@ -39,7 +45,7 @@ class CApp {
|
|||||||
this.AccountMap = Params.AccountMap
|
this.AccountMap = Params.AccountMap
|
||||||
this.KeyPair = crypto.createECDH('secp256k1')
|
this.KeyPair = crypto.createECDH('secp256k1')
|
||||||
if (Params.Protect) {
|
if (Params.Protect) {
|
||||||
ToLogClient("Wallet protect by password")
|
global.ToLogClient("Wallet protect by password")
|
||||||
this.KeyXOR = global.GetArrFromHex(Params.KeyXOR)
|
this.KeyXOR = global.GetArrFromHex(Params.KeyXOR)
|
||||||
this.WalletOpen = false
|
this.WalletOpen = false
|
||||||
this.SetPrivateKey(Params.PubKey)
|
this.SetPrivateKey(Params.PubKey)
|
||||||
@@ -55,22 +61,22 @@ class CApp {
|
|||||||
AddTransaction(Tr) {
|
AddTransaction(Tr) {
|
||||||
if (!global.TX_PROCESS.Worker)
|
if (!global.TX_PROCESS.Worker)
|
||||||
return 0;
|
return 0;
|
||||||
var StrHex = global.GetHexFromArr(sha3(Tr.body));
|
var StrHex = global.GetHexFromArr(global.sha3(Tr.body));
|
||||||
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex })
|
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex })
|
||||||
return global.SERVER.AddTransaction(Tr, 1);
|
return global.SERVER.AddTransaction(Tr, 1);
|
||||||
}
|
}
|
||||||
SetPrivateKey(KeyStr, bSetNew) {
|
SetPrivateKey(KeyStr, bSetNew?) {
|
||||||
var bGo = 1;
|
var bGo = 1;
|
||||||
if (this.WalletOpen === false) {
|
if (this.WalletOpen === false) {
|
||||||
bGo = 0
|
bGo = 0
|
||||||
}
|
}
|
||||||
if (KeyStr && KeyStr.length === 64 && bGo) {
|
if (KeyStr && KeyStr.length === 64 && bGo) {
|
||||||
this.KeyPair.setPrivateKey(GetArr32FromHex(KeyStr))
|
this.KeyPair.setPrivateKey(global.GetArr32FromHex(KeyStr))
|
||||||
this.KeyPair.PubKeyArr = this.KeyPair.getPublicKey('', 'compressed')
|
this.KeyPair.PubKeyArr = this.KeyPair.getPublicKey('', 'compressed')
|
||||||
this.KeyPair.PubKeyStr = global.GetHexFromArr(this.KeyPair.PubKeyArr)
|
this.KeyPair.PubKeyStr = global.GetHexFromArr(this.KeyPair.PubKeyArr)
|
||||||
this.KeyPair.PrivKeyStr = KeyStr.toUpperCase()
|
this.KeyPair.PrivKeyStr = KeyStr.toUpperCase()
|
||||||
this.KeyPair.addrArr = this.KeyPair.PubKeyArr.slice(1)
|
this.KeyPair.addrArr = this.KeyPair.PubKeyArr.slice(1)
|
||||||
this.KeyPair.addrStr = GetHexAddresFromPublicKey(this.KeyPair.addrArr)
|
this.KeyPair.addrStr = global.GetHexAddresFromPublicKey(this.KeyPair.addrArr)
|
||||||
this.KeyPair.addr = this.KeyPair.addrArr
|
this.KeyPair.addr = this.KeyPair.addrArr
|
||||||
this.KeyPair.WasInit = 1
|
this.KeyPair.WasInit = 1
|
||||||
this.PubKeyArr = this.KeyPair.PubKeyArr
|
this.PubKeyArr = this.KeyPair.PubKeyArr
|
||||||
@@ -98,38 +104,38 @@ class CApp {
|
|||||||
this.Password = ""
|
this.Password = ""
|
||||||
this.WalletOpen = false
|
this.WalletOpen = false
|
||||||
this.KeyPair = crypto.createECDH('secp256k1')
|
this.KeyPair = crypto.createECDH('secp256k1')
|
||||||
this.SetPrivateKey(GetHexFromArr(this.PubKeyArr), false)
|
this.SetPrivateKey(global.GetHexFromArr(this.PubKeyArr), false)
|
||||||
ToLogClient("Wallet close")
|
global.ToLogClient("Wallet close")
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
OpenWallet(StrPassword) {
|
OpenWallet(StrPassword) {
|
||||||
if (this.WalletOpen !== false) {
|
if (this.WalletOpen !== false) {
|
||||||
ToLogClient("Wallet was open")
|
global.ToLogClient("Wallet was open")
|
||||||
}
|
}
|
||||||
var Hash = this.HashProtect(StrPassword);
|
var Hash = this.HashProtect(StrPassword);
|
||||||
var TestPrivKey = this.XORHash(this.KeyXOR, Hash, 32);
|
var TestPrivKey = this.XORHash(this.KeyXOR, Hash, 32);
|
||||||
if (!IsZeroArr(TestPrivKey)) {
|
if (!global.IsZeroArr(TestPrivKey)) {
|
||||||
this.KeyPair.setPrivateKey(Buffer.from(TestPrivKey))
|
this.KeyPair.setPrivateKey(Buffer.from(TestPrivKey))
|
||||||
var TestPubKey = this.KeyPair.getPublicKey('', 'compressed');
|
var TestPubKey = this.KeyPair.getPublicKey('', 'compressed');
|
||||||
if (global.CompareArr(TestPubKey, this.PubKeyArr) !== 0) {
|
if (global.CompareArr(TestPubKey, this.PubKeyArr) !== 0) {
|
||||||
ToLogClient("Wrong password")
|
global.ToLogClient("Wrong password")
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
this.Password = StrPassword
|
this.Password = StrPassword
|
||||||
this.WalletOpen = true
|
this.WalletOpen = true
|
||||||
this.SetPrivateKey(GetHexFromArr(TestPrivKey), false)
|
this.SetPrivateKey(global.GetHexFromArr(TestPrivKey), false)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.Password = StrPassword
|
this.Password = StrPassword
|
||||||
this.WalletOpen = true
|
this.WalletOpen = true
|
||||||
this.SetPrivateKey(GetHexFromArr(this.PubKeyArr), false)
|
this.SetPrivateKey(global.GetHexFromArr(this.PubKeyArr), false)
|
||||||
}
|
}
|
||||||
ToLogClient("Wallet open")
|
global.ToLogClient("Wallet open")
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
SetPasswordNew(StrPassword) {
|
SetPasswordNew(StrPassword) {
|
||||||
if (this.WalletOpen === false) {
|
if (this.WalletOpen === false) {
|
||||||
ToLogClient("Wallet is close by password")
|
global.ToLogClient("Wallet is close by password")
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.Password = StrPassword
|
this.Password = StrPassword
|
||||||
@@ -157,7 +163,7 @@ class CApp {
|
|||||||
if (this.WalletOpen === false) {
|
if (this.WalletOpen === false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var Params = {};
|
var Params: any = {};
|
||||||
if (this.Password) {
|
if (this.Password) {
|
||||||
Params.Protect = true
|
Params.Protect = true
|
||||||
var Hash = this.HashProtect(this.Password);
|
var Hash = this.HashProtect(this.Password);
|
||||||
@@ -179,13 +185,13 @@ class CApp {
|
|||||||
}
|
}
|
||||||
Params.AccountMap = this.AccountMap
|
Params.AccountMap = this.AccountMap
|
||||||
Params.MiningAccount = global.GENERATE_BLOCK_ACCOUNT
|
Params.MiningAccount = global.GENERATE_BLOCK_ACCOUNT
|
||||||
SaveParams(CONFIG_NAME, Params)
|
global.SaveParams(CONFIG_NAME, Params)
|
||||||
}
|
}
|
||||||
OnCreateAccount(Data) {
|
OnCreateAccount(Data) {
|
||||||
this.AccountMap[Data.Num] = 0
|
this.AccountMap[Data.Num] = 0
|
||||||
}
|
}
|
||||||
FindMyAccounts(bClean) {
|
FindMyAccounts(bClean) {
|
||||||
if (IsZeroArr(this.PubKeyArr))
|
if (global.IsZeroArr(this.PubKeyArr))
|
||||||
return;
|
return;
|
||||||
if (bClean)
|
if (bClean)
|
||||||
this.AccountMap = {}
|
this.AccountMap = {}
|
||||||
@@ -212,15 +218,15 @@ class CApp {
|
|||||||
if (!this.KeyPair.WasInit)
|
if (!this.KeyPair.WasInit)
|
||||||
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
||||||
var PrivKey = this.GetPrivateKey(Num);
|
var PrivKey = this.GetPrivateKey(Num);
|
||||||
var sigObj = secp256k1.sign(SHA3BUF(Arr), Buffer.from(PrivKey));
|
var sigObj = global.secp256k1.sign(global.SHA3BUF(Arr), Buffer.from(PrivKey));
|
||||||
returnglobal.GetHexFromArr(sigObj.signature);
|
return global.GetHexFromArr(sigObj.signature);
|
||||||
}
|
}
|
||||||
GetSignTransaction(TR) {
|
GetSignTransaction(TR) {
|
||||||
if (!this.KeyPair.WasInit)
|
if (!this.KeyPair.WasInit)
|
||||||
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
return "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
|
||||||
var PrivKey = this.GetPrivateKey(this.AccountMap[TR.FromID]);
|
var PrivKey = this.GetPrivateKey(this.AccountMap[TR.FromID]);
|
||||||
var Arr = global.DApps.Accounts.GetSignTransferTx(TR, PrivKey);
|
var Arr = global.DApps.Accounts.GetSignTransferTx(TR, PrivKey);
|
||||||
returnglobal.GetHexFromArr(Arr);
|
return global.GetHexFromArr(Arr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
global.WALLET = new CApp;
|
global.WALLET = new CApp;
|
||||||
|
|||||||
207
src/global.d.ts
vendored
207
src/global.d.ts
vendored
@@ -18,15 +18,25 @@ declare global {
|
|||||||
HTTP_PORT_NUMBER: number;
|
HTTP_PORT_NUMBER: number;
|
||||||
LOCAL_RUN: number;
|
LOCAL_RUN: number;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region main-process.ts
|
//#region main-process.ts
|
||||||
PROCESS_NAME: string;
|
PROCESS_NAME: string;
|
||||||
POWPROCESS: number;
|
POWPROCESS: number;
|
||||||
DEBUGPROCESS: any;
|
DEBUGPROCESS: any;
|
||||||
|
START_SERVER: number;
|
||||||
|
SetCalcPOW: Function;
|
||||||
|
RunStopPOWProcess: Function;
|
||||||
|
NEW_SERVER_PRIVATE_KEY: number;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region constant.ts
|
||||||
UPDATE_CODE_VERSION_NUM: number;
|
UPDATE_CODE_VERSION_NUM: number;
|
||||||
MIN_CODE_VERSION_NUM: number;
|
MIN_CODE_VERSION_NUM: number;
|
||||||
MINING_VERSION_NUM: number;
|
MINING_VERSION_NUM: number;
|
||||||
InitParamsArg: Function;
|
InitParamsArg: Function;
|
||||||
CONST_NAME_ARR: string[];
|
CONST_NAME_ARR: string[];
|
||||||
|
MAX_LENGTH_SENDER_MAP: number;
|
||||||
|
DELTA_START_SENDER_MAP: number;
|
||||||
NODES_DELTA_CALC_HOUR: number;
|
NODES_DELTA_CALC_HOUR: number;
|
||||||
USE_HARD_API_V2: number;
|
USE_HARD_API_V2: number;
|
||||||
USE_TICKET: number;
|
USE_TICKET: number;
|
||||||
@@ -49,11 +59,11 @@ declare global {
|
|||||||
SERVER_PRIVATE_KEY_HEX: string;
|
SERVER_PRIVATE_KEY_HEX: string;
|
||||||
USE_NET_FOR_SERVER_ADDRES: number;
|
USE_NET_FOR_SERVER_ADDRES: number;
|
||||||
NET_WORK_MODE: {
|
NET_WORK_MODE: {
|
||||||
ip: string;
|
ip?: string;
|
||||||
port: number;
|
port?: number | string;
|
||||||
UseDirectIP: boolean;
|
UseDirectIP?: boolean | number;
|
||||||
NodeWhiteList: string;
|
NodeWhiteList?: string;
|
||||||
DoRestartNode: number;
|
DoRestartNode?: number;
|
||||||
}
|
}
|
||||||
STAT_MODE: number;
|
STAT_MODE: number;
|
||||||
MAX_STAT_PERIOD: number;
|
MAX_STAT_PERIOD: number;
|
||||||
@@ -140,7 +150,7 @@ declare global {
|
|||||||
NEW_SIGN_TIME: number;
|
NEW_SIGN_TIME: number;
|
||||||
TEST_TRANSACTION_GENERATE: number;
|
TEST_TRANSACTION_GENERATE: number;
|
||||||
TEST_NETWORK: boolean | number;
|
TEST_NETWORK: boolean | number;
|
||||||
START_PORT_NUMBER: number;
|
START_PORT_NUMBER: number | string;
|
||||||
GetNetworkName: Function;
|
GetNetworkName: Function;
|
||||||
DEF_VERSION: string;
|
DEF_VERSION: string;
|
||||||
DEF_CLIENT: string;
|
DEF_CLIENT: string;
|
||||||
@@ -161,10 +171,6 @@ declare global {
|
|||||||
NWMODE: number;
|
NWMODE: number;
|
||||||
NOALIVE: number;
|
NOALIVE: number;
|
||||||
DEV_MODE: number;
|
DEV_MODE: number;
|
||||||
START_SERVER: number;
|
|
||||||
SetCalcPOW: Function;
|
|
||||||
RunStopPOWProcess: Function;
|
|
||||||
NEW_SERVER_PRIVATE_KEY: number;
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region startlib.ts
|
//#region startlib.ts
|
||||||
@@ -180,8 +186,8 @@ declare global {
|
|||||||
ToLogClient: Function;
|
ToLogClient: Function;
|
||||||
|
|
||||||
glCurNumFindArr: number;
|
glCurNumFindArr: number;
|
||||||
ArrReconnect: [];
|
ArrReconnect: any[];
|
||||||
ArrConnect: [];
|
ArrConnect: any[];
|
||||||
|
|
||||||
//#region main-process.ts:51
|
//#region main-process.ts:51
|
||||||
SERVER: any;
|
SERVER: any;
|
||||||
@@ -192,7 +198,7 @@ declare global {
|
|||||||
|
|
||||||
//#region main-process.ts:100
|
//#region main-process.ts:100
|
||||||
GetCurrentTime: Function;
|
GetCurrentTime: Function;
|
||||||
//#region main-process.ts:100
|
//#endregion
|
||||||
|
|
||||||
//#region
|
//#region
|
||||||
SpeedSignLib: number;
|
SpeedSignLib: number;
|
||||||
@@ -269,7 +275,8 @@ declare global {
|
|||||||
|
|
||||||
//#region run-nw.ts
|
//#region run-nw.ts
|
||||||
NWVERSION: string;
|
NWVERSION: string;
|
||||||
HTTP_SERVER_START_OK: boolean;
|
HTTP_SERVER_START_OK: boolean | number;
|
||||||
|
NO_HISTORY_MODE: boolean;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region crypto-library.ts
|
//#region crypto-library.ts
|
||||||
@@ -367,15 +374,28 @@ declare global {
|
|||||||
|
|
||||||
//#region base.ts
|
//#region base.ts
|
||||||
glStopNode: any;
|
glStopNode: any;
|
||||||
|
GetCheckAccHash: Function;
|
||||||
|
ReadHashFromBufDB: Function;
|
||||||
|
STreeBuffer: any;
|
||||||
|
TestCreateTr: Function;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region html-server.ts
|
//#region html-server.ts
|
||||||
HTTPCaller: any;
|
HTTPCaller: any;
|
||||||
DappTemplateFile: Function;
|
DappTemplateFile: Function;
|
||||||
DappSmartCodeFile: Function;
|
DappSmartCodeFile: Function;
|
||||||
DappClientCodeFile
|
DappClientCodeFile: Function;
|
||||||
SendBlockFile
|
SendBlockFile: Function;
|
||||||
|
SetCheckPointOnBlock: Function;
|
||||||
|
SendHTMLMap: any;
|
||||||
|
SendWebFile: Function;
|
||||||
|
GetFileHTMLWithParsing: Function;
|
||||||
|
GetFileHTMLFromMarkdown: Function;
|
||||||
|
GetFileSimple: Function;
|
||||||
|
SaveFileSimple: Function; SetSafeResponce: Function;
|
||||||
|
GetUserContext: Function;
|
||||||
|
EventNum: number;
|
||||||
|
EventMap: any;
|
||||||
AddDappEventToGlobalMap: Function;
|
AddDappEventToGlobalMap: Function;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@@ -397,10 +417,13 @@ declare global {
|
|||||||
|
|
||||||
//#region block-db.ts
|
//#region block-db.ts
|
||||||
BlockDB: any;
|
BlockDB: any;
|
||||||
BLOCK_HEADER_SIZE
|
BLOCK_HEADER_SIZE: number;
|
||||||
BLOCK_HEADER_SIZE2
|
BLOCK_HEADER_SIZE2: number;
|
||||||
DB_VERSION
|
DB_VERSION: number;
|
||||||
|
AddInfoChain: Function;
|
||||||
|
AddInfoBlock: Function;
|
||||||
|
GetNodeStrPort: Function;
|
||||||
|
NO_CHECK_BLOCKNUM_ONSTART: number;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region db.ts
|
//#region db.ts
|
||||||
@@ -436,6 +459,7 @@ declare global {
|
|||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region transaction-validator.ts
|
//#region transaction-validator.ts
|
||||||
|
CurTrItem: any;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region connect.ts
|
//#region connect.ts
|
||||||
@@ -448,10 +472,28 @@ declare global {
|
|||||||
MIN_PERIOD_PING: number;
|
MIN_PERIOD_PING: number;
|
||||||
MAX_PING_FOR_CONNECT: number;
|
MAX_PING_FOR_CONNECT: number;
|
||||||
MAX_WAIT_PERIOD_FOR_HOT: number;
|
MAX_WAIT_PERIOD_FOR_HOT: number;
|
||||||
|
GetGrayServerConnections: Function;
|
||||||
|
SortNodeBlockProcessCount: Function;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region code.ts
|
//#region code.ts
|
||||||
|
RestartNode: Function;
|
||||||
|
UnpackCodeFile: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region node.ts
|
||||||
|
SocketStatistic: Function;
|
||||||
|
GetSocketStatus: Function;
|
||||||
|
SetSocketStatus: Function;
|
||||||
|
NodeInfo: Function;
|
||||||
|
NodeName: Function;
|
||||||
|
SocketInfo: Function;
|
||||||
|
FindNodeByAddr: Function;
|
||||||
|
AddNodeInfo: Function;
|
||||||
|
socketInit: Function;
|
||||||
|
socketRead: Function;
|
||||||
|
socketWrite: Function;
|
||||||
|
CloseSocket: Function;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#region terahashlib.js
|
//#region terahashlib.js
|
||||||
@@ -486,12 +528,125 @@ declare global {
|
|||||||
shaarrblock2: Function;
|
shaarrblock2: Function;
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
SendWebFile: Function;
|
//#region wallet-node.js
|
||||||
|
CleanChain: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region lexer.js
|
||||||
|
LexerJS: any;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region coinlib.js
|
||||||
|
ADD: Function;
|
||||||
|
SUB: Function;
|
||||||
|
DIV: Function;
|
||||||
|
ISZERO: Function;
|
||||||
|
FLOAT_FROM_COIN: Function;
|
||||||
|
COIN_FROM_FLOAT: Function;
|
||||||
|
COIN_FROM_STRING: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region block-exchange.ts
|
||||||
|
CAN_START: boolean;
|
||||||
|
StrWarn: string;
|
||||||
|
SUM_LIST_LENGTH: number;
|
||||||
|
CONSENSUS_TIK_TIME: number;
|
||||||
|
CONSENSUS_CHECK_TIME: number;
|
||||||
|
PERIOD_FOR_NEXT_SEND: number;
|
||||||
|
BLOCK_DELTA_ACTIVATE: number;
|
||||||
|
TIME_END_EXCHANGE: number;
|
||||||
|
TIME_START_POW: number;
|
||||||
|
TIME_START_SAVE: number;
|
||||||
|
TIME_START_LOAD: number;
|
||||||
|
TreeBlockBuf: any;
|
||||||
|
DoTxLog: boolean;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region block-loader.ts
|
||||||
|
HistoryBlockBuf: any
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region block-loader-const.ts
|
||||||
|
PERIOD_GET_BLOCK: number;
|
||||||
|
COUNT_HISTORY_BLOCKS_FOR_LOAD: number;
|
||||||
|
COUNT_BLOCKS_FOR_CHECK_POW: number;
|
||||||
|
MAX_DELTA_COUNT_SUM_FOR_LOAD: number;
|
||||||
|
MAX_COUNT_CHAIN_LOAD: number;
|
||||||
|
PACKET_ALIVE_PERIOD: number;
|
||||||
|
PACKET_ALIVE_PERIOD_NEXT_NODE: number;
|
||||||
|
MAX_BLOCK_SEND: number;
|
||||||
|
COUNT_TASK_FOR_NODE: number;
|
||||||
|
FORMAT_BLOCK_TRANSFER: string;
|
||||||
|
WRK_BLOCK_TRANSFER: any;
|
||||||
|
MAX_ACCOUNTS_TRANSFER: number;
|
||||||
|
MAX_SMARTS_TRANSFER: number;
|
||||||
|
FORMAT_REST_TRANSFER: string;
|
||||||
|
FORMAT_SMART_TRANSFER: string;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region server.ts
|
||||||
|
BUF_TYPE: number;
|
||||||
|
STR_TYPE: number;
|
||||||
|
MAX_STR_BUF_DATA: number;
|
||||||
|
MAX_CONNECTION_ACTIVE: number;
|
||||||
|
STAT_PERIOD: number;
|
||||||
|
FORMAT_POW_TO_CLIENT: string;
|
||||||
|
FORMAT_POW_TO_SERVER: string;
|
||||||
|
INTERNET_IP_FROM_STUN: string;
|
||||||
|
ContextPackets: any;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region terahashmining.ts
|
||||||
|
CreateHashMinimal: Function;
|
||||||
|
CreatePOWVersionX: Function;
|
||||||
|
GetNonceHashArr: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region pow-process.ts
|
||||||
|
BlockPump: any;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region tx-process.ts
|
||||||
|
SetStatMode: Function;
|
||||||
|
TreeFindTX
|
||||||
|
bShowDetail: number;
|
||||||
|
ClearDataBase: Function;
|
||||||
|
RewriteAllTransactions: Function;
|
||||||
|
ReWriteDAppTransactions: Function;
|
||||||
|
TXPrepareLoadRest: Function;
|
||||||
|
TXWriteAccArr: Function;
|
||||||
|
TXWriteSmartArr: Function;
|
||||||
|
TXWriteAccHash: Function;
|
||||||
|
EvalCode: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region messager.ts
|
||||||
|
MESSAGER: any;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region update.ts
|
||||||
|
RunOnUpdate: Function;
|
||||||
|
CheckRewriteTr: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region transfer-msg.ts
|
||||||
|
TrName: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
//#region rest_tables.ts
|
||||||
|
DoRest: Function;
|
||||||
|
GetRestArr: Function;
|
||||||
|
GetCurrentRestArr: Function;
|
||||||
|
GetCurrentRestNum: Function;
|
||||||
|
//#endregion
|
||||||
|
|
||||||
|
nw: any;
|
||||||
GlobalRunMap: any;
|
GlobalRunMap: any;
|
||||||
sha3: any;
|
sha3: any;
|
||||||
SHA3BUF: any;
|
SHA3BUF: any;
|
||||||
shaarr: any;
|
shaarr: any;
|
||||||
|
ELECTRON: any;
|
||||||
|
TestTestWaletMode: any;
|
||||||
}
|
}
|
||||||
interface Process {
|
interface Process {
|
||||||
RunRPC: Function;
|
RunRPC: Function;
|
||||||
@@ -507,6 +662,7 @@ declare global {
|
|||||||
Path: string;
|
Path: string;
|
||||||
OnMessage: Function;
|
OnMessage: Function;
|
||||||
PeriodAlive: number;
|
PeriodAlive: number;
|
||||||
|
RunRPC?: Function;
|
||||||
}
|
}
|
||||||
interface Worker {
|
interface Worker {
|
||||||
connected: boolean;
|
connected: boolean;
|
||||||
@@ -542,7 +698,12 @@ declare global {
|
|||||||
DappTransactionList?: Function;
|
DappTransactionList?: Function;
|
||||||
DappStaticCall?: Function;
|
DappStaticCall?: Function;
|
||||||
GetHistoryTransactions?: Function;
|
GetHistoryTransactions?: Function;
|
||||||
|
GetSupply?: Function;
|
||||||
GetTotalSupply?: Function;
|
GetTotalSupply?: Function;
|
||||||
}
|
}
|
||||||
|
interface Buffer {
|
||||||
|
Read,
|
||||||
|
Write,
|
||||||
|
len
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ WebApi2.CreateAccount = function(Params, response) {
|
|||||||
Body = Body.slice(0, Body.len + 12);
|
Body = Body.slice(0, Body.len + 12);
|
||||||
SendTransaction(Body, TR as any, Params.Wait, function(result, text) {
|
SendTransaction(Body, TR as any, Params.Wait, function(result, text) {
|
||||||
var Result = {
|
var Result = {
|
||||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||||
Meta: Params.Meta,
|
Meta: Params.Meta,
|
||||||
};
|
};
|
||||||
var Str = JSON.stringify(Result);
|
var Str = JSON.stringify(Result);
|
||||||
@@ -42,10 +42,10 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
|||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
var Coin;
|
var Coin;
|
||||||
if (typeof Params.Amount === "number")
|
if (typeof Params.Amount === "number")
|
||||||
Coin = COIN_FROM_FLOAT(Params.Amount);
|
Coin = global.COIN_FROM_FLOAT(Params.Amount);
|
||||||
else
|
else
|
||||||
Coin = Params.Amount;
|
Coin = Params.Amount;
|
||||||
var FromNum = ParseNum(Params.FromID);
|
var FromNum = global.ParseNum(Params.FromID);
|
||||||
if (!Coin)
|
if (!Coin)
|
||||||
return { result: 0, Meta: Params.Meta, text: "Params.Amount required" };
|
return { result: 0, Meta: Params.Meta, text: "Params.Amount required" };
|
||||||
if (!FromNum)
|
if (!FromNum)
|
||||||
@@ -57,7 +57,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
|||||||
if (typeof Params.ToID === "string" && Params.ToID.length === 66)
|
if (typeof Params.ToID === "string" && Params.ToID.length === 66)
|
||||||
ToPubKeyArr = global.GetArrFromHex(Params.ToID);
|
ToPubKeyArr = global.GetArrFromHex(Params.ToID);
|
||||||
else
|
else
|
||||||
ToID = ParseNum(Params.ToID);
|
ToID = global.ParseNum(Params.ToID);
|
||||||
var DataFrom = global.DApps.Accounts.ReadState(FromNum);
|
var DataFrom = global.DApps.Accounts.ReadState(FromNum);
|
||||||
if (!DataFrom)
|
if (!DataFrom)
|
||||||
return { result: 0, Meta: Params.Meta, text: "Error read account: " + FromNum };
|
return { result: 0, Meta: Params.Meta, text: "Error read account: " + FromNum };
|
||||||
@@ -68,14 +68,14 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
OperationID = MapSendID[FromNum].OperationID;
|
OperationID = MapSendID[FromNum].OperationID;
|
||||||
if ((new Date() - MapSendID[FromNum].Date) > 8 * 1000) {
|
if (((new Date() as any) - MapSendID[FromNum].Date) > 8 * 1000) {
|
||||||
OperationID += 20;
|
OperationID += 20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OperationID++;
|
OperationID++;
|
||||||
MapSendID[FromNum].OperationID = OperationID;
|
MapSendID[FromNum].OperationID = OperationID;
|
||||||
MapSendID[FromNum].Date = Date.now();
|
MapSendID[FromNum].Date = Date.now();
|
||||||
var TR = {
|
var TR: any = {
|
||||||
Type: 111, Version: 3, Reserve: 0, FromID: FromNum, OperationID: OperationID, To: [{
|
Type: 111, Version: 3, Reserve: 0, FromID: FromNum, OperationID: OperationID, To: [{
|
||||||
PubKey: ToPubKeyArr, ID: ToID, SumCOIN: Coin.SumCOIN,
|
PubKey: ToPubKeyArr, ID: ToID, SumCOIN: Coin.SumCOIN,
|
||||||
SumCENT: Coin.SumCENT
|
SumCENT: Coin.SumCENT
|
||||||
@@ -86,11 +86,11 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
|||||||
if (!Params.FromPrivKey)
|
if (!Params.FromPrivKey)
|
||||||
return { result: 0, Meta: Params.Meta, text: "Params.FromPrivKey required" };
|
return { result: 0, Meta: Params.Meta, text: "Params.FromPrivKey required" };
|
||||||
TR.Sign = global.DApps.Accounts.GetSignTransferTx(TR, global.GetArrFromHex(Params.FromPrivKey));
|
TR.Sign = global.DApps.Accounts.GetSignTransferTx(TR, global.GetArrFromHex(Params.FromPrivKey));
|
||||||
var Body = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
|
var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER3, global.MAX_TRANSACTION_SIZE, {}, 1);
|
||||||
Body = Body.slice(0, Body.len + 12);
|
Body = Body.slice(0, Body.len + 12);
|
||||||
SendTransaction(Body, TR, Params.Wait, function(result, text) {
|
SendTransaction(Body, TR, Params.Wait, function(result, text) {
|
||||||
var Result = {
|
var Result = {
|
||||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||||
Meta: Params.Meta,
|
Meta: Params.Meta,
|
||||||
};
|
};
|
||||||
var Str = JSON.stringify(Result);
|
var Str = JSON.stringify(Result);
|
||||||
@@ -100,7 +100,7 @@ WebApi2.Send = function(Params, response, A, bJsonRet) {
|
|||||||
};
|
};
|
||||||
WebApi2.GetBalance = function(Params, response) {
|
WebApi2.GetBalance = function(Params, response) {
|
||||||
if (typeof Params === "object") {
|
if (typeof Params === "object") {
|
||||||
var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.AccountID), 1);
|
var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.AccountID), 1);
|
||||||
if (arr.length) {
|
if (arr.length) {
|
||||||
var Account = arr[0];
|
var Account = arr[0];
|
||||||
var Value = Account.Value;
|
var Value = Account.Value;
|
||||||
@@ -116,7 +116,7 @@ WebApi2.GetBalance = function(Params, response) {
|
|||||||
WebApi2.GetTransaction = function(Params) {
|
WebApi2.GetTransaction = function(Params) {
|
||||||
if (typeof Params === "object" && Params.TxID) {
|
if (typeof Params === "object" && Params.TxID) {
|
||||||
var Arr = global.GetArrFromHex(Params.TxID);
|
var Arr = global.GetArrFromHex(Params.TxID);
|
||||||
var BlockNum = ReadUintFromArr(Arr, TR_TICKET_HASH_LENGTH);
|
var BlockNum = global.ReadUintFromArr(Arr, global.TR_TICKET_HASH_LENGTH);
|
||||||
var Block = global.SERVER.ReadBlockDB(BlockNum);
|
var Block = global.SERVER.ReadBlockDB(BlockNum);
|
||||||
if (Block && Block.arrContent) {
|
if (Block && Block.arrContent) {
|
||||||
for (var i = 0; i < Block.arrContent.length; i++) {
|
for (var i = 0; i < Block.arrContent.length; i++) {
|
||||||
@@ -209,11 +209,11 @@ WebApi2.SendRawTransaction = function(Params, response) {
|
|||||||
return { result: 0, Meta: Params.Meta, text: "Params.Tx.Sign required" };
|
return { result: 0, Meta: Params.Meta, text: "Params.Tx.Sign required" };
|
||||||
var TR = Params.Tx;
|
var TR = Params.Tx;
|
||||||
TxHexToArr(TR);
|
TxHexToArr(TR);
|
||||||
var Body = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER3, MAX_TRANSACTION_SIZE, {}, 1);
|
var Body = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER3, global.MAX_TRANSACTION_SIZE, {}, 1);
|
||||||
Body = Body.slice(0, Body.len + 12);
|
Body = Body.slice(0, Body.len + 12);
|
||||||
SendTransaction(Body, TR, Params.Wait, function(result, text) {
|
SendTransaction(Body, TR, Params.Wait, function(result, text) {
|
||||||
var Result = {
|
var Result = {
|
||||||
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
result: result, text: text, TxID: global.GetHexFromArr(TR._TxID.slice(0, global.TR_TICKET_HASH_LENGTH + 6)), BlockNum: TR._BlockNum,
|
||||||
Meta: Params.Meta,
|
Meta: Params.Meta,
|
||||||
};
|
};
|
||||||
var Str = JSON.stringify(Result);
|
var Str = JSON.stringify(Result);
|
||||||
@@ -252,9 +252,9 @@ function TxHexToArr(TR) {
|
|||||||
var DELTA_FOR_TIME_TX = 1;
|
var DELTA_FOR_TIME_TX = 1;
|
||||||
|
|
||||||
function GetTxID(BlockNum, Body) {
|
function GetTxID(BlockNum, Body) {
|
||||||
var Nonce = ReadUintFromArr(Body, Body.length - 6);
|
var Nonce = global.ReadUintFromArr(Body, Body.length - 6);
|
||||||
var Arr2 = CreateTxID(Body, BlockNum, Nonce);
|
var Arr2 = CreateTxID(Body, BlockNum, Nonce);
|
||||||
return Arr2.slice(0, TR_TICKET_HASH_LENGTH + 6);
|
return Arr2.slice(0, global.TR_TICKET_HASH_LENGTH + 6);
|
||||||
};
|
};
|
||||||
|
|
||||||
function CreateTxID(body, BlockNum, Nonce) {
|
function CreateTxID(body, BlockNum, Nonce) {
|
||||||
@@ -262,14 +262,14 @@ function CreateTxID(body, BlockNum, Nonce) {
|
|||||||
body.writeUIntLE(Nonce, body.length - 6, 6);
|
body.writeUIntLE(Nonce, body.length - 6, 6);
|
||||||
var HASH = global.sha3(body);
|
var HASH = global.sha3(body);
|
||||||
var FullHashTicket = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
var FullHashTicket = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||||
for (var i = 0; i < TR_TICKET_HASH_LENGTH; i++)
|
for (var i = 0; i < global.TR_TICKET_HASH_LENGTH; i++)
|
||||||
FullHashTicket[i] = HASH[i];
|
FullHashTicket[i] = HASH[i];
|
||||||
WriteUintToArrOnPos(FullHashTicket, BlockNum, TR_TICKET_HASH_LENGTH);
|
global.WriteUintToArrOnPos(FullHashTicket, BlockNum, global.TR_TICKET_HASH_LENGTH);
|
||||||
return FullHashTicket;
|
return FullHashTicket;
|
||||||
};
|
};
|
||||||
|
|
||||||
function GetBlockNumTr(arr) {
|
function GetBlockNumTr(arr) {
|
||||||
var BlockNum = DELTA_FOR_TIME_TX + GetCurrentBlockNumByTime();
|
var BlockNum = DELTA_FOR_TIME_TX + global.GetCurrentBlockNumByTime();
|
||||||
if (arr[0] === global.TYPE_TRANSACTION_CREATE) {
|
if (arr[0] === global.TYPE_TRANSACTION_CREATE) {
|
||||||
var BlockNum2 = Math.floor(BlockNum / 10) * 10;
|
var BlockNum2 = Math.floor(BlockNum / 10) * 10;
|
||||||
if (BlockNum2 < BlockNum)
|
if (BlockNum2 < BlockNum)
|
||||||
@@ -282,12 +282,12 @@ function GetBlockNumTr(arr) {
|
|||||||
function CreateHashBodyPOWInnerMinPower(TR, arr, MinPow, startnonce) {
|
function CreateHashBodyPOWInnerMinPower(TR, arr, MinPow, startnonce) {
|
||||||
var BlockNum = GetBlockNumTr(arr);
|
var BlockNum = GetBlockNumTr(arr);
|
||||||
if (MinPow === undefined) {
|
if (MinPow === undefined) {
|
||||||
MinPow = MIN_POWER_POW_TR + Math.log2(arr.length / 128);
|
MinPow = global.MIN_POWER_POW_TR + Math.log2(arr.length / 128);
|
||||||
}
|
}
|
||||||
var nonce = startnonce;
|
var nonce = startnonce;
|
||||||
while (1) {
|
while (1) {
|
||||||
var TxID = CreateTxID(arr, BlockNum, nonce);
|
var TxID = CreateTxID(arr, BlockNum, nonce);
|
||||||
var power = GetPowPower(sha3(TxID));
|
var power = global.GetPowPower(global.sha3(TxID));
|
||||||
if (power >= MinPow) {
|
if (power >= MinPow) {
|
||||||
TR._TxID = TxID;
|
TR._TxID = TxID;
|
||||||
TR._BlockNum = BlockNum;
|
TR._BlockNum = BlockNum;
|
||||||
@@ -349,7 +349,7 @@ function SendTransaction(Body, TR, Wait, F) {
|
|||||||
function GetTransactionFromBody(Params, Block, TrNum, Body) {
|
function GetTransactionFromBody(Params, Block, TrNum, Body) {
|
||||||
var TR = global.DApps.Accounts.GetObjectTransaction(Body);
|
var TR = global.DApps.Accounts.GetObjectTransaction(Body);
|
||||||
if (TR) {
|
if (TR) {
|
||||||
ConvertBufferToStr(TR);
|
global.ConvertBufferToStr(TR);
|
||||||
TR.result = 1;
|
TR.result = 1;
|
||||||
TR.Meta = Params.Meta;
|
TR.Meta = Params.Meta;
|
||||||
if (Block.VersionBody === 1 && Block.arrContentResult) {
|
if (Block.VersionBody === 1 && Block.arrContentResult) {
|
||||||
|
|||||||
@@ -14,16 +14,9 @@ const fs = require('fs');
|
|||||||
const os = require('os');
|
const os = require('os');
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
|
|
||||||
let {
|
|
||||||
GetNormalPathString,
|
|
||||||
sha3,
|
|
||||||
AddTrMap,
|
|
||||||
ADD_HASH_RATE
|
|
||||||
} = global
|
|
||||||
|
|
||||||
global.START_SERVER = 1;
|
global.START_SERVER = 1;
|
||||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
|
||||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
|
||||||
console.log("DATA DIR: " + global.DATA_PATH);
|
console.log("DATA DIR: " + global.DATA_PATH);
|
||||||
console.log("PROGRAM DIR: " + global.CODE_PATH);
|
console.log("PROGRAM DIR: " + global.CODE_PATH);
|
||||||
require("../core/library");
|
require("../core/library");
|
||||||
@@ -31,7 +24,7 @@ global.ToLog(os.platform() + " (" + os.arch() + ") " + os.release());
|
|||||||
var VerArr = process.versions.node.split('.');
|
var VerArr = process.versions.node.split('.');
|
||||||
global.ToLog("nodejs: " + process.versions.node);
|
global.ToLog("nodejs: " + process.versions.node);
|
||||||
if ((VerArr[0] as any as number) < 8) {
|
if ((VerArr[0] as any as number) < 8) {
|
||||||
global.global.ToError("Error version of NodeJS=" + VerArr[0] + " Pls, download new version from www.nodejs.org and update it. The minimum version must be 8");
|
global.ToError("Error version of NodeJS=" + VerArr[0] + " Pls, download new version from www.nodejs.org and update it. The minimum version must be 8");
|
||||||
process.exit();
|
process.exit();
|
||||||
}
|
}
|
||||||
var CServer = require("../core/server");
|
var CServer = require("../core/server");
|
||||||
@@ -62,7 +55,7 @@ process.on('uncaughtException' as any, function(err: TeraError) {
|
|||||||
if (global.PROCESS_NAME !== "MAIN") {
|
if (global.PROCESS_NAME !== "MAIN") {
|
||||||
process.send({ cmd: "log", message: err });
|
process.send({ cmd: "log", message: err });
|
||||||
}
|
}
|
||||||
global.global.ToError(err.stack);
|
global.ToError(err.stack);
|
||||||
global.ToLog(err.stack);
|
global.ToLog(err.stack);
|
||||||
if (err.code === "ENOTFOUND" || err.code === "ECONNRESET" || err.code === "EPIPE") {
|
if (err.code === "ENOTFOUND" || err.code === "ECONNRESET" || err.code === "EPIPE") {
|
||||||
}
|
}
|
||||||
@@ -73,7 +66,7 @@ process.on('uncaughtException' as any, function(err: TeraError) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
process.on('error' as any, function(err: TeraError) {
|
process.on('error' as any, function(err: TeraError) {
|
||||||
global.global.ToError(err.stack);
|
global.ToError(err.stack);
|
||||||
global.ToLog(err.stack);
|
global.ToLog(err.stack);
|
||||||
});
|
});
|
||||||
var ArrChildProcess = [];
|
var ArrChildProcess = [];
|
||||||
@@ -134,15 +127,15 @@ function OnMessageWeb(msg) {
|
|||||||
function AddTransactionFromWeb(Params) {
|
function AddTransactionFromWeb(Params) {
|
||||||
var body = global.GetArrFromHex(Params.HexValue);
|
var body = global.GetArrFromHex(Params.HexValue);
|
||||||
if (global.TX_PROCESS && global.TX_PROCESS.Worker) {
|
if (global.TX_PROCESS && global.TX_PROCESS.Worker) {
|
||||||
var StrHex = global.GetHexFromArr(sha3(body));
|
var StrHex = global.GetHexFromArr(global.sha3(body));
|
||||||
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex, Web: 1, WebID: Params.WebID });
|
global.TX_PROCESS.Worker.send({ cmd: "FindTX", TX: StrHex, Web: 1, WebID: Params.WebID });
|
||||||
}
|
}
|
||||||
var Res = global.SERVER.AddTransaction({ body: body }, 1);
|
var Res = global.SERVER.AddTransaction({ body: body }, 1);
|
||||||
var text = AddTrMap[Res];
|
var text = global.AddTrMap[Res];
|
||||||
var final = false;
|
var final = false;
|
||||||
if (Res <= 0 && Res !== - 3)
|
if (Res <= 0 && Res !== - 3)
|
||||||
final = true;
|
final = true;
|
||||||
global.ToLogClient("Send: " + text, global.GetHexFromArr(sha3(body)), final);
|
global.ToLogClient("Send: " + text, global.GetHexFromArr(global.sha3(body)), final);
|
||||||
return text;
|
return text;
|
||||||
};
|
};
|
||||||
global.AddTransactionFromWeb = AddTransactionFromWeb;
|
global.AddTransactionFromWeb = AddTransactionFromWeb;
|
||||||
@@ -311,7 +304,7 @@ function StartChildProcess(Item) {
|
|||||||
ITEM.Worker.on('error', function(err) {
|
ITEM.Worker.on('error', function(err) {
|
||||||
});
|
});
|
||||||
ITEM.Worker.on('close', function(code) {
|
ITEM.Worker.on('close', function(code) {
|
||||||
global.global.ToError("CLOSE " + ITEM.Name);
|
global.ToError("CLOSE " + ITEM.Name);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,7 +447,7 @@ function RunStopPOWProcess(Mode) {
|
|||||||
return;
|
return;
|
||||||
if (GENERATE_BLOCK_ACCOUNT < 8)
|
if (GENERATE_BLOCK_ACCOUNT < 8)
|
||||||
return;
|
return;
|
||||||
var PathMiner = GetCodePath("../miner.js");
|
var PathMiner = global.GetCodePath("../miner.js");
|
||||||
if (!fs.existsSync(PathMiner))
|
if (!fs.existsSync(PathMiner))
|
||||||
PathMiner = "./process/pow-process.js";
|
PathMiner = "./process/pow-process.js";
|
||||||
if (ArrMiningWrk.length >= GetCountMiningCPU())
|
if (ArrMiningWrk.length >= GetCountMiningCPU())
|
||||||
@@ -494,13 +487,13 @@ function RunStopPOWProcess(Mode) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (msg.cmd === "HASHRATE") {
|
if (msg.cmd === "HASHRATE") {
|
||||||
ADD_HASH_RATE(msg.CountNonce);
|
global.ADD_HASH_RATE(msg.CountNonce);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Worker.on('error', function(err) {
|
Worker.on('error', function(err) {
|
||||||
if (!ArrMiningWrk.length)
|
if (!ArrMiningWrk.length)
|
||||||
return;
|
return;
|
||||||
global.global.ToError('ERROR IN PROCESS: ' + err);
|
global.ToError('ERROR IN PROCESS: ' + err);
|
||||||
});
|
});
|
||||||
Worker.on('close', function(code) {
|
Worker.on('close', function(code) {
|
||||||
global.ToLog("STOP PROCESS: " + Worker.Num + " pid:" + Worker.pid);
|
global.ToLog("STOP PROCESS: " + Worker.Num + " pid:" + Worker.pid);
|
||||||
@@ -533,9 +526,7 @@ function SetCalcPOW(Block, cmd) {
|
|||||||
};
|
};
|
||||||
global.SetCalcPOW = SetCalcPOW;
|
global.SetCalcPOW = SetCalcPOW;
|
||||||
global.RunStopPOWProcess = RunStopPOWProcess;
|
global.RunStopPOWProcess = RunStopPOWProcess;
|
||||||
let {
|
|
||||||
glCurNumFindArr
|
|
||||||
} = global
|
|
||||||
function DoGetNodes() {
|
function DoGetNodes() {
|
||||||
if (!SERVER)
|
if (!SERVER)
|
||||||
return;
|
return;
|
||||||
@@ -543,11 +534,11 @@ function DoGetNodes() {
|
|||||||
return;
|
return;
|
||||||
if (!SERVER.NodesArrUnSort || !SERVER.NodesArrUnSort.length)
|
if (!SERVER.NodesArrUnSort || !SERVER.NodesArrUnSort.length)
|
||||||
return;
|
return;
|
||||||
var Num = glCurNumFindArr % global.SERVER.NodesArrUnSort.length;
|
var Num = global.glCurNumFindArr % global.SERVER.NodesArrUnSort.length;
|
||||||
var Node = global.SERVER.NodesArrUnSort[Num];
|
var Node = global.SERVER.NodesArrUnSort[Num];
|
||||||
if (Num === 0)
|
if (Num === 0)
|
||||||
glCurNumFindArr = 0;
|
global.glCurNumFindArr = 0;
|
||||||
glCurNumFindArr++;
|
global.glCurNumFindArr++;
|
||||||
if (Node.Delete)
|
if (Node.Delete)
|
||||||
return;
|
return;
|
||||||
if (SERVER.NodeInBan(Node))
|
if (SERVER.NodeInBan(Node))
|
||||||
@@ -565,7 +556,7 @@ function DoConnectToNodes(Arr, Mode) {
|
|||||||
if (!GrayConnect() && global.SERVER.CanSend < 2) {
|
if (!GrayConnect() && global.SERVER.CanSend < 2) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GrayConnect() && global.SERVER.ActualNodes.size > GetGrayServerConnections())
|
if (GrayConnect() && global.SERVER.ActualNodes.size > global.GetGrayServerConnections())
|
||||||
return;
|
return;
|
||||||
if (Arr.length) {
|
if (Arr.length) {
|
||||||
var MinProcessCount = global.SERVER.BusyLevel - 1;
|
var MinProcessCount = global.SERVER.BusyLevel - 1;
|
||||||
@@ -592,16 +583,14 @@ var idRunOnce;
|
|||||||
function RunServer() {
|
function RunServer() {
|
||||||
let {
|
let {
|
||||||
GetNetworkName,
|
GetNetworkName,
|
||||||
DEF_VERSION,
|
|
||||||
NET_WORK_MODE,
|
NET_WORK_MODE,
|
||||||
SAVE_CONST,
|
SAVE_CONST,
|
||||||
ToLog,
|
|
||||||
START_IP,
|
START_IP,
|
||||||
START_PORT_NUMBER
|
START_PORT_NUMBER
|
||||||
} = global
|
} = global
|
||||||
idRunOnce = setInterval(RunOnce, 1000);
|
idRunOnce = setInterval(RunOnce, 1000);
|
||||||
global.ToLog("NETWORK: " + GetNetworkName());
|
global.ToLog("NETWORK: " + GetNetworkName());
|
||||||
global.ToLog("VERSION: " + DEF_VERSION);
|
global.ToLog("VERSION: " + global.DEF_VERSION);
|
||||||
if (global.NET_WORK_MODE) {
|
if (global.NET_WORK_MODE) {
|
||||||
global.START_IP = NET_WORK_MODE.ip;
|
global.START_IP = NET_WORK_MODE.ip;
|
||||||
global.START_PORT_NUMBER = NET_WORK_MODE.port;
|
global.START_PORT_NUMBER = NET_WORK_MODE.port;
|
||||||
@@ -666,7 +655,7 @@ function RunOnce() {
|
|||||||
var Period = (global.random(600) + global.RESTART_PERIOD_SEC);
|
var Period = (global.random(600) + global.RESTART_PERIOD_SEC);
|
||||||
global.ToLog("SET RESTART NODE AFTER: " + Period + " sec");
|
global.ToLog("SET RESTART NODE AFTER: " + Period + " sec");
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
RestartNode();
|
global.RestartNode();
|
||||||
}, Period * 1000);
|
}, Period * 1000);
|
||||||
}
|
}
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
@@ -713,7 +702,7 @@ function TestSignLib(MaxTime) {
|
|||||||
for (var Num = 0; Num < 1000; Num++) {
|
for (var Num = 0; Num < 1000; Num++) {
|
||||||
var Result = global.secp256k1.verify(hash, Sign, PubKey);
|
var Result = global.secp256k1.verify(hash, Sign, PubKey);
|
||||||
if (!Result) {
|
if (!Result) {
|
||||||
global.global.ToError("Error test sign");
|
global.ToError("Error test sign");
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
var Time = process.hrtime(startTime);
|
var Time = process.hrtime(startTime);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function CalcPOWHash() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
global.global.ToError(e);
|
global.ToError(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -52,7 +52,7 @@ PROCESS.on("message", function(e) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
global.global.ToError(e);
|
global.ToError(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -80,12 +80,12 @@ function PumpHash() {
|
|||||||
if (global.BlockPump) {
|
if (global.BlockPump) {
|
||||||
var e = Date.now();
|
var e = Date.now();
|
||||||
if (EndTime < StartTime) {
|
if (EndTime < StartTime) {
|
||||||
if (100 * (e - StartTime) / CONSENSUS_PERIOD_TIME >= BlockPump.Percent)
|
if (100 * (e - StartTime) / global.CONSENSUS_PERIOD_TIME >= global.BlockPump.Percent)
|
||||||
return void (EndTime = e);
|
return void (EndTime = e);
|
||||||
CreatePOWVersionX(BlockPump, 1);
|
global.CreatePOWVersionX(global.BlockPump, 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
100 * (e - EndTime) / CONSENSUS_PERIOD_TIME > 100 - BlockPump.Percent && (StartTime = e);
|
100 * (e - EndTime) / global.CONSENSUS_PERIOD_TIME > 100 - global.BlockPump.Percent && (StartTime = e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,15 +10,15 @@
|
|||||||
|
|
||||||
global.PROCESS_NAME = "STATIC";
|
global.PROCESS_NAME = "STATIC";
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
const fs = require('fs');
|
import * as fs from 'fs'
|
||||||
require("../core/constant");
|
import "../core/constant"
|
||||||
require('../core/block-loader-const');
|
import '../core/block-loader-const'
|
||||||
require('../core/rest_tables.js');
|
import '../core/rest_tables'
|
||||||
require('../system/accounts.js');
|
import '../system/accounts'
|
||||||
require('../system/smart.js');
|
import '../system/smart'
|
||||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
|
||||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
|
||||||
require("../core/library");
|
import "../core/library"
|
||||||
global.READ_ONLY_DB = 1;
|
global.READ_ONLY_DB = 1;
|
||||||
var LastAlive = Date.now();
|
var LastAlive = Date.now();
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
@@ -74,7 +74,7 @@ function CheckAlive() {
|
|||||||
if (global.NOALIVE)
|
if (global.NOALIVE)
|
||||||
return;
|
return;
|
||||||
var Delta = Date.now() - LastAlive;
|
var Delta = Date.now() - LastAlive;
|
||||||
if (Delta > CHECK_STOP_CHILD_PROCESS) {
|
if (Delta > global.CHECK_STOP_CHILD_PROCESS) {
|
||||||
global.ToLog("STATIC-DB: ALIVE TIMEOUT Stop and exit: " + Delta + "/" + global.CHECK_STOP_CHILD_PROCESS);
|
global.ToLog("STATIC-DB: ALIVE TIMEOUT Stop and exit: " + Delta + "/" + global.CHECK_STOP_CHILD_PROCESS);
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
return;
|
return;
|
||||||
@@ -83,11 +83,11 @@ function CheckAlive() {
|
|||||||
process.on('uncaughtException', function(err) {
|
process.on('uncaughtException', function(err) {
|
||||||
global.ToError(err.stack);
|
global.ToError(err.stack);
|
||||||
global.ToLog(err.stack);
|
global.ToLog(err.stack);
|
||||||
TO_ERROR_LOG("STATIC-DB", 777, err);
|
global.TO_ERROR_LOG("STATIC-DB", 777, err);
|
||||||
global.ToLog("-----------------STATIC-DB EXIT------------------");
|
global.ToLog("-----------------STATIC-DB EXIT------------------");
|
||||||
process.exit();
|
process.exit();
|
||||||
});
|
});
|
||||||
process.on('error', function(err) {
|
process.on('error' as any, function(err: TeraError) {
|
||||||
global.ToError("STATIC-DB:\n" + err.stack);
|
global.ToError("STATIC-DB:\n" + err.stack);
|
||||||
global.ToLog(err.stack);
|
global.ToLog(err.stack);
|
||||||
});
|
});
|
||||||
@@ -98,7 +98,7 @@ KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 7
|
|||||||
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
|
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
|
||||||
global.HTTP_PORT_NUMBER = 0;
|
global.HTTP_PORT_NUMBER = 0;
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
if (SERVER)
|
if (global.SERVER)
|
||||||
global.SERVER.Close();
|
global.SERVER.Close();
|
||||||
global.DApps.Accounts.Close();
|
global.DApps.Accounts.Close();
|
||||||
global.DApps.Smart.DBSmart.Close();
|
global.DApps.Smart.DBSmart.Close();
|
||||||
@@ -116,8 +116,8 @@ function GETBLOCKHEADER100(msg) {
|
|||||||
var Count = Data.Count;
|
var Count = Data.Count;
|
||||||
if (!Count || Count < 0 || !EndNum100)
|
if (!Count || Count < 0 || !EndNum100)
|
||||||
return;
|
return;
|
||||||
if (Count > COUNT_BLOCKS_FOR_LOAD)
|
if (Count > global.COUNT_BLOCKS_FOR_LOAD)
|
||||||
Count = COUNT_BLOCKS_FOR_LOAD;
|
Count = global.COUNT_BLOCKS_FOR_LOAD;
|
||||||
var Arr = [];
|
var Arr = [];
|
||||||
var Data100 = global.SERVER.DBHeader100.Read(EndNum100);
|
var Data100 = global.SERVER.DBHeader100.Read(EndNum100);
|
||||||
if (Data100 && global.CompareArr(Data100.Hash100, LoadHash100) === 0) {
|
if (Data100 && global.CompareArr(Data100.Hash100, LoadHash100) === 0) {
|
||||||
@@ -131,7 +131,7 @@ function GETBLOCKHEADER100(msg) {
|
|||||||
Arr.push(Data100.Hash);
|
Arr.push(Data100.Hash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var BufWrite = global.BufLib.GetBufferFromObject(Arr, "[hash]", MAX_PACKET_LENGTH, {});
|
var BufWrite = global.BufLib.GetBufferFromObject(Arr, "[hash]", global.MAX_PACKET_LENGTH, {});
|
||||||
global.ToLog("GETBLOCKHEADER100 Send Arr=" + Arr.length + " - " + BlockNum);
|
global.ToLog("GETBLOCKHEADER100 Send Arr=" + Arr.length + " - " + BlockNum);
|
||||||
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETBLOCKHEADER100", Context: msg.Context, Data: BufWrite });
|
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETBLOCKHEADER100", Context: msg.Context, Data: BufWrite });
|
||||||
};
|
};
|
||||||
@@ -144,11 +144,11 @@ function GETBLOCKHEADER(msg) {
|
|||||||
var Foward = Data.Foward;
|
var Foward = Data.Foward;
|
||||||
if (Foward) {
|
if (Foward) {
|
||||||
var BlockDB = global.SERVER.ReadBlockHeaderDB(Data.BlockNum);
|
var BlockDB = global.SERVER.ReadBlockHeaderDB(Data.BlockNum);
|
||||||
if (BlockDB && BlockDB.SumHash && (global.CompareArr(BlockDB.SumHash, LoadHash) === 0 || IsZeroArr(LoadHash))) {
|
if (BlockDB && BlockDB.SumHash && (global.CompareArr(BlockDB.SumHash, LoadHash) === 0 || global.IsZeroArr(LoadHash))) {
|
||||||
StartNum = Data.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
StartNum = Data.BlockNum - global.BLOCK_PROCESSING_LENGTH2;
|
||||||
if (StartNum < 0)
|
if (StartNum < 0)
|
||||||
StartNum = 0;
|
StartNum = 0;
|
||||||
BlockNum = StartNum + COUNT_BLOCKS_FOR_LOAD + global.BLOCK_PROCESSING_LENGTH2;
|
BlockNum = StartNum + global.COUNT_BLOCKS_FOR_LOAD + global.BLOCK_PROCESSING_LENGTH2;
|
||||||
if (BlockNum > global.SERVER.GetMaxNumBlockDB())
|
if (BlockNum > global.SERVER.GetMaxNumBlockDB())
|
||||||
BlockNum = global.SERVER.GetMaxNumBlockDB();
|
BlockNum = global.SERVER.GetMaxNumBlockDB();
|
||||||
}
|
}
|
||||||
@@ -159,8 +159,8 @@ function GETBLOCKHEADER(msg) {
|
|||||||
var Count = Data.Count;
|
var Count = Data.Count;
|
||||||
if (!Count || Count < 0 || BlockNum < 0)
|
if (!Count || Count < 0 || BlockNum < 0)
|
||||||
return;
|
return;
|
||||||
if (Count > COUNT_BLOCKS_FOR_LOAD)
|
if (Count > global.COUNT_BLOCKS_FOR_LOAD)
|
||||||
Count = COUNT_BLOCKS_FOR_LOAD;
|
Count = global.COUNT_BLOCKS_FOR_LOAD;
|
||||||
Count += global.BLOCK_PROCESSING_LENGTH2;
|
Count += global.BLOCK_PROCESSING_LENGTH2;
|
||||||
var BlockDB = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
var BlockDB = global.SERVER.ReadBlockHeaderDB(BlockNum);
|
||||||
if (BlockDB && (BlockDB.Prepared && (!IsSum) && BlockDB.Hash && global.CompareArr(BlockDB.Hash, LoadHash) === 0 || BlockDB.bSave && IsSum && BlockDB.SumHash && global.CompareArr(BlockDB.SumHash,
|
if (BlockDB && (BlockDB.Prepared && (!IsSum) && BlockDB.Hash && global.CompareArr(BlockDB.Hash, LoadHash) === 0 || BlockDB.bSave && IsSum && BlockDB.SumHash && global.CompareArr(BlockDB.SumHash,
|
||||||
@@ -184,8 +184,8 @@ function GETBLOCK(msg) {
|
|||||||
var BufWrite;
|
var BufWrite;
|
||||||
var BlockDB = global.SERVER.ReadBlockDB(BlockNum);
|
var BlockDB = global.SERVER.ReadBlockDB(BlockNum);
|
||||||
var StrSend;
|
var StrSend;
|
||||||
if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || IsZeroArr(TreeHash))) {
|
if (BlockDB && (global.CompareArr(BlockDB.TreeHash, TreeHash) === 0 || global.IsZeroArr(TreeHash))) {
|
||||||
var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, FORMAT_BLOCK_TRANSFER, MAX_PACKET_LENGTH, WRK_BLOCK_TRANSFER);
|
var BufWrite = global.BufLib.GetBufferFromObject(BlockDB, global.FORMAT_BLOCK_TRANSFER, global.MAX_PACKET_LENGTH, global.WRK_BLOCK_TRANSFER);
|
||||||
StrSend = "OK";
|
StrSend = "OK";
|
||||||
}
|
}
|
||||||
if (StrSend === "OK") {
|
if (StrSend === "OK") {
|
||||||
@@ -211,7 +211,7 @@ function GETREST(msg) {
|
|||||||
var Data = msg.Data;
|
var Data = msg.Data;
|
||||||
if (!Data.BlockNum)
|
if (!Data.BlockNum)
|
||||||
return;
|
return;
|
||||||
if (IsZeroArr(Data.AccHash)) {
|
if (global.IsZeroArr(Data.AccHash)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var BlockNumRest = Data.BlockNum;
|
var BlockNumRest = Data.BlockNum;
|
||||||
@@ -234,8 +234,8 @@ function GETREST(msg) {
|
|||||||
var WorkFormatLength = global.DApps.Accounts.SIZE_ACCOUNT_ROW;
|
var WorkFormatLength = global.DApps.Accounts.SIZE_ACCOUNT_ROW;
|
||||||
var Max = global.DApps.Accounts.DBState.GetMaxNum();
|
var Max = global.DApps.Accounts.DBState.GetMaxNum();
|
||||||
var LengthAccount = Data.Count;
|
var LengthAccount = Data.Count;
|
||||||
if (LengthAccount > MAX_ACCOUNTS_TRANSFER)
|
if (LengthAccount > global.MAX_ACCOUNTS_TRANSFER)
|
||||||
LengthAccount = MAX_ACCOUNTS_TRANSFER;
|
LengthAccount = global.MAX_ACCOUNTS_TRANSFER;
|
||||||
var StartAccount = Data.AccNum;
|
var StartAccount = Data.AccNum;
|
||||||
var EndAccount = StartAccount + LengthAccount - 1;
|
var EndAccount = StartAccount + LengthAccount - 1;
|
||||||
if (EndAccount > Max)
|
if (EndAccount > Max)
|
||||||
@@ -249,7 +249,7 @@ function GETREST(msg) {
|
|||||||
else {
|
else {
|
||||||
ArrRest = GetArrRest(BlockNumRest, StartAccount, EndAccount);
|
ArrRest = GetArrRest(BlockNumRest, StartAccount, EndAccount);
|
||||||
ProofHash = Tree.Root;
|
ProofHash = Tree.Root;
|
||||||
var RetProof = GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
|
var RetProof = global.GetMerkleProof(Tree.LevelsHash, StartAccount, EndAccount);
|
||||||
ProofArrL = RetProof.ArrL;
|
ProofArrL = RetProof.ArrL;
|
||||||
ProofArrR = RetProof.ArrR;
|
ProofArrR = RetProof.ArrR;
|
||||||
BufLength = 1000 + ArrRest.length * WorkFormatLength;
|
BufLength = 1000 + ArrRest.length * WorkFormatLength;
|
||||||
@@ -257,7 +257,7 @@ function GETREST(msg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
var Data2 = { Result: nResult, Arr: ArrRest, Version: 1, ProofHash: ProofHash, ProofArrL: ProofArrL, ProofArrR: ProofArrR };
|
var Data2 = { Result: nResult, Arr: ArrRest, Version: 1, ProofHash: ProofHash, ProofArrL: ProofArrL, ProofArrR: ProofArrR };
|
||||||
var BufWrite = global.BufLib.GetBufferFromObject(Data2, FORMAT_REST_TRANSFER, BufLength, {});
|
var BufWrite = global.BufLib.GetBufferFromObject(Data2, global.FORMAT_REST_TRANSFER, BufLength, {});
|
||||||
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETREST", Context: msg.Context, Data: BufWrite });
|
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETREST", Context: msg.Context, Data: BufWrite });
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -279,12 +279,12 @@ function GETSMART(msg) {
|
|||||||
Arr.push(BufSmart);
|
Arr.push(BufSmart);
|
||||||
}
|
}
|
||||||
var Data2 = { Result: Arr.length ? 1 : 0, Arr: Arr };
|
var Data2 = { Result: Arr.length ? 1 : 0, Arr: Arr };
|
||||||
var BufWrite = global.BufLib.GetBufferFromObject(Data2, FORMAT_SMART_TRANSFER, BufLength, {});
|
var BufWrite = global.BufLib.GetBufferFromObject(Data2, global.FORMAT_SMART_TRANSFER, BufLength, {});
|
||||||
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETSMART", Context: msg.Context, Data: BufWrite });
|
process.send({ cmd: "Send", addrStr: msg.addrStr, Method: "RETSMART", Context: msg.Context, Data: BufWrite });
|
||||||
};
|
};
|
||||||
var glMapForHash = {};
|
var glMapForHash = {};
|
||||||
|
|
||||||
function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly) {
|
function GetArrRest(BlockNumRest, StartAccount, EndAccount, bHashOnly?) {
|
||||||
var ArrRest = [];
|
var ArrRest = [];
|
||||||
var WorkStruct = {};
|
var WorkStruct = {};
|
||||||
var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW;
|
var WorkFormat = global.DApps.Accounts.FORMAT_ACCOUNT_ROW;
|
||||||
@@ -352,7 +352,7 @@ function GetRestMerkleTree(BlockNumRest, RestIndexArr) {
|
|||||||
for (var Num = 0; Num < ArrHash.length; Num++) {
|
for (var Num = 0; Num < ArrHash.length; Num++) {
|
||||||
MerkleCalc[Num] = 1;
|
MerkleCalc[Num] = 1;
|
||||||
}
|
}
|
||||||
UpdateMerklTree(MerkleTree, MerkleCalc, 0);
|
global.UpdateMerklTree(MerkleTree, MerkleCalc, 0);
|
||||||
glMapRest[BlockNumRest] = MerkleTree;
|
glMapRest[BlockNumRest] = MerkleTree;
|
||||||
var Time2 = process.hrtime(startTime);
|
var Time2 = process.hrtime(startTime);
|
||||||
var deltaTime1 = (Time1[0] * 1000 + Time1[1] / 1e6) / 1000;
|
var deltaTime1 = (Time1[0] * 1000 + Time1[1] / 1e6) / 1000;
|
||||||
|
|||||||
@@ -12,15 +12,15 @@ global.PROCESS_NAME = "TX";
|
|||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
require("../core/constant");
|
require("../core/constant");
|
||||||
global.DATA_PATH = GetNormalPathString(global.DATA_PATH);
|
global.DATA_PATH = global.GetNormalPathString(global.DATA_PATH);
|
||||||
global.CODE_PATH = GetNormalPathString(global.CODE_PATH);
|
global.CODE_PATH = global.GetNormalPathString(global.CODE_PATH);
|
||||||
require("../core/library");
|
require("../core/library");
|
||||||
global.READ_ONLY_DB = 0;
|
global.READ_ONLY_DB = 0;
|
||||||
var LastAlive = Date.now();
|
var LastAlive = Date.now();
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
setInterval(CheckAlive, 1000);
|
setInterval(CheckAlive, 1000);
|
||||||
}, 20000);
|
}, 20000);
|
||||||
setInterval(PrepareStatEverySecond, 1000);
|
setInterval(global.PrepareStatEverySecond, 1000);
|
||||||
if (process.send) {
|
if (process.send) {
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
process.send({ cmd: "Alive" });
|
process.send({ cmd: "Alive" });
|
||||||
@@ -58,7 +58,7 @@ process.on('message', function(msg) {
|
|||||||
global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
|
global.TreeFindTX.SaveValue("Smart:" + msg.Smart, 1);
|
||||||
break;
|
break;
|
||||||
case "Eval":
|
case "Eval":
|
||||||
EvalCode(msg.Code);
|
global.EvalCode(msg.Code);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -82,11 +82,11 @@ function CheckAlive() {
|
|||||||
process.on('uncaughtException', function(err) {
|
process.on('uncaughtException', function(err) {
|
||||||
global.ToError(err.stack);
|
global.ToError(err.stack);
|
||||||
global.ToLog(err.stack);
|
global.ToLog(err.stack);
|
||||||
TO_ERROR_LOG("TX-PROCESS", 777, err);
|
global.TO_ERROR_LOG("TX-PROCESS", 777, err);
|
||||||
global.ToLog("-----------------TX-PROCESS EXIT------------------");
|
global.ToLog("-----------------TX-PROCESS EXIT------------------");
|
||||||
process.exit();
|
process.exit();
|
||||||
});
|
});
|
||||||
process.on('error', function(err) {
|
process.on('error' as any, function(err: TeraError) {
|
||||||
global.ToError("TX-PROCESS:\n" + err.stack);
|
global.ToError("TX-PROCESS:\n" + err.stack);
|
||||||
global.ToLog(err.stack);
|
global.ToLog(err.stack);
|
||||||
});
|
});
|
||||||
@@ -96,14 +96,14 @@ var KeyPair = crypto.createECDH('secp256k1');
|
|||||||
KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
KeyPair.setPrivateKey(Buffer.from([77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77]));
|
77, 77, 77, 77, 77, 77, 77, 77, 77, 77]));
|
||||||
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
|
global.SERVER = new CServerDB(KeyPair, undefined, undefined, false, true);
|
||||||
global.TreeFindTX = new STreeBuffer(30 * 1000, CompareItemHashSimple, "string");
|
global.TreeFindTX = new STreeBuffer(30 * 1000, global.CompareItemHashSimple, "string");
|
||||||
setInterval(function() {
|
setInterval(function() {
|
||||||
if (SERVER) {
|
if (global.SERVER) {
|
||||||
global.SERVER.Close();
|
global.SERVER.Close();
|
||||||
}
|
}
|
||||||
DoTXProcess();
|
DoTXProcess();
|
||||||
}, 10);
|
}, 10);
|
||||||
var BlockTree = new STreeBuffer(30 * 1000, CompareItemHashSimple, "number");
|
var BlockTree = new STreeBuffer(30 * 1000, global.CompareItemHashSimple, "number");
|
||||||
global.bShowDetail = 0;
|
global.bShowDetail = 0;
|
||||||
var StopTxProcess = 0;
|
var StopTxProcess = 0;
|
||||||
var MinimalValidBlock = 0;
|
var MinimalValidBlock = 0;
|
||||||
@@ -116,12 +116,12 @@ function DoTXProcess() {
|
|||||||
InitTXProcess();
|
InitTXProcess();
|
||||||
var BlockMin = FindMinimal();
|
var BlockMin = FindMinimal();
|
||||||
if (!BlockMin) {
|
if (!BlockMin) {
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("!BlockMin");
|
global.ToLog("!BlockMin");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var StartTime = Date.now();
|
var StartTime = Date.now();
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("BlockMin: " + BlockMin.BlockNum + " LastBlockNum=" + LastBlockNum);
|
global.ToLog("BlockMin: " + BlockMin.BlockNum + " LastBlockNum=" + LastBlockNum);
|
||||||
var CountTX = 0;
|
var CountTX = 0;
|
||||||
for (var Num = BlockMin.BlockNum; Num < BlockMin.BlockNum + 200; Num++) {
|
for (var Num = BlockMin.BlockNum; Num < BlockMin.BlockNum + 200; Num++) {
|
||||||
@@ -131,7 +131,7 @@ function DoTXProcess() {
|
|||||||
break;
|
break;
|
||||||
var Block = global.SERVER.ReadBlockDB(Num);
|
var Block = global.SERVER.ReadBlockDB(Num);
|
||||||
if (!Block) {
|
if (!Block) {
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("!Block");
|
global.ToLog("!Block");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -140,7 +140,7 @@ function DoTXProcess() {
|
|||||||
}
|
}
|
||||||
var Item = BlockTree.LoadValue(Block.BlockNum, 1);
|
var Item = BlockTree.LoadValue(Block.BlockNum, 1);
|
||||||
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0) {
|
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0) {
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("WAS CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
|
global.ToLog("WAS CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@ function DoTXProcess() {
|
|||||||
if (Num % 100000 === 0)
|
if (Num % 100000 === 0)
|
||||||
global.ToLog("CALC: " + Num);
|
global.ToLog("CALC: " + Num);
|
||||||
CountTX++;
|
CountTX++;
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog(" CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
|
global.ToLog(" CALC: " + Num + " SumHash: " + global.GetHexFromArr(Block.SumHash).substr(0, 12));
|
||||||
BlockTree.SaveValue(Block.BlockNum, { BlockNum: Block.BlockNum, SumHash: Block.SumHash });
|
BlockTree.SaveValue(Block.BlockNum, { BlockNum: Block.BlockNum, SumHash: Block.SumHash });
|
||||||
LastBlockNum = Block.BlockNum;
|
LastBlockNum = Block.BlockNum;
|
||||||
@@ -167,14 +167,14 @@ function DoTXProcess() {
|
|||||||
function FindMinimal() {
|
function FindMinimal() {
|
||||||
var MaxNumBlockDB = global.SERVER.GetMaxNumBlockDB();
|
var MaxNumBlockDB = global.SERVER.GetMaxNumBlockDB();
|
||||||
if (MaxNumBlockDB && MaxNumBlockDB < LastBlockNum) {
|
if (MaxNumBlockDB && MaxNumBlockDB < LastBlockNum) {
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("MaxNumBlockDB<LastBlockNum: " + MaxNumBlockDB + "<" + LastBlockNum);
|
global.ToLog("MaxNumBlockDB<LastBlockNum: " + MaxNumBlockDB + "<" + LastBlockNum);
|
||||||
LastBlockNum = MaxNumBlockDB - 1;
|
LastBlockNum = MaxNumBlockDB - 1;
|
||||||
BlockTree.Clear();
|
BlockTree.Clear();
|
||||||
}
|
}
|
||||||
if (LastBlockNum < MinimalValidBlock)
|
if (LastBlockNum < MinimalValidBlock)
|
||||||
LastBlockNum = MinimalValidBlock;
|
LastBlockNum = MinimalValidBlock;
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("FindMinimal from LastBlockNum=" + LastBlockNum);
|
global.ToLog("FindMinimal from LastBlockNum=" + LastBlockNum);
|
||||||
for (var Num = LastBlockNum; Num--; Num >= 0) {
|
for (var Num = LastBlockNum; Num--; Num >= 0) {
|
||||||
if (Num < MinimalValidBlock)
|
if (Num < MinimalValidBlock)
|
||||||
@@ -186,7 +186,7 @@ function FindMinimal() {
|
|||||||
if (!IsValidSumHash(Block)) {
|
if (!IsValidSumHash(Block)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (Block.BlockNum % PERIOD_ACCOUNT_HASH === 0) {
|
if (Block.BlockNum % global.PERIOD_ACCOUNT_HASH === 0) {
|
||||||
var Item = global.DApps.Accounts.GetAccountHashItem(Block.BlockNum);
|
var Item = global.DApps.Accounts.GetAccountHashItem(Block.BlockNum);
|
||||||
if (Item) {
|
if (Item) {
|
||||||
BlockTree.SaveValue(Block.BlockNum, Item);
|
BlockTree.SaveValue(Block.BlockNum, Item);
|
||||||
@@ -195,10 +195,10 @@ function FindMinimal() {
|
|||||||
var Item = BlockTree.LoadValue(Block.BlockNum, 1);
|
var Item = BlockTree.LoadValue(Block.BlockNum, 1);
|
||||||
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0)
|
if (Item && global.CompareArr(Item.SumHash, Block.SumHash) === 0)
|
||||||
return Block;
|
return Block;
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("" + Num + " " + Block.BlockNum + ". Item=" + JSON.stringify(Item) + " MinimalValidBlock=" + MinimalValidBlock);
|
global.ToLog("" + Num + " " + Block.BlockNum + ". Item=" + JSON.stringify(Item) + " MinimalValidBlock=" + MinimalValidBlock);
|
||||||
}
|
}
|
||||||
if (bShowDetail)
|
if (global.bShowDetail)
|
||||||
global.ToLog("MinimalValidBlock:" + MinimalValidBlock);
|
global.ToLog("MinimalValidBlock:" + MinimalValidBlock);
|
||||||
if (MinimalValidBlock === 0 && LastBlockNum > 0) {
|
if (MinimalValidBlock === 0 && LastBlockNum > 0) {
|
||||||
RewriteAllTransactions();
|
RewriteAllTransactions();
|
||||||
@@ -212,12 +212,12 @@ function IsValidSumHash(Block) {
|
|||||||
return 1;
|
return 1;
|
||||||
if (Block.BlockNum < 16)
|
if (Block.BlockNum < 16)
|
||||||
return 1;
|
return 1;
|
||||||
if (IsZeroArr(Block.SumHash))
|
if (global.IsZeroArr(Block.SumHash))
|
||||||
return 0;
|
return 0;
|
||||||
var PrevBlock = global.SERVER.ReadBlockHeaderDB(Block.BlockNum - 1);
|
var PrevBlock = global.SERVER.ReadBlockHeaderDB(Block.BlockNum - 1);
|
||||||
if (!PrevBlock)
|
if (!PrevBlock)
|
||||||
return 0;
|
return 0;
|
||||||
var SumHash2 = shaarr2(PrevBlock.SumHash, Block.Hash);
|
var SumHash2 = global.shaarr2(PrevBlock.SumHash, Block.Hash);
|
||||||
if (global.CompareArr(SumHash2, Block.SumHash) === 0)
|
if (global.CompareArr(SumHash2, Block.SumHash) === 0)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -240,7 +240,7 @@ function InitTXProcess() {
|
|||||||
StateTX = global.DApps.Accounts.DBStateTX.Read(0);
|
StateTX = global.DApps.Accounts.DBStateTX.Read(0);
|
||||||
LastBlockNum = StateTX.BlockNum;
|
LastBlockNum = StateTX.BlockNum;
|
||||||
MinimalValidBlock = StateTX.BlockNumMin;
|
MinimalValidBlock = StateTX.BlockNumMin;
|
||||||
LastBlockNum = PERIOD_ACCOUNT_HASH * Math.trunc(LastBlockNum / PERIOD_ACCOUNT_HASH);
|
LastBlockNum = global.PERIOD_ACCOUNT_HASH * Math.trunc(LastBlockNum / global.PERIOD_ACCOUNT_HASH);
|
||||||
if (LastBlockNum > 100) {
|
if (LastBlockNum > 100) {
|
||||||
LastBlockNum = 1 + LastBlockNum - 100;
|
LastBlockNum = 1 + LastBlockNum - 100;
|
||||||
}
|
}
|
||||||
@@ -254,8 +254,8 @@ global.ClearDataBase = ClearDataBase;
|
|||||||
|
|
||||||
function ClearDataBase() {
|
function ClearDataBase() {
|
||||||
MinimalValidBlock = 0;
|
MinimalValidBlock = 0;
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].ClearDataBase();
|
global.DApps[key].ClearDataBase();
|
||||||
}
|
}
|
||||||
LastBlockNum = 0;
|
LastBlockNum = 0;
|
||||||
BlockTree.Clear();
|
BlockTree.Clear();
|
||||||
@@ -268,8 +268,8 @@ function RewriteAllTransactions() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
global.ToLog("*************RewriteAllTransactions");
|
global.ToLog("*************RewriteAllTransactions");
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].ClearDataBase();
|
global.DApps[key].ClearDataBase();
|
||||||
}
|
}
|
||||||
LastBlockNum = 0;
|
LastBlockNum = 0;
|
||||||
BlockTree.Clear();
|
BlockTree.Clear();
|
||||||
@@ -291,8 +291,8 @@ function TXPrepareLoadRest(BlockNum) {
|
|||||||
StopTxProcess = 1;
|
StopTxProcess = 1;
|
||||||
MinimalValidBlock = BlockNum;
|
MinimalValidBlock = BlockNum;
|
||||||
global.ToLog("*************TXPrepareLoadRest:" + BlockNum, 2);
|
global.ToLog("*************TXPrepareLoadRest:" + BlockNum, 2);
|
||||||
for (var key in DApps) {
|
for (var key in global.DApps) {
|
||||||
DApps[key].ClearDataBase();
|
global.DApps[key].ClearDataBase();
|
||||||
}
|
}
|
||||||
LastBlockNum = BlockNum;
|
LastBlockNum = BlockNum;
|
||||||
BlockTree.Clear();
|
BlockTree.Clear();
|
||||||
@@ -345,7 +345,7 @@ global.EvalCode = function(Code) {
|
|||||||
var Result;
|
var Result;
|
||||||
try {
|
try {
|
||||||
var ret = eval(Code);
|
var ret = eval(Code);
|
||||||
Result = JSON.stringify(ret, "", 4);
|
Result = JSON.stringify(ret, undefined, 4);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
Result = "" + e;
|
Result = "" + e;
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ process.on('message', function(msg) {
|
|||||||
break;
|
break;
|
||||||
case "DappEvent":
|
case "DappEvent":
|
||||||
{
|
{
|
||||||
AddDappEventToGlobalMap(msg.Data);
|
global.AddDappEventToGlobalMap(msg.Data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "ToLogClient":
|
case "ToLogClient":
|
||||||
@@ -215,7 +215,7 @@ function MainHTTPFunction(request, response) {
|
|||||||
return;
|
return;
|
||||||
if (!request.socket || !request.socket.remoteAddress)
|
if (!request.socket || !request.socket.remoteAddress)
|
||||||
return;
|
return;
|
||||||
SetSafeResponce(response);
|
global.SetSafeResponce(response);
|
||||||
var DataURL = url.parse(request.url);
|
var DataURL = url.parse(request.url);
|
||||||
var Params = querystring.parse(DataURL.query);
|
var Params = querystring.parse(DataURL.query);
|
||||||
var Path = querystring.unescape(DataURL.pathname);
|
var Path = querystring.unescape(DataURL.pathname);
|
||||||
@@ -350,7 +350,7 @@ function DoCommandNew(response, Type, Path, Params) {
|
|||||||
response.end(JSON.stringify({ result: 0, text: "You must set const USE_HARD_API_V2:1" }));
|
response.end(JSON.stringify({ result: 0, text: "You must set const USE_HARD_API_V2:1" }));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Caller = WebApi2;
|
Caller = global.WebApi2;
|
||||||
}
|
}
|
||||||
Method = ArrPath[2];
|
Method = ArrPath[2];
|
||||||
}
|
}
|
||||||
@@ -390,16 +390,16 @@ function DoCommandNew(response, Type, Path, Params) {
|
|||||||
response.writeHead(301, { "Location": '/' });
|
response.writeHead(301, { "Location": '/' });
|
||||||
return response.end();
|
return response.end();
|
||||||
case "file":
|
case "file":
|
||||||
SendBlockFile(response, ArrPath[1], ArrPath[2]);
|
global.SendBlockFile(response, ArrPath[1], ArrPath[2]);
|
||||||
break;
|
break;
|
||||||
case "DappTemplateFile":
|
case "DappTemplateFile":
|
||||||
DappTemplateFile(response, ArrPath[1]);
|
global.DappTemplateFile(response, ArrPath[1]);
|
||||||
break;
|
break;
|
||||||
case "smart":
|
case "smart":
|
||||||
DappSmartCodeFile(response, ArrPath[1]);
|
global.DappSmartCodeFile(response, ArrPath[1]);
|
||||||
break;
|
break;
|
||||||
case "client":
|
case "client":
|
||||||
DappClientCodeFile(response, ArrPath[1]);
|
global.DappClientCodeFile(response, ArrPath[1]);
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
var Name = ArrPath[ArrPath.length - 1];
|
var Name = ArrPath[ArrPath.length - 1];
|
||||||
@@ -466,7 +466,7 @@ function DoCommandNew(response, Type, Path, Params) {
|
|||||||
Name = PrefixPath + "/" + Name;
|
Name = PrefixPath + "/" + Name;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
SendWebFile(response, Name, "", 1);
|
global.SendWebFile(response, Name, "", 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -506,24 +506,24 @@ HostingCaller.GetAccountList = function(Params) {
|
|||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
if (!Params.CountNum)
|
if (!Params.CountNum)
|
||||||
Params.CountNum = 1;
|
Params.CountNum = 1;
|
||||||
var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.StartNum), ParseNum(Params.CountNum));
|
var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum));
|
||||||
return { result: 1, arr: arr };
|
return { result: 1, arr: arr };
|
||||||
};
|
};
|
||||||
HostingCaller.GetAccount = function(id) {
|
HostingCaller.GetAccount = function(id) {
|
||||||
id = ParseNum(id);
|
id = global.ParseNum(id);
|
||||||
var arr = global.DApps.Accounts.GetRowsAccounts(id, 1);
|
var arr = global.DApps.Accounts.GetRowsAccounts(id, 1);
|
||||||
return { Item: arr[0], result: 1 };
|
return { Item: arr[0], result: 1 };
|
||||||
};
|
};
|
||||||
HostingCaller.GetBlockList = function(Params, response) {
|
HostingCaller.GetBlockList = function(Params, response) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
Params.StartNum = ParseNum(Params.StartNum);
|
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||||
Params.CountNum = ParseNum(Params.CountNum);
|
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||||
if (Params.CountNum > MaxCountViewRows)
|
if (Params.CountNum > MaxCountViewRows)
|
||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
if (!Params.CountNum)
|
if (!Params.CountNum)
|
||||||
Params.CountNum = 1;
|
Params.CountNum = 1;
|
||||||
return HTTPCaller.GetBlockList(Params, response);
|
return global.HTTPCaller.GetBlockList(Params, response);
|
||||||
};
|
};
|
||||||
HostingCaller.GetTransactionList = function(Params, response) {
|
HostingCaller.GetTransactionList = function(Params, response) {
|
||||||
Params.Param3 = Params.BlockNum;
|
Params.Param3 = Params.BlockNum;
|
||||||
@@ -532,12 +532,12 @@ HostingCaller.GetTransactionList = function(Params, response) {
|
|||||||
HostingCaller.GetTransactionAll = function(Params, response) {
|
HostingCaller.GetTransactionAll = function(Params, response) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
Params.Param3 = ParseNum(Params.Param3);
|
Params.Param3 = global.ParseNum(Params.Param3);
|
||||||
Params.StartNum = ParseNum(Params.StartNum);
|
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||||
Params.CountNum = ParseNum(Params.CountNum);
|
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||||
if (Params.CountNum > MaxCountViewRows)
|
if (Params.CountNum > MaxCountViewRows)
|
||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
return HTTPCaller.GetTransactionAll(Params, response);
|
return global.HTTPCaller.GetTransactionAll(Params, response);
|
||||||
};
|
};
|
||||||
HostingCaller.GetDappList = function(Params) {
|
HostingCaller.GetDappList = function(Params) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
@@ -546,7 +546,7 @@ HostingCaller.GetDappList = function(Params) {
|
|||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
if (!Params.CountNum)
|
if (!Params.CountNum)
|
||||||
Params.CountNum = 1;
|
Params.CountNum = 1;
|
||||||
var arr = global.DApps.Smart.GetRows(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, Params.Filter, 1);
|
var arr = global.DApps.Smart.GetRows(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, Params.Filter, 1);
|
||||||
return { result: 1, arr: arr };
|
return { result: 1, arr: arr };
|
||||||
};
|
};
|
||||||
HostingCaller.GetNodeList = function(Params) {
|
HostingCaller.GetNodeList = function(Params) {
|
||||||
@@ -640,7 +640,7 @@ HostingCaller.GetAccountListByKey = function(Params, ppp, bRet) {
|
|||||||
var Ret = { result: 1, arr: arr };
|
var Ret = { result: 1, arr: arr };
|
||||||
if (bRet)
|
if (bRet)
|
||||||
return Ret;
|
return Ret;
|
||||||
var Context = GetUserContext(Params);
|
var Context = global.GetUserContext(Params);
|
||||||
var StrInfo = JSON.stringify(Ret);
|
var StrInfo = JSON.stringify(Ret);
|
||||||
if (!Params.AllData && Context.PrevAccountList === StrInfo) {
|
if (!Params.AllData && Context.PrevAccountList === StrInfo) {
|
||||||
return { result: 0, cache: 1 };
|
return { result: 0, cache: 1 };
|
||||||
@@ -692,20 +692,20 @@ HostingCaller.SendTransactionHex = function(Params, response) {
|
|||||||
HostingCaller.DappSmartHTMLFile = function(Params) {
|
HostingCaller.DappSmartHTMLFile = function(Params) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
return HTTPCaller.DappSmartHTMLFile(Params);
|
return global.HTTPCaller.DappSmartHTMLFile(Params);
|
||||||
};
|
};
|
||||||
HostingCaller.DappBlockFile = function(Params, responce) {
|
HostingCaller.DappBlockFile = function(Params, responce) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
return HTTPCaller.DappBlockFile(Params, responce);
|
return global.HTTPCaller.DappBlockFile(Params, responce);
|
||||||
};
|
};
|
||||||
HostingCaller.DappInfo = function(Params) {
|
HostingCaller.DappInfo = function(Params) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
var SmartNum = ParseNum(Params.Smart);
|
var SmartNum = global.ParseNum(Params.Smart);
|
||||||
process.send({ cmd: "SetSmartEvent", Smart: SmartNum });
|
process.send({ cmd: "SetSmartEvent", Smart: SmartNum });
|
||||||
var Context = GetUserContext(Params);
|
var Context = global.GetUserContext(Params);
|
||||||
var Ret = HTTPCaller.DappInfo(Params, undefined, 1);
|
var Ret = global.HTTPCaller.DappInfo(Params, undefined, 1);
|
||||||
Ret.PubKey = undefined;
|
Ret.PubKey = undefined;
|
||||||
var StrInfo = JSON.stringify(Ret);
|
var StrInfo = JSON.stringify(Ret);
|
||||||
if (!Params.AllData && Context.PrevDappInfo === StrInfo) {
|
if (!Params.AllData && Context.PrevDappInfo === StrInfo) {
|
||||||
@@ -726,7 +726,7 @@ HostingCaller.DappWalletList = function(Params) {
|
|||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
var Ret = HostingCaller.GetAccountListByKey(Params, undefined, 1);
|
var Ret = HostingCaller.GetAccountListByKey(Params, undefined, 1);
|
||||||
var Smart = ParseNum(Params.Smart);
|
var Smart = global.ParseNum(Params.Smart);
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for (var i = 0; i < Ret.arr.length; i++) {
|
for (var i = 0; i < Ret.arr.length; i++) {
|
||||||
if (Params.AllAccounts || Ret.arr[i].Value.Smart === Smart) {
|
if (Params.AllAccounts || Ret.arr[i].Value.Smart === Smart) {
|
||||||
@@ -736,7 +736,7 @@ HostingCaller.DappWalletList = function(Params) {
|
|||||||
Ret.arr = arr;
|
Ret.arr = arr;
|
||||||
return Ret;
|
return Ret;
|
||||||
};
|
};
|
||||||
HTTPCaller.DappWalletList = HostingCaller.DappWalletList;
|
global.HTTPCaller.DappWalletList = HostingCaller.DappWalletList;
|
||||||
HostingCaller.DappAccountList = function(Params) {
|
HostingCaller.DappAccountList = function(Params) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
@@ -744,7 +744,7 @@ HostingCaller.DappAccountList = function(Params) {
|
|||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
if (!Params.CountNum)
|
if (!Params.CountNum)
|
||||||
Params.CountNum = 1;
|
Params.CountNum = 1;
|
||||||
var arr = global.DApps.Accounts.GetRowsAccounts(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, 1);
|
var arr = global.DApps.Accounts.GetRowsAccounts(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, 1);
|
||||||
return { arr: arr, result: 1 };
|
return { arr: arr, result: 1 };
|
||||||
};
|
};
|
||||||
HostingCaller.DappSmartList = function(Params) {
|
HostingCaller.DappSmartList = function(Params) {
|
||||||
@@ -754,42 +754,42 @@ HostingCaller.DappSmartList = function(Params) {
|
|||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
if (!Params.CountNum)
|
if (!Params.CountNum)
|
||||||
Params.CountNum = 1;
|
Params.CountNum = 1;
|
||||||
var arr = global.DApps.Smart.GetRows(ParseNum(Params.StartNum), ParseNum(Params.CountNum), undefined, undefined, Params.GetAllData,
|
var arr = global.DApps.Smart.GetRows(global.ParseNum(Params.StartNum), global.ParseNum(Params.CountNum), undefined, undefined, Params.GetAllData,
|
||||||
Params.TokenGenerate);
|
Params.TokenGenerate);
|
||||||
return { arr: arr, result: 1 };
|
return { arr: arr, result: 1 };
|
||||||
};
|
};
|
||||||
HostingCaller.DappBlockList = function(Params, response) {
|
HostingCaller.DappBlockList = function(Params, response) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
Params.StartNum = ParseNum(Params.StartNum);
|
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||||
Params.CountNum = ParseNum(Params.CountNum);
|
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||||
if (Params.CountNum > MaxCountViewRows)
|
if (Params.CountNum > MaxCountViewRows)
|
||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
if (!Params.CountNum)
|
if (!Params.CountNum)
|
||||||
Params.CountNum = 1;
|
Params.CountNum = 1;
|
||||||
return HTTPCaller.DappBlockList(Params, response);
|
return global.HTTPCaller.DappBlockList(Params, response);
|
||||||
};
|
};
|
||||||
HostingCaller.DappTransactionList = function(Params, response) {
|
HostingCaller.DappTransactionList = function(Params, response) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
Params.BlockNum = ParseNum(Params.BlockNum);
|
Params.BlockNum = global.ParseNum(Params.BlockNum);
|
||||||
Params.StartNum = ParseNum(Params.StartNum);
|
Params.StartNum = global.ParseNum(Params.StartNum);
|
||||||
Params.CountNum = ParseNum(Params.CountNum);
|
Params.CountNum = global.ParseNum(Params.CountNum);
|
||||||
if (Params.CountNum > MaxCountViewRows)
|
if (Params.CountNum > MaxCountViewRows)
|
||||||
Params.CountNum = MaxCountViewRows;
|
Params.CountNum = MaxCountViewRows;
|
||||||
if (!Params.CountNum)
|
if (!Params.CountNum)
|
||||||
Params.CountNum = 1;
|
Params.CountNum = 1;
|
||||||
return HTTPCaller.DappTransactionList(Params, response);
|
return global.HTTPCaller.DappTransactionList(Params, response);
|
||||||
};
|
};
|
||||||
HostingCaller.DappStaticCall = function(Params, response) {
|
HostingCaller.DappStaticCall = function(Params, response) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
return HTTPCaller.DappStaticCall(Params, response);
|
return global.HTTPCaller.DappStaticCall(Params, response);
|
||||||
};
|
};
|
||||||
HostingCaller.GetHistoryTransactions = function(Params) {
|
HostingCaller.GetHistoryTransactions = function(Params) {
|
||||||
if (typeof Params !== "object")
|
if (typeof Params !== "object")
|
||||||
return { result: 0 };
|
return { result: 0 };
|
||||||
return HTTPCaller.GetHistoryTransactions(Params);
|
return global.HTTPCaller.GetHistoryTransactions(Params);
|
||||||
};
|
};
|
||||||
HostingCaller.GetSupply = function(Params) {
|
HostingCaller.GetSupply = function(Params) {
|
||||||
var Data = global.DApps.Accounts.ReadState(0);
|
var Data = global.DApps.Accounts.ReadState(0);
|
||||||
@@ -843,7 +843,7 @@ setInterval(function() {
|
|||||||
var AvgPow = SumPow / Count;
|
var AvgPow = SumPow / Count;
|
||||||
ADD_TO_STAT("MAX:HASH_RATE_B", AvgPow);
|
ADD_TO_STAT("MAX:HASH_RATE_B", AvgPow);
|
||||||
}
|
}
|
||||||
var Count = COUNT_BLOCK_PROOF + 16 - 1;
|
var Count = global.COUNT_BLOCK_PROOF + 16 - 1;
|
||||||
if (MaxNumBlockDB > Count) {
|
if (MaxNumBlockDB > Count) {
|
||||||
var StartNum = MaxNumBlockDB - Count;
|
var StartNum = MaxNumBlockDB - Count;
|
||||||
NodeBlockChain = global.SERVER.BlockChainToBuf(StartNum, StartNum, MaxNumBlockDB);
|
NodeBlockChain = global.SERVER.BlockChainToBuf(StartNum, StartNum, MaxNumBlockDB);
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ global.FORMAT_ACCOUNT_HASH = "{\
|
|||||||
BlockNum:uint,\
|
BlockNum:uint,\
|
||||||
AccHash:buffer32,\
|
AccHash:buffer32,\
|
||||||
}";
|
}";
|
||||||
global.FORMAT_ACCOUNT_HASH3 = "{\
|
global.global.FORMAT_ACCOUNT_HASH3 = "{\
|
||||||
Type:byte,\
|
Type:byte,\
|
||||||
BlockNum:uint,\
|
BlockNum:uint,\
|
||||||
AccHash:buffer32,\
|
AccHash:buffer32,\
|
||||||
@@ -144,22 +144,23 @@ class MerkleDBRow extends DBRow {
|
|||||||
};
|
};
|
||||||
class AccountApp extends require("./dapp")
|
class AccountApp extends require("./dapp")
|
||||||
{
|
{
|
||||||
private CreateTrCount
|
CreateTrCount
|
||||||
private FORMAT_ACCOUNT_ROW
|
FORMAT_ACCOUNT_ROW
|
||||||
private SIZE_ACCOUNT_ROW
|
SIZE_ACCOUNT_ROW
|
||||||
private DBState
|
DBState
|
||||||
private FORMAT_ACCOUNT_ROW_REST
|
FORMAT_ACCOUNT_ROW_REST
|
||||||
private SIZE_ACCOUNT_ROW_REST
|
SIZE_ACCOUNT_ROW_REST
|
||||||
private DBRest
|
DBRest
|
||||||
private DBAct
|
DBAct
|
||||||
private DBActPrev
|
DBActPrev
|
||||||
private FORMAT_STATE_HISTORY
|
FORMAT_STATE_HISTORY
|
||||||
private DBStateHistory
|
DBStateHistory
|
||||||
private HistoryFormatArr
|
HistoryFormatArr
|
||||||
private DBStateTX
|
DBStateTX
|
||||||
private DBAccountsHash
|
DBAccountsHash
|
||||||
private WasCheckRestDB
|
WasCheckRestDB
|
||||||
private ResultTx
|
ResultTx
|
||||||
|
DBChanges
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super()
|
||||||
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
||||||
@@ -205,7 +206,7 @@ class AccountApp extends require("./dapp")
|
|||||||
Start(bClean?) {
|
Start(bClean?) {
|
||||||
if (global.LOCAL_RUN)
|
if (global.LOCAL_RUN)
|
||||||
bClean = 1
|
bClean = 1
|
||||||
if (!bClean && this.DBState.GetMaxNum() + 1 >= global.global.BLOCK_PROCESSING_LENGTH2)
|
if (!bClean && this.DBState.GetMaxNum() + 1 >= global.BLOCK_PROCESSING_LENGTH2)
|
||||||
return;
|
return;
|
||||||
this.DBState.MerkleTree = undefined
|
this.DBState.MerkleTree = undefined
|
||||||
this.DBState.Truncate(- 1)
|
this.DBState.Truncate(- 1)
|
||||||
@@ -267,7 +268,7 @@ class AccountApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
global.ToLog("******************************FINISH FillRestDB")
|
global.ToLog("******************************FINISH FillRestDB")
|
||||||
}
|
}
|
||||||
_DBStateWrite(Data?, BlockNum?) {
|
_DBStateWrite(Data?, BlockNum?, b?) {
|
||||||
this.CheckRestDB()
|
this.CheckRestDB()
|
||||||
this.DBState.Write(Data)
|
this.DBState.Write(Data)
|
||||||
if (Data.Num === undefined)
|
if (Data.Num === undefined)
|
||||||
@@ -330,7 +331,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return Num;
|
return Num;
|
||||||
}
|
}
|
||||||
case TYPE_TRANSACTION_TRANSFER:
|
case TYPE_TRANSACTION_TRANSFER:
|
||||||
var Num = ReadUintFromArr(Body, 1 + 1 + 6);
|
var Num = global.ReadUintFromArr(Body, 1 + 1 + 6);
|
||||||
return Num;
|
return Num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -400,10 +401,13 @@ class AccountApp extends require("./dapp")
|
|||||||
case global.TYPE_TRANSACTION_ACC_HASH:
|
case global.TYPE_TRANSACTION_ACC_HASH:
|
||||||
{
|
{
|
||||||
Result = 1
|
Result = 1
|
||||||
if (global.LOCAL_RUN || global.TEST_NETWORK);
|
if (global.LOCAL_RUN || global.TEST_NETWORK) {
|
||||||
else
|
|
||||||
if (BlockNum < global.START_BLOCK_ACCOUNT_HASH + 200000)
|
}
|
||||||
|
else {
|
||||||
|
if (BlockNum < global.global.START_BLOCK_ACCOUNT_HASH + 200000)
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH;
|
var BlockNumHash = BlockNum - global.DELTA_BLOCK_ACCOUNT_HASH;
|
||||||
if (!this.TRCheckAccountHash(Body, BlockNum, TrNum)) {
|
if (!this.TRCheckAccountHash(Body, BlockNum, TrNum)) {
|
||||||
Result = "BAD ACCOUNT HASH"
|
Result = "BAD ACCOUNT HASH"
|
||||||
@@ -426,7 +430,7 @@ class AccountApp extends require("./dapp")
|
|||||||
var SysBalance = SysData.Value.SumCOIN;
|
var SysBalance = SysData.Value.SumCOIN;
|
||||||
const REF_PERIOD_START = global.START_MINING;
|
const REF_PERIOD_START = global.START_MINING;
|
||||||
const REF_PERIOD_END = 30 * 1000 * 1000;
|
const REF_PERIOD_END = 30 * 1000 * 1000;
|
||||||
var AccountID = ReadUintFromArr(Block.AddrHash, 0);
|
var AccountID = global.ReadUintFromArr(Block.AddrHash, 0);
|
||||||
if (AccountID < 8)
|
if (AccountID < 8)
|
||||||
return;
|
return;
|
||||||
var Data = this.ReadStateTR(AccountID);
|
var Data = this.ReadStateTR(AccountID);
|
||||||
@@ -444,29 +448,29 @@ class AccountApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var Power = GetPowPower(Block.PowHash);
|
var Power = global.GetPowPower(Block.PowHash);
|
||||||
if (Block.BlockNum >= global.NEW_BLOCK_REWARD1)
|
if (Block.BlockNum >= global.NEW_BLOCK_REWARD1)
|
||||||
Power = 43
|
Power = 43
|
||||||
Sum = Power * Power * SysBalance / global.TOTAL_SUPPLY_TERA / 100
|
Sum = Power * Power * SysBalance / global.TOTAL_SUPPLY_TERA / 100
|
||||||
}
|
}
|
||||||
var CoinTotal = { SumCOIN: 0, SumCENT: 0 };
|
var CoinTotal = { SumCOIN: 0, SumCENT: 0 };
|
||||||
var CoinSum = COIN_FROM_FLOAT(Sum);
|
var CoinSum = global.COIN_FROM_FLOAT(Sum);
|
||||||
if (!ISZERO(CoinSum)) {
|
if (!global.ISZERO(CoinSum)) {
|
||||||
if (Data.Adviser >= 8 && Block.BlockNum < REF_PERIOD_END) {
|
if (Data.Adviser >= 8 && Block.BlockNum < REF_PERIOD_END) {
|
||||||
var RefData = this.ReadStateTR(Data.Adviser);
|
var RefData = this.ReadStateTR(Data.Adviser);
|
||||||
if (RefData && RefData.BlockNumCreate < Block.BlockNum - REF_PERIOD_MINING) {
|
if (RefData && RefData.BlockNumCreate < Block.BlockNum - global.REF_PERIOD_MINING) {
|
||||||
var K = (REF_PERIOD_END - Block.BlockNum) / (REF_PERIOD_END - REF_PERIOD_START);
|
var K = (REF_PERIOD_END - Block.BlockNum) / (REF_PERIOD_END - REF_PERIOD_START);
|
||||||
var CoinAdv = COIN_FROM_FLOAT(Sum * K);
|
var CoinAdv = global.COIN_FROM_FLOAT(Sum * K);
|
||||||
this.SendMoneyTR(Block, 0, Data.Adviser, CoinAdv, Block.BlockNum, 0xFFFF, "", "Adviser coin base [" + AccountID + "]", 1)
|
this.SendMoneyTR(Block, 0, Data.Adviser, CoinAdv, Block.BlockNum, 0xFFFF, "", "Adviser coin base [" + AccountID + "]", 1)
|
||||||
ADD(CoinTotal, CoinAdv)
|
global.ADD(CoinTotal, CoinAdv)
|
||||||
ADD(CoinSum, CoinAdv)
|
global.ADD(CoinSum, CoinAdv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.SendMoneyTR(Block, 0, AccountID, CoinSum, Block.BlockNum, 0xFFFF, "", "Coin base", 1)
|
this.SendMoneyTR(Block, 0, AccountID, CoinSum, Block.BlockNum, 0xFFFF, "", "Coin base", 1)
|
||||||
ADD(CoinTotal, CoinSum)
|
global.ADD(CoinTotal, CoinSum)
|
||||||
var CoinDevelop = CopyObjValue(CoinTotal);
|
var CoinDevelop = global.CopyObjValue(CoinTotal);
|
||||||
DIV(CoinDevelop, 100)
|
global.DIV(CoinDevelop, 100)
|
||||||
if (!ISZERO(CoinDevelop))
|
if (!global.ISZERO(CoinDevelop))
|
||||||
this.SendMoneyTR(Block, 0, 9, CoinDevelop, Block.BlockNum, 0xFFFF, "", "Developers support", 1)
|
this.SendMoneyTR(Block, 0, 9, CoinDevelop, Block.BlockNum, 0xFFFF, "", "Developers support", 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -492,22 +496,22 @@ class AccountApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
case TYPE_DEPRECATED_TRANSFER1:
|
case TYPE_DEPRECATED_TRANSFER1:
|
||||||
{
|
{
|
||||||
format = FORMAT_MONEY_TRANSFER
|
format = global.FORMAT_MONEY_TRANSFER
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TYPE_DEPRECATED_TRANSFER2:
|
case TYPE_DEPRECATED_TRANSFER2:
|
||||||
{
|
{
|
||||||
format = FORMAT_MONEY_TRANSFER2
|
format = global.FORMAT_MONEY_TRANSFER2
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TYPE_TRANSACTION_TRANSFER:
|
case TYPE_TRANSACTION_TRANSFER:
|
||||||
{
|
{
|
||||||
format = FORMAT_MONEY_TRANSFER3
|
format = global.FORMAT_MONEY_TRANSFER3
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TYPE_TRANSACTION_ACC_HASH:
|
case global.TYPE_TRANSACTION_ACC_HASH:
|
||||||
{
|
{
|
||||||
format = FORMAT_ACCOUNT_HASH3
|
format = global.global.FORMAT_ACCOUNT_HASH3
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -526,30 +530,30 @@ class AccountApp extends require("./dapp")
|
|||||||
if (!TR)
|
if (!TR)
|
||||||
return "";
|
return "";
|
||||||
if (TR.Body && TR.Body.length) {
|
if (TR.Body && TR.Body.length) {
|
||||||
var App = DAppByType[TR.Body[0]];
|
var App = global.DAppByType[TR.Body[0]];
|
||||||
if (App) {
|
if (App) {
|
||||||
TR.Body = JSON.parse(App.GetScriptTransaction(TR.Body))
|
TR.Body = JSON.parse(App.GetScriptTransaction(TR.Body))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ConvertBufferToStr(TR)
|
global.ConvertBufferToStr(TR)
|
||||||
return JSON.stringify(TR, "", 2);
|
return JSON.stringify(TR, undefined, 2);
|
||||||
}
|
}
|
||||||
TRCheckAccountHash(Body, BlockNum, TrNum) {
|
TRCheckAccountHash(Body, BlockNum, TrNum) {
|
||||||
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||||
return 1;
|
return 1;
|
||||||
try {
|
try {
|
||||||
var TR = global.BufLib.GetObjectFromBuffer(Body, FORMAT_ACCOUNT_HASH3, {});
|
var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_ACCOUNT_HASH3, {});
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (BlockNum < START_BLOCK_ACCOUNT_HASH + 200000)
|
if (BlockNum < global.START_BLOCK_ACCOUNT_HASH + 200000)
|
||||||
return 1;
|
return 1;
|
||||||
var Item = this.GetAccountHashItem(TR.BlockNum);
|
var Item = this.GetAccountHashItem(TR.BlockNum);
|
||||||
if (Item && Item.BlockNum === TR.BlockNum) {
|
if (Item && Item.BlockNum === TR.BlockNum) {
|
||||||
if (CompareArr(Item.AccHash, TR.AccHash) === 0) {
|
if (global.CompareArr(Item.AccHash, TR.AccHash) === 0) {
|
||||||
if (TR.BlockNum >= START_BLOCK_ACCOUNT_HASH3) {
|
if (TR.BlockNum >= global.START_BLOCK_ACCOUNT_HASH3) {
|
||||||
if (CompareArr(Item.SmartHash, TR.SmartHash) === 0 && Item.AccountMax === TR.AccountMax && Item.SmartCount === TR.SmartCount) {
|
if (global.CompareArr(Item.SmartHash, TR.SmartHash) === 0 && Item.AccountMax === TR.AccountMax && Item.SmartCount === TR.SmartCount) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -568,7 +572,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return "Error length transaction";
|
return "Error length transaction";
|
||||||
var CheckMinPower = 1;
|
var CheckMinPower = 1;
|
||||||
if (BlockNum >= 7000000 || global.LOCAL_RUN || global.TEST_NETWORK) {
|
if (BlockNum >= 7000000 || global.LOCAL_RUN || global.TEST_NETWORK) {
|
||||||
if (ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= PRICE_DAO(BlockNum).NewAccount) {
|
if (ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= global.PRICE_DAO(BlockNum).NewAccount) {
|
||||||
CheckMinPower = 0
|
CheckMinPower = 0
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -581,12 +585,12 @@ class AccountApp extends require("./dapp")
|
|||||||
this.CreateTrCount++
|
this.CreateTrCount++
|
||||||
var power;
|
var power;
|
||||||
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO) {
|
if (BlockNum >= global.BLOCKNUM_TICKET_ALGO) {
|
||||||
var Tr = { body: Body };
|
var Tr: any = { body: Body };
|
||||||
global.SERVER.CheckCreateTransactionObject(Tr)
|
global.SERVER.CheckCreateTransactionObject(Tr)
|
||||||
power = Tr.power
|
power = Tr.power
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
power = GetPowPower(shaarr(Body))
|
power = global.GetPowPower(shaarr(Body))
|
||||||
}
|
}
|
||||||
if (global.TEST_NETWORK && BlockNum >= 3290000) {
|
if (global.TEST_NETWORK && BlockNum >= 3290000) {
|
||||||
CheckMinPower = 0
|
CheckMinPower = 0
|
||||||
@@ -604,7 +608,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return "Error min power POW for create account (update client)";
|
return "Error min power POW for create account (update client)";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var TR = global.BufLib.GetObjectFromBuffer(Body, global.global.FORMAT_CREATE, {});
|
var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_CREATE, {});
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
return "Error transaction format";
|
return "Error transaction format";
|
||||||
@@ -620,7 +624,7 @@ class AccountApp extends require("./dapp")
|
|||||||
Account.Adviser = TR.Adviser
|
Account.Adviser = TR.Adviser
|
||||||
Account.Value.Smart = TR.Smart
|
Account.Value.Smart = TR.Smart
|
||||||
this.WriteStateTR(Account, TrNum)
|
this.WriteStateTR(Account, TrNum)
|
||||||
if (CompareArr(Account.PubKey, global.WALLET.PubKeyArr) === 0) {
|
if (global.CompareArr(Account.PubKey, global.WALLET.PubKeyArr) === 0) {
|
||||||
global.WALLET.OnCreateAccount(Account)
|
global.WALLET.OnCreateAccount(Account)
|
||||||
}
|
}
|
||||||
this.ResultTx = Account.Num
|
this.ResultTx = Account.Num
|
||||||
@@ -677,7 +681,7 @@ class AccountApp extends require("./dapp")
|
|||||||
MapItem[Item.ID] = 1
|
MapItem[Item.ID] = 1
|
||||||
}
|
}
|
||||||
bWas = 1
|
bWas = 1
|
||||||
ADD(TotalSum, Item)
|
global.ADD(TotalSum, Item)
|
||||||
}
|
}
|
||||||
if (!bWas && TR.Version < 3)
|
if (!bWas && TR.Version < 3)
|
||||||
return "No significant recipients";
|
return "No significant recipients";
|
||||||
@@ -711,7 +715,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return "Error - smart accounts can not be used in a multiple transaction";
|
return "Error - smart accounts can not be used in a multiple transaction";
|
||||||
}
|
}
|
||||||
if (TR.Version === 3 && Item.ID === 0 && Item.PubKey && Item.PubKey.length === 33) {
|
if (TR.Version === 3 && Item.ID === 0 && Item.PubKey && Item.PubKey.length === 33) {
|
||||||
if (Item.SumCOIN < PRICE_DAO(BlockNum).NewAccount)
|
if (Item.SumCOIN < global.PRICE_DAO(BlockNum).NewAccount)
|
||||||
return "Not enough money for create account with index: " + i;
|
return "Not enough money for create account with index: " + i;
|
||||||
var name = TR.Description;
|
var name = TR.Description;
|
||||||
var index = name.indexOf("\n");
|
var index = name.indexOf("\n");
|
||||||
@@ -725,7 +729,7 @@ class AccountApp extends require("./dapp")
|
|||||||
Item.ID = Account.Num
|
Item.ID = Account.Num
|
||||||
this.SendMoneyTR(Block, Data.Num, Account.Num, { SumCOIN: Item.SumCOIN, SumCENT: Item.SumCENT }, BlockNum, TrNum, TR.Description,
|
this.SendMoneyTR(Block, Data.Num, Account.Num, { SumCOIN: Item.SumCOIN, SumCENT: Item.SumCENT }, BlockNum, TrNum, TR.Description,
|
||||||
TR.Description, 1)
|
TR.Description, 1)
|
||||||
this.SendMoneyTR(Block, Account.Num, 0, { SumCOIN: PRICE_DAO(BlockNum).NewAccount, SumCENT: 0 }, BlockNum, TrNum, "Fee for create account",
|
this.SendMoneyTR(Block, Account.Num, 0, { SumCOIN: global.PRICE_DAO(BlockNum).NewAccount, SumCENT: 0 }, BlockNum, TrNum, "Fee for create account",
|
||||||
"", 1)
|
"", 1)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -765,11 +769,11 @@ class AccountApp extends require("./dapp")
|
|||||||
return "Error sign transaction";
|
return "Error sign transaction";
|
||||||
}
|
}
|
||||||
if (TR.Body && TR.Body.length) {
|
if (TR.Body && TR.Body.length) {
|
||||||
var App = DAppByType[TR.Body[0]];
|
var App = global.DAppByType[TR.Body[0]];
|
||||||
if (App) {
|
if (App) {
|
||||||
TR.FromPubKey = Data.PubKey
|
TR.FromPubKey = Data.PubKey
|
||||||
var Result = App.OnWriteTransaction(Block, TR.Body, BlockNum, TrNum, TR);
|
Result = App.OnWriteTransaction(Block, TR.Body, BlockNum, TrNum, TR);
|
||||||
if (Result !== true)
|
if (Result as any !== true)
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -804,7 +808,7 @@ class AccountApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
this.DeleteActOneDB(this.DBAct, BlockNumFrom)
|
this.DeleteActOneDB(this.DBAct, BlockNumFrom)
|
||||||
this.DeleteActOneDB(this.DBActPrev, BlockNumFrom)
|
this.DeleteActOneDB(this.DBActPrev, BlockNumFrom)
|
||||||
this.DBAccountsHash.Truncate(Math.trunc(BlockNumFrom / PERIOD_ACCOUNT_HASH))
|
this.DBAccountsHash.Truncate(Math.trunc(BlockNumFrom / global.PERIOD_ACCOUNT_HASH))
|
||||||
}
|
}
|
||||||
DeleteActOneDB(DBAct, BlockNum) {
|
DeleteActOneDB(DBAct, BlockNum) {
|
||||||
var MaxNum = DBAct.GetMaxNum();
|
var MaxNum = DBAct.GetMaxNum();
|
||||||
@@ -813,7 +817,7 @@ class AccountApp extends require("./dapp")
|
|||||||
for (var num = MaxNum; num >= 0; num--) {
|
for (var num = MaxNum; num >= 0; num--) {
|
||||||
var ItemCheck = DBAct.Read(num);
|
var ItemCheck = DBAct.Read(num);
|
||||||
if (!ItemCheck) {
|
if (!ItemCheck) {
|
||||||
ToLogTrace("!ItemCheck")
|
global.ToLogTrace("!ItemCheck")
|
||||||
throw "ERRR DeleteActOneDB";
|
throw "ERRR DeleteActOneDB";
|
||||||
}
|
}
|
||||||
if (ItemCheck.BlockNum < BlockNum) {
|
if (ItemCheck.BlockNum < BlockNum) {
|
||||||
@@ -882,7 +886,7 @@ class AccountApp extends require("./dapp")
|
|||||||
if (!Data)
|
if (!Data)
|
||||||
break;
|
break;
|
||||||
for (var i = 0; i < PubKeyArr.length; i++)
|
for (var i = 0; i < PubKeyArr.length; i++)
|
||||||
if (CompareArr(Data.PubKey, PubKeyArr[i]) === 0) {
|
if (global.CompareArr(Data.PubKey, PubKeyArr[i]) === 0) {
|
||||||
map[Data.Num] = i
|
map[Data.Num] = i
|
||||||
Count++
|
Count++
|
||||||
}
|
}
|
||||||
@@ -899,7 +903,7 @@ class AccountApp extends require("./dapp")
|
|||||||
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
|
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
|
||||||
arr.push(Data)
|
arr.push(Data)
|
||||||
Data.WN = map[key]
|
Data.WN = map[key]
|
||||||
Data.Name = NormalizeName(Data.Name)
|
Data.Name = global.NormalizeName(Data.Name)
|
||||||
if (Data.Currency)
|
if (Data.Currency)
|
||||||
Data.CurrencyObj = global.DApps.Smart.ReadSimple(Data.Currency)
|
Data.CurrencyObj = global.DApps.Smart.ReadSimple(Data.Currency)
|
||||||
if (Data.Value.Smart) {
|
if (Data.Value.Smart) {
|
||||||
@@ -925,7 +929,7 @@ class AccountApp extends require("./dapp")
|
|||||||
if (Filter.substring(0, 1) === "=") {
|
if (Filter.substring(0, 1) === "=") {
|
||||||
Filter = Filter.substring(1)
|
Filter = Filter.substring(1)
|
||||||
try {
|
try {
|
||||||
F = CreateEval(Filter, "Cur,Currency,ID,Operation,Amount,Adviser,Name,PubKey,Smart,BlockNum")
|
F = global.CreateEval(Filter, "Cur,Currency,ID,Operation,Amount,Adviser,Name,PubKey,Smart,BlockNum")
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
F = undefined
|
F = undefined
|
||||||
@@ -946,13 +950,13 @@ class AccountApp extends require("./dapp")
|
|||||||
break;
|
break;
|
||||||
if (!Data.PubKeyStr)
|
if (!Data.PubKeyStr)
|
||||||
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
|
Data.PubKeyStr = global.GetHexFromArr(Data.PubKey)
|
||||||
Data.Name = NormalizeName(Data.Name)
|
Data.Name = global.NormalizeName(Data.Name)
|
||||||
if (F) {
|
if (F) {
|
||||||
var Cur = Data.Currency;
|
var Cur = Data.Currency;
|
||||||
var Currency = Data.Currency;
|
var Currency = Data.Currency;
|
||||||
var ID = Data.Num;
|
var ID = Data.Num;
|
||||||
var Operation = Data.Value.OperationID;
|
var Operation = Data.Value.OperationID;
|
||||||
var Amount = FLOAT_FROM_COIN(Data.Value);
|
var Amount = global.FLOAT_FROM_COIN(Data.Value);
|
||||||
var Adviser = Data.Adviser;
|
var Adviser = Data.Adviser;
|
||||||
var Name = Data.Name;
|
var Name = Data.Name;
|
||||||
var PubKey = global.GetHexFromArr(Data.PubKey);
|
var PubKey = global.GetHexFromArr(Data.PubKey);
|
||||||
@@ -969,7 +973,7 @@ class AccountApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (Filter) {
|
if (Filter) {
|
||||||
var Amount = FLOAT_FROM_COIN(Data.Value);
|
var Amount = global.FLOAT_FROM_COIN(Data.Value);
|
||||||
var PubKey = global.GetHexFromArr(Data.PubKey);
|
var PubKey = global.GetHexFromArr(Data.PubKey);
|
||||||
var Str = "" + Data.Num + " " + Data.Value.OperationID + " " + Data.Name.toUpperCase() + " " + Data.Adviser + " " + Amount + " " + PubKey + " " + Smart + " " + Data.BlockNumCreate;
|
var Str = "" + Data.Num + " " + Data.Value.OperationID + " " + Data.Name.toUpperCase() + " " + Data.Adviser + " " + Amount + " " + PubKey + " " + Smart + " " + Data.BlockNumCreate;
|
||||||
if (Str.indexOf(Filter) < 0)
|
if (Str.indexOf(Filter) < 0)
|
||||||
@@ -1037,7 +1041,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
GetHashOrUndefined(BlockNum) {
|
GetHashOrUndefined(BlockNum) {
|
||||||
if (BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
if (BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||||
return undefined;
|
return undefined;
|
||||||
var Item = this.GetAccountHashItem(BlockNum);
|
var Item = this.GetAccountHashItem(BlockNum);
|
||||||
if (Item)
|
if (Item)
|
||||||
@@ -1046,7 +1050,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
GetAccountHashItem(BlockNum) {
|
GetAccountHashItem(BlockNum) {
|
||||||
var Item = this.DBAccountsHash.Read(Math.trunc(BlockNum / PERIOD_ACCOUNT_HASH));
|
var Item = this.DBAccountsHash.Read(Math.trunc(BlockNum / global.PERIOD_ACCOUNT_HASH));
|
||||||
return Item;
|
return Item;
|
||||||
}
|
}
|
||||||
GetHashedMaxBlockNum() {
|
GetHashedMaxBlockNum() {
|
||||||
@@ -1059,7 +1063,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
CalcHash(Block, BlockMaxAccount) {
|
CalcHash(Block, BlockMaxAccount) {
|
||||||
if (Block.BlockNum % PERIOD_ACCOUNT_HASH !== 0)
|
if (Block.BlockNum % global.PERIOD_ACCOUNT_HASH !== 0)
|
||||||
return;
|
return;
|
||||||
if (this.DBState.WasUpdate) {
|
if (this.DBState.WasUpdate) {
|
||||||
this.CalcMerkleTree()
|
this.CalcMerkleTree()
|
||||||
@@ -1075,14 +1079,14 @@ class AccountApp extends require("./dapp")
|
|||||||
SmartHash = []
|
SmartHash = []
|
||||||
}
|
}
|
||||||
var Data = {
|
var Data = {
|
||||||
Num: Block.BlockNum / PERIOD_ACCOUNT_HASH, BlockNum: Block.BlockNum, AccHash: Hash, SumHash: Block.SumHash, AccountMax: BlockMaxAccount,
|
Num: Block.BlockNum / global.PERIOD_ACCOUNT_HASH, BlockNum: Block.BlockNum, AccHash: Hash, SumHash: Block.SumHash, AccountMax: BlockMaxAccount,
|
||||||
SmartHash: SmartHash, SmartCount: SmartCount
|
SmartHash: SmartHash, SmartCount: SmartCount
|
||||||
};
|
};
|
||||||
this.DBAccountsHash.Write(Data)
|
this.DBAccountsHash.Write(Data)
|
||||||
this.DBAccountsHash.Truncate(Block.BlockNum / PERIOD_ACCOUNT_HASH)
|
this.DBAccountsHash.Truncate(Block.BlockNum / global.PERIOD_ACCOUNT_HASH)
|
||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
CalcMerkleTree(bForce) {
|
CalcMerkleTree(bForce?) {
|
||||||
this.DBState.MerkleHash = this.DBState.CalcMerkleTree(bForce)
|
this.DBState.MerkleHash = this.DBState.CalcMerkleTree(bForce)
|
||||||
this.DBState.WasUpdate = 0
|
this.DBState.WasUpdate = 0
|
||||||
}
|
}
|
||||||
@@ -1124,7 +1128,7 @@ class AccountApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
var arr = [];
|
var arr = [];
|
||||||
for (var key in DBChanges.BlockMap) {
|
for (var key in DBChanges.BlockMap) {
|
||||||
key = ParseNum(key)
|
key = global.ParseNum(key)
|
||||||
var Data = DBChanges.BlockMap[key];
|
var Data = DBChanges.BlockMap[key];
|
||||||
if (Data.Changed) {
|
if (Data.Changed) {
|
||||||
arr.push(Data)
|
arr.push(Data)
|
||||||
@@ -1170,7 +1174,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return false;
|
return false;
|
||||||
DBChanges.BlockMaxAccount = DBChanges.TRMaxAccount
|
DBChanges.BlockMaxAccount = DBChanges.TRMaxAccount
|
||||||
for (var key in DBChanges.TRMap) {
|
for (var key in DBChanges.TRMap) {
|
||||||
key = ParseNum(key)
|
key = global.ParseNum(key)
|
||||||
var Data = DBChanges.TRMap[key];
|
var Data = DBChanges.TRMap[key];
|
||||||
if (Data.Changed) {
|
if (Data.Changed) {
|
||||||
DBChanges.BlockMap[key] = Data
|
DBChanges.BlockMap[key] = Data
|
||||||
@@ -1213,7 +1217,7 @@ class AccountApp extends require("./dapp")
|
|||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
ReadStateTR(Num) {
|
ReadStateTR(Num) {
|
||||||
Num = ParseNum(Num)
|
Num = global.ParseNum(Num)
|
||||||
var TRMap = this.DBChanges.TRMap;
|
var TRMap = this.DBChanges.TRMap;
|
||||||
var Data = TRMap[Num];
|
var Data = TRMap[Num];
|
||||||
if (!Data) {
|
if (!Data) {
|
||||||
@@ -1239,7 +1243,7 @@ class AccountApp extends require("./dapp")
|
|||||||
Data = {
|
Data = {
|
||||||
Num: Num, Currency: BData.Currency, PubKey: BData.PubKey, Name: BData.Name, BlockNumCreate: BData.BlockNumCreate, Adviser: BData.Adviser,
|
Num: Num, Currency: BData.Currency, PubKey: BData.PubKey, Name: BData.Name, BlockNumCreate: BData.BlockNumCreate, Adviser: BData.Adviser,
|
||||||
Value: {
|
Value: {
|
||||||
SumCOIN: Value.SumCOIN, SumCENT: Value.SumCENT, OperationID: Value.OperationID, Smart: Value.Smart, Data: CopyArr(Value.Data),
|
SumCOIN: Value.SumCOIN, SumCENT: Value.SumCENT, OperationID: Value.OperationID, Smart: Value.Smart, Data: global.CopyArr(Value.Data),
|
||||||
NextPos: Value.NextPos
|
NextPos: Value.NextPos
|
||||||
}, BackupValue: BData.BackupValue
|
}, BackupValue: BData.BackupValue
|
||||||
}
|
}
|
||||||
@@ -1252,8 +1256,8 @@ class AccountApp extends require("./dapp")
|
|||||||
Data.ChangeTrNum = TrNum
|
Data.ChangeTrNum = TrNum
|
||||||
}
|
}
|
||||||
SendMoneyTR(Block, FromID, ToID, CoinSum, BlockNum, TrNum, DescriptionFrom, DescriptionTo, OperationCount) {
|
SendMoneyTR(Block, FromID, ToID, CoinSum, BlockNum, TrNum, DescriptionFrom, DescriptionTo, OperationCount) {
|
||||||
FromID = ParseNum(FromID)
|
FromID = global.ParseNum(FromID)
|
||||||
ToID = ParseNum(ToID)
|
ToID = global.ParseNum(ToID)
|
||||||
if (CoinSum.SumCENT >= 1e9) {
|
if (CoinSum.SumCENT >= 1e9) {
|
||||||
throw "ERROR SumCENT>=1e9";
|
throw "ERROR SumCENT>=1e9";
|
||||||
}
|
}
|
||||||
@@ -1261,7 +1265,7 @@ class AccountApp extends require("./dapp")
|
|||||||
if (!FromData) {
|
if (!FromData) {
|
||||||
throw "Send: Error account FromNum: " + FromID;
|
throw "Send: Error account FromNum: " + FromID;
|
||||||
}
|
}
|
||||||
if (!SUB(FromData.Value, CoinSum)) {
|
if (!global.SUB(FromData.Value, CoinSum)) {
|
||||||
throw "Not enough money on the account ID:" + FromID;
|
throw "Not enough money on the account ID:" + FromID;
|
||||||
}
|
}
|
||||||
this.WriteStateTR(FromData, TrNum)
|
this.WriteStateTR(FromData, TrNum)
|
||||||
@@ -1276,7 +1280,7 @@ class AccountApp extends require("./dapp")
|
|||||||
if (!ToData) {
|
if (!ToData) {
|
||||||
throw "Send: Error account ToNum: " + ToID;
|
throw "Send: Error account ToNum: " + ToID;
|
||||||
}
|
}
|
||||||
ADD(ToData.Value, CoinSum)
|
global.ADD(ToData.Value, CoinSum)
|
||||||
this.WriteStateTR(ToData, TrNum)
|
this.WriteStateTR(ToData, TrNum)
|
||||||
if (ToID > 15) {
|
if (ToID > 15) {
|
||||||
this.DBChanges.TRHistory.push({
|
this.DBChanges.TRHistory.push({
|
||||||
@@ -1288,11 +1292,11 @@ class AccountApp extends require("./dapp")
|
|||||||
FromData.Value.OperationID += OperationCount
|
FromData.Value.OperationID += OperationCount
|
||||||
if (FromData.Value.Smart) {
|
if (FromData.Value.Smart) {
|
||||||
var Context = { FromID: FromID, ToID: ToID, Description: DescriptionFrom, Value: CoinSum };
|
var Context = { FromID: FromID, ToID: ToID, Description: DescriptionFrom, Value: CoinSum };
|
||||||
RunSmartMethod(Block, FromData.Value.Smart, FromData, BlockNum, TrNum, Context, "OnSend")
|
global.RunSmartMethod(Block, FromData.Value.Smart, FromData, BlockNum, TrNum, Context, "OnSend")
|
||||||
}
|
}
|
||||||
if (ToData.Value.Smart) {
|
if (ToData.Value.Smart) {
|
||||||
var Context = { FromID: FromID, ToID: ToID, Description: DescriptionTo, Value: CoinSum };
|
var Context = { FromID: FromID, ToID: ToID, Description: DescriptionTo, Value: CoinSum };
|
||||||
RunSmartMethod(Block, ToData.Value.Smart, ToData, BlockNum, TrNum, Context, "OnGet")
|
global.RunSmartMethod(Block, ToData.Value.Smart, ToData, BlockNum, TrNum, Context, "OnGet")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GetSignTransferTx(TR, PrivKey) {
|
GetSignTransferTx(TR, PrivKey) {
|
||||||
@@ -1300,9 +1304,9 @@ class AccountApp extends require("./dapp")
|
|||||||
if (TR.Version === 2 || TR.Version === 3) {
|
if (TR.Version === 2 || TR.Version === 3) {
|
||||||
var format;
|
var format;
|
||||||
if (TR.Version === 2)
|
if (TR.Version === 2)
|
||||||
format = FORMAT_MONEY_TRANSFER_BODY2
|
format = global.FORMAT_MONEY_TRANSFER_BODY2
|
||||||
else
|
else
|
||||||
format = FORMAT_MONEY_TRANSFER_BODY3
|
format = global.FORMAT_MONEY_TRANSFER_BODY3
|
||||||
Arr = []
|
Arr = []
|
||||||
for (var i = 0; i < TR.To.length; i++) {
|
for (var i = 0; i < TR.To.length; i++) {
|
||||||
var Item = TR.To[i];
|
var Item = TR.To[i];
|
||||||
@@ -1313,14 +1317,14 @@ class AccountApp extends require("./dapp")
|
|||||||
for (var j = 0; j < 33; j++)
|
for (var j = 0; j < 33; j++)
|
||||||
Arr[Arr.length] = DataTo.PubKey[j]
|
Arr[Arr.length] = DataTo.PubKey[j]
|
||||||
}
|
}
|
||||||
var Body = global.BufLib.GetBufferFromObject(TR, format, MAX_TRANSACTION_SIZE, {});
|
var Body = global.BufLib.GetBufferFromObject(TR, format, global.MAX_TRANSACTION_SIZE, {});
|
||||||
for (var j = 0; j < Body.length; j++)
|
for (var j = 0; j < Body.length; j++)
|
||||||
Arr[Arr.length] = Body[j]
|
Arr[Arr.length] = Body[j]
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Arr = global.BufLib.GetBufferFromObject(TR, FORMAT_MONEY_TRANSFER_BODY, MAX_TRANSACTION_SIZE, {})
|
Arr = global.BufLib.GetBufferFromObject(TR, global.FORMAT_MONEY_TRANSFER_BODY, global.MAX_TRANSACTION_SIZE, {})
|
||||||
}
|
}
|
||||||
var sigObj = global.secp256k1.sign(SHA3BUF(Arr), Buffer.from(PrivKey));
|
var sigObj = global.secp256k1.sign(global.SHA3BUF(Arr), Buffer.from(PrivKey));
|
||||||
return sigObj.signature;
|
return sigObj.signature;
|
||||||
}
|
}
|
||||||
SaveHistory(Data) {
|
SaveHistory(Data) {
|
||||||
@@ -1332,7 +1336,7 @@ class AccountApp extends require("./dapp")
|
|||||||
var BufWrite = global.BufLib.GetBufferFromObject(Data, this.HistoryFormatArr[Data.Type], 100, WorkStructHistory);
|
var BufWrite = global.BufLib.GetBufferFromObject(Data, this.HistoryFormatArr[Data.Type], 100, WorkStructHistory);
|
||||||
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
var written = fs.writeSync(FD, BufWrite, 0, BufWrite.length, Position);
|
||||||
if (written !== BufWrite.length) {
|
if (written !== BufWrite.length) {
|
||||||
TO_ERROR_LOG("DB-HISTORY", 10, "Error write to file:" + written + " <> " + BufWrite.length)
|
global.TO_ERROR_LOG("DB-HISTORY", 10, "Error write to file:" + written + " <> " + BufWrite.length)
|
||||||
throw "Error write to FILE_NAME_HISTORY";
|
throw "Error write to FILE_NAME_HISTORY";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1389,20 +1393,20 @@ class AccountApp extends require("./dapp")
|
|||||||
if (!Data)
|
if (!Data)
|
||||||
break;
|
break;
|
||||||
if (Data.Currency === Currency) {
|
if (Data.Currency === Currency) {
|
||||||
ADD(SumCoin, Data.Value)
|
global.ADD(SumCoin, Data.Value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FLOAT_FROM_COIN(SumCoin);
|
return global.FLOAT_FROM_COIN(SumCoin);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
module.exports = AccountApp;
|
module.exports = AccountApp;
|
||||||
var App = new AccountApp;
|
var App = new AccountApp;
|
||||||
DApps["Accounts"] = App;
|
global.DApps["Accounts"] = App;
|
||||||
DAppByType[TYPE_TRANSACTION_CREATE] = App;
|
global.DAppByType[global.TYPE_TRANSACTION_CREATE] = App;
|
||||||
DAppByType[TYPE_DEPRECATED_TRANSFER1] = App;
|
global.DAppByType[TYPE_DEPRECATED_TRANSFER1] = App;
|
||||||
DAppByType[TYPE_DEPRECATED_TRANSFER2] = App;
|
global.DAppByType[TYPE_DEPRECATED_TRANSFER2] = App;
|
||||||
DAppByType[TYPE_TRANSACTION_TRANSFER] = App;
|
global.DAppByType[TYPE_TRANSACTION_TRANSFER] = App;
|
||||||
DAppByType[TYPE_TRANSACTION_ACC_HASH] = App;
|
global.DAppByType[global.TYPE_TRANSACTION_ACC_HASH] = App;
|
||||||
|
|
||||||
function TestStateFiles(Size, Format) {
|
function TestStateFiles(Size, Format) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class FileApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
GetScriptTransaction(Body) {
|
GetScriptTransaction(Body) {
|
||||||
var TR = this.GetObjectTransaction(Body);
|
var TR = this.GetObjectTransaction(Body);
|
||||||
ConvertBufferToStr(TR)
|
global.ConvertBufferToStr(TR)
|
||||||
return JSON.stringify(TR, undefined, 2);
|
return JSON.stringify(TR, undefined, 2);
|
||||||
}
|
}
|
||||||
GetVerifyTransaction(Block, BlockNum, TrNum, Body) {
|
GetVerifyTransaction(Block, BlockNum, TrNum, Body) {
|
||||||
|
|||||||
@@ -19,18 +19,20 @@ const MESSAGE_END = MAX_MSG_SIZE - 5;
|
|||||||
require("./names");
|
require("./names");
|
||||||
class CApp extends require("./dapp")
|
class CApp extends require("./dapp")
|
||||||
{
|
{
|
||||||
|
Channels
|
||||||
|
NamesMap
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super()
|
||||||
this.Channels = {}
|
this.Channels = {}
|
||||||
this.NamesMap = NAMES.KeyValueMap
|
this.NamesMap = global.NAMES.KeyValueMap
|
||||||
global.MESSAGER = this
|
global.MESSAGER = this
|
||||||
}
|
}
|
||||||
Decrypt(Body) {
|
Decrypt(Body) {
|
||||||
for (var key in this.Channels) {
|
for (var key in this.Channels) {
|
||||||
var Node = this.Channels[key];
|
var Node = this.Channels[key];
|
||||||
Decrypt(Body, TempArrayTr, Node.Secret)
|
global.Decrypt(Body, TempArrayTr, Node.Secret)
|
||||||
if (IsZeroArr(TempArrayTr.slice(MESSAGE_END))) {
|
if (global.IsZeroArr(TempArrayTr.slice(MESSAGE_END))) {
|
||||||
var Str = Utf8ArrayToStr(TempArrayTr.slice(MESSAGE_START));
|
var Str = global.Utf8ArrayToStr(TempArrayTr.slice(MESSAGE_START));
|
||||||
return Str;
|
return Str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,12 +41,11 @@ class CApp extends require("./dapp")
|
|||||||
Encrypt(StrMessage, StrTo) {
|
Encrypt(StrMessage, StrTo) {
|
||||||
var NameArr;
|
var NameArr;
|
||||||
if (typeof StrTo === "string") {
|
if (typeof StrTo === "string") {
|
||||||
NameArr = GetArrFromStr(StrTo, 32)
|
NameArr = global.GetArrFromStr(StrTo, 32)
|
||||||
|
} else {
|
||||||
|
NameArr = StrTo
|
||||||
}
|
}
|
||||||
else {
|
var arrMessage = global.GetArrFromStr(StrMessage, MESSAGE_END);
|
||||||
NameArr = Str
|
|
||||||
}
|
|
||||||
var arrMessage = GetArrFromStr(StrMessage, MESSAGE_END);
|
|
||||||
var ArrayTr = new Uint8Array(MAX_MSG_SIZE);
|
var ArrayTr = new Uint8Array(MAX_MSG_SIZE);
|
||||||
ArrayTr[0] = MESSAGE_TYPE_TRANSACTION
|
ArrayTr[0] = MESSAGE_TYPE_TRANSACTION
|
||||||
for (var i = 5; i < MAX_MSG_SIZE; i++) {
|
for (var i = 5; i < MAX_MSG_SIZE; i++) {
|
||||||
@@ -52,23 +53,23 @@ class CApp extends require("./dapp")
|
|||||||
}
|
}
|
||||||
var Body = new Uint8Array(MAX_MSG_SIZE);
|
var Body = new Uint8Array(MAX_MSG_SIZE);
|
||||||
var Node = this.OpenChannel(NameArr);
|
var Node = this.OpenChannel(NameArr);
|
||||||
Encrypt(ArrayTr, Body, Node.Secret)
|
global.Encrypt(ArrayTr, Body, Node.Secret)
|
||||||
return Body;
|
return Body;
|
||||||
}
|
}
|
||||||
OpenChannel(FromNameArr) {
|
OpenChannel(FromNameArr) {
|
||||||
var FromArr;
|
var FromArr;
|
||||||
var StrKeyFrom = GetHexFromAddres(FromNameArr);
|
var StrKeyFrom = global.GetHexFromAddres(FromNameArr);
|
||||||
if (this.NamesMap[StrKeyFrom]) {
|
if (this.NamesMap[StrKeyFrom]) {
|
||||||
FromArr = this.NamesMap[StrKeyFrom]
|
FromArr = this.NamesMap[StrKeyFrom]
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
FromArr = FromNameArr
|
FromArr = FromNameArr
|
||||||
}
|
}
|
||||||
var StrKey = GetHexFromAddres(FromArr);
|
var StrKey = global.GetHexFromAddres(FromArr);
|
||||||
var Node = this.Channels[StrKey];
|
var Node = this.Channels[StrKey];
|
||||||
if (!Node) {
|
if (!Node) {
|
||||||
Node = { addrArr: FromArr }
|
Node = { addrArr: FromArr }
|
||||||
CheckContextSecret(this.Server, Node)
|
global.CheckContextSecret(this.Server, Node)
|
||||||
this.Channels[StrKey] = Node
|
this.Channels[StrKey] = Node
|
||||||
}
|
}
|
||||||
return Node;
|
return Node;
|
||||||
@@ -77,7 +78,7 @@ class CApp extends require("./dapp")
|
|||||||
var Type = Body[0];
|
var Type = Body[0];
|
||||||
if (Type === OPEN_TYPE_TRANSACTION) {
|
if (Type === OPEN_TYPE_TRANSACTION) {
|
||||||
var ToArr = Body.slice(33);
|
var ToArr = Body.slice(33);
|
||||||
if (global.CompareArr(ToArr, NAMES.CurrentNameArr) === 0 || global.CompareArr(ToArr, this.Server.addrArr) === 0) {
|
if (global.CompareArr(ToArr, global.NAMES.CurrentNameArr) === 0 || global.CompareArr(ToArr, this.Server.addrArr) === 0) {
|
||||||
var FromNameArr = Body.slice(1, 33);
|
var FromNameArr = Body.slice(1, 33);
|
||||||
this.OpenChannel(FromNameArr)
|
this.OpenChannel(FromNameArr)
|
||||||
}
|
}
|
||||||
@@ -105,19 +106,19 @@ class CApp extends require("./dapp")
|
|||||||
|
|
||||||
function TestEncryptDecrypt() {
|
function TestEncryptDecrypt() {
|
||||||
const CMessager = module.exports;
|
const CMessager = module.exports;
|
||||||
var Server = { KeyPair: GetKeyPairTest("Test"), DApp: { Names: { KeyValueMap: {} } }, };
|
var Server = { KeyPair: global.GetKeyPairTest("Test"), DApp: { Names: { KeyValueMap: {} } }, };
|
||||||
var Test = new CMessager(Server);
|
var Test = new CMessager(Server);
|
||||||
var KeyPair2 = GetKeyPairTest("Test2");
|
var KeyPair2 = global.GetKeyPairTest("Test2");
|
||||||
var StrTest1 = GetArrFromStr("Test2", 32);
|
var StrTest1 = global.GetArrFromStr("Test2", 32);
|
||||||
var StrKey = GetHexFromAddres(StrTest1);
|
var StrKey = global.GetHexFromAddres(StrTest1);
|
||||||
MESSAGER.NamesMap[StrKey] = KeyPair2.addrArr;
|
global.MESSAGER.NamesMap[StrKey] = KeyPair2.addrArr;
|
||||||
var Body = MESSAGER.Encrypt("This is a test message!", "Test2");
|
var Body = global.MESSAGER.Encrypt("This is a test message!", "Test2");
|
||||||
var Str2 = MESSAGER.Decrypt(Body);
|
var Str2 = global.MESSAGER.Decrypt(Body);
|
||||||
console.log("Decrypt:");
|
console.log("Decrypt:");
|
||||||
console.log(Str2);
|
console.log(Str2);
|
||||||
};
|
};
|
||||||
module.exports = CApp;
|
module.exports = CApp;
|
||||||
var App = new CApp;
|
var Messager = new CApp;
|
||||||
DApps["Messager"] = App;
|
global.DApps["Messager"] = Messager;
|
||||||
DAppByType[OPEN_TYPE_TRANSACTION] = App;
|
global.DAppByType[OPEN_TYPE_TRANSACTION] = Messager;
|
||||||
DAppByType[MESSAGE_TYPE_TRANSACTION] = App;
|
global.DAppByType[MESSAGE_TYPE_TRANSACTION] = Messager;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class NameApp extends require("./dapp")
|
|||||||
var StrKey = global.GetHexFromAddres(Body.slice(1, 33));
|
var StrKey = global.GetHexFromAddres(Body.slice(1, 33));
|
||||||
if (!this.KeyValueMap[StrKey]) {
|
if (!this.KeyValueMap[StrKey]) {
|
||||||
this.KeyValueMap[StrKey] = Body.slice(33)
|
this.KeyValueMap[StrKey] = Body.slice(33)
|
||||||
if (CompareArr(Body.slice(33), this.Server.addrArr) === 0)
|
if (global.CompareArr(Body.slice(33), this.Server.addrArr) === 0)
|
||||||
this.CurrentNameArr = Body.slice(1, 33)
|
this.CurrentNameArr = Body.slice(1, 33)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ class SmartApp extends require("./dapp")
|
|||||||
FORMAT_ROW
|
FORMAT_ROW
|
||||||
ROW_SIZE
|
ROW_SIZE
|
||||||
DBSmart
|
DBSmart
|
||||||
|
RowHole
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super()
|
||||||
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
var bReadOnly = (global.PROCESS_NAME !== "TX");
|
||||||
@@ -125,10 +126,10 @@ class SmartApp extends require("./dapp")
|
|||||||
len += 2 + Body[len] + Body[len + 1] * 256
|
len += 2 + Body[len] + Body[len + 1] * 256
|
||||||
if (len + 64 > Body.length)
|
if (len + 64 > Body.length)
|
||||||
return 0;
|
return 0;
|
||||||
var Num = ReadUintFromArr(Body, len);
|
var Num = global.ReadUintFromArr(Body, len);
|
||||||
return Num;
|
return Num;
|
||||||
case TYPE_TRANSACTION_SMART_CHANGE:
|
case TYPE_TRANSACTION_SMART_CHANGE:
|
||||||
var Num = ReadUintFromArr(Body, 1);
|
var Num = global.ReadUintFromArr(Body, 1);
|
||||||
return Num;
|
return Num;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -184,7 +185,7 @@ class SmartApp extends require("./dapp")
|
|||||||
if (!format)
|
if (!format)
|
||||||
return "";
|
return "";
|
||||||
var TR = global.BufLib.GetObjectFromBuffer(Body, format, {});
|
var TR = global.BufLib.GetObjectFromBuffer(Body, format, {});
|
||||||
ConvertBufferToStr(TR)
|
global.ConvertBufferToStr(TR)
|
||||||
return JSON.stringify(TR, undefined, 2);
|
return JSON.stringify(TR, undefined, 2);
|
||||||
}
|
}
|
||||||
GetVerifyTransaction(Block, BlockNum, TrNum, Body) {
|
GetVerifyTransaction(Block, BlockNum, TrNum, Body) {
|
||||||
@@ -199,7 +200,7 @@ class SmartApp extends require("./dapp")
|
|||||||
return "Error length transaction (max size)";
|
return "Error length transaction (max size)";
|
||||||
if (BlockNum < global.SMART_BLOCKNUM_START)
|
if (BlockNum < global.SMART_BLOCKNUM_START)
|
||||||
return "Error block num";
|
return "Error block num";
|
||||||
var TR = global.BufLib.GetObjectFromBuffer(Body, FORMAT_SMART_CREATE, WorkStructCreate);
|
var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_SMART_CREATE, WorkStructCreate);
|
||||||
if (!TR.Name.trim())
|
if (!TR.Name.trim())
|
||||||
return "Name required";
|
return "Name required";
|
||||||
if (TR.AccountLength > 50)
|
if (TR.AccountLength > 50)
|
||||||
@@ -209,10 +210,10 @@ class SmartApp extends require("./dapp")
|
|||||||
var AddAccount = TR.AccountLength - 1;
|
var AddAccount = TR.AccountLength - 1;
|
||||||
var Price;
|
var Price;
|
||||||
if (TR.TokenGenerate)
|
if (TR.TokenGenerate)
|
||||||
Price = PRICE_DAO(BlockNum).NewTokenSmart
|
Price = global.PRICE_DAO(BlockNum).NewTokenSmart
|
||||||
else
|
else
|
||||||
Price = PRICE_DAO(BlockNum).NewSmart
|
Price = global.PRICE_DAO(BlockNum).NewSmart
|
||||||
Price += AddAccount * PRICE_DAO(BlockNum).NewAccount
|
Price += AddAccount * global.PRICE_DAO(BlockNum).NewAccount
|
||||||
if (!(ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= Price)) {
|
if (!(ContextFrom && ContextFrom.To.length === 1 && ContextFrom.To[0].ID === 0 && ContextFrom.To[0].SumCOIN >= Price)) {
|
||||||
return "Not money in the transaction";
|
return "Not money in the transaction";
|
||||||
}
|
}
|
||||||
@@ -270,11 +271,11 @@ class SmartApp extends require("./dapp")
|
|||||||
MaxCountOperationID = 1000000
|
MaxCountOperationID = 1000000
|
||||||
if (TR.OperationID > AccountFrom.Value.OperationID + MaxCountOperationID)
|
if (TR.OperationID > AccountFrom.Value.OperationID + MaxCountOperationID)
|
||||||
return "Error too much OperationID (expected max: " + (AccountFrom.Value.OperationID + MaxCountOperationID) + " for ID: " + TR.FromNum + ")";
|
return "Error too much OperationID (expected max: " + (AccountFrom.Value.OperationID + MaxCountOperationID) + " for ID: " + TR.FromNum + ")";
|
||||||
var hash = SHA3BUF(Body.slice(0, Body.length - 64 - 12), BlockNum);
|
var hash = global.SHA3BUF(Body.slice(0, Body.length - 64 - 12), BlockNum);
|
||||||
var Result = 0;
|
var Result = 0;
|
||||||
if (AccountFrom.PubKey[0] === 2 || AccountFrom.PubKey[0] === 3)
|
if (AccountFrom.PubKey[0] === 2 || AccountFrom.PubKey[0] === 3)
|
||||||
try {
|
try {
|
||||||
Result = secp256k1.verify(hash, TR.Sign, AccountFrom.PubKey)
|
Result = global.secp256k1.verify(hash, TR.Sign, AccountFrom.PubKey)
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
}
|
}
|
||||||
@@ -297,7 +298,7 @@ class SmartApp extends require("./dapp")
|
|||||||
return "Error length transaction (min size)";
|
return "Error length transaction (min size)";
|
||||||
if (BlockNum < global.SMART_BLOCKNUM_START)
|
if (BlockNum < global.SMART_BLOCKNUM_START)
|
||||||
return "Error block num";
|
return "Error block num";
|
||||||
var TR = global.BufLib.GetObjectFromBuffer(Body, FORMAT_SMART_RUN, WorkStructRun);
|
var TR = global.BufLib.GetObjectFromBuffer(Body, global.FORMAT_SMART_RUN, WorkStructRun);
|
||||||
var Account = global.DApps.Accounts.ReadStateTR(TR.Account);
|
var Account = global.DApps.Accounts.ReadStateTR(TR.Account);
|
||||||
if (!Account)
|
if (!Account)
|
||||||
return "RunSmart: Error account Num: " + TR.Account;
|
return "RunSmart: Error account Num: " + TR.Account;
|
||||||
@@ -369,7 +370,7 @@ class SmartApp extends require("./dapp")
|
|||||||
Filter = Filter.toUpperCase()
|
Filter = Filter.toUpperCase()
|
||||||
}
|
}
|
||||||
if (Category)
|
if (Category)
|
||||||
Category = ParseNum(Category)
|
Category = global.global.ParseNum(Category)
|
||||||
var WasError = 0;
|
var WasError = 0;
|
||||||
var arr = [];
|
var arr = [];
|
||||||
var Data;
|
var Data;
|
||||||
@@ -430,12 +431,12 @@ class SmartApp extends require("./dapp")
|
|||||||
if (!PrevItem) {
|
if (!PrevItem) {
|
||||||
throw "!PrevItem of Smart num = " + PrevNum;
|
throw "!PrevItem of Smart num = " + PrevNum;
|
||||||
}
|
}
|
||||||
Item.SumHash = sha3arr2(PrevItem.SumHash, Hash)
|
Item.SumHash = global.sha3arr2(PrevItem.SumHash, Hash)
|
||||||
}
|
}
|
||||||
this.DBSmart.Write(Item)
|
this.DBSmart.Write(Item)
|
||||||
}
|
}
|
||||||
ReadSmart(Num) {
|
ReadSmart(Num) {
|
||||||
Num = ParseNum(Num)
|
Num = global.global.ParseNum(Num)
|
||||||
var Smart = this.DBSmart.GetMap("ITEM" + Num);
|
var Smart = this.DBSmart.GetMap("ITEM" + Num);
|
||||||
if (!Smart) {
|
if (!Smart) {
|
||||||
Smart = this.DBSmart.Read(Num)
|
Smart = this.DBSmart.Read(Num)
|
||||||
@@ -480,12 +481,12 @@ class SmartApp extends require("./dapp")
|
|||||||
};
|
};
|
||||||
|
|
||||||
function GetParsing(Str) {
|
function GetParsing(Str) {
|
||||||
LexerJS.ParseCode(Str);
|
global.LexerJS.ParseCode(Str);
|
||||||
var Code = LexerJS.stream;
|
var Code = global.LexerJS.stream;
|
||||||
for (var key in LexerJS.FunctionMap) {
|
for (var key in global.LexerJS.FunctionMap) {
|
||||||
Code += ";\nfunclist." + key + "=" + LOC_ADD_NAME + key;
|
Code += ";\nfunclist." + key + "=" + LOC_ADD_NAME + key;
|
||||||
}
|
}
|
||||||
for (var key in LexerJS.ExternMap) {
|
for (var key in global.LexerJS.ExternMap) {
|
||||||
Code += ";\npublist." + key + "=" + LOC_ADD_NAME + key;
|
Code += ";\npublist." + key + "=" + LOC_ADD_NAME + key;
|
||||||
}
|
}
|
||||||
Code += "\n\
|
Code += "\n\
|
||||||
@@ -522,7 +523,7 @@ function GetSmartEvalContext(Smart) {
|
|||||||
var RunContext = undefined;
|
var RunContext = undefined;
|
||||||
global.RunSmartMethod = RunSmartMethod;
|
global.RunSmartMethod = RunSmartMethod;
|
||||||
|
|
||||||
function RunSmartMethod(Block, SmartOrSmartID, Account, BlockNum, TrNum, PayContext, MethodName, Params, bPublic) {
|
function RunSmartMethod(Block, SmartOrSmartID, Account, BlockNum?, TrNum?, PayContext?, MethodName?, Params?, bPublic?) {
|
||||||
var Smart = SmartOrSmartID;
|
var Smart = SmartOrSmartID;
|
||||||
if (typeof SmartOrSmartID === "number") {
|
if (typeof SmartOrSmartID === "number") {
|
||||||
Smart = global.DApps.Smart.ReadSmart(SmartOrSmartID);
|
Smart = global.DApps.Smart.ReadSmart(SmartOrSmartID);
|
||||||
@@ -540,11 +541,11 @@ function RunSmartMethod(Block, SmartOrSmartID, Account, BlockNum, TrNum, PayCont
|
|||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var context = {};
|
var context: any = {};
|
||||||
if (PayContext) {
|
if (PayContext) {
|
||||||
context.BlockNum = BlockNum;
|
context.BlockNum = BlockNum;
|
||||||
context.BlockHash = CopyArr(Block.Hash);
|
context.BlockHash = global.CopyArr(Block.Hash);
|
||||||
context.BlockAddrHash = CopyArr(Block.AddrHash);
|
context.BlockAddrHash = global.CopyArr(Block.AddrHash);
|
||||||
context.TrNum = TrNum;
|
context.TrNum = TrNum;
|
||||||
context.Account = GET_ACCOUNT(Account);
|
context.Account = GET_ACCOUNT(Account);
|
||||||
context.Smart = GET_SMART(Smart);
|
context.Smart = GET_SMART(Smart);
|
||||||
@@ -584,7 +585,7 @@ function GET_ACCOUNT(Obj) {
|
|||||||
}, get Currency() {
|
}, get Currency() {
|
||||||
return Data.Currency;
|
return Data.Currency;
|
||||||
}, get PubKey() {
|
}, get PubKey() {
|
||||||
return CopyArr(Data.PubKey);
|
return global.CopyArr(Data.PubKey);
|
||||||
}, get Name() {
|
}, get Name() {
|
||||||
return Data.Name;
|
return Data.Name;
|
||||||
}, get BlockNumCreate() {
|
}, get BlockNumCreate() {
|
||||||
@@ -912,7 +913,7 @@ function DO(Count) {
|
|||||||
|
|
||||||
function $SetValue(ID, CoinSum) {
|
function $SetValue(ID, CoinSum) {
|
||||||
DO(3000);
|
DO(3000);
|
||||||
ID = ParseNum(ID);
|
ID = global.ParseNum(ID);
|
||||||
if (!RunContext.Smart.TokenGenerate) {
|
if (!RunContext.Smart.TokenGenerate) {
|
||||||
throw "The smart-contract is not token generate, access to change values is denied";
|
throw "The smart-contract is not token generate, access to change values is denied";
|
||||||
}
|
}
|
||||||
@@ -924,7 +925,7 @@ function $SetValue(ID, CoinSum) {
|
|||||||
throw "The account currency does not belong to the smart-contract, access to change values is denied";
|
throw "The account currency does not belong to the smart-contract, access to change values is denied";
|
||||||
}
|
}
|
||||||
if (typeof CoinSum === "number") {
|
if (typeof CoinSum === "number") {
|
||||||
CoinSum = COIN_FROM_FLOAT(CoinSum);
|
CoinSum = global.COIN_FROM_FLOAT(CoinSum);
|
||||||
}
|
}
|
||||||
if (CoinSum.SumCENT >= 1e9) {
|
if (CoinSum.SumCENT >= 1e9) {
|
||||||
throw "ERROR SumCENT>=1e9";
|
throw "ERROR SumCENT>=1e9";
|
||||||
@@ -940,9 +941,9 @@ function $SetValue(ID, CoinSum) {
|
|||||||
|
|
||||||
function $Send(ToID, CoinSum, Description) {
|
function $Send(ToID, CoinSum, Description) {
|
||||||
DO(3000);
|
DO(3000);
|
||||||
ToID = ParseNum(ToID);
|
ToID = global.ParseNum(ToID);
|
||||||
if (typeof CoinSum === "number")
|
if (typeof CoinSum === "number")
|
||||||
CoinSum = COIN_FROM_FLOAT(CoinSum);
|
CoinSum = global.COIN_FROM_FLOAT(CoinSum);
|
||||||
if (CoinSum.SumCENT >= 1e9) {
|
if (CoinSum.SumCENT >= 1e9) {
|
||||||
throw "ERROR SumCENT>=1e9";
|
throw "ERROR SumCENT>=1e9";
|
||||||
}
|
}
|
||||||
@@ -959,8 +960,8 @@ function $Send(ToID, CoinSum, Description) {
|
|||||||
|
|
||||||
function $Move(FromID, ToID, CoinSum, Description) {
|
function $Move(FromID, ToID, CoinSum, Description) {
|
||||||
DO(3000);
|
DO(3000);
|
||||||
FromID = ParseNum(FromID);
|
FromID = global.ParseNum(FromID);
|
||||||
ToID = ParseNum(ToID);
|
ToID = global.ParseNum(ToID);
|
||||||
var FromData = global.DApps.Accounts.ReadStateTR(FromID);
|
var FromData = global.DApps.Accounts.ReadStateTR(FromID);
|
||||||
var ToData = global.DApps.Accounts.ReadStateTR(ToID);
|
var ToData = global.DApps.Accounts.ReadStateTR(ToID);
|
||||||
if (FromData.Currency !== ToData.Currency) {
|
if (FromData.Currency !== ToData.Currency) {
|
||||||
@@ -970,7 +971,7 @@ function $Move(FromID, ToID, CoinSum, Description) {
|
|||||||
throw "The account smart does not belong to the smart-contract, access is denied";
|
throw "The account smart does not belong to the smart-contract, access is denied";
|
||||||
}
|
}
|
||||||
if (typeof CoinSum === "number") {
|
if (typeof CoinSum === "number") {
|
||||||
CoinSum = COIN_FROM_FLOAT(CoinSum);
|
CoinSum = global.COIN_FROM_FLOAT(CoinSum);
|
||||||
}
|
}
|
||||||
if (CoinSum.SumCENT >= 1e9) {
|
if (CoinSum.SumCENT >= 1e9) {
|
||||||
throw "ERROR SumCENT>=1e9";
|
throw "ERROR SumCENT>=1e9";
|
||||||
@@ -999,7 +1000,7 @@ function $Event(Description) {
|
|||||||
|
|
||||||
function $ReadAccount(ID) {
|
function $ReadAccount(ID) {
|
||||||
DO(900);
|
DO(900);
|
||||||
ID = ParseNum(ID);
|
ID = global.ParseNum(ID);
|
||||||
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
||||||
if (!Account)
|
if (!Account)
|
||||||
throw "Error read account Num: " + ID;
|
throw "Error read account Num: " + ID;
|
||||||
@@ -1008,7 +1009,7 @@ function $ReadAccount(ID) {
|
|||||||
|
|
||||||
function $ReadState(ID) {
|
function $ReadState(ID) {
|
||||||
DO(900);
|
DO(900);
|
||||||
ID = ParseNum(ID);
|
ID = global.ParseNum(ID);
|
||||||
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
||||||
if (!Account)
|
if (!Account)
|
||||||
throw "Error read state account Num: " + ID;
|
throw "Error read state account Num: " + ID;
|
||||||
@@ -1037,7 +1038,7 @@ function $WriteState(Obj, ID) {
|
|||||||
DO(3000);
|
DO(3000);
|
||||||
if (ID === undefined)
|
if (ID === undefined)
|
||||||
ID = Obj.Num;
|
ID = Obj.Num;
|
||||||
ID = ParseNum(ID);
|
ID = global.ParseNum(ID);
|
||||||
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
var Account = global.DApps.Accounts.ReadStateTR(ID);
|
||||||
if (!Account)
|
if (!Account)
|
||||||
throw "Error write account Num: " + ID;
|
throw "Error write account Num: " + ID;
|
||||||
@@ -1056,12 +1057,12 @@ function $GetMaxAccount() {
|
|||||||
|
|
||||||
function $ADD(Coin, Value2) {
|
function $ADD(Coin, Value2) {
|
||||||
DO(5);
|
DO(5);
|
||||||
return ADD(Coin, Value2);
|
return global.ADD(Coin, Value2);
|
||||||
};
|
};
|
||||||
|
|
||||||
function $SUB(Coin, Value2) {
|
function $SUB(Coin, Value2) {
|
||||||
DO(5);
|
DO(5);
|
||||||
return SUB(Coin, Value2);
|
return global.SUB(Coin, Value2);
|
||||||
};
|
};
|
||||||
|
|
||||||
function $ISZERO(Coin) {
|
function $ISZERO(Coin) {
|
||||||
@@ -1074,22 +1075,22 @@ function $ISZERO(Coin) {
|
|||||||
|
|
||||||
function $FLOAT_FROM_COIN(Coin) {
|
function $FLOAT_FROM_COIN(Coin) {
|
||||||
DO(5);
|
DO(5);
|
||||||
return FLOAT_FROM_COIN(Coin);
|
return global.FLOAT_FROM_COIN(Coin);
|
||||||
};
|
};
|
||||||
|
|
||||||
function $COIN_FROM_FLOAT(Sum) {
|
function $COIN_FROM_FLOAT(Sum) {
|
||||||
DO(20);
|
DO(20);
|
||||||
return COIN_FROM_FLOAT(Sum);
|
return global.COIN_FROM_FLOAT(Sum);
|
||||||
};
|
};
|
||||||
|
|
||||||
function $COIN_FROM_STRING(Sum) {
|
function $COIN_FROM_STRING(Sum) {
|
||||||
DO(20);
|
DO(20);
|
||||||
return COIN_FROM_STRING(Sum);
|
return global.COIN_FROM_STRING(Sum);
|
||||||
};
|
};
|
||||||
|
|
||||||
function $require(SmartNum) {
|
function $require(SmartNum) {
|
||||||
DO(2000);
|
DO(2000);
|
||||||
SmartNum = ParseNum(SmartNum);
|
SmartNum = global.ParseNum(SmartNum);
|
||||||
var Smart = global.DApps.Smart.ReadSmart(SmartNum);
|
var Smart = global.DApps.Smart.ReadSmart(SmartNum);
|
||||||
if (!Smart) {
|
if (!Smart) {
|
||||||
throw "Smart does not exist. Error id number: " + SmartNum;
|
throw "Smart does not exist. Error id number: " + SmartNum;
|
||||||
@@ -1146,7 +1147,7 @@ function $parseInt(a) {
|
|||||||
|
|
||||||
function $parseUint(a) {
|
function $parseUint(a) {
|
||||||
DO(10);
|
DO(10);
|
||||||
return ParseNum(a);
|
return global.ParseNum(a);
|
||||||
};
|
};
|
||||||
|
|
||||||
function $String(a) {
|
function $String(a) {
|
||||||
|
|||||||
Reference in New Issue
Block a user