refactor: 0 error

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

View File

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