forked from circlecloud/tera
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user