update code
This commit is contained in:
1606
Source/system/accounts.js
Normal file
1606
Source/system/accounts.js
Normal file
File diff suppressed because it is too large
Load Diff
78
Source/system/dapp.js
Normal file
78
Source/system/dapp.js
Normal 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
44
Source/system/file.js
Normal 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
143
Source/system/messager.js
Normal 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
40
Source/system/names.js
Normal 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
1431
Source/system/smart.js
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user