update code

This commit is contained in:
2019-07-12 20:45:46 +08:00
commit 750a54c15f
131 changed files with 49139 additions and 0 deletions

1606
Source/system/accounts.js Normal file

File diff suppressed because it is too large Load Diff

78
Source/system/dapp.js Normal file
View File

@@ -0,0 +1,78 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov (Vtools) 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://t.me/terafoundation
*/
"use strict";
const fs = require('fs');
class DApp
{
constructor()
{
}
Name()
{
return "";
}
SendMessage(Body, ToAddr)
{
SERVER.SendMessage(Body, ToAddr)
}
AddTransaction(Tr)
{
SERVER.AddTransaction(Tr)
}
GetScriptTransaction(Body)
{
return "";
}
GetVerifyTransaction(Block, BlockNum, TrNum, Body)
{
return 1;
}
ClearDataBase()
{
}
GetSenderNum(BlockNum, Body)
{
return 0;
}
OnWriteBlockStart(Block)
{
}
OnWriteBlockFinish(Block)
{
}
OnDeleteBlock(Block)
{
}
OnWriteTransaction(Block, Body, BlockNum, TrNum)
{
}
OnMessage(Msg)
{
}
};
module.exports = DApp;
function ReqDir(Path)
{
if(fs.existsSync(Path))
{
var arr = fs.readdirSync(Path);
for(var i = 0; i < arr.length; i++)
{
var name = arr[i];
ToLog("Reg: " + name);
var name2 = Path + "/" + arr[i];
require(name2);
}
}
};
global.DApps = {};
global.DAppByType = {};

44
Source/system/file.js Normal file
View File

@@ -0,0 +1,44 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov (Vtools) 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://t.me/terafoundation
*/
"use strict";
global.TYPE_TRANSACTION_FILE = 5;
global.FORMAT_FILE_CREATE = "{type:byte,Name:str,ContentType:str,Reserve:arr10,Data:tr}";
const WorkStructRun = {};
class FileApp extends require("./dapp")
{
constructor()
{
super()
}
OnWriteTransaction(Block, Body, BlockNum, TrNum, ContextFrom)
{
return true;
}
GetObjectTransaction(Body)
{
var TR = BufLib.GetObjectFromBuffer(Body, FORMAT_FILE_CREATE, WorkStructRun);
return TR;
}
GetScriptTransaction(Body)
{
var TR = this.GetObjectTransaction(Body);
ConvertBufferToStr(TR)
return JSON.stringify(TR, "", 2);
}
GetVerifyTransaction(Block, BlockNum, TrNum, Body)
{
return 1;
}
};
module.exports = FileApp;
var App = new FileApp;
DApps["File"] = App;
DAppByType[TYPE_TRANSACTION_FILE] = App;

143
Source/system/messager.js Normal file
View File

@@ -0,0 +1,143 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov (Vtools) 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://t.me/terafoundation
*/
"use strict";
require('../core/crypto-library');
const OPEN_TYPE_TRANSACTION = 11;
const MESSAGE_TYPE_TRANSACTION = 12;
const MAX_MSG_SIZE = 1024;
var TempArrayTr = new Uint8Array(MAX_MSG_SIZE);
const MESSAGE_START = 9;
const MESSAGE_END = MAX_MSG_SIZE - 5;
require("./names");
class CApp extends require("./dapp")
{
constructor()
{
super()
this.Channels = {}
this.NamesMap = NAMES.KeyValueMap
global.MESSAGER = this
}
Decrypt(Body)
{
for(var key in this.Channels)
{
var Node = this.Channels[key];
Decrypt(Body, TempArrayTr, Node.Secret)
if(IsZeroArr(TempArrayTr.slice(MESSAGE_END)))
{
var Str = Utf8ArrayToStr(TempArrayTr.slice(MESSAGE_START));
return Str;
}
}
return undefined;
}
Encrypt(StrMessage, StrTo)
{
var NameArr;
if(typeof StrTo === "string")
{
NameArr = GetArrFromStr(StrTo, 32)
}
else
{
NameArr = Str
}
var arrMessage = GetArrFromStr(StrMessage, MESSAGE_END);
var ArrayTr = new Uint8Array(MAX_MSG_SIZE);
ArrayTr[0] = MESSAGE_TYPE_TRANSACTION
for(var i = 5; i < MAX_MSG_SIZE; i++)
{
ArrayTr[i] = arrMessage[i - MESSAGE_START]
}
var Body = new Uint8Array(MAX_MSG_SIZE);
var Node = this.OpenChannel(NameArr);
Encrypt(ArrayTr, Body, Node.Secret)
return Body;
}
OpenChannel(FromNameArr)
{
var FromArr;
var StrKeyFrom = GetHexFromAddres(FromNameArr);
if(this.NamesMap[StrKeyFrom])
{
FromArr = this.NamesMap[StrKeyFrom]
}
else
{
FromArr = FromNameArr
}
var StrKey = GetHexFromAddres(FromArr);
var Node = this.Channels[StrKey];
if(!Node)
{
Node = {addrArr:FromArr}
CheckContextSecret(this.Server, Node)
this.Channels[StrKey] = Node
}
return Node;
}
OnWriteTransaction(Block, Body, BlockNum, TrNum)
{
var Type = Body[0];
if(Type === OPEN_TYPE_TRANSACTION)
{
var ToArr = Body.slice(33);
if(CompareArr(ToArr, NAMES.CurrentNameArr) === 0 || CompareArr(ToArr, this.Server.addrArr) === 0)
{
var FromNameArr = Body.slice(1, 33);
this.OpenChannel(FromNameArr)
}
}
else
if(Type === MESSAGE_TYPE_TRANSACTION)
{
var Str = this.Decrypt(Body);
if(Str !== undefined)
ToLog("GET MESSAGE:" + Str)
}
}
OnMessage(Msg)
{
ToLog("GET MESSAGE:" + Msg.body)
return ;
var Body = Msg.body;
var Type = Body[0];
if(Type === MESSAGE_TYPE_TRANSACTION)
{
var Str = this.Decrypt(Body);
if(Str !== undefined)
{
ToLog("GET MESSAGE:" + Str)
}
}
}
};
function TestEncryptDecrypt()
{
const CMessager = module.exports;
var Server = {KeyPair:GetKeyPairTest("Test"), DApp:{Names:{KeyValueMap:{}}}, };
var Test = new CMessager(Server);
var KeyPair2 = GetKeyPairTest("Test2");
var StrTest1 = GetArrFromStr("Test2", 32);
var StrKey = GetHexFromAddres(StrTest1);
MESSAGER.NamesMap[StrKey] = KeyPair2.addrArr;
var Body = MESSAGER.Encrypt("This is a test message!", "Test2");
var Str2 = MESSAGER.Decrypt(Body);
console.log("Decrypt:");
console.log(Str2);
};
module.exports = CApp;
var App = new CApp;
DApps["Messager"] = App;
DAppByType[OPEN_TYPE_TRANSACTION] = App;
DAppByType[MESSAGE_TYPE_TRANSACTION] = App;

40
Source/system/names.js Normal file
View File

@@ -0,0 +1,40 @@
/*
* @project: TERA
* @version: Development (beta)
* @license: MIT (not for evil)
* @copyright: Yuriy Ivanov (Vtools) 2017-2019 [progr76@gmail.com]
* Web: https://terafoundation.org
* Twitter: https://twitter.com/terafoundation
* Telegram: https://t.me/terafoundation
*/
"use strict";
const NAMES_TYPE_TRANSACTION = 10;
class CApp extends require("./dapp")
{
constructor()
{
super()
this.KeyValueMap = {}
this.CurrentNameArr = ""
global.NAMES = this
}
OnWriteTransaction(Block, Body, BlockNum, TrNum)
{
return ;
if(Body[0] === NAMES_TYPE_TRANSACTION)
{
var StrKey = GetHexFromAddres(Body.slice(1, 33));
if(!this.KeyValueMap[StrKey])
{
this.KeyValueMap[StrKey] = Body.slice(33)
if(CompareArr(Body.slice(33), this.Server.addrArr) === 0)
this.CurrentNameArr = Body.slice(1, 33)
}
}
}
};
module.exports = CApp;
var App = new CApp;
DApps["Names"] = App;
DAppByType[NAMES_TYPE_TRANSACTION] = App;

1431
Source/system/smart.js Normal file

File diff suppressed because it is too large Load Diff