1
0
forked from circlecloud/tera

refactor: add more type define

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2019-07-24 13:03:06 +08:00
parent 38e396feb0
commit c666069889
18 changed files with 896 additions and 682 deletions

View File

@@ -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({