1
0
forked from circlecloud/tera

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

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