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