forked from circlecloud/tera
@@ -13,8 +13,10 @@ import CBlock from './block-loader'
|
||||
import { RBTree } from './library'
|
||||
import { STreeBuffer } from './base';
|
||||
import { teraManager } from '../rpc/manager'
|
||||
require('./library');
|
||||
require('./crypto-library');
|
||||
import * as crypto from 'crypto';
|
||||
import './crypto-library'
|
||||
import { TeraBlock, SocketSendInfo, TeraJobTx, TeraTr, TeraPOW } from '../interfaces/server';
|
||||
import CNode from './node';
|
||||
const TX_PROCESS_TIME = 100;
|
||||
const TX_DELTA_PROCESS_TIME = 300;
|
||||
global.CAN_START = false;
|
||||
@@ -43,14 +45,14 @@ var FORMAT_DATA_TRANSFER = "{\
|
||||
}";
|
||||
const WorkStructSend = {};
|
||||
export default class CConsensus extends CBlock {
|
||||
CurrentBlockNum
|
||||
SendBlockID
|
||||
RelayMode
|
||||
TreeSendPacket
|
||||
idBlockChainTimer
|
||||
OwnBlockCount
|
||||
LevelNodes
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
CurrentBlockNum: number
|
||||
SendBlockID: number
|
||||
RelayMode: boolean
|
||||
TreeSendPacket: RBTree<any>
|
||||
idBlockChainTimer: NodeJS.Timeout
|
||||
OwnBlockCount: number
|
||||
LevelNodes: any[]
|
||||
constructor(SetKeyPair: crypto.ECDH, RunIP: string, RunPort: number, UseRNDHeader: boolean, bVirtual: boolean) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.CurrentBlockNum = 0
|
||||
this.SendBlockID = 0
|
||||
@@ -70,7 +72,7 @@ export default class CConsensus extends CBlock {
|
||||
var self = this;
|
||||
if (self.idBlockChainTimer)
|
||||
clearInterval(self.idBlockChainTimer)
|
||||
self.idBlockChainTimer = 0
|
||||
self.idBlockChainTimer = undefined
|
||||
setTimeout(function() {
|
||||
self.idBlockChainTimer = setInterval(self.StartBlockChain.bind(self), global.CONSENSUS_PERIOD_TIME)
|
||||
self.OnStartSecond()
|
||||
@@ -144,7 +146,7 @@ export default class CConsensus extends CBlock {
|
||||
global.AddInfoBlock(Block0, "Was Active")
|
||||
}
|
||||
}
|
||||
TrToInfo(Block, Array, StrInfo) {
|
||||
TrToInfo(Block: TeraBlock, Array: any[], StrInfo: string) {
|
||||
var Str = "";
|
||||
for (var i = 0; i < Array.length; i++) {
|
||||
var Item = Array[i];
|
||||
@@ -153,7 +155,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
global.AddInfoBlock(Block, "" + StrInfo + ": Arr=[" + Str + "]")
|
||||
}
|
||||
TRANSFER(Info, CurTime) {
|
||||
TRANSFER(Info: SocketSendInfo, CurTime: number) {
|
||||
var startTime = process.hrtime();
|
||||
var Data = this.DataFromF(Info);
|
||||
var Node = Info.Node;
|
||||
@@ -186,7 +188,7 @@ export default class CConsensus extends CBlock {
|
||||
var WasNewAdd = 0;
|
||||
if (Data.TxArray.length) {
|
||||
for (var i = 0; i < Data.TxArray.length; i++) {
|
||||
var Tr = Data.TxArray[i];
|
||||
let Tr = Data.TxArray[i];
|
||||
var Res = this.AddTrToBlockQuote(Block, Tr);
|
||||
if (Res === 1) {
|
||||
WasNewAdd = 1
|
||||
@@ -204,7 +206,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < Data.TicketArray.length; i++) {
|
||||
var Tr = this.AddTicketToBlockQuote(Block, Data.TicketArray[i]);
|
||||
let Tr = this.AddTicketToBlockQuote(Block, Data.TicketArray[i]);
|
||||
if (Tr) {
|
||||
if (!Tr.NodesList)
|
||||
Tr.NodesList = []
|
||||
@@ -290,7 +292,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
}
|
||||
}
|
||||
CheckEndExchange(Block) {
|
||||
CheckEndExchange(Block: TeraBlock) {
|
||||
if (Block.EndExchange)
|
||||
return;
|
||||
if (!global.USE_TICKET) {
|
||||
@@ -307,7 +309,7 @@ export default class CConsensus extends CBlock {
|
||||
this.CreateTreeHash(Block)
|
||||
}
|
||||
}
|
||||
SendDataTransfer(Transfer, ArrT, MaxPOWList, MaxSumList, Block) {
|
||||
SendDataTransfer(Transfer: TeraJobTx, ArrT: any, MaxPOWList: any[], MaxSumList: any[], Block: TeraBlock) {
|
||||
for (var Addr in Transfer.TransferNodes) {
|
||||
var Item = Transfer.TransferNodes[Addr];
|
||||
Transfer.SendCount++
|
||||
@@ -354,10 +356,10 @@ export default class CConsensus extends CBlock {
|
||||
Block.JobListTX.push({ Node: Item.Node, TreeLevel: Item.TreeLevel, Time: Date.now() })
|
||||
}
|
||||
}
|
||||
Send(Node, Info, TypeData?) {
|
||||
Send(Node: CNode, Info: SocketSendInfo, TypeData?: number) {
|
||||
// defiend in server.ts
|
||||
}
|
||||
TRANSFERTX(Info, CurTime) {
|
||||
TRANSFERTX(Info: SocketSendInfo, CurTime: number) {
|
||||
var Data = this.DataFromF(Info);
|
||||
var Node = Info.Node;
|
||||
var Block = this.GetBlockContext(Data.BlockNum);
|
||||
@@ -376,7 +378,7 @@ export default class CConsensus extends CBlock {
|
||||
static GETTRANSFERTX_F() {
|
||||
return "{BlockNum:uint, TicketArray:[{HashTicket:arr10}]}";
|
||||
}
|
||||
GETTRANSFERTX(Info, CurTime) {
|
||||
GETTRANSFERTX(Info: SocketSendInfo, CurTime: number) {
|
||||
return;
|
||||
var Data = this.DataFromF(Info);
|
||||
var Node = Info.Node;
|
||||
@@ -389,7 +391,7 @@ export default class CConsensus extends CBlock {
|
||||
CanSendTest() {
|
||||
return 1;
|
||||
}
|
||||
SendTrByTickets(Info, Node, Block, ArrTT, CountTrySend) {
|
||||
SendTrByTickets(Info: SocketSendInfo, Node: CNode, Block: TeraBlock, ArrTT: any[], CountTrySend: number) {
|
||||
if (!Block.PowTxTree)
|
||||
return;
|
||||
var Arr = [];
|
||||
@@ -427,31 +429,31 @@ export default class CConsensus extends CBlock {
|
||||
static RETTRANSFERTX_F() {
|
||||
return "{BlockNum:uint,Array:[{body:tr}]}";
|
||||
}
|
||||
RETTRANSFERTX(Info, CurTime) {
|
||||
RETTRANSFERTX(Info: SocketSendInfo, CurTime: number) {
|
||||
return;
|
||||
var Data = this.DataFromF(Info);
|
||||
var Node = Info.Node;
|
||||
Node.TransferBlockNum = Data.BlockNum
|
||||
var Block = this.GetBlockContext(Data.BlockNum);
|
||||
if (!Block || !Block.PowTxTree) {
|
||||
return;
|
||||
}
|
||||
if (global.DoTxLog)
|
||||
global.ToLog("RETTRANSFERTX BlockNum:" + Block.BlockNum + " Array=" + Data.Array.length + " from " + global.NodeName(Node))
|
||||
for (var i = 0; i < Data.Array.length; i++) {
|
||||
var Tr = Data.Array[i];
|
||||
this.CheckCreateTransactionObject(Tr)
|
||||
var Tr0 = Block.PowTxTree.find(Tr);
|
||||
if (Tr0) {
|
||||
if (!Tr0.IsTx) {
|
||||
Tr0.IsTx = 1
|
||||
Tr0.body = Tr.body
|
||||
Tr0.HASH = Tr.HASH
|
||||
}
|
||||
}
|
||||
}
|
||||
// var Data = this.DataFromF(Info);
|
||||
// var Node = Info.Node;
|
||||
// Node.TransferBlockNum = Data.BlockNum
|
||||
// var Block = this.GetBlockContext(Data.BlockNum);
|
||||
// if (!Block || !Block.PowTxTree) {
|
||||
// return;
|
||||
// }
|
||||
// if (global.DoTxLog)
|
||||
// global.ToLog("RETTRANSFERTX BlockNum:" + Block.BlockNum + " Array=" + Data.Array.length + " from " + global.NodeName(Node))
|
||||
// for (var i = 0; i < Data.Array.length; i++) {
|
||||
// var Tr = Data.Array[i];
|
||||
// this.CheckCreateTransactionObject(Tr)
|
||||
// var Tr0 = Block.PowTxTree.find(Tr);
|
||||
// if (Tr0) {
|
||||
// if (!Tr0.IsTx) {
|
||||
// Tr0.IsTx = 1
|
||||
// Tr0.body = Tr.body
|
||||
// Tr0.HASH = Tr.HASH
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
DoJobListTX(Block) {
|
||||
DoJobListTX(Block: TeraBlock) {
|
||||
if (Block.EndExchange || !Block.JobListTX || !Block.PowTicketTree)
|
||||
return;
|
||||
var ArrTx;
|
||||
@@ -460,7 +462,7 @@ export default class CConsensus extends CBlock {
|
||||
var JobItem = Block.JobListTX[i];
|
||||
var Delta = CurTime - JobItem.Time;
|
||||
if (!JobItem.WasSend && Delta >= TX_DELTA_PROCESS_TIME) {
|
||||
JobItem.WasSend = 1
|
||||
JobItem.WasSend = true
|
||||
if (!ArrTx)
|
||||
ArrTx = this.GetArrayFromTxTree(Block)
|
||||
var Arr = this.FilterArrForSendNode(Block, JobItem.Node, ArrTx);
|
||||
@@ -473,7 +475,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
}
|
||||
}
|
||||
FindNodeTicket(Block, Tr, Node, bTt) {
|
||||
FindNodeTicket(Block: TeraBlock, Tr: TeraTr, Node: CNode, bTt: any) {
|
||||
var Ticket;
|
||||
if (bTt)
|
||||
Ticket = Tr
|
||||
@@ -489,7 +491,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
FilterArrForSendNode(Block, Node, ArrTx, bTt?) {
|
||||
FilterArrForSendNode(Block: TeraBlock, Node: CNode, ArrTx: any[], bTt?: number) {
|
||||
var Arr = [];
|
||||
for (var t = 0; t < ArrTx.length; t++) {
|
||||
var Tr = ArrTx[t];
|
||||
@@ -499,7 +501,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return Arr;
|
||||
}
|
||||
CheckEndExchange00(Block) {
|
||||
CheckEndExchange00(Block: TeraBlock) {
|
||||
if (Block.EndExchange)
|
||||
return;
|
||||
var CurTime = Date.now();
|
||||
@@ -530,7 +532,7 @@ export default class CConsensus extends CBlock {
|
||||
this.CheckTxExchange(Block, bSend)
|
||||
}
|
||||
}
|
||||
CheckTxExchange(Block, b?) {
|
||||
CheckTxExchange(Block: TeraBlock, b?: number) {
|
||||
return;
|
||||
if (Block.EndExchange)
|
||||
return;
|
||||
@@ -578,10 +580,10 @@ export default class CConsensus extends CBlock {
|
||||
this.SendF(ElArr.Node, SendData, ElArr.Arr.length * global.TR_TICKET_HASH_LENGTH + 1000)
|
||||
}
|
||||
}
|
||||
GetMaxSumListFromID(Node, MaxSumID, BlockList) {
|
||||
GetMaxSumListFromID(Node: CNode, MaxSumID: any[], BlockList: any[]) {
|
||||
var Str0 = "GETBL:" + Node.id;
|
||||
for (var i = 0; i < BlockList.length; i++) {
|
||||
var elemBlockList = BlockList[i];
|
||||
let elemBlockList = BlockList[i];
|
||||
global.TreeBlockBuf.SaveValue(Str0 + elemBlockList.ID, elemBlockList)
|
||||
}
|
||||
var MaxSum = [];
|
||||
@@ -601,7 +603,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return MaxSum;
|
||||
}
|
||||
CreateTransferBuffer(ArrT, MaxPOWList, MaxSumList, Block, Node) {
|
||||
CreateTransferBuffer(ArrT: any, MaxPOWList: TeraPOW[], MaxSumList: TeraPOW[], Block: TeraBlock, Node: CNode) {
|
||||
var Data;
|
||||
var MaxSumID = [];
|
||||
var BlockList = [];
|
||||
@@ -633,8 +635,17 @@ export default class CConsensus extends CBlock {
|
||||
ArrTx = ArrT
|
||||
}
|
||||
Data = {
|
||||
"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,
|
||||
"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, global.MAX_BLOCK_SIZE + 30000, WorkStructSend);
|
||||
return BufWrite;
|
||||
@@ -642,7 +653,7 @@ export default class CConsensus extends CBlock {
|
||||
static TRANSFER_F() {
|
||||
return FORMAT_DATA_TRANSFER;
|
||||
}
|
||||
CheckingMaxPowOther(Block) {
|
||||
CheckingMaxPowOther(Block: TeraBlock) {
|
||||
var POW = Block.MaxPOW;
|
||||
if (POW && POW.Hash && global.CompareArr(POW.PowHash, Block.PowHash) < 0) {
|
||||
var LoadBlockNum = Block.BlockNum;
|
||||
@@ -654,7 +665,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
Block.CheckMaxPow = true
|
||||
}
|
||||
AddToMaxPOW(Block, item, Node?) {
|
||||
AddToMaxPOW(Block: TeraBlock, item: TeraPOW, Node?: CNode) {
|
||||
if (Block && item) {
|
||||
if (!Block.MaxPOW)
|
||||
Block.MaxPOW = {}
|
||||
@@ -692,7 +703,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
}
|
||||
}
|
||||
AddPOWToMaxTree(POW, item) {
|
||||
AddPOWToMaxTree(POW: TeraPOW, item: TeraPOW) {
|
||||
if (!POW.MaxTree) {
|
||||
POW.MaxTree = new RBTree(function(a: any, b: any) {
|
||||
return global.CompareArr(a.PowHash, b.PowHash);
|
||||
@@ -725,7 +736,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
ToMaxPOWList(Arr) {
|
||||
ToMaxPOWList(Arr: any[]) {
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
var item = Arr[i];
|
||||
if (item && item.BlockNum >= this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH && item.BlockNum < this.CurrentBlockNum) {
|
||||
@@ -734,7 +745,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
}
|
||||
}
|
||||
RecreateMaxPOW(Block) {
|
||||
RecreateMaxPOW(Block: TeraBlock) {
|
||||
if (Block.MaxPOW && Block.MaxPOW.MaxTree) {
|
||||
var Tree = Block.MaxPOW.MaxTree;
|
||||
var it = Tree.iterator(), Item;
|
||||
@@ -749,7 +760,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
Block.CheckMaxSum = false
|
||||
}
|
||||
CheckMaxSum(Block) {
|
||||
CheckMaxSum(Block: TeraBlock) {
|
||||
var POW = Block.MaxSum;
|
||||
var List = this.GetBlockList(Block.BlockNum);
|
||||
var SumPow = this.GetSumFromList(List, Block.BlockNum);
|
||||
@@ -762,7 +773,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
Block.CheckMaxSum = true
|
||||
}
|
||||
AddToMaxSum(Block, item) {
|
||||
AddToMaxSum(Block: TeraBlock, item: TeraPOW) {
|
||||
if (Block && item) {
|
||||
if (!Block.MaxSum)
|
||||
Block.MaxSum = {}
|
||||
@@ -809,7 +820,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
}
|
||||
}
|
||||
GetBlockList(CurBlockNum) {
|
||||
GetBlockList(CurBlockNum: number) {
|
||||
var arr = [];
|
||||
for (var b = CurBlockNum - global.SUM_LIST_LENGTH + 1; b <= CurBlockNum; b++) {
|
||||
var Block = this.GetBlock(b);
|
||||
@@ -823,7 +834,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
GetSumFromList(arr, CurBlockNum) {
|
||||
GetSumFromList(arr: TeraBlock[], CurBlockNum: number) {
|
||||
var SumPow = 0;
|
||||
if (arr.length !== global.SUM_LIST_LENGTH)
|
||||
return SumPow;
|
||||
@@ -835,15 +846,14 @@ export default class CConsensus extends CBlock {
|
||||
Item.BlockNum = BlockNumStart + i
|
||||
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 {
|
||||
Item.Hash = Value.Hash
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return SumPow;
|
||||
}
|
||||
GetArrayFromTxTree(Block) {
|
||||
GetArrayFromTxTree(Block: TeraBlock) {
|
||||
if (!Block.PowTxTree)
|
||||
return [];
|
||||
var BufLength = 0;
|
||||
@@ -857,7 +867,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
GetArrayFromTicketTree(Block) {
|
||||
GetArrayFromTicketTree(Block: TeraBlock) {
|
||||
if (!Block.PowTicketTree)
|
||||
return [];
|
||||
var arr = [];
|
||||
@@ -867,7 +877,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
CheckPrioritetTx(Tr) {
|
||||
CheckPrioritetTx(Tr: TeraTr) {
|
||||
if (Tr.Prioritet === undefined) {
|
||||
var Body = Tr.body;
|
||||
Tr.Prioritet = global.MAX_LENGTH_SENDER_MAP
|
||||
@@ -881,10 +891,11 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
}
|
||||
}
|
||||
GetSenderPrioritet(BlockNum, SenderNum) {
|
||||
GetSenderPrioritet(BlockNum: number, SenderNum: number): number {
|
||||
return 0;
|
||||
//defiend in transaction-validator.ts(CSmartContract)
|
||||
}
|
||||
AddToQuote(Tree, Tr) {
|
||||
AddToQuote(Tree: RBTree<TeraTr>, Tr: TeraTr) {
|
||||
this.CheckPrioritetTx(Tr)
|
||||
var Tr0 = Tree.find(Tr);
|
||||
if (Tr0) {
|
||||
@@ -901,16 +912,16 @@ export default class CConsensus extends CBlock {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
IsValidTicket(Tr, BlockNum): any {
|
||||
IsValidTicket(Tr: TeraTr, BlockNum: number): any {
|
||||
// defiend in transaction-validator.ts(CSmartContract)
|
||||
}
|
||||
IsValidTransaction(Tr, BlockNum): any {
|
||||
IsValidTransaction(Tr: TeraTr, BlockNum: number): any {
|
||||
// defiend in transaction-validator.ts(CSmartContract)
|
||||
}
|
||||
AddDAppTransactions(BlockNum, Arr) {
|
||||
AddDAppTransactions(BlockNum: number, Arr: TeraTr[]) {
|
||||
// defiend in transaction-validator.ts(CSmartContract)
|
||||
}
|
||||
AddTicketToBlockQuote(Block, Tr) {
|
||||
AddTicketToBlockQuote(Block: TeraBlock, Tr: TeraTr) {
|
||||
if (Block.PowTicketTree) {
|
||||
var Res = this.IsValidTicket(Tr, Block.BlockNum);
|
||||
if (Res >= 1) {
|
||||
@@ -921,7 +932,7 @@ export default class CConsensus extends CBlock {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
AddTrToBlockQuote(Block, Tr, bTTAdd?) {
|
||||
AddTrToBlockQuote(Block: TeraBlock, Tr: TeraTr, bTTAdd?) {
|
||||
if (Block.PowTxTree) {
|
||||
var Res = this.IsValidTransaction(Tr, Block.BlockNum);
|
||||
if (Res >= 1) {
|
||||
@@ -935,7 +946,7 @@ export default class CConsensus extends CBlock {
|
||||
return Res;
|
||||
}
|
||||
}
|
||||
GetBlockContext(BlockNum) {
|
||||
GetBlockContext(BlockNum: number) {
|
||||
if (BlockNum === undefined || !this.IsCorrectBlockNum(BlockNum))
|
||||
return undefined;
|
||||
var Context = this.GetBlock(BlockNum);
|
||||
@@ -952,10 +963,10 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return Context;
|
||||
}
|
||||
StartBlock(Block) {
|
||||
StartBlock(Block: TeraBlock) {
|
||||
Block.Active = true
|
||||
}
|
||||
IsCorrectBlockNum(BlockNum) {
|
||||
IsCorrectBlockNum(BlockNum: number) {
|
||||
var start = this.CurrentBlockNum - global.BLOCK_PROCESSING_LENGTH;
|
||||
var finish = this.GetLastCorrectBlockNum();
|
||||
if (BlockNum < start || BlockNum > finish) {
|
||||
@@ -966,7 +977,7 @@ export default class CConsensus extends CBlock {
|
||||
GetLastCorrectBlockNum() {
|
||||
return this.CurrentBlockNum + 4;
|
||||
}
|
||||
GetStrSendCount(Block) {
|
||||
GetStrSendCount(Block: TeraBlock) {
|
||||
if (!Block)
|
||||
return "";
|
||||
var Str = "";
|
||||
@@ -979,7 +990,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return "" + Count + ":[" + Str.substr(1) + "]";
|
||||
}
|
||||
GetStrGetCount(Block) {
|
||||
GetStrGetCount(Block: TeraBlock) {
|
||||
if (!Block)
|
||||
return "";
|
||||
var Str = "";
|
||||
@@ -991,7 +1002,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return "" + Count + ":[" + Str.substr(1) + "]";
|
||||
}
|
||||
ToStrBlocks(DopStr) {
|
||||
ToStrBlocks(DopStr: string) {
|
||||
var num = Math.floor(this.CurrentBlockNum / 3) * 3;
|
||||
var start = num - global.BLOCK_PROCESSING_LENGTH2 + 2;
|
||||
var finish = this.CurrentBlockNum;
|
||||
@@ -1017,9 +1028,9 @@ export default class CConsensus extends CBlock {
|
||||
Str = Str.substr(1)
|
||||
global.ToInfo("" + finish + " -> " + Str + " " + DopStr)
|
||||
}
|
||||
PreparePOWHash(Block) {
|
||||
PreparePOWHash(Block: TeraBlock) {
|
||||
if (!Block.TreeHash)
|
||||
Block.TreeHash = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
Block.TreeHash = Buffer.from([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) {
|
||||
global.AddInfoBlock(Block, "-err prev hash-")
|
||||
@@ -1036,7 +1047,7 @@ export default class CConsensus extends CBlock {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
CalcTreeHashFromArrTr(BlockNum, arrTr) {
|
||||
CalcTreeHashFromArrTr(BlockNum: number, arrTr: TeraTr[]) {
|
||||
var arrHASH = [];
|
||||
for (var i = 0; i < arrTr.length; i++) {
|
||||
var Tr = arrTr[i];
|
||||
@@ -1045,7 +1056,7 @@ export default class CConsensus extends CBlock {
|
||||
var Tree = global.CalcMerklFromArray(BlockNum, arrHASH);
|
||||
return Tree.Root;
|
||||
}
|
||||
CreateTreeHash(Block) {
|
||||
CreateTreeHash(Block: TeraBlock) {
|
||||
if (Block.EndExchange)
|
||||
return;
|
||||
Block.EndExchange = true
|
||||
@@ -1071,7 +1082,7 @@ export default class CConsensus extends CBlock {
|
||||
Block.arrContent = arrContent
|
||||
Block.TrCount = Block.arrContent.length
|
||||
}
|
||||
WatchdogSaved(BlockNum) {
|
||||
WatchdogSaved(BlockNum: number) {
|
||||
var Block = this.GetBlock(BlockNum);
|
||||
if (!Block) {
|
||||
global.ToLog("#1 WatchdogSaved: no BlockNum=" + BlockNum)
|
||||
@@ -1128,7 +1139,7 @@ export default class CConsensus extends CBlock {
|
||||
var CURRENTBLOCKNUM = this.CurrentBlockNum;
|
||||
if (global.GrayConnect()) {
|
||||
if (!this.LoadHistoryMode)
|
||||
this.StartSyncBlockchain(undefined, 1)
|
||||
this.StartSyncBlockchain(undefined, true)
|
||||
return;
|
||||
}
|
||||
if (this.LoadHistoryMode)
|
||||
@@ -1307,7 +1318,7 @@ export default class CConsensus extends CBlock {
|
||||
this.RelayMode = !bWasSave
|
||||
this.FREE_MEM_BLOCKS(CURRENTBLOCKNUM - global.BLOCK_COUNT_IN_MEMORY)
|
||||
}
|
||||
GetAvgPowBlock(StartNum, CountNum) {
|
||||
GetAvgPowBlock(StartNum: number, CountNum: number) {
|
||||
var Count = 0;
|
||||
var SumPow = 0;
|
||||
for (var Num = StartNum; Num < StartNum + CountNum; Num++) {
|
||||
@@ -1323,13 +1334,13 @@ export default class CConsensus extends CBlock {
|
||||
else
|
||||
return SumPow / Count;
|
||||
}
|
||||
CreatePOWNew(Block) {
|
||||
CreatePOWNew(Block: TeraBlock) {
|
||||
global.CreateHashMinimal(Block, global.GENERATE_BLOCK_ACCOUNT)
|
||||
this.AddToMaxPOW(Block, {
|
||||
SeqHash: Block.SeqHash, AddrHash: Block.AddrHash, PrevHash: Block.PrevHash, TreeHash: Block.TreeHash,
|
||||
})
|
||||
}
|
||||
SetNoPOW(BlockNumFrom, bReload, RefBlockNum) {
|
||||
SetNoPOW(BlockNumFrom: number, bReload: number, RefBlockNum: string) {
|
||||
var CurNum = BlockNumFrom;
|
||||
var finish = this.GetLastCorrectBlockNum();
|
||||
while (true) {
|
||||
@@ -1349,7 +1360,7 @@ export default class CConsensus extends CBlock {
|
||||
CurNum++
|
||||
}
|
||||
}
|
||||
MiningProcess(msg) {
|
||||
MiningProcess(msg: TeraBlock) {
|
||||
var BlockMining = this.GetBlock(msg.BlockNum);
|
||||
if (!BlockMining) {
|
||||
teraManager.SendToWebClient({
|
||||
|
||||
Reference in New Issue
Block a user