forked from circlecloud/tera
@@ -10,17 +10,20 @@
|
||||
|
||||
"use strict";
|
||||
import { RBTree } from './library';
|
||||
import * as crypto from 'crypto'
|
||||
const MAX_MESSAGE_COUNT = 1000;
|
||||
import CSmartContract from './transaction-validator'
|
||||
import { TeraTr, SocketSendInfo } from '../interfaces/server';
|
||||
import CNode from './node';
|
||||
export default class CMessages extends CSmartContract {
|
||||
MemPoolMsg
|
||||
constructor(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual) {
|
||||
MemPoolMsg: RBTree<any>[]
|
||||
constructor(SetKeyPair: crypto.ECDH, RunIP: string, RunPort: number, UseRNDHeader: boolean, bVirtual: boolean) {
|
||||
super(SetKeyPair, RunIP, RunPort, UseRNDHeader, bVirtual)
|
||||
this.MemPoolMsg = []
|
||||
for (var i = 0; i <= global.MAX_LEVEL_SPECIALIZATION; i++)
|
||||
this.MemPoolMsg[i] = new RBTree(global.CompareItemTimePow)
|
||||
}
|
||||
AddMsgToQuote(Msg) {
|
||||
AddMsgToQuote(Msg: TeraTr) {
|
||||
var Tree = this.MemPoolMsg[Msg.Level];
|
||||
if (Tree) {
|
||||
if (Tree.insert(Msg)) {
|
||||
@@ -38,7 +41,7 @@ export default class CMessages extends CSmartContract {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
IsValidMsg(Msg) {
|
||||
IsValidMsg(Msg: TeraTr) {
|
||||
this.CheckCreateMsgHASH(Msg)
|
||||
if (Msg.power < global.MIN_POWER_POW_MSG)
|
||||
return - 1;
|
||||
@@ -46,7 +49,7 @@ export default class CMessages extends CSmartContract {
|
||||
return - 1;
|
||||
return 1;
|
||||
}
|
||||
CheckCreateMsgHASH(Msg) {
|
||||
CheckCreateMsgHASH(Msg: TeraTr) {
|
||||
if (!Msg.HashPow) {
|
||||
Msg.HASH = global.sha3(Msg.body)
|
||||
Msg.HashPow = global.GetHashWithValues(Msg.HASH, Msg.nonce, Msg.time)
|
||||
@@ -57,16 +60,19 @@ export default class CMessages extends CSmartContract {
|
||||
Msg.Level = global.MAX_LEVEL_SPECIALIZATION
|
||||
}
|
||||
}
|
||||
CreateMsgFromBody(Body, ToAddr) {
|
||||
CreateMsgFromBody(Body: any, ToAddr: any) {
|
||||
var HASH = global.sha3(Body);
|
||||
var Msg = {
|
||||
HASH: HASH, body: Body, addrArr: ToAddr, nonce: global.CreateNoncePOWExtern(HASH, this.CurrentBlockNum, 3 * (1 << global.MIN_POWER_POW_MSG)),
|
||||
HASH: HASH,
|
||||
body: Body,
|
||||
addrArr: ToAddr,
|
||||
nonce: global.CreateNoncePOWExtern(HASH, this.CurrentBlockNum, 3 * (1 << global.MIN_POWER_POW_MSG)),
|
||||
time: this.CurrentBlockNum,
|
||||
};
|
||||
this.CheckCreateMsgHASH(Msg)
|
||||
return Msg;
|
||||
}
|
||||
SendMessage(Body, ToAddr) {
|
||||
SendMessage(Body: any, ToAddr: any) {
|
||||
var Msg = this.CreateMsgFromBody(Body, ToAddr);
|
||||
this.SendMessageNext(Msg)
|
||||
}
|
||||
@@ -91,7 +97,7 @@ export default class CMessages extends CSmartContract {
|
||||
static MESSAGE_F() {
|
||||
return "{Arr:[{addrArr:hash,body:tr,nonce:uint,time:uint}]}";
|
||||
}
|
||||
MESSAGE(Info, CurTime) {
|
||||
MESSAGE(Info: SocketSendInfo, CurTime: number) {
|
||||
var Data = this.DataFromF(Info);
|
||||
var arr = Data.Arr;
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
@@ -112,11 +118,11 @@ export default class CMessages extends CSmartContract {
|
||||
}
|
||||
}
|
||||
}
|
||||
SendGetMessage(Node) {
|
||||
SendGetMessage(Node: CNode) {
|
||||
var Context = { "SendGetMessage": 1 };
|
||||
this.Send(Node, { "Method": "GETMESSAGE", "Context": Context, "Data": undefined })
|
||||
}
|
||||
GETMESSAGE(Info, CurTime) {
|
||||
GETMESSAGE(Info: SocketSendInfo, CurTime: number) {
|
||||
var arr = [];
|
||||
var BufLength = 300;
|
||||
var Level = global.AddrLevelArr(this.addrArr, Info.Node.addrArr);
|
||||
@@ -132,7 +138,7 @@ export default class CMessages extends CSmartContract {
|
||||
}
|
||||
this.SendF(Info.Node, { "Method": "MESSAGE", "Context": Info.Context, "Data": { Arr: arr } }, BufLength)
|
||||
}
|
||||
AddTransaction(Tr, ToAll?) {
|
||||
AddTransaction(Tr: TeraTr, ToAll?: boolean) {
|
||||
Tr.ToAll = ToAll
|
||||
var Res = this.IsValidTransaction(Tr, this.CurrentBlockNum);
|
||||
if (Res <= 0 && Res !== - 3)
|
||||
@@ -168,7 +174,7 @@ export default class CMessages extends CSmartContract {
|
||||
ToLogContext("#1 Add " + TrName(Tr) + " for Block: " + Tr.num + " Res=" + Res)
|
||||
return Res;
|
||||
}
|
||||
SendTransaction(Tr) {
|
||||
SendTransaction(Tr: TeraTr) {
|
||||
if (!Tr.ToAll)
|
||||
return;
|
||||
var CurTime = global.GetCurrentTime(0) - 0;
|
||||
@@ -201,17 +207,17 @@ export default class CMessages extends CSmartContract {
|
||||
static TRANSACTION_F() {
|
||||
return "{body:tr}";
|
||||
}
|
||||
TRANSACTION(Info, CurTime) {
|
||||
TRANSACTION(Info: SocketSendInfo, CurTime: number) {
|
||||
var Tr = this.DataFromF(Info);
|
||||
ToLogContext("Receive " + TrName(Tr) + " from " + global.NodeName(Info.Node))
|
||||
this.AddTransaction(Tr, 0)
|
||||
this.AddTransaction(Tr, false)
|
||||
}
|
||||
};
|
||||
|
||||
function ToLogContext(Str) {
|
||||
function ToLogContext(Str: string) {
|
||||
};
|
||||
|
||||
function TrName(Tr) {
|
||||
function TrName(Tr: TeraTr) {
|
||||
if (!Tr.HASH)
|
||||
global.SERVER.CheckCreateTransactionObject(Tr);
|
||||
var Str = global.GetHexFromArr(Tr.HASH);
|
||||
|
||||
Reference in New Issue
Block a user