style: comment unused code and format
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
@@ -10,23 +10,19 @@
|
||||
|
||||
const ipcRenderer = require('electron').ipcRenderer;
|
||||
|
||||
function GetDataElectron(Method,ObjPost,Func)
|
||||
{
|
||||
if(Func === undefined)
|
||||
{
|
||||
function GetDataElectron(Method, ObjPost, Func) {
|
||||
if (Func === undefined) {
|
||||
Func = ObjPost;
|
||||
ObjPost = null;
|
||||
}
|
||||
var reply;
|
||||
try
|
||||
{
|
||||
reply = ipcRenderer.sendSync('GetData', {path:Method, obj:ObjPost});
|
||||
try {
|
||||
reply = ipcRenderer.sendSync('GetData', { path: Method, obj: ObjPost });
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
catch (e) {
|
||||
reply = undefined;
|
||||
}
|
||||
if(Func)
|
||||
if (Func)
|
||||
Func(reply);
|
||||
};
|
||||
window.GetData = GetDataElectron;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,10 +11,9 @@
|
||||
var MAX_SUPER_VALUE_POW = (1 << 30) * 2;
|
||||
window.TYPE_TRANSACTION_CREATE = 100;
|
||||
|
||||
function GetHashWithValues(hash0,value1,value2,bNotCopy)
|
||||
{
|
||||
function GetHashWithValues(hash0, value1, value2, bNotCopy) {
|
||||
var hash;
|
||||
if(bNotCopy)
|
||||
if (bNotCopy)
|
||||
hash = hash0;
|
||||
else
|
||||
hash = hash0.slice();
|
||||
@@ -30,20 +29,15 @@ function GetHashWithValues(hash0,value1,value2,bNotCopy)
|
||||
return arrhash;
|
||||
};
|
||||
|
||||
function GetPowPower(arrhash)
|
||||
{
|
||||
function GetPowPower(arrhash) {
|
||||
var SumBit = 0;
|
||||
for(var i = 0; i < arrhash.length; i++)
|
||||
{
|
||||
for (var i = 0; i < arrhash.length; i++) {
|
||||
var byte = arrhash[i];
|
||||
for(var b = 7; b >= 0; b--)
|
||||
{
|
||||
if((byte >> b) & 1)
|
||||
{
|
||||
for (var b = 7; b >= 0; b--) {
|
||||
if ((byte >> b) & 1) {
|
||||
return SumBit;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SumBit++;
|
||||
}
|
||||
}
|
||||
@@ -51,29 +45,25 @@ function GetPowPower(arrhash)
|
||||
return SumBit;
|
||||
};
|
||||
|
||||
function GetPowValue(arrhash)
|
||||
{
|
||||
function GetPowValue(arrhash) {
|
||||
var value = (arrhash[0] << 23) * 2 + (arrhash[1] << 16) + (arrhash[2] << 8) + arrhash[3];
|
||||
value = value * 256 + arrhash[4];
|
||||
value = value * 256 + arrhash[5];
|
||||
return value;
|
||||
};
|
||||
|
||||
function CreateNoncePOWExtern(arr0,BlockNum,count,startnone)
|
||||
{
|
||||
function CreateNoncePOWExtern(arr0, BlockNum, count, startnone) {
|
||||
var arr = [];
|
||||
for(var i = 0; i < arr0.length; i++)
|
||||
for (var i = 0; i < arr0.length; i++)
|
||||
arr[i] = arr0[i];
|
||||
if(!startnone)
|
||||
if (!startnone)
|
||||
startnone = 0;
|
||||
var maxnonce = 0;
|
||||
var supervalue = MAX_SUPER_VALUE_POW;
|
||||
for(var nonce = startnone; nonce <= startnone + count; nonce++)
|
||||
{
|
||||
for (var nonce = startnone; nonce <= startnone + count; nonce++) {
|
||||
var arrhash = GetHashWithValues(arr, nonce, BlockNum, true);
|
||||
var value = GetPowValue(arrhash);
|
||||
if(value < supervalue)
|
||||
{
|
||||
if (value < supervalue) {
|
||||
maxnonce = nonce;
|
||||
supervalue = value;
|
||||
}
|
||||
@@ -82,8 +72,7 @@ function CreateNoncePOWExtern(arr0,BlockNum,count,startnone)
|
||||
};
|
||||
window.TR_TICKET_HASH_LENGTH = 10;
|
||||
|
||||
function CreateHashBody(body,Num,Nonce)
|
||||
{
|
||||
function CreateHashBody(body, Num, Nonce) {
|
||||
var length = body.length - 12;
|
||||
body[length + 0] = Num & 0xFF;
|
||||
body[length + 1] = (Num >>> 8) & 0xFF;
|
||||
@@ -100,7 +89,7 @@ function CreateHashBody(body,Num,Nonce)
|
||||
body[length + 5] = 0;
|
||||
var HASH = sha3(body);
|
||||
var FullHashTicket = [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];
|
||||
for(var i = 0; i < TR_TICKET_HASH_LENGTH; i++)
|
||||
for (var i = 0; i < TR_TICKET_HASH_LENGTH; i++)
|
||||
FullHashTicket[i] = HASH[i];
|
||||
WriteUintToArrOnPos(FullHashTicket, Num, TR_TICKET_HASH_LENGTH);
|
||||
return sha3(FullHashTicket);
|
||||
@@ -111,18 +100,16 @@ window.MIN_POWER_POW_TR = 0;
|
||||
window.CONSENSUS_PERIOD_TIME = 1000;
|
||||
window.FIRST_TIME_BLOCK = 1530446400000;
|
||||
window.NEW_SIGN_TIME = 25500000;
|
||||
window.SetBlockChainConstant = function (Data)
|
||||
{
|
||||
window.SetBlockChainConstant = function(Data) {
|
||||
var DeltaServerClient = new Date() - Data.CurTime;
|
||||
if(!Data.DELTA_CURRENT_TIME)
|
||||
if (!Data.DELTA_CURRENT_TIME)
|
||||
Data.DELTA_CURRENT_TIME = 0;
|
||||
window.DELTA_CURRENT_TIME2 = Data.DELTA_CURRENT_TIME - DeltaServerClient;
|
||||
window.MIN_POWER_POW_TR = DELTA_POWER_POW_TR + Data.MIN_POWER_POW_TR;
|
||||
window.FIRST_TIME_BLOCK = Data.FIRST_TIME_BLOCK;
|
||||
window.NEW_SIGN_TIME = Data.NEW_SIGN_TIME;
|
||||
window.CONSENSUS_PERIOD_TIME = Data.CONSENSUS_PERIOD_TIME;
|
||||
window.GetCurrentBlockNumByTime = function ()
|
||||
{
|
||||
window.GetCurrentBlockNumByTime = function() {
|
||||
var CurrentTime = Date.now() + DELTA_CURRENT_TIME2;
|
||||
var CurTimeNum = CurrentTime - FIRST_TIME_BLOCK;
|
||||
var StartBlockNum = Math.floor((CurTimeNum + CONSENSUS_PERIOD_TIME) / CONSENSUS_PERIOD_TIME);
|
||||
@@ -130,18 +117,15 @@ window.SetBlockChainConstant = function (Data)
|
||||
};
|
||||
window.NWMODE = Data.NWMODE;
|
||||
};
|
||||
window.GetCurrentBlockNumByTime = function ()
|
||||
{
|
||||
window.GetCurrentBlockNumByTime = function() {
|
||||
return 0;
|
||||
};
|
||||
|
||||
function GetBlockNumTr(arr)
|
||||
{
|
||||
function GetBlockNumTr(arr) {
|
||||
var BlockNum = window.DELTA_FOR_TIME_TX + GetCurrentBlockNumByTime();
|
||||
if(arr[0] === TYPE_TRANSACTION_CREATE)
|
||||
{
|
||||
if (arr[0] === TYPE_TRANSACTION_CREATE) {
|
||||
var BlockNum2 = Math.floor(BlockNum / 10) * 10;
|
||||
if(BlockNum2 < BlockNum)
|
||||
if (BlockNum2 < BlockNum)
|
||||
BlockNum2 = BlockNum2 + 10;
|
||||
BlockNum = BlockNum2;
|
||||
}
|
||||
@@ -151,26 +135,20 @@ var LastCreatePOWTrType = 0;
|
||||
var LastCreatePOWBlockNum = 0;
|
||||
var LastCreatePOWHash = [255, 255, 255, 255];
|
||||
|
||||
function CreateHashBodyPOWInnerMinPower(arr,MinPow,startnonce)
|
||||
{
|
||||
function CreateHashBodyPOWInnerMinPower(arr, MinPow, startnonce) {
|
||||
var TrType = arr[0];
|
||||
var BlockNum = GetBlockNumTr(arr);
|
||||
if(MinPow === undefined)
|
||||
{
|
||||
if (MinPow === undefined) {
|
||||
MinPow = MIN_POWER_POW_TR + Math.log2(arr.length / 128);
|
||||
}
|
||||
var nonce = startnonce;
|
||||
while(1)
|
||||
{
|
||||
while (1) {
|
||||
var arrhash = CreateHashBody(arr, BlockNum, nonce);
|
||||
var power = GetPowPower(arrhash);
|
||||
if(power >= MinPow)
|
||||
{
|
||||
if(LastCreatePOWBlockNum === BlockNum && LastCreatePOWTrType === TrType && CompareArr(LastCreatePOWHash, arrhash) > 0)
|
||||
{
|
||||
if (power >= MinPow) {
|
||||
if (LastCreatePOWBlockNum === BlockNum && LastCreatePOWTrType === TrType && CompareArr(LastCreatePOWHash, arrhash) > 0) {
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
LastCreatePOWBlockNum = BlockNum;
|
||||
LastCreatePOWTrType = TrType;
|
||||
LastCreatePOWHash = arrhash;
|
||||
@@ -178,35 +156,31 @@ function CreateHashBodyPOWInnerMinPower(arr,MinPow,startnonce)
|
||||
}
|
||||
}
|
||||
nonce++;
|
||||
if(nonce % 2000 === 0)
|
||||
{
|
||||
if (nonce % 2000 === 0) {
|
||||
BlockNum = GetBlockNumTr(arr);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function CalcHashFromArray(ArrHashes,bOriginalSeq)
|
||||
{
|
||||
if(bOriginalSeq === undefined)
|
||||
function CalcHashFromArray(ArrHashes, bOriginalSeq) {
|
||||
if (bOriginalSeq === undefined)
|
||||
ArrHashes.sort(CompareArr);
|
||||
var Buf = [];
|
||||
for(var i = 0; i < ArrHashes.length; i++)
|
||||
{
|
||||
for (var i = 0; i < ArrHashes.length; i++) {
|
||||
var Value = ArrHashes[i];
|
||||
for(var n = 0; n < Value.length; n++)
|
||||
for (var n = 0; n < Value.length; n++)
|
||||
Buf.push(Value[n]);
|
||||
}
|
||||
if(Buf.length === 0)
|
||||
if (Buf.length === 0)
|
||||
return [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];
|
||||
else
|
||||
if(Buf.length === 32)
|
||||
if (Buf.length === 32)
|
||||
return Buf;
|
||||
var Hash = shaarr(Buf);
|
||||
return Hash;
|
||||
};
|
||||
|
||||
function GetArrFromValue(Num)
|
||||
{
|
||||
function GetArrFromValue(Num) {
|
||||
var arr = [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];
|
||||
arr[0] = Num & 0xFF;
|
||||
arr[1] = (Num >>> 8) & 0xFF;
|
||||
@@ -218,54 +192,44 @@ function GetArrFromValue(Num)
|
||||
return arr;
|
||||
};
|
||||
|
||||
function LoadLib(Path)
|
||||
{
|
||||
function LoadLib(Path) {
|
||||
var item = document.createElement('script');
|
||||
item.type = "text/javascript";
|
||||
item.src = Path;
|
||||
document.getElementsByTagName('head')[0].appendChild(item);
|
||||
};
|
||||
|
||||
function IsMS()
|
||||
{
|
||||
function IsMS() {
|
||||
var ua = window.navigator.userAgent;
|
||||
var msie = ua.indexOf("MSIE ");
|
||||
if(msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))
|
||||
{
|
||||
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
function LoadSignLib()
|
||||
{
|
||||
if(window.SignLib)
|
||||
return ;
|
||||
function LoadSignLib() {
|
||||
if (window.SignLib)
|
||||
return;
|
||||
LoadLib("./JS/sign-lib-min.js");
|
||||
};
|
||||
|
||||
function ComputeSecretWithCheck(PubKey,StrPrivKey,F)
|
||||
{
|
||||
if(!window.SignLib)
|
||||
{
|
||||
function ComputeSecretWithCheck(PubKey, StrPrivKey, F) {
|
||||
if (!window.SignLib) {
|
||||
SetError("Error - SignLib not installed");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
if(!IsHexStr(StrPrivKey) || StrPrivKey.length !== 64)
|
||||
{
|
||||
if (!IsHexStr(StrPrivKey) || StrPrivKey.length !== 64) {
|
||||
SetError("Error set PrivKey");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
var PrivKey = Buffer.from(GetArrFromHex(StrPrivKey));
|
||||
if(typeof PubKey === "string")
|
||||
{
|
||||
if(!IsHexStr(PubKey) || PubKey.length !== 66)
|
||||
{
|
||||
if (typeof PubKey === "string") {
|
||||
if (!IsHexStr(PubKey) || PubKey.length !== 66) {
|
||||
SetError("Error PubKey");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
PubKey = Buffer.from(GetArrFromHex(PubKey));
|
||||
}
|
||||
@@ -273,35 +237,29 @@ function ComputeSecretWithCheck(PubKey,StrPrivKey,F)
|
||||
F(sha3(Result));
|
||||
};
|
||||
|
||||
function ComputeSecret(Account,PubKey,F)
|
||||
{
|
||||
if(GetPrivKey())
|
||||
{
|
||||
function ComputeSecret(Account, PubKey, F) {
|
||||
if (GetPrivKey()) {
|
||||
ComputeSecretWithCheck(PubKey, GetPrivKey(), F);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetData("GetWalletInfo", {Account:Account}, function (Data)
|
||||
{
|
||||
if(!Data || !Data.result)
|
||||
return ;
|
||||
else {
|
||||
GetData("GetWalletInfo", { Account: Account }, function(Data) {
|
||||
if (!Data || !Data.result)
|
||||
return;
|
||||
ComputeSecretWithCheck(PubKey, Data.PrivateKey, F);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function Encrypt(ArrSecret,StartEncrypt,StrName,StrValue)
|
||||
{
|
||||
function Encrypt(ArrSecret, StartEncrypt, StrName, StrValue) {
|
||||
var arrRnd = sha3arr2(ArrSecret, sha3(StrName + StartEncrypt));
|
||||
var Arr = toUTF8Array(StrValue);
|
||||
return DoSecret(Arr, arrRnd);
|
||||
};
|
||||
|
||||
function Decrypt(ArrSecret,StartEncrypt,StrName,Arr)
|
||||
{
|
||||
if(!ArrSecret)
|
||||
function Decrypt(ArrSecret, StartEncrypt, StrName, Arr) {
|
||||
if (!ArrSecret)
|
||||
return "".padEnd(Arr.length / 2, ".");
|
||||
if(typeof Arr === "string")
|
||||
if (typeof Arr === "string")
|
||||
Arr = GetArrFromHex(Arr);
|
||||
var arrRnd = sha3arr2(ArrSecret, sha3(StrName + StartEncrypt));
|
||||
var Arr2 = DoSecret(Arr, arrRnd);
|
||||
@@ -309,18 +267,15 @@ function Decrypt(ArrSecret,StartEncrypt,StrName,Arr)
|
||||
return Str;
|
||||
};
|
||||
|
||||
function DoSecret(Arr,arrRnd)
|
||||
{
|
||||
function DoSecret(Arr, arrRnd) {
|
||||
var Arr2 = [];
|
||||
var CryptID = 0;
|
||||
var Pos = 0;
|
||||
while(Pos < Arr.length)
|
||||
{
|
||||
while (Pos < Arr.length) {
|
||||
CryptID++;
|
||||
WriteUintToArrOnPos(arrRnd, CryptID, 0);
|
||||
var CurBuf = sha3(arrRnd);
|
||||
for(var i = 0; i < 32 && Pos < Arr.length; i++, Pos++)
|
||||
{
|
||||
for (var i = 0; i < 32 && Pos < Arr.length; i++ , Pos++) {
|
||||
Arr2[Pos] = Arr[Pos] ^ CurBuf[i];
|
||||
}
|
||||
}
|
||||
@@ -328,26 +283,22 @@ function DoSecret(Arr,arrRnd)
|
||||
};
|
||||
var glEncryptInit = 0;
|
||||
|
||||
function EncryptInit()
|
||||
{
|
||||
function EncryptInit() {
|
||||
glEncryptInit++;
|
||||
var Time = Date.now() - new Date(2019, 0, 1);
|
||||
return Math.floor(Time * 100 + Math.random() * 100) * 100 + glEncryptInit;
|
||||
};
|
||||
|
||||
function EncryptID(ArrSecret,StartEncrypt,id)
|
||||
{
|
||||
function EncryptID(ArrSecret, StartEncrypt, id) {
|
||||
var Value = $(id).value;
|
||||
Value = Value.padEnd(Value.length + random(5), " ");
|
||||
return GetHexFromArr(Encrypt(ArrSecret, StartEncrypt, id, Value));
|
||||
};
|
||||
|
||||
function EncryptFields(ArrSecret,Params,ArrName)
|
||||
{
|
||||
if(!Params.Crypto)
|
||||
function EncryptFields(ArrSecret, Params, ArrName) {
|
||||
if (!Params.Crypto)
|
||||
Params.Crypto = EncryptInit();
|
||||
for(var i = 0; i < ArrName.length; i++)
|
||||
{
|
||||
for (var i = 0; i < ArrName.length; i++) {
|
||||
var Name = ArrName[i];
|
||||
var Value = Params[Name];
|
||||
Value = Value.padEnd(Value.length + random(5), " ");
|
||||
@@ -355,17 +306,13 @@ function EncryptFields(ArrSecret,Params,ArrName)
|
||||
}
|
||||
};
|
||||
|
||||
function DecryptFields(ArrSecret,Params,ArrName)
|
||||
{
|
||||
for(var i = 0; i < ArrName.length; i++)
|
||||
{
|
||||
function DecryptFields(ArrSecret, Params, ArrName) {
|
||||
for (var i = 0; i < ArrName.length; i++) {
|
||||
var Name = ArrName[i];
|
||||
if(Params[Name])
|
||||
{
|
||||
if (Params[Name]) {
|
||||
Params[Name] = Decrypt(ArrSecret, Params.Crypto, Name, GetArrFromHex(Params[Name]));
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
Params[Name] = "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,181 +9,147 @@
|
||||
*/
|
||||
|
||||
|
||||
function SendPay(Data)
|
||||
{
|
||||
function SendPay(Data) {
|
||||
Data.cmd = "pay";
|
||||
SendData(Data);
|
||||
};
|
||||
|
||||
function SetStorage(Key,Value)
|
||||
{
|
||||
var Data = {cmd:"setstorage", Key:Key, Value:Value};
|
||||
function SetStorage(Key, Value) {
|
||||
var Data = { cmd: "setstorage", Key: Key, Value: Value };
|
||||
SendData(Data);
|
||||
};
|
||||
|
||||
function GetStorage(Key,F)
|
||||
{
|
||||
var Data = {cmd:"getstorage", Key:Key};
|
||||
function GetStorage(Key, F) {
|
||||
var Data = { cmd: "getstorage", Key: Key };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function SetCommon(Key,Value)
|
||||
{
|
||||
var Data = {cmd:"setcommon", Key:Key, Value:Value};
|
||||
function SetCommon(Key, Value) {
|
||||
var Data = { cmd: "setcommon", Key: Key, Value: Value };
|
||||
SendData(Data);
|
||||
};
|
||||
|
||||
function GetCommon(Key,F)
|
||||
{
|
||||
var Data = {cmd:"getcommon", Key:Key};
|
||||
function GetCommon(Key, F) {
|
||||
var Data = { cmd: "getcommon", Key: Key };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function GetInfo(F,bUseCache)
|
||||
{
|
||||
var Data = {cmd:"DappInfo", AllAccounts:ALL_ACCOUNTS, AllData:!bUseCache};
|
||||
function GetInfo(F, bUseCache) {
|
||||
var Data = { cmd: "DappInfo", AllAccounts: ALL_ACCOUNTS, AllData: !bUseCache };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function Call(Account,MethodName,Params,F)
|
||||
{
|
||||
var Data = {cmd:"DappCall", MethodName:MethodName, Params:Params, Account:Account};
|
||||
function Call(Account, MethodName, Params, F) {
|
||||
var Data = { cmd: "DappCall", MethodName: MethodName, Params: Params, Account: Account };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function SendCall(Account,MethodName,Params,FromNum)
|
||||
{
|
||||
if(!INFO.WalletCanSign)
|
||||
{
|
||||
function SendCall(Account, MethodName, Params, FromNum) {
|
||||
if (!INFO.WalletCanSign) {
|
||||
SetError("Pls, open wallet");
|
||||
return 0;
|
||||
}
|
||||
var Data = {cmd:"DappSendCall", MethodName:MethodName, Params:Params, Account:Account, FromNum:FromNum};
|
||||
var Data = { cmd: "DappSendCall", MethodName: MethodName, Params: Params, Account: Account, FromNum: FromNum };
|
||||
SendData(Data);
|
||||
return 1;
|
||||
};
|
||||
|
||||
function GetWalletAccounts(F)
|
||||
{
|
||||
var Data = {cmd:"DappWalletList"};
|
||||
function GetWalletAccounts(F) {
|
||||
var Data = { cmd: "DappWalletList" };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function GetAccountList(Params,F)
|
||||
{
|
||||
var Data = {cmd:"DappAccountList", Params:Params};
|
||||
function GetAccountList(Params, F) {
|
||||
var Data = { cmd: "DappAccountList", Params: Params };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function GetSmartList(Params,F)
|
||||
{
|
||||
var Data = {cmd:"DappSmartList", Params:Params};
|
||||
function GetSmartList(Params, F) {
|
||||
var Data = { cmd: "DappSmartList", Params: Params };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function GetBlockList(Params,F)
|
||||
{
|
||||
var Data = {cmd:"DappBlockList", Params:Params};
|
||||
function GetBlockList(Params, F) {
|
||||
var Data = { cmd: "DappBlockList", Params: Params };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function GetTransactionList(Params,F)
|
||||
{
|
||||
var Data = {cmd:"DappTransactionList", Params:Params};
|
||||
function GetTransactionList(Params, F) {
|
||||
var Data = { cmd: "DappTransactionList", Params: Params };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function DappSmartHTMLFile(Smart,F)
|
||||
{
|
||||
var Data = {cmd:"DappSmartHTMLFile", Params:{Smart:Smart}};
|
||||
function DappSmartHTMLFile(Smart, F) {
|
||||
var Data = { cmd: "DappSmartHTMLFile", Params: { Smart: Smart } };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function DappBlockFile(BlockNum,TrNum,F)
|
||||
{
|
||||
var Data = {cmd:"DappBlockFile", Params:{BlockNum:BlockNum, TrNum:TrNum}};
|
||||
function DappBlockFile(BlockNum, TrNum, F) {
|
||||
var Data = { cmd: "DappBlockFile", Params: { BlockNum: BlockNum, TrNum: TrNum } };
|
||||
SendData(Data, F);
|
||||
};
|
||||
|
||||
function SetStatus(Str)
|
||||
{
|
||||
SendData({cmd:"SetStatus", Message:Str});
|
||||
function SetStatus(Str) {
|
||||
SendData({ cmd: "SetStatus", Message: Str });
|
||||
};
|
||||
|
||||
function SetError(Str)
|
||||
{
|
||||
SendData({cmd:"SetError", Message:Str});
|
||||
function SetError(Str) {
|
||||
SendData({ cmd: "SetError", Message: Str });
|
||||
};
|
||||
|
||||
function SetLocationPath(Str)
|
||||
{
|
||||
SendData({cmd:"SetLocationHash", Message:Str});
|
||||
function SetLocationPath(Str) {
|
||||
SendData({ cmd: "SetLocationHash", Message: Str });
|
||||
};
|
||||
|
||||
function CreateNewAccount(Currency)
|
||||
{
|
||||
SendData({cmd:"CreateNewAccount", Currency:Currency});
|
||||
function CreateNewAccount(Currency) {
|
||||
SendData({ cmd: "CreateNewAccount", Currency: Currency });
|
||||
};
|
||||
|
||||
function OpenLink(Str)
|
||||
{
|
||||
SendData({cmd:"OpenLink", Message:Str});
|
||||
function OpenLink(Str) {
|
||||
SendData({ cmd: "OpenLink", Message: Str });
|
||||
};
|
||||
|
||||
function SetMobileMode()
|
||||
{
|
||||
SendData({cmd:"SetMobileMode"});
|
||||
function SetMobileMode() {
|
||||
SendData({ cmd: "SetMobileMode" });
|
||||
};
|
||||
|
||||
function ComputeSecret(PubKey,F,Account)
|
||||
{
|
||||
if(!INFO.WalletCanSign)
|
||||
{
|
||||
function ComputeSecret(PubKey, F, Account) {
|
||||
if (!INFO.WalletCanSign) {
|
||||
SetError("Pls, open wallet");
|
||||
return 0;
|
||||
}
|
||||
if(!Account && USER_ACCOUNT.length)
|
||||
if (!Account && USER_ACCOUNT.length)
|
||||
Account = USER_ACCOUNT[0].Num;
|
||||
if(typeof PubKey === "number")
|
||||
{
|
||||
if (typeof PubKey === "number") {
|
||||
var AccNum = PubKey;
|
||||
GetAccountList({StartNum:AccNum, CountNum:1}, function (Err,Arr)
|
||||
{
|
||||
if(Err)
|
||||
{
|
||||
GetAccountList({ StartNum: AccNum, CountNum: 1 }, function(Err, Arr) {
|
||||
if (Err) {
|
||||
SetError(Err);
|
||||
}
|
||||
else
|
||||
{
|
||||
SendData({cmd:"ComputeSecret", Account:Account, PubKey:Arr[0].PubKey.data}, F);
|
||||
else {
|
||||
SendData({ cmd: "ComputeSecret", Account: Account, PubKey: Arr[0].PubKey.data }, F);
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
SendData({cmd:"ComputeSecret", Account:Account, PubKey:PubKey}, F);
|
||||
else {
|
||||
SendData({ cmd: "ComputeSecret", Account: Account, PubKey: PubKey }, F);
|
||||
}
|
||||
};
|
||||
|
||||
function CheckInstall()
|
||||
{
|
||||
SendData({cmd:"CheckInstall"});
|
||||
function CheckInstall() {
|
||||
SendData({ cmd: "CheckInstall" });
|
||||
};
|
||||
|
||||
function SendTransaction(Body,TR,SumPow,F)
|
||||
{
|
||||
function SendTransaction(Body, TR, SumPow, F) {
|
||||
SetError("Cannt SEND TR: " + JSON.stringify(TR));
|
||||
};
|
||||
|
||||
function CurrencyName(Num)
|
||||
{
|
||||
function CurrencyName(Num) {
|
||||
var Name = MapCurrency[Num];
|
||||
if(!Name)
|
||||
{
|
||||
GetSmartList({StartNum:Num, CountNum:1, TokenGenerate:1}, function (Err,Arr)
|
||||
{
|
||||
if(Err || Arr.length === 0)
|
||||
return ;
|
||||
if (!Name) {
|
||||
GetSmartList({ StartNum: Num, CountNum: 1, TokenGenerate: 1 }, function(Err, Arr) {
|
||||
if (Err || Arr.length === 0)
|
||||
return;
|
||||
var Smart = Arr[0];
|
||||
Name = GetTokenName(Smart.Num, Smart.ShortName);
|
||||
MapCurrency[Smart.Num] = Name;
|
||||
@@ -194,19 +160,15 @@ function CurrencyName(Num)
|
||||
};
|
||||
var SendCountUpdate = 0;
|
||||
|
||||
function FindAllCurrency()
|
||||
{
|
||||
function FindAllCurrency() {
|
||||
SendCountUpdate++;
|
||||
GetSmartList({StartNum:8, CountNum:100, TokenGenerate:1}, function (Err,Arr)
|
||||
{
|
||||
GetSmartList({ StartNum: 8, CountNum: 100, TokenGenerate: 1 }, function(Err, Arr) {
|
||||
SendCountUpdate--;
|
||||
if(Err)
|
||||
return ;
|
||||
for(var i = 0; i < Arr.length; i++)
|
||||
{
|
||||
if (Err)
|
||||
return;
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
var Smart = Arr[i];
|
||||
if(!MapCurrency[Smart.Num])
|
||||
{
|
||||
if (!MapCurrency[Smart.Num]) {
|
||||
var Name = GetTokenName(Smart.Num, Smart.ShortName);
|
||||
MapCurrency[Smart.Num] = Name;
|
||||
}
|
||||
@@ -214,62 +176,50 @@ function FindAllCurrency()
|
||||
});
|
||||
};
|
||||
|
||||
function GetFilePath(Path)
|
||||
{
|
||||
if(window.PROTOCOL_SERVER_PATH && Path.indexOf("file/"))
|
||||
{
|
||||
if(Path.substr(0, 1) !== "/")
|
||||
function GetFilePath(Path) {
|
||||
if (window.PROTOCOL_SERVER_PATH && Path.indexOf("file/")) {
|
||||
if (Path.substr(0, 1) !== "/")
|
||||
Path = "/" + Path;
|
||||
Path = window.PROTOCOL_SERVER_PATH + Path;
|
||||
}
|
||||
return Path;
|
||||
};
|
||||
|
||||
function GetParamsFromPath(Name)
|
||||
{
|
||||
if(!OPEN_PATH)
|
||||
function GetParamsFromPath(Name) {
|
||||
if (!OPEN_PATH)
|
||||
return undefined;
|
||||
var arr = OPEN_PATH.split("&");
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
if(arr[i].indexOf(Name + "=") === 0)
|
||||
{
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i].indexOf(Name + "=") === 0) {
|
||||
return arr[i].split("=")[1];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function GetState(AccNum,F,FErr)
|
||||
{
|
||||
function GetState(AccNum, F, FErr) {
|
||||
SendCountUpdate++;
|
||||
GetAccountList({StartNum:AccNum, CountNum:1}, function (Err,Arr)
|
||||
{
|
||||
GetAccountList({ StartNum: AccNum, CountNum: 1 }, function(Err, Arr) {
|
||||
SendCountUpdate--;
|
||||
if(!Err && Arr.length)
|
||||
{
|
||||
if (!Err && Arr.length) {
|
||||
var Item = Arr[0].SmartState;
|
||||
if(Item)
|
||||
{
|
||||
if (Item) {
|
||||
F(Item);
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(FErr)
|
||||
{
|
||||
if (FErr) {
|
||||
FErr();
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
});
|
||||
};
|
||||
var glMapF = {};
|
||||
var glKeyF = 0;
|
||||
|
||||
function SendData(Data,F)
|
||||
{
|
||||
if(!window.parent)
|
||||
return ;
|
||||
if(F)
|
||||
{
|
||||
function SendData(Data, F) {
|
||||
if (!window.parent)
|
||||
return;
|
||||
if (F) {
|
||||
glKeyF++;
|
||||
Data.CallID = glKeyF;
|
||||
glMapF[glKeyF] = F;
|
||||
@@ -277,22 +227,18 @@ function SendData(Data,F)
|
||||
window.parent.postMessage(Data, "*");
|
||||
};
|
||||
|
||||
function OnMessage(event)
|
||||
{
|
||||
function OnMessage(event) {
|
||||
var Data = event.data;
|
||||
if(!Data || typeof Data !== "object")
|
||||
return ;
|
||||
if (!Data || typeof Data !== "object")
|
||||
return;
|
||||
var CallID = Data.CallID;
|
||||
var cmd = Data.cmd;
|
||||
if(CallID)
|
||||
{
|
||||
if (CallID) {
|
||||
var F = glMapF[CallID];
|
||||
if(F)
|
||||
{
|
||||
if (F) {
|
||||
delete Data.CallID;
|
||||
delete Data.cmd;
|
||||
switch(cmd)
|
||||
{
|
||||
switch (cmd) {
|
||||
case "getstorage":
|
||||
case "getcommon":
|
||||
F(Data.Key, Data.Value);
|
||||
@@ -323,49 +269,40 @@ function OnMessage(event)
|
||||
delete glMapF[CallID];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(cmd)
|
||||
{
|
||||
else {
|
||||
switch (cmd) {
|
||||
case "History":
|
||||
var eventEvent = new CustomEvent("History", {detail:Data});
|
||||
var eventEvent = new CustomEvent("History", { detail: Data });
|
||||
window.dispatchEvent(eventEvent);
|
||||
break;
|
||||
case "OnEvent":
|
||||
if(window.OnEvent)
|
||||
{
|
||||
if (window.OnEvent) {
|
||||
window.OnEvent(Data);
|
||||
}
|
||||
var eventEvent = new CustomEvent("Event", {detail:Data});
|
||||
var eventEvent = new CustomEvent("Event", { detail: Data });
|
||||
window.dispatchEvent(eventEvent);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function OpenRefFile(Str)
|
||||
{
|
||||
function OpenRefFile(Str) {
|
||||
var Param = ParseFileName(Str);
|
||||
if(Param.BlockNum)
|
||||
DappBlockFile(Param.BlockNum, Param.TrNum, function (Err,Body)
|
||||
{
|
||||
if (Param.BlockNum)
|
||||
DappBlockFile(Param.BlockNum, Param.TrNum, function(Err, Body) {
|
||||
document.write(Body);
|
||||
});
|
||||
else
|
||||
{
|
||||
else {
|
||||
OpenLink(Str);
|
||||
}
|
||||
};
|
||||
|
||||
function SaveToStorageByArr(Arr)
|
||||
{
|
||||
function SaveToStorageByArr(Arr) {
|
||||
SetStorage("VerSave", "1");
|
||||
for(var i = 0; i < Arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
var name = Arr[i];
|
||||
var Item = $(name);
|
||||
if(Item)
|
||||
{
|
||||
if(Item.type === "checkbox")
|
||||
if (Item) {
|
||||
if (Item.type === "checkbox")
|
||||
SetStorage(name, 0 + Item.checked);
|
||||
else
|
||||
SetStorage(name, Item.value);
|
||||
@@ -373,94 +310,74 @@ function SaveToStorageByArr(Arr)
|
||||
}
|
||||
};
|
||||
|
||||
function LoadFromStorageByArr(Arr,F,bAll)
|
||||
{
|
||||
GetStorage("VerSave", function (Key,Value)
|
||||
{
|
||||
if(Value === "1")
|
||||
{
|
||||
for(var i = 0; i < Arr.length; i++)
|
||||
{
|
||||
if(i === Arr.length - 1)
|
||||
function LoadFromStorageByArr(Arr, F, bAll) {
|
||||
GetStorage("VerSave", function(Key, Value) {
|
||||
if (Value === "1") {
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
if (i === Arr.length - 1)
|
||||
LoadFromStorageById(Arr[i], F);
|
||||
else
|
||||
LoadFromStorageById(Arr[i]);
|
||||
}
|
||||
}
|
||||
if(bAll && F)
|
||||
if (bAll && F)
|
||||
F(0);
|
||||
});
|
||||
};
|
||||
|
||||
function LoadFromStorageById(Name,F)
|
||||
{
|
||||
GetStorage(Name, function (Key,Value)
|
||||
{
|
||||
function LoadFromStorageById(Name, F) {
|
||||
GetStorage(Name, function(Key, Value) {
|
||||
var Item = document.getElementById(Name);
|
||||
if(Item)
|
||||
{
|
||||
if(Item.type === "checkbox")
|
||||
if (Item) {
|
||||
if (Item.type === "checkbox")
|
||||
Item.checked = parseInt(Value);
|
||||
else
|
||||
Item.value = Value;
|
||||
}
|
||||
if(F)
|
||||
if (F)
|
||||
F(Key, Value);
|
||||
});
|
||||
};
|
||||
var SendCountDappParams = 0;
|
||||
|
||||
function GetDappParams(BNum,TrNum,F,bAll)
|
||||
{
|
||||
if(!BNum)
|
||||
{
|
||||
if(bAll)
|
||||
function GetDappParams(BNum, TrNum, F, bAll) {
|
||||
if (!BNum) {
|
||||
if (bAll)
|
||||
F();
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
SendCountDappParams++;
|
||||
DappBlockFile(BNum, TrNum, function (Err,Data)
|
||||
{
|
||||
DappBlockFile(BNum, TrNum, function(Err, Data) {
|
||||
SendCountDappParams--;
|
||||
if(!Err && Data.Type === 135)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!Err && Data.Type === 135) {
|
||||
try {
|
||||
var Params = JSON.parse(Data.Params);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
catch (e) {
|
||||
}
|
||||
if(Params)
|
||||
{
|
||||
if (Params) {
|
||||
F(Params, Data.MethodName, Data.FromNum);
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(bAll)
|
||||
if (bAll)
|
||||
F();
|
||||
});
|
||||
};
|
||||
document.addEventListener("DOMContentLoaded", function ()
|
||||
{
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
var refs = document.getElementsByTagName("A");
|
||||
for(var i = 0, L = refs.length; i < L; i++)
|
||||
{
|
||||
if(refs[i].href.indexOf("/file/") >= 0)
|
||||
{
|
||||
refs[i].onclick = function ()
|
||||
{
|
||||
for (var i = 0, L = refs.length; i < L; i++) {
|
||||
if (refs[i].href.indexOf("/file/") >= 0) {
|
||||
refs[i].onclick = function() {
|
||||
OpenRefFile(this.href);
|
||||
};
|
||||
}
|
||||
}
|
||||
});
|
||||
if(window.addEventListener)
|
||||
{
|
||||
if (window.addEventListener) {
|
||||
window.addEventListener("message", OnMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
window.attachEvent("onmessage", OnMessage);
|
||||
}
|
||||
var SMART = {}, BASE_ACCOUNT = {}, INFO = {}, USER_ACCOUNT = [], USER_ACCOUNT_MAP = {}, OPEN_PATH = "", ACCOUNT_OPEN_NUM = 0;
|
||||
@@ -468,13 +385,10 @@ var ALL_ACCOUNTS = 0;
|
||||
var WasStartInit = 0, WasStartInit2 = 0;
|
||||
var eventInfo = new Event("UpdateInfo");
|
||||
|
||||
function UpdateDappInfo()
|
||||
{
|
||||
GetInfo(function (Err,Data)
|
||||
{
|
||||
if(Err)
|
||||
{
|
||||
return ;
|
||||
function UpdateDappInfo() {
|
||||
GetInfo(function(Err, Data) {
|
||||
if (Err) {
|
||||
return;
|
||||
}
|
||||
INFO = Data;
|
||||
SMART = Data.Smart;
|
||||
@@ -484,37 +398,32 @@ function UpdateDappInfo()
|
||||
SetBlockChainConstant(Data);
|
||||
USER_ACCOUNT = Data.ArrWallet;
|
||||
USER_ACCOUNT_MAP = {};
|
||||
for(var i = 0; i < USER_ACCOUNT.length; i++)
|
||||
for (var i = 0; i < USER_ACCOUNT.length; i++)
|
||||
USER_ACCOUNT_MAP[USER_ACCOUNT[i].Num] = USER_ACCOUNT[i];
|
||||
if(window.OnInit && !WasStartInit)
|
||||
{
|
||||
if (window.OnInit && !WasStartInit) {
|
||||
WasStartInit = 1;
|
||||
window.OnInit(1);
|
||||
}
|
||||
else
|
||||
if(window.OnUpdateInfo)
|
||||
{
|
||||
if (window.OnUpdateInfo) {
|
||||
window.OnUpdateInfo();
|
||||
}
|
||||
if(!WasStartInit2)
|
||||
{
|
||||
if (!WasStartInit2) {
|
||||
WasStartInit2 = 1;
|
||||
var eventInit = new Event("Init");
|
||||
window.dispatchEvent(eventInit);
|
||||
}
|
||||
window.dispatchEvent(eventInfo);
|
||||
if(Data.ArrEvent)
|
||||
for(var i = 0; i < Data.ArrEvent.length; i++)
|
||||
{
|
||||
if (Data.ArrEvent)
|
||||
for (var i = 0; i < Data.ArrEvent.length; i++) {
|
||||
var Item = Data.ArrEvent[i];
|
||||
Item.cmd = "OnEvent";
|
||||
OnMessage({data:Item});
|
||||
OnMessage({ data: Item });
|
||||
}
|
||||
}, 1);
|
||||
};
|
||||
window.addEventListener('load', function ()
|
||||
{
|
||||
if(!window.sha3)
|
||||
window.addEventListener('load', function() {
|
||||
if (!window.sha3)
|
||||
LoadLib("./JS/sha3.js");
|
||||
UpdateDappInfo();
|
||||
setInterval(UpdateDappInfo, 1000);
|
||||
|
||||
@@ -11,80 +11,67 @@
|
||||
var DiagramMap = {};
|
||||
var DiagramMapId = {};
|
||||
var LMouseOn = false;
|
||||
if(!window.toStaticHTML)
|
||||
toStaticHTML = function (Str)
|
||||
{
|
||||
if (!window.toStaticHTML)
|
||||
toStaticHTML = function(Str) {
|
||||
return Str;
|
||||
};
|
||||
|
||||
function Rigth(Str,Count)
|
||||
{
|
||||
if(Str.length < Count)
|
||||
function Rigth(Str, Count) {
|
||||
if (Str.length < Count)
|
||||
return Str;
|
||||
else
|
||||
return Str.substr(Str.length - Count);
|
||||
};
|
||||
|
||||
function SetHTMLDiagramItem(Item,width)
|
||||
{
|
||||
function SetHTMLDiagramItem(Item, width) {
|
||||
Item.mouseX = width - 50;
|
||||
if(Item.Extern || Item.Delete)
|
||||
return ;
|
||||
if (Item.Extern || Item.Delete)
|
||||
return;
|
||||
var MinHeight = 80;
|
||||
if(!Item.id)
|
||||
if (!Item.id)
|
||||
Item.id = "DgrmId" + Item.num;
|
||||
DiagramMap[Item.name] = Item;
|
||||
DiagramMapId[Item.id] = Item;
|
||||
if(Item.isLine)
|
||||
{
|
||||
if(Item.text)
|
||||
if (Item.isLine) {
|
||||
if (Item.text)
|
||||
Str = "<BR><B>" + Item.text + '</B><INPUT type="button" class="delete" onclick="DeleteDiagram(\'' + Item.id + '\')" value="X">';
|
||||
else
|
||||
Str = "<HR>";
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
Str = '<BR><DIV>' + Item.text + '<INPUT type="button" class="delete" onclick="DeleteDiagram(\'' + Item.id + '\')" value="X"></DIV>\
|
||||
<BR><canvas class="DIAGRAM" width="' + width + '" height="' + MinHeight + '" id="' + Item.id + '"></canvas>';
|
||||
}
|
||||
var ElBlock = document.getElementById("B" + Item.id);
|
||||
if(ElBlock)
|
||||
if (ElBlock)
|
||||
ElBlock.innerHTML = toStaticHTML(Str);
|
||||
else
|
||||
{
|
||||
else {
|
||||
var diargams = document.getElementById("diargams");
|
||||
diargams.innerHTML = toStaticHTML(diargams.innerHTML + "<DIV id='B" + Item.id + "'>" + Str + "</DIV>");
|
||||
}
|
||||
};
|
||||
|
||||
function SetDiagramMouseX(event,mode)
|
||||
{
|
||||
if(event.srcElement && event.srcElement.className && event.srcElement.className.indexOf && event.srcElement.className.indexOf("DIAGRAM") >= 0)
|
||||
{
|
||||
if(mode === "down")
|
||||
function SetDiagramMouseX(event, mode) {
|
||||
if (event.srcElement && event.srcElement.className && event.srcElement.className.indexOf && event.srcElement.className.indexOf("DIAGRAM") >= 0) {
|
||||
if (mode === "down")
|
||||
LMouseOn = true;
|
||||
else
|
||||
if(mode === "up")
|
||||
if (mode === "up")
|
||||
LMouseOn = false;
|
||||
event.preventDefault();
|
||||
if(LMouseOn === true)
|
||||
{
|
||||
if (LMouseOn === true) {
|
||||
var obj = event.srcElement;
|
||||
var mouse = getMouse(obj, event);
|
||||
if(event.ctrlKey === true)
|
||||
{
|
||||
for(var key in DiagramMapId)
|
||||
{
|
||||
if (event.ctrlKey === true) {
|
||||
for (var key in DiagramMapId) {
|
||||
var Item = DiagramMapId[key];
|
||||
Item.mouseX = mouse.x;
|
||||
DrawDiagram(Item);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
var Item = DiagramMapId[obj.id];
|
||||
if(Item)
|
||||
{
|
||||
if (Item) {
|
||||
Item.mouseX = mouse.x;
|
||||
DrawDiagram(Item);
|
||||
}
|
||||
@@ -93,12 +80,11 @@ function SetDiagramMouseX(event,mode)
|
||||
}
|
||||
};
|
||||
|
||||
function DrawDiagram(Item)
|
||||
{
|
||||
if(Item.Delete)
|
||||
return ;
|
||||
function DrawDiagram(Item) {
|
||||
if (Item.Delete)
|
||||
return;
|
||||
var arr = Item.arr;
|
||||
if(!arr)
|
||||
if (!arr)
|
||||
arr = Item.ArrList;
|
||||
var arrX = Item.arrX;
|
||||
var GreenValue = Item.value;
|
||||
@@ -107,71 +93,69 @@ function DrawDiagram(Item)
|
||||
var StartServer = Item.starttime;
|
||||
var mouseX = Item.mouseX;
|
||||
var KPrecision = Item.KPrecision;
|
||||
if(!KPrecision)
|
||||
if (!KPrecision)
|
||||
KPrecision = 1;
|
||||
if(!arr)
|
||||
return ;
|
||||
if (!arr)
|
||||
return;
|
||||
var obj = document.getElementById(Item.id);
|
||||
var ctx = obj.getContext('2d');
|
||||
var Left = 50;
|
||||
var Top = 11;
|
||||
var Button = 15;
|
||||
var Right = 50;
|
||||
if(Item.fillStyle)
|
||||
if (Item.fillStyle)
|
||||
ctx.fillStyle = Item.fillStyle;
|
||||
else
|
||||
ctx.fillStyle = "#FFF";
|
||||
ctx.fillRect(0, 0, obj.width, obj.height);
|
||||
if(arr.length <= 0)
|
||||
return ;
|
||||
if (arr.length <= 0)
|
||||
return;
|
||||
var Pow2 = 0;
|
||||
if(Item.name.substr(Item.name.length - 2) === "**")
|
||||
if (Item.name.substr(Item.name.length - 2) === "**")
|
||||
Pow2 = 1;
|
||||
var MaxValue = arr[0];
|
||||
var MinValue = arr[0];
|
||||
var AvgValue = 0;
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
if(arr[i] > MaxValue)
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (arr[i] > MaxValue)
|
||||
MaxValue = arr[i];
|
||||
if(arr[i] < MinValue)
|
||||
if (arr[i] < MinValue)
|
||||
MinValue = arr[i];
|
||||
if(arr[i])
|
||||
if (arr[i])
|
||||
AvgValue += arr[i];
|
||||
}
|
||||
if(Item.name.substr(0, 4) !== "MAX:" || !Item.AvgValue)
|
||||
if (Item.name.substr(0, 4) !== "MAX:" || !Item.AvgValue)
|
||||
AvgValue = AvgValue / arr.length;
|
||||
else
|
||||
AvgValue = Item.AvgValue;
|
||||
if(Pow2 && AvgValue)
|
||||
if (Pow2 && AvgValue)
|
||||
AvgValue = Math.pow(2, AvgValue) / 1000000;
|
||||
if(AvgValue < 50)
|
||||
if (AvgValue < 50)
|
||||
AvgValue = AvgValue.toFixed(2);
|
||||
else
|
||||
AvgValue = Math.floor(AvgValue);
|
||||
if(Item.MaxValue !== undefined)
|
||||
if (Item.MaxValue !== undefined)
|
||||
MaxValue = Item.MaxValue;
|
||||
if(Pow2 && MaxValue)
|
||||
if (Pow2 && MaxValue)
|
||||
MaxValue = Math.pow(2, MaxValue) / 1000000;
|
||||
var HValue = MaxValue;
|
||||
if(HValue <= 0)
|
||||
if (HValue <= 0)
|
||||
HValue = 1;
|
||||
var KX = (obj.width - Left - Right) / arr.length;
|
||||
var KY = (obj.height - Top - Button) / HValue;
|
||||
var DeltaY = 0;
|
||||
var bLine = Item.line;
|
||||
if(Item.zero)
|
||||
{
|
||||
if (Item.zero) {
|
||||
bLine = 1;
|
||||
DeltaY -= Item.zero * KY;
|
||||
MaxValue -= Item.zero;
|
||||
AvgValue -= Item.zero;
|
||||
}
|
||||
MaxValue = Math.floor(MaxValue + 0.5);
|
||||
if(bLine)
|
||||
if (bLine)
|
||||
ctx.lineWidth = 3;
|
||||
else
|
||||
if(KX > 1)
|
||||
if (KX > 1)
|
||||
ctx.lineWidth = KX;
|
||||
else
|
||||
ctx.lineWidth = 1;
|
||||
@@ -180,69 +164,58 @@ function DrawDiagram(Item)
|
||||
var mouseValueX = 0;
|
||||
var mouseValue = undefined;
|
||||
var mouseColor = undefined;
|
||||
|
||||
function DrawLines(arr,mode,color)
|
||||
{
|
||||
|
||||
function DrawLines(arr, mode, color) {
|
||||
var WasMove0 = 0;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(Left, obj.height - Button);
|
||||
ctx.strokeStyle = color;
|
||||
var PrevX = undefined;
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var Value = arr[i];
|
||||
if(!Value)
|
||||
if (!Value)
|
||||
Value = 0;
|
||||
if(Value)
|
||||
{
|
||||
if(Pow2)
|
||||
if (Value) {
|
||||
if (Pow2)
|
||||
Value = Math.pow(2, Value) / 1000000;
|
||||
}
|
||||
if(mode === "green")
|
||||
{
|
||||
if(Value > GreenValue)
|
||||
if (mode === "green") {
|
||||
if (Value > GreenValue)
|
||||
continue;
|
||||
}
|
||||
else
|
||||
if(mode === "red")
|
||||
{
|
||||
if(Value <= GreenValue)
|
||||
if (mode === "red") {
|
||||
if (Value <= GreenValue)
|
||||
continue;
|
||||
}
|
||||
var Value1 = Value;
|
||||
if(Value1 > GreenValue)
|
||||
if (Value1 > GreenValue)
|
||||
Value1 = GreenValue;
|
||||
var VX1 = Math.floor(Value1 * KY);
|
||||
var VX2 = Math.floor(Value * KY);
|
||||
if(VX1 === VX2)
|
||||
if (VX1 === VX2)
|
||||
VX1 -= 2;
|
||||
var x = StartX + ctx.lineWidth / 2 + (i) * KX;
|
||||
if(bLine)
|
||||
{
|
||||
if(!WasMove0)
|
||||
{
|
||||
if (bLine) {
|
||||
if (!WasMove0) {
|
||||
WasMove0 = 1;
|
||||
ctx.moveTo(x, StartY - VX2);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
ctx.lineTo(x, StartY - VX2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
ctx.moveTo(x, StartY - VX1);
|
||||
ctx.lineTo(x, StartY - VX2);
|
||||
}
|
||||
if(mouseX)
|
||||
{
|
||||
if (mouseX) {
|
||||
var deltaCur = Math.abs(x - mouseX);
|
||||
var deltaWas = Math.abs(mouseValueX - mouseX);
|
||||
if(deltaCur < deltaWas)
|
||||
{
|
||||
if (deltaCur < deltaWas) {
|
||||
mouseValueX = x;
|
||||
mouseValue = Value;
|
||||
if(Item.zero)
|
||||
if (Item.zero)
|
||||
mouseValue -= Item.zero;
|
||||
mouseColor = color;
|
||||
}
|
||||
@@ -250,16 +223,14 @@ function DrawLines(arr,mode,color)
|
||||
}
|
||||
ctx.stroke();
|
||||
};
|
||||
if(!Item.red)
|
||||
if (!Item.red)
|
||||
Item.red = "#A00";
|
||||
if(bLine)
|
||||
{
|
||||
if (bLine) {
|
||||
DrawLines(arr, "line", Item.red);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
DrawLines(arr, "red", Item.red);
|
||||
if(GreenValue > 0)
|
||||
if (GreenValue > 0)
|
||||
DrawLines(arr, "green", "#0A0");
|
||||
}
|
||||
var MaxValueText = GetValueByItemProperty(MaxValue, Item);
|
||||
@@ -275,20 +246,18 @@ function DrawLines(arr,mode,color)
|
||||
ctx.moveTo(StartX, StartY + DeltaY);
|
||||
ctx.lineTo(obj.width - 10, StartY + DeltaY);
|
||||
ctx.stroke();
|
||||
if(mouseX !== undefined)
|
||||
{
|
||||
if (mouseX !== undefined) {
|
||||
ctx.beginPath();
|
||||
ctx.lineWidth = 0.5;
|
||||
ctx.strokeStyle = "#00F";
|
||||
ctx.moveTo(mouseX, Top);
|
||||
ctx.lineTo(mouseX, StartY);
|
||||
ctx.stroke();
|
||||
if(mouseValue !== undefined)
|
||||
{
|
||||
if (mouseValue !== undefined) {
|
||||
ctx.fillStyle = mouseColor;
|
||||
var Val = GetValueByItemProperty(mouseValue, Item);
|
||||
var mouseTextX = mouseX;
|
||||
if(Item.MouseText)
|
||||
if (Item.MouseText)
|
||||
mouseTextX -= 3 * Item.MouseText.length;
|
||||
else
|
||||
Item.MouseText = "";
|
||||
@@ -296,16 +265,14 @@ function DrawLines(arr,mode,color)
|
||||
}
|
||||
}
|
||||
ctx.fillStyle = "#000";
|
||||
if(!Item.NoTextMax)
|
||||
if (!Item.NoTextMax)
|
||||
ctx.fillText(Rigth(" " + MaxValueText, 8), 0, Top - 3);
|
||||
if(MaxValue > 0 && AvgValue > 0)
|
||||
{
|
||||
if (MaxValue > 0 && AvgValue > 0) {
|
||||
var heigh = StartY - Top;
|
||||
var KKY = AvgValue / MaxValue;
|
||||
var y = (heigh - Math.floor(KKY * heigh));
|
||||
var yT = y;
|
||||
if(yT < 10)
|
||||
{
|
||||
if (yT < 10) {
|
||||
yT = 10;
|
||||
}
|
||||
ctx.beginPath();
|
||||
@@ -316,67 +283,58 @@ function DrawLines(arr,mode,color)
|
||||
ctx.fillText(Rigth(" " + AvgValueText, 8), 0, yT + Top);
|
||||
}
|
||||
var CountNameX = 10;
|
||||
if(arr.length < CountNameX)
|
||||
if (arr.length < CountNameX)
|
||||
CountNameX = arr.length;
|
||||
var KX3 = (obj.width - Left - Right) / CountNameX;
|
||||
var KDelitel = 1;
|
||||
var Step = arr.length / CountNameX;
|
||||
var StartTime, bNumber;
|
||||
if(arrX)
|
||||
{
|
||||
if (arrX) {
|
||||
}
|
||||
else
|
||||
if(StartNumber !== undefined)
|
||||
{
|
||||
if (StartNumber !== undefined) {
|
||||
bNumber = 1;
|
||||
StartTime = StartNumber;
|
||||
}
|
||||
else
|
||||
if(StartServer)
|
||||
{
|
||||
if (StartServer) {
|
||||
bNumber = 1;
|
||||
StartTime = Math.floor(((Date.now() - StartServer) - StepTime * arr.length * 1000) / 1000);
|
||||
if(StartTime < 0)
|
||||
if (StartTime < 0)
|
||||
StartTime = 0;
|
||||
var KDelitel = Math.floor(Step / 10) * 10;
|
||||
if(KDelitel == 0)
|
||||
if (KDelitel == 0)
|
||||
KDelitel = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
bNumber = 0;
|
||||
StartTime = Date.now() - StepTime * arr.length * 1000;
|
||||
StartX = StartX - 16;
|
||||
}
|
||||
for(i = 0; i <= CountNameX; i++)
|
||||
{
|
||||
for (i = 0; i <= CountNameX; i++) {
|
||||
var Val;
|
||||
if(i === CountNameX)
|
||||
{
|
||||
if (i === CountNameX) {
|
||||
Val = arr.length * StepTime;
|
||||
KDelitel = 1;
|
||||
}
|
||||
else
|
||||
if(i === 0)
|
||||
if (i === 0)
|
||||
Val = 0;
|
||||
else
|
||||
Val = i * Step * StepTime;
|
||||
var Str;
|
||||
if(arrX)
|
||||
{
|
||||
if (arrX) {
|
||||
Val = Math.floor(Val);
|
||||
Str = arrX[Val];
|
||||
if(Str === undefined)
|
||||
if (Str === undefined)
|
||||
Str = "";
|
||||
}
|
||||
else
|
||||
if(bNumber)
|
||||
{
|
||||
if (bNumber) {
|
||||
Val = Math.floor((StartTime + Val) / KDelitel) * KDelitel;
|
||||
Str = Val;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
var Time = new Date(StartTime + Val * 1000);
|
||||
Str = "" + Time.getHours();
|
||||
Str += ":" + Rigth("0" + Time.getMinutes(), 2);
|
||||
@@ -386,68 +344,56 @@ function DrawLines(arr,mode,color)
|
||||
}
|
||||
};
|
||||
|
||||
function GetValueByItemProperty(Value,Item)
|
||||
{
|
||||
if(Item.MathPow && Item.MathDiv)
|
||||
{
|
||||
function GetValueByItemProperty(Value, Item) {
|
||||
if (Item.MathPow && Item.MathDiv) {
|
||||
Value = Math.pow(Item.MathPow, Value) / Item.MathDiv;
|
||||
}
|
||||
var KPrecision = Item.KPrecision;
|
||||
if(!Item.KPrecision)
|
||||
if (!Item.KPrecision)
|
||||
KPrecision = 1;
|
||||
Value = Math.floor(Value * KPrecision + 0.5) / KPrecision;
|
||||
return Value;
|
||||
};
|
||||
|
||||
function InitDiagramByArr(Arr,width)
|
||||
{
|
||||
for(var i = 0; i < Arr.length; i++)
|
||||
{
|
||||
function InitDiagramByArr(Arr, width) {
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
Arr[i].num = i + 1;
|
||||
SetHTMLDiagramItem(Arr[i], width);
|
||||
}
|
||||
window.addEventListener('mousedown', function (event)
|
||||
{
|
||||
window.addEventListener('mousedown', function(event) {
|
||||
SetDiagramMouseX(event, "down");
|
||||
}, false);
|
||||
window.addEventListener('mouseup', function (event)
|
||||
{
|
||||
window.addEventListener('mouseup', function(event) {
|
||||
SetDiagramMouseX(event, "up");
|
||||
}, false);
|
||||
window.addEventListener('onmousemove', function (event)
|
||||
{
|
||||
window.addEventListener('onmousemove', function(event) {
|
||||
SetDiagramMouseX(event, "move");
|
||||
}, false);
|
||||
};
|
||||
|
||||
function getMouse(canvas,e)
|
||||
{
|
||||
function getMouse(canvas, e) {
|
||||
var x = e.clientX - getTrueOffsetLeft(canvas);
|
||||
if(window.pageXOffset)
|
||||
if (window.pageXOffset)
|
||||
x = x + window.pageXOffset;
|
||||
var y = e.clientY - getTrueOffsetTop(canvas);
|
||||
if(window.pageYOffset)
|
||||
if (window.pageYOffset)
|
||||
y = y + window.pageYOffset;
|
||||
var coord = {x:x, y:y};
|
||||
var coord = { x: x, y: y };
|
||||
return coord;
|
||||
};
|
||||
|
||||
function getTrueOffsetLeft(ele)
|
||||
{
|
||||
function getTrueOffsetLeft(ele) {
|
||||
var n = 0;
|
||||
while(ele)
|
||||
{
|
||||
while (ele) {
|
||||
n += ele.offsetLeft || 0;
|
||||
ele = ele.offsetParent;
|
||||
}
|
||||
return n;
|
||||
};
|
||||
|
||||
function getTrueOffsetTop(ele)
|
||||
{
|
||||
function getTrueOffsetTop(ele) {
|
||||
var n = 0;
|
||||
while(ele)
|
||||
{
|
||||
while (ele) {
|
||||
n += ele.offsetTop || 0;
|
||||
ele = ele.offsetParent;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -11,180 +11,150 @@
|
||||
|
||||
"use strict";
|
||||
var der = require("./der"), toString = Object.prototype.toString, exports = {}, assert = exports;
|
||||
exports.isArray = function (e,s)
|
||||
{
|
||||
if(!Array.isArray(e))
|
||||
exports.isArray = function(e, s) {
|
||||
if (!Array.isArray(e))
|
||||
throw TypeError(s);
|
||||
}, exports.isBoolean = function (e,s)
|
||||
{
|
||||
if("[object Boolean]" !== toString.call(e))
|
||||
}, exports.isBoolean = function(e, s) {
|
||||
if ("[object Boolean]" !== toString.call(e))
|
||||
throw TypeError(s);
|
||||
}, exports.isBuffer = function (e,s)
|
||||
{
|
||||
if(!Buffer.isBuffer(e))
|
||||
}, exports.isBuffer = function(e, s) {
|
||||
if (!Buffer.isBuffer(e))
|
||||
throw TypeError(s);
|
||||
}, exports.isFunction = function (e,s)
|
||||
{
|
||||
if("[object Function]" !== toString.call(e))
|
||||
}, exports.isFunction = function(e, s) {
|
||||
if ("[object Function]" !== toString.call(e))
|
||||
throw TypeError(s);
|
||||
}, exports.isNumber = function (e,s)
|
||||
{
|
||||
if("[object Number]" !== toString.call(e))
|
||||
}, exports.isNumber = function(e, s) {
|
||||
if ("[object Number]" !== toString.call(e))
|
||||
throw TypeError(s);
|
||||
}, exports.isObject = function (e,s)
|
||||
{
|
||||
if("[object Object]" !== toString.call(e))
|
||||
}, exports.isObject = function(e, s) {
|
||||
if ("[object Object]" !== toString.call(e))
|
||||
throw TypeError(s);
|
||||
}, exports.isBufferLength = function (e,s,r)
|
||||
{
|
||||
if(e.length !== s)
|
||||
}, exports.isBufferLength = function(e, s, r) {
|
||||
if (e.length !== s)
|
||||
throw RangeError(r);
|
||||
}, exports.isBufferLength2 = function (e,s,r,_)
|
||||
{
|
||||
if(e.length !== s && e.length !== r)
|
||||
}, exports.isBufferLength2 = function(e, s, r, _) {
|
||||
if (e.length !== s && e.length !== r)
|
||||
throw RangeError(_);
|
||||
}, exports.isLengthGTZero = function (e,s)
|
||||
{
|
||||
if(0 === e.length)
|
||||
}, exports.isLengthGTZero = function(e, s) {
|
||||
if (0 === e.length)
|
||||
throw RangeError(s);
|
||||
}, exports.isNumberInInterval = function (e,s,r,_)
|
||||
{
|
||||
if(e <= s || r <= e)
|
||||
}, exports.isNumberInInterval = function(e, s, r, _) {
|
||||
if (e <= s || r <= e)
|
||||
throw RangeError(_);
|
||||
};
|
||||
var messages = {COMPRESSED_TYPE_INVALID:"compressed should be a boolean", EC_PRIVATE_KEY_TYPE_INVALID:"private key should be a Buffer",
|
||||
EC_PRIVATE_KEY_LENGTH_INVALID:"private key length is invalid", EC_PRIVATE_KEY_RANGE_INVALID:"private key range is invalid",
|
||||
EC_PRIVATE_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting private key is invalid", EC_PRIVATE_KEY_TWEAK_MUL_FAIL:"tweak out of range",
|
||||
EC_PRIVATE_KEY_EXPORT_DER_FAIL:"couldn't export to DER format", EC_PRIVATE_KEY_IMPORT_DER_FAIL:"couldn't import from DER format",
|
||||
EC_PUBLIC_KEYS_TYPE_INVALID:"public keys should be an Array", EC_PUBLIC_KEYS_LENGTH_INVALID:"public keys Array should have at least 1 element",
|
||||
EC_PUBLIC_KEY_TYPE_INVALID:"public key should be a Buffer", EC_PUBLIC_KEY_LENGTH_INVALID:"public key length is invalid", EC_PUBLIC_KEY_PARSE_FAIL:"the public key could not be parsed or is invalid",
|
||||
EC_PUBLIC_KEY_CREATE_FAIL:"private was invalid, try again", EC_PUBLIC_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting public key is invalid",
|
||||
EC_PUBLIC_KEY_TWEAK_MUL_FAIL:"tweak out of range", EC_PUBLIC_KEY_COMBINE_FAIL:"the sum of the public keys is not valid", ECDH_FAIL:"scalar was invalid (zero or overflow)",
|
||||
ECDSA_SIGNATURE_TYPE_INVALID:"signature should be a Buffer", ECDSA_SIGNATURE_LENGTH_INVALID:"signature length is invalid",
|
||||
ECDSA_SIGNATURE_PARSE_FAIL:"couldn't parse signature", ECDSA_SIGNATURE_PARSE_DER_FAIL:"couldn't parse DER signature", ECDSA_SIGNATURE_SERIALIZE_DER_FAIL:"couldn't serialize signature to DER format",
|
||||
ECDSA_SIGN_FAIL:"nonce generation function failed or private key is invalid", ECDSA_RECOVER_FAIL:"couldn't recover public key from signature",
|
||||
MSG32_TYPE_INVALID:"message should be a Buffer", MSG32_LENGTH_INVALID:"message length is invalid", OPTIONS_TYPE_INVALID:"options should be an Object",
|
||||
OPTIONS_DATA_TYPE_INVALID:"options.data should be a Buffer", OPTIONS_DATA_LENGTH_INVALID:"options.data length is invalid",
|
||||
OPTIONS_NONCEFN_TYPE_INVALID:"options.noncefn should be a Function", RECOVERY_ID_TYPE_INVALID:"recovery should be a Number",
|
||||
RECOVERY_ID_VALUE_INVALID:"recovery should have value between -1 and 4", TWEAK_TYPE_INVALID:"tweak should be a Buffer", TWEAK_LENGTH_INVALID:"tweak length is invalid"};
|
||||
var messages = {
|
||||
COMPRESSED_TYPE_INVALID: "compressed should be a boolean", EC_PRIVATE_KEY_TYPE_INVALID: "private key should be a Buffer",
|
||||
EC_PRIVATE_KEY_LENGTH_INVALID: "private key length is invalid", EC_PRIVATE_KEY_RANGE_INVALID: "private key range is invalid",
|
||||
EC_PRIVATE_KEY_TWEAK_ADD_FAIL: "tweak out of range or resulting private key is invalid", EC_PRIVATE_KEY_TWEAK_MUL_FAIL: "tweak out of range",
|
||||
EC_PRIVATE_KEY_EXPORT_DER_FAIL: "couldn't export to DER format", EC_PRIVATE_KEY_IMPORT_DER_FAIL: "couldn't import from DER format",
|
||||
EC_PUBLIC_KEYS_TYPE_INVALID: "public keys should be an Array", EC_PUBLIC_KEYS_LENGTH_INVALID: "public keys Array should have at least 1 element",
|
||||
EC_PUBLIC_KEY_TYPE_INVALID: "public key should be a Buffer", EC_PUBLIC_KEY_LENGTH_INVALID: "public key length is invalid", EC_PUBLIC_KEY_PARSE_FAIL: "the public key could not be parsed or is invalid",
|
||||
EC_PUBLIC_KEY_CREATE_FAIL: "private was invalid, try again", EC_PUBLIC_KEY_TWEAK_ADD_FAIL: "tweak out of range or resulting public key is invalid",
|
||||
EC_PUBLIC_KEY_TWEAK_MUL_FAIL: "tweak out of range", EC_PUBLIC_KEY_COMBINE_FAIL: "the sum of the public keys is not valid", ECDH_FAIL: "scalar was invalid (zero or overflow)",
|
||||
ECDSA_SIGNATURE_TYPE_INVALID: "signature should be a Buffer", ECDSA_SIGNATURE_LENGTH_INVALID: "signature length is invalid",
|
||||
ECDSA_SIGNATURE_PARSE_FAIL: "couldn't parse signature", ECDSA_SIGNATURE_PARSE_DER_FAIL: "couldn't parse DER signature", ECDSA_SIGNATURE_SERIALIZE_DER_FAIL: "couldn't serialize signature to DER format",
|
||||
ECDSA_SIGN_FAIL: "nonce generation function failed or private key is invalid", ECDSA_RECOVER_FAIL: "couldn't recover public key from signature",
|
||||
MSG32_TYPE_INVALID: "message should be a Buffer", MSG32_LENGTH_INVALID: "message length is invalid", OPTIONS_TYPE_INVALID: "options should be an Object",
|
||||
OPTIONS_DATA_TYPE_INVALID: "options.data should be a Buffer", OPTIONS_DATA_LENGTH_INVALID: "options.data length is invalid",
|
||||
OPTIONS_NONCEFN_TYPE_INVALID: "options.noncefn should be a Function", RECOVERY_ID_TYPE_INVALID: "recovery should be a Number",
|
||||
RECOVERY_ID_VALUE_INVALID: "recovery should have value between -1 and 4", TWEAK_TYPE_INVALID: "tweak should be a Buffer", TWEAK_LENGTH_INVALID: "tweak length is invalid"
|
||||
};
|
||||
|
||||
function initCompressedValue(e,s)
|
||||
{
|
||||
function initCompressedValue(e, s) {
|
||||
return void 0 === e ? s : (assert.isBoolean(e, messages.COMPRESSED_TYPE_INVALID), e);
|
||||
};
|
||||
module.exports = function (E)
|
||||
{
|
||||
return {privateKeyVerify:function (e)
|
||||
{
|
||||
module.exports = function(E) {
|
||||
return {
|
||||
privateKeyVerify: function(e) {
|
||||
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), 32 === e.length && E.privateKeyVerify(e);
|
||||
}, privateKeyExport:function (e,s)
|
||||
{
|
||||
}, privateKeyExport: function(e, s) {
|
||||
assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
s = initCompressedValue(s, !0);
|
||||
s = initCompressedValue(s, !0);
|
||||
var r = E.privateKeyExport(e, s);
|
||||
return der.privateKeyExport(e, r, s);
|
||||
}, privateKeyImport:function (e)
|
||||
{
|
||||
if(assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), (e = der.privateKeyImport(e)) && 32 === e.length && E.privateKeyVerify(e))
|
||||
}, privateKeyImport: function(e) {
|
||||
if (assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), (e = der.privateKeyImport(e)) && 32 === e.length && E.privateKeyVerify(e))
|
||||
return e;
|
||||
throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL);
|
||||
}, privateKeyNegate:function (e)
|
||||
{
|
||||
}, privateKeyNegate: function(e) {
|
||||
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
E.privateKeyNegate(e);
|
||||
}, privateKeyModInverse:function (e)
|
||||
{
|
||||
E.privateKeyNegate(e);
|
||||
}, privateKeyModInverse: function(e) {
|
||||
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
E.privateKeyModInverse(e);
|
||||
}, privateKeyTweakAdd:function (e,s)
|
||||
{
|
||||
E.privateKeyModInverse(e);
|
||||
}, privateKeyTweakAdd: function(e, s) {
|
||||
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), E.privateKeyTweakAdd(e,
|
||||
s);
|
||||
}, privateKeyTweakMul:function (e,s)
|
||||
{
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), E.privateKeyTweakAdd(e,
|
||||
s);
|
||||
}, privateKeyTweakMul: function(e, s) {
|
||||
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), E.privateKeyTweakMul(e,
|
||||
s);
|
||||
}, publicKeyCreate:function (e,s)
|
||||
{
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), E.privateKeyTweakMul(e,
|
||||
s);
|
||||
}, publicKeyCreate: function(e, s) {
|
||||
return assert.isBuffer(e, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(e, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
s = initCompressedValue(s, !0), E.publicKeyCreate(e, s);
|
||||
}, publicKeyConvert:function (e,s)
|
||||
{
|
||||
s = initCompressedValue(s, !0), E.publicKeyCreate(e, s);
|
||||
}, publicKeyConvert: function(e, s) {
|
||||
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
|
||||
s = initCompressedValue(s, !0), E.publicKeyConvert(e, s);
|
||||
}, publicKeyVerify:function (e)
|
||||
{
|
||||
s = initCompressedValue(s, !0), E.publicKeyConvert(e, s);
|
||||
}, publicKeyVerify: function(e) {
|
||||
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), E.publicKeyVerify(e);
|
||||
}, publicKeyTweakAdd:function (e,s,r)
|
||||
{
|
||||
}, publicKeyTweakAdd: function(e, s, r) {
|
||||
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), r = initCompressedValue(r,
|
||||
!0), E.publicKeyTweakAdd(e, s, r);
|
||||
}, publicKeyTweakMul:function (e,s,r)
|
||||
{
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), r = initCompressedValue(r,
|
||||
!0), E.publicKeyTweakAdd(e, s, r);
|
||||
}, publicKeyTweakMul: function(e, s, r) {
|
||||
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), r = initCompressedValue(r,
|
||||
!0), E.publicKeyTweakMul(e, s, r);
|
||||
}, publicKeyCombine:function (e,s)
|
||||
{
|
||||
assert.isBuffer(s, messages.TWEAK_TYPE_INVALID), assert.isBufferLength(s, 32, messages.TWEAK_LENGTH_INVALID), r = initCompressedValue(r,
|
||||
!0), E.publicKeyTweakMul(e, s, r);
|
||||
}, publicKeyCombine: function(e, s) {
|
||||
assert.isArray(e, messages.EC_PUBLIC_KEYS_TYPE_INVALID), assert.isLengthGTZero(e, messages.EC_PUBLIC_KEYS_LENGTH_INVALID);
|
||||
for(var r = 0; r < e.length; ++r)
|
||||
for (var r = 0; r < e.length; ++r)
|
||||
assert.isBuffer(e[r], messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e[r], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID);
|
||||
return s = initCompressedValue(s, !0), E.publicKeyCombine(e, s);
|
||||
}, signatureNormalize:function (e)
|
||||
{
|
||||
}, signatureNormalize: function(e) {
|
||||
return assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(e, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID),
|
||||
E.signatureNormalize(e);
|
||||
}, signatureExport:function (e)
|
||||
{
|
||||
E.signatureNormalize(e);
|
||||
}, signatureExport: function(e) {
|
||||
assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(e, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID);
|
||||
var s = E.signatureExport(e);
|
||||
return der.signatureExport(s);
|
||||
}, signatureImport:function (e)
|
||||
{
|
||||
}, signatureImport: function(e) {
|
||||
assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isLengthGTZero(e, messages.ECDSA_SIGNATURE_LENGTH_INVALID);
|
||||
var s = der.signatureImport(e);
|
||||
if(s)
|
||||
if (s)
|
||||
return E.signatureImport(s);
|
||||
throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL);
|
||||
}, signatureImportLax:function (e)
|
||||
{
|
||||
}, signatureImportLax: function(e) {
|
||||
assert.isBuffer(e, messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isLengthGTZero(e, messages.ECDSA_SIGNATURE_LENGTH_INVALID);
|
||||
var s = der.signatureImportLax(e);
|
||||
if(s)
|
||||
if (s)
|
||||
return E.signatureImport(s);
|
||||
throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL);
|
||||
}, sign:function (e,s,r)
|
||||
{
|
||||
}, sign: function(e, s, r) {
|
||||
assert.isBuffer(e, messages.MSG32_TYPE_INVALID), assert.isBufferLength(e, 32, messages.MSG32_LENGTH_INVALID), assert.isBuffer(s,
|
||||
messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID);
|
||||
messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID);
|
||||
var _ = null, t = null;
|
||||
return void 0 !== r && (assert.isObject(r, messages.OPTIONS_TYPE_INVALID), void 0 !== r.data && (assert.isBuffer(r.data, messages.OPTIONS_DATA_TYPE_INVALID),
|
||||
assert.isBufferLength(r.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID), _ = r.data), void 0 !== r.noncefn && (assert.isFunction(r.noncefn,
|
||||
messages.OPTIONS_NONCEFN_TYPE_INVALID), t = r.noncefn)), E.sign(e, s, t, _);
|
||||
}, verify:function (e,s,r)
|
||||
{
|
||||
assert.isBufferLength(r.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID), _ = r.data), void 0 !== r.noncefn && (assert.isFunction(r.noncefn,
|
||||
messages.OPTIONS_NONCEFN_TYPE_INVALID), t = r.noncefn)), E.sign(e, s, t, _);
|
||||
}, verify: function(e, s, r) {
|
||||
return assert.isBuffer(e, messages.MSG32_TYPE_INVALID), assert.isBufferLength(e, 32, messages.MSG32_LENGTH_INVALID), assert.isBuffer(s,
|
||||
messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(s, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID), assert.isBuffer(r,
|
||||
messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(r, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID), E.verify(e,
|
||||
s, r);
|
||||
}, recover:function (e,s,r,_)
|
||||
{
|
||||
messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(s, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID), assert.isBuffer(r,
|
||||
messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(r, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID), E.verify(e,
|
||||
s, r);
|
||||
}, recover: function(e, s, r, _) {
|
||||
return assert.isBuffer(e, messages.MSG32_TYPE_INVALID), assert.isBufferLength(e, 32, messages.MSG32_LENGTH_INVALID), assert.isBuffer(s,
|
||||
messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(s, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID), assert.isNumber(r,
|
||||
messages.RECOVERY_ID_TYPE_INVALID), assert.isNumberInInterval(r, - 1, 4, messages.RECOVERY_ID_VALUE_INVALID), _ = initCompressedValue(_,
|
||||
!0), E.recover(e, s, r, _);
|
||||
}, ecdh:function (e,s)
|
||||
{
|
||||
messages.ECDSA_SIGNATURE_TYPE_INVALID), assert.isBufferLength(s, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID), assert.isNumber(r,
|
||||
messages.RECOVERY_ID_TYPE_INVALID), assert.isNumberInInterval(r, - 1, 4, messages.RECOVERY_ID_VALUE_INVALID), _ = initCompressedValue(_,
|
||||
!0), E.recover(e, s, r, _);
|
||||
}, ecdh: function(e, s) {
|
||||
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
|
||||
assert.isBuffer(s, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
E.ecdh(e, s);
|
||||
}, ecdhUnsafe:function (e,s,r)
|
||||
{
|
||||
assert.isBuffer(s, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
E.ecdh(e, s);
|
||||
}, ecdhUnsafe: function(e, s, r) {
|
||||
return assert.isBuffer(e, messages.EC_PUBLIC_KEY_TYPE_INVALID), assert.isBufferLength2(e, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID),
|
||||
assert.isBuffer(s, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
r = initCompressedValue(r, !0), E.ecdhUnsafe(e, s, r);
|
||||
}};
|
||||
assert.isBuffer(s, messages.EC_PRIVATE_KEY_TYPE_INVALID), assert.isBufferLength(s, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID),
|
||||
r = initCompressedValue(r, !0), E.ecdhUnsafe(e, s, r);
|
||||
}
|
||||
};
|
||||
}, global.SIGN_LIB = module.exports;
|
||||
|
||||
@@ -8,17 +8,14 @@
|
||||
* Telegram: https://t.me/terafoundation
|
||||
*/
|
||||
|
||||
(function ()
|
||||
{
|
||||
(function() {
|
||||
'use strict';
|
||||
var root = typeof window === 'object' ? window : {};
|
||||
var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
|
||||
if(NODE_JS && !root.RUN_NW_CLIENT)
|
||||
{
|
||||
if (NODE_JS && !root.RUN_NW_CLIENT) {
|
||||
root = global;
|
||||
}
|
||||
if(root.RUN_CLIENT)
|
||||
{
|
||||
if (root.RUN_CLIENT) {
|
||||
root = window;
|
||||
}
|
||||
var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;
|
||||
@@ -30,157 +27,132 @@
|
||||
var PADDING = [6, 1536, 393216, 100663296];
|
||||
var SHIFT = [0, 8, 16, 24];
|
||||
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777,
|
||||
2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648,
|
||||
32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649,
|
||||
0, 2147516424, 2147483648];
|
||||
2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648,
|
||||
32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649,
|
||||
0, 2147516424, 2147483648];
|
||||
var BITS = [224, 256, 384, 512];
|
||||
var SHAKE_BITS = [128, 256];
|
||||
var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];
|
||||
var CSHAKE_BYTEPAD = {'128':168, '256':136};
|
||||
if(root.JS_SHA3_NO_NODE_JS || !Array.isArray)
|
||||
{
|
||||
Array.isArray = function (obj)
|
||||
{
|
||||
var CSHAKE_BYTEPAD = { '128': 168, '256': 136 };
|
||||
if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {
|
||||
Array.isArray = function(obj) {
|
||||
return Object.prototype.toString.call(obj) === '[object Array]';
|
||||
};
|
||||
}
|
||||
var createOutputMethod = function (bits,padding,outputType)
|
||||
{
|
||||
return function (message)
|
||||
{
|
||||
var createOutputMethod = function(bits, padding, outputType) {
|
||||
return function(message) {
|
||||
return new Keccak(bits, padding, bits).update(message)[outputType]();
|
||||
};
|
||||
};
|
||||
var createShakeOutputMethod = function (bits,padding,outputType)
|
||||
{
|
||||
return function (message,outputBits)
|
||||
{
|
||||
var createShakeOutputMethod = function(bits, padding, outputType) {
|
||||
return function(message, outputBits) {
|
||||
return new Keccak(bits, padding, outputBits).update(message)[outputType]();
|
||||
};
|
||||
};
|
||||
var createCshakeOutputMethod = function (bits,padding,outputType)
|
||||
{
|
||||
return function (message,outputBits,n,s)
|
||||
{
|
||||
var createCshakeOutputMethod = function(bits, padding, outputType) {
|
||||
return function(message, outputBits, n, s) {
|
||||
return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();
|
||||
};
|
||||
};
|
||||
var createKmacOutputMethod = function (bits,padding,outputType)
|
||||
{
|
||||
return function (key,message,outputBits,s)
|
||||
{
|
||||
var createKmacOutputMethod = function(bits, padding, outputType) {
|
||||
return function(key, message, outputBits, s) {
|
||||
return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();
|
||||
};
|
||||
};
|
||||
var createOutputMethods = function (method,createMethod,bits,padding)
|
||||
{
|
||||
for(var i = 0; i < OUTPUT_TYPES.length; ++i)
|
||||
{
|
||||
var createOutputMethods = function(method, createMethod, bits, padding) {
|
||||
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
|
||||
var type = OUTPUT_TYPES[i];
|
||||
method[type] = createMethod(bits, padding, type);
|
||||
}
|
||||
return method;
|
||||
};
|
||||
var createMethod = function (bits,padding,outputs)
|
||||
{
|
||||
var createMethod = function(bits, padding, outputs) {
|
||||
var method = createOutputMethod(bits, padding, outputs);
|
||||
method.create = function ()
|
||||
{
|
||||
method.create = function() {
|
||||
return new Keccak(bits, padding, bits);
|
||||
};
|
||||
method.update = function (message)
|
||||
{
|
||||
method.update = function(message) {
|
||||
return method.create().update(message);
|
||||
};
|
||||
return createOutputMethods(method, createOutputMethod, bits, padding);
|
||||
};
|
||||
var createMethodArray = function (bits,padding)
|
||||
{
|
||||
var createMethodArray = function(bits, padding) {
|
||||
var method = createOutputMethod(bits, padding, 'array');
|
||||
method.create = function ()
|
||||
{
|
||||
method.create = function() {
|
||||
return new Keccak(bits, padding, bits);
|
||||
};
|
||||
method.update = function (message)
|
||||
{
|
||||
method.update = function(message) {
|
||||
return method.create().update(message);
|
||||
};
|
||||
return createOutputMethods(method, createOutputMethod, bits, padding);
|
||||
};
|
||||
var createShakeMethod = function (bits,padding)
|
||||
{
|
||||
var createShakeMethod = function(bits, padding) {
|
||||
var method = createShakeOutputMethod(bits, padding, 'hex');
|
||||
method.create = function (outputBits)
|
||||
{
|
||||
method.create = function(outputBits) {
|
||||
return new Keccak(bits, padding, outputBits);
|
||||
};
|
||||
method.update = function (message,outputBits)
|
||||
{
|
||||
method.update = function(message, outputBits) {
|
||||
return method.create(outputBits).update(message);
|
||||
};
|
||||
return createOutputMethods(method, createShakeOutputMethod, bits, padding);
|
||||
};
|
||||
var createCshakeMethod = function (bits,padding)
|
||||
{
|
||||
var createCshakeMethod = function(bits, padding) {
|
||||
var w = CSHAKE_BYTEPAD[bits];
|
||||
var method = createCshakeOutputMethod(bits, padding, 'hex');
|
||||
method.create = function (outputBits,n,s)
|
||||
{
|
||||
if(!n && !s)
|
||||
{
|
||||
method.create = function(outputBits, n, s) {
|
||||
if (!n && !s) {
|
||||
return methods['shake' + bits].create(outputBits);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
return new Keccak(bits, padding, outputBits).bytepad([n, s], w);
|
||||
}
|
||||
};
|
||||
method.update = function (message,outputBits,n,s)
|
||||
{
|
||||
method.update = function(message, outputBits, n, s) {
|
||||
return method.create(outputBits, n, s).update(message);
|
||||
};
|
||||
return createOutputMethods(method, createCshakeOutputMethod, bits, padding);
|
||||
};
|
||||
var createKmacMethod = function (bits,padding)
|
||||
{
|
||||
var createKmacMethod = function(bits, padding) {
|
||||
var w = CSHAKE_BYTEPAD[bits];
|
||||
var method = createKmacOutputMethod(bits, padding, 'hex');
|
||||
method.create = function (key,outputBits,s)
|
||||
{
|
||||
method.create = function(key, outputBits, s) {
|
||||
return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);
|
||||
};
|
||||
method.update = function (key,message,outputBits,s)
|
||||
{
|
||||
method.update = function(key, message, outputBits, s) {
|
||||
return method.create(key, outputBits, s).update(message);
|
||||
};
|
||||
return createOutputMethods(method, createKmacOutputMethod, bits, padding);
|
||||
};
|
||||
var algorithms = [{name:'keccak', padding:KECCAK_PADDING, bits:BITS, createMethod:createMethod}, {name:'sha3', padding:PADDING,
|
||||
bits:BITS, createMethod:createMethod, outputs:'hex'}, {name:'sha3_array', padding:PADDING, bits:BITS, createMethod:createMethod,
|
||||
outputs:'array'}, {name:'sha3_buf', padding:PADDING, bits:BITS, createMethod:createMethod, outputs:'buffer'}, {name:'shake',
|
||||
padding:SHAKE_PADDING, bits:SHAKE_BITS, createMethod:createShakeMethod}, {name:'cshake', padding:CSHAKE_PADDING, bits:SHAKE_BITS,
|
||||
createMethod:createCshakeMethod}, {name:'kmac', padding:CSHAKE_PADDING, bits:SHAKE_BITS, createMethod:createKmacMethod}];
|
||||
var algorithms = [{ name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod }, {
|
||||
name: 'sha3', padding: PADDING,
|
||||
bits: BITS, createMethod: createMethod, outputs: 'hex'
|
||||
}, {
|
||||
name: 'sha3_array', padding: PADDING, bits: BITS, createMethod: createMethod,
|
||||
outputs: 'array'
|
||||
}, { name: 'sha3_buf', padding: PADDING, bits: BITS, createMethod: createMethod, outputs: 'buffer' }, {
|
||||
name: 'shake',
|
||||
padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod
|
||||
}, {
|
||||
name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS,
|
||||
createMethod: createCshakeMethod
|
||||
}, { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }];
|
||||
var methods = {}, methodNames = [];
|
||||
for(var i = 0; i < algorithms.length; ++i)
|
||||
{
|
||||
for (var i = 0; i < algorithms.length; ++i) {
|
||||
var algorithm = algorithms[i];
|
||||
var bits = algorithm.bits;
|
||||
for(var j = 0; j < bits.length; ++j)
|
||||
{
|
||||
for (var j = 0; j < bits.length; ++j) {
|
||||
var methodName = algorithm.name + '_' + bits[j];
|
||||
methodNames.push(methodName);
|
||||
methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding, algorithm.outputs);
|
||||
if(algorithm.name !== 'sha3')
|
||||
{
|
||||
if (algorithm.name !== 'sha3') {
|
||||
var newMethodName = algorithm.name + bits[j];
|
||||
methodNames.push(newMethodName);
|
||||
methods[newMethodName] = methods[methodName];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Keccak(bits,padding,outputBits)
|
||||
{
|
||||
|
||||
function Keccak(bits, padding, outputBits) {
|
||||
this.blocks = [];
|
||||
this.s = [];
|
||||
this.padding = padding;
|
||||
@@ -192,71 +164,55 @@ function Keccak(bits,padding,outputBits)
|
||||
this.byteCount = this.blockCount << 2;
|
||||
this.outputBlocks = outputBits >> 5;
|
||||
this.extraBytes = (outputBits & 31) >> 3;
|
||||
for(var i = 0; i < 50; ++i)
|
||||
{
|
||||
for (var i = 0; i < 50; ++i) {
|
||||
this.s[i] = 0;
|
||||
}
|
||||
};
|
||||
Keccak.prototype.update = function (message)
|
||||
{
|
||||
Keccak.prototype.update = function(message) {
|
||||
var notString = typeof message !== 'string';
|
||||
if(notString && message.constructor === root.ArrayBuffer)
|
||||
{
|
||||
if (notString && message.constructor === root.ArrayBuffer) {
|
||||
TO_ERROR_LOG("SHA3", 10, 'ERROR: Error type ArrayBuffer, use Uint8Array instead!');
|
||||
return [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 length = message.length;
|
||||
if(notString)
|
||||
{
|
||||
if(typeof length !== 'number' || !Array.isArray(message) && !(ARRAY_BUFFER && ArrayBuffer.isView(message)))
|
||||
{
|
||||
if (notString) {
|
||||
if (typeof length !== 'number' || !Array.isArray(message) && !(ARRAY_BUFFER && ArrayBuffer.isView(message))) {
|
||||
TO_ERROR_LOG("SHA3", 20, 'ERROR: Input is invalid type, message=' + JSON.stringify(message));
|
||||
return [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 blocks = this.blocks, byteCount = this.byteCount, blockCount = this.blockCount, index = 0, s = this.s, i, code;
|
||||
while(index < length)
|
||||
{
|
||||
if(this.reset)
|
||||
{
|
||||
while (index < length) {
|
||||
if (this.reset) {
|
||||
this.reset = false;
|
||||
blocks[0] = this.block;
|
||||
for(i = 1; i < blockCount + 1; ++i)
|
||||
{
|
||||
for (i = 1; i < blockCount + 1; ++i) {
|
||||
blocks[i] = 0;
|
||||
}
|
||||
}
|
||||
if(notString)
|
||||
{
|
||||
for(i = this.start; index < length && i < byteCount; ++index)
|
||||
{
|
||||
if (notString) {
|
||||
for (i = this.start; index < length && i < byteCount; ++index) {
|
||||
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i = this.start; index < length && i < byteCount; ++index)
|
||||
{
|
||||
else {
|
||||
for (i = this.start; index < length && i < byteCount; ++index) {
|
||||
code = message.charCodeAt(index);
|
||||
if(code < 0x80)
|
||||
{
|
||||
if (code < 0x80) {
|
||||
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
||||
}
|
||||
else
|
||||
if(code < 0x800)
|
||||
{
|
||||
if (code < 0x800) {
|
||||
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||
}
|
||||
else
|
||||
if(code < 0xd800 || code >= 0xe000)
|
||||
{
|
||||
if (code < 0xd800 || code >= 0xe000) {
|
||||
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
||||
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
|
||||
@@ -266,91 +222,73 @@ function Keccak(bits,padding,outputBits)
|
||||
}
|
||||
}
|
||||
this.lastByteIndex = i;
|
||||
if(i >= byteCount)
|
||||
{
|
||||
if (i >= byteCount) {
|
||||
this.start = i - byteCount;
|
||||
this.block = blocks[blockCount];
|
||||
for(i = 0; i < blockCount; ++i)
|
||||
{
|
||||
for (i = 0; i < blockCount; ++i) {
|
||||
s[i] ^= blocks[i];
|
||||
}
|
||||
f(s);
|
||||
this.reset = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
this.start = i;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
};
|
||||
Keccak.prototype.encode = function (x,right)
|
||||
{
|
||||
Keccak.prototype.encode = function(x, right) {
|
||||
var o = x & 255, n = 1;
|
||||
var bytes = [o];
|
||||
x = x >> 8;
|
||||
o = x & 255;
|
||||
while(o > 0)
|
||||
{
|
||||
while (o > 0) {
|
||||
bytes.unshift(o);
|
||||
x = x >> 8;
|
||||
o = x & 255;
|
||||
++n;
|
||||
}
|
||||
if(right)
|
||||
{
|
||||
if (right) {
|
||||
bytes.push(n);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
bytes.unshift(n);
|
||||
}
|
||||
this.update(bytes);
|
||||
return bytes.length;
|
||||
};
|
||||
Keccak.prototype.encodeString = function (str)
|
||||
{
|
||||
Keccak.prototype.encodeString = function(str) {
|
||||
str = str || '';
|
||||
var notString = typeof str !== 'string';
|
||||
if(notString && str.constructor === root.ArrayBuffer)
|
||||
{
|
||||
if (notString && str.constructor === root.ArrayBuffer) {
|
||||
str = new Uint8Array(str);
|
||||
}
|
||||
var length = str.length;
|
||||
if(notString)
|
||||
{
|
||||
if(typeof length !== 'number' || !Array.isArray(str) && !(ARRAY_BUFFER && ArrayBuffer.isView(str)))
|
||||
{
|
||||
if (notString) {
|
||||
if (typeof length !== 'number' || !Array.isArray(str) && !(ARRAY_BUFFER && ArrayBuffer.isView(str))) {
|
||||
TO_ERROR_LOG("SHA3", 30, 'ERROR: Input is invalid type, str=' + JSON.stringify(str));
|
||||
return [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 bytes = 0;
|
||||
if(notString)
|
||||
{
|
||||
if (notString) {
|
||||
bytes = length;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(var i = 0; i < str.length; ++i)
|
||||
{
|
||||
else {
|
||||
for (var i = 0; i < str.length; ++i) {
|
||||
var code = str.charCodeAt(i);
|
||||
if(code < 0x80)
|
||||
{
|
||||
if (code < 0x80) {
|
||||
bytes += 1;
|
||||
}
|
||||
else
|
||||
if(code < 0x800)
|
||||
{
|
||||
if (code < 0x800) {
|
||||
bytes += 2;
|
||||
}
|
||||
else
|
||||
if(code < 0xd800 || code >= 0xe000)
|
||||
{
|
||||
if (code < 0xd800 || code >= 0xe000) {
|
||||
bytes += 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
|
||||
bytes += 4;
|
||||
}
|
||||
@@ -360,11 +298,9 @@ function Keccak(bits,padding,outputBits)
|
||||
this.update(str);
|
||||
return bytes;
|
||||
};
|
||||
Keccak.prototype.bytepad = function (strs,w)
|
||||
{
|
||||
Keccak.prototype.bytepad = function(strs, w) {
|
||||
var bytes = this.encode(w);
|
||||
for(var i = 0; i < strs.length; ++i)
|
||||
{
|
||||
for (var i = 0; i < strs.length; ++i) {
|
||||
bytes += this.encodeString(strs[i]);
|
||||
}
|
||||
var paddingBytes = w - bytes % w;
|
||||
@@ -373,104 +309,82 @@ function Keccak(bits,padding,outputBits)
|
||||
this.update(zeros);
|
||||
return this;
|
||||
};
|
||||
Keccak.prototype.finalize = function ()
|
||||
{
|
||||
Keccak.prototype.finalize = function() {
|
||||
var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;
|
||||
blocks[i >> 2] |= this.padding[i & 3];
|
||||
if(this.lastByteIndex === this.byteCount)
|
||||
{
|
||||
if (this.lastByteIndex === this.byteCount) {
|
||||
blocks[0] = blocks[blockCount];
|
||||
for(i = 1; i < blockCount + 1; ++i)
|
||||
{
|
||||
for (i = 1; i < blockCount + 1; ++i) {
|
||||
blocks[i] = 0;
|
||||
}
|
||||
}
|
||||
blocks[blockCount - 1] |= 0x80000000;
|
||||
for(i = 0; i < blockCount; ++i)
|
||||
{
|
||||
for (i = 0; i < blockCount; ++i) {
|
||||
s[i] ^= blocks[i];
|
||||
}
|
||||
f(s);
|
||||
};
|
||||
Keccak.prototype.toString = Keccak.prototype.hex = function ()
|
||||
{
|
||||
Keccak.prototype.toString = Keccak.prototype.hex = function() {
|
||||
this.finalize();
|
||||
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, extraBytes = this.extraBytes, i = 0, j = 0;
|
||||
var hex = '', block;
|
||||
while(j < outputBlocks)
|
||||
{
|
||||
for(i = 0; i < blockCount && j < outputBlocks; ++i, ++j)
|
||||
{
|
||||
while (j < outputBlocks) {
|
||||
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
||||
block = s[i];
|
||||
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];
|
||||
}
|
||||
if(j % blockCount === 0)
|
||||
{
|
||||
if (j % blockCount === 0) {
|
||||
f(s);
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
if(extraBytes)
|
||||
{
|
||||
if (extraBytes) {
|
||||
block = s[i];
|
||||
if(extraBytes > 0)
|
||||
{
|
||||
if (extraBytes > 0) {
|
||||
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];
|
||||
}
|
||||
if(extraBytes > 1)
|
||||
{
|
||||
if (extraBytes > 1) {
|
||||
hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];
|
||||
}
|
||||
if(extraBytes > 2)
|
||||
{
|
||||
if (extraBytes > 2) {
|
||||
hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];
|
||||
}
|
||||
}
|
||||
return hex;
|
||||
};
|
||||
Keccak.prototype.arrayBuffer = function ()
|
||||
{
|
||||
Keccak.prototype.arrayBuffer = function() {
|
||||
this.finalize();
|
||||
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, extraBytes = this.extraBytes, i = 0, j = 0;
|
||||
var bytes = this.outputBits >> 3;
|
||||
var buffer;
|
||||
if(extraBytes)
|
||||
{
|
||||
if (extraBytes) {
|
||||
buffer = new ArrayBuffer((outputBlocks + 1) << 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
buffer = new ArrayBuffer(bytes);
|
||||
}
|
||||
var array = new Uint32Array(buffer);
|
||||
while(j < outputBlocks)
|
||||
{
|
||||
for(i = 0; i < blockCount && j < outputBlocks; ++i, ++j)
|
||||
{
|
||||
while (j < outputBlocks) {
|
||||
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
||||
array[j] = s[i];
|
||||
}
|
||||
if(j % blockCount === 0)
|
||||
{
|
||||
if (j % blockCount === 0) {
|
||||
f(s);
|
||||
}
|
||||
}
|
||||
if(extraBytes)
|
||||
{
|
||||
if (extraBytes) {
|
||||
array[i] = s[i];
|
||||
buffer = buffer.slice(0, bytes);
|
||||
}
|
||||
return buffer;
|
||||
};
|
||||
Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;
|
||||
Keccak.prototype.digest = Keccak.prototype.array = function ()
|
||||
{
|
||||
Keccak.prototype.digest = Keccak.prototype.array = function() {
|
||||
this.finalize();
|
||||
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, extraBytes = this.extraBytes, i = 0, j = 0;
|
||||
var array = [], offset, block;
|
||||
while(j < outputBlocks)
|
||||
{
|
||||
for(i = 0; i < blockCount && j < outputBlocks; ++i, ++j)
|
||||
{
|
||||
while (j < outputBlocks) {
|
||||
for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
|
||||
offset = j << 2;
|
||||
block = s[i];
|
||||
array[offset] = block & 0xFF;
|
||||
@@ -478,48 +392,39 @@ function Keccak(bits,padding,outputBits)
|
||||
array[offset + 2] = (block >> 16) & 0xFF;
|
||||
array[offset + 3] = (block >> 24) & 0xFF;
|
||||
}
|
||||
if(j % blockCount === 0)
|
||||
{
|
||||
if (j % blockCount === 0) {
|
||||
f(s);
|
||||
}
|
||||
}
|
||||
if(extraBytes)
|
||||
{
|
||||
if (extraBytes) {
|
||||
offset = j << 2;
|
||||
block = s[i];
|
||||
if(extraBytes > 0)
|
||||
{
|
||||
if (extraBytes > 0) {
|
||||
array[offset] = block & 0xFF;
|
||||
}
|
||||
if(extraBytes > 1)
|
||||
{
|
||||
if (extraBytes > 1) {
|
||||
array[offset + 1] = (block >> 8) & 0xFF;
|
||||
}
|
||||
if(extraBytes > 2)
|
||||
{
|
||||
if (extraBytes > 2) {
|
||||
array[offset + 2] = (block >> 16) & 0xFF;
|
||||
}
|
||||
}
|
||||
return array;
|
||||
};
|
||||
|
||||
function Kmac(bits,padding,outputBits)
|
||||
{
|
||||
|
||||
function Kmac(bits, padding, outputBits) {
|
||||
Keccak.call(this, bits, padding, outputBits);
|
||||
};
|
||||
Kmac.prototype = new Keccak();
|
||||
Kmac.prototype.finalize = function ()
|
||||
{
|
||||
Kmac.prototype.finalize = function() {
|
||||
this.encode(this.outputBits, true);
|
||||
return Keccak.prototype.finalize.call(this);
|
||||
};
|
||||
var f = function (s)
|
||||
{
|
||||
var f = function(s) {
|
||||
var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15,
|
||||
b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40,
|
||||
b41, b42, b43, b44, b45, b46, b47, b48, b49;
|
||||
for(n = 0; n < 48; n += 2)
|
||||
{
|
||||
b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40,
|
||||
b41, b42, b43, b44, b45, b46, b47, b48, b49;
|
||||
for (n = 0; n < 48; n += 2) {
|
||||
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
|
||||
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
|
||||
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
|
||||
@@ -697,58 +602,47 @@ function Kmac(bits,padding,outputBits)
|
||||
root.sha3_str = methods.sha3_256;
|
||||
root.sha3_array_256 = methods.sha3_array_256;
|
||||
root.sha3 = methods.sha3_array_256;
|
||||
root.sha = function (data)
|
||||
{
|
||||
root.sha = function(data) {
|
||||
return meshhash(methods.sha3_256(data));
|
||||
};
|
||||
root.shaarr = function (data)
|
||||
{
|
||||
root.shaarr = function(data) {
|
||||
return meshhash(methods.sha3_array_256(data));
|
||||
};
|
||||
root.shabuf = function (data)
|
||||
{
|
||||
root.shabuf = function(data) {
|
||||
return Buffer.from(shaarr(data));
|
||||
};
|
||||
root.shabuf = function (data)
|
||||
{
|
||||
root.shabuf = function(data) {
|
||||
return Buffer.from(shaarr(data));
|
||||
};
|
||||
root.SHA3BUF = function (data,num)
|
||||
{
|
||||
root.SHA3BUF = function(data, num) {
|
||||
return Buffer.from(SHA3ARR(data, num));
|
||||
};
|
||||
root.SHA3ARR = function (data,num)
|
||||
{
|
||||
if(!NEW_SIGN_TIME || !num || num >= NEW_SIGN_TIME)
|
||||
root.SHA3ARR = function(data, num) {
|
||||
if (!NEW_SIGN_TIME || !num || num >= NEW_SIGN_TIME)
|
||||
return sha3(data);
|
||||
else
|
||||
return meshhash(methods.sha3_array_256(data));
|
||||
};
|
||||
root.shaarrblock = function (data,num)
|
||||
{
|
||||
root.shaarrblock = function(data, num) {
|
||||
return meshhash(methods.sha3_array_256(data), num);
|
||||
};
|
||||
})();
|
||||
|
||||
function meshhash(hash,num)
|
||||
{
|
||||
function meshhash(hash, num) {
|
||||
var regs = [hash[3], hash[2], hash[1], hash[0]];
|
||||
var mem = [];
|
||||
for(var i = 0; i < 16; i++)
|
||||
{
|
||||
for (var i = 0; i < 16; i++) {
|
||||
mem[i] = hash[i * 2] + (hash[i * 2 + 1] << 8);
|
||||
}
|
||||
var WasGoto = 0;
|
||||
var L = 0;
|
||||
for(var i = 0; i < 64; i++)
|
||||
{
|
||||
for (var i = 0; i < 64; i++) {
|
||||
var c = hash[L & 31];
|
||||
L++;
|
||||
var a = (c >> 4) & 0xF;
|
||||
var b = c & 0xF;
|
||||
var r = c & 0x3;
|
||||
switch(a)
|
||||
{
|
||||
switch (a) {
|
||||
case 0:
|
||||
regs[0] = regs[0] + regs[r];
|
||||
break;
|
||||
@@ -768,15 +662,13 @@ function meshhash(hash,num)
|
||||
regs[0] = regs[0] + regs[1] + regs[2] + regs[3];
|
||||
break;
|
||||
case 8:
|
||||
if((regs[0] & 0xFFFF) < 32768 && !WasGoto)
|
||||
{
|
||||
if ((regs[0] & 0xFFFF) < 32768 && !WasGoto) {
|
||||
L = 32 + L - b;
|
||||
WasGoto = 1;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if((regs[0] & 0xFFFF) > 32768 && !WasGoto)
|
||||
{
|
||||
if ((regs[0] & 0xFFFF) > 32768 && !WasGoto) {
|
||||
L += b;
|
||||
WasGoto = 1;
|
||||
}
|
||||
@@ -786,16 +678,14 @@ function meshhash(hash,num)
|
||||
}
|
||||
var index1 = regs[0] & 0xF;
|
||||
var index2 = (regs[0] >> 8) & 0xF;
|
||||
if(index1 !== index2)
|
||||
{
|
||||
if (index1 !== index2) {
|
||||
var temp = mem[index1];
|
||||
mem[index1] = mem[index2];
|
||||
mem[index2] = temp;
|
||||
}
|
||||
}
|
||||
var ret = [];
|
||||
for(var i = 0; i < 16; i++)
|
||||
{
|
||||
for (var i = 0; i < 16; i++) {
|
||||
ret[i * 2] = mem[i] & 0xFF;
|
||||
ret[i * 2 + 1] = mem[i] >> 8;
|
||||
}
|
||||
|
||||
4289
src/HTML/JS/sign-lib-min.js
vendored
4289
src/HTML/JS/sign-lib-min.js
vendored
File diff suppressed because it is too large
Load Diff
@@ -19,65 +19,56 @@ var MaxBlockNum = 0;
|
||||
var DelList = {};
|
||||
var WasAccountsDataStr;
|
||||
|
||||
function SetAccountsData(Data,AccountsDataStr)
|
||||
{
|
||||
if(!Data || !Data.result)
|
||||
return ;
|
||||
if($("idBtRun"))
|
||||
function SetAccountsData(Data, AccountsDataStr) {
|
||||
if (!Data || !Data.result)
|
||||
return;
|
||||
if ($("idBtRun"))
|
||||
$("idBtRun").style.display = (Data.arr.length ? '' : 'none');
|
||||
if(AccountsDataStr === WasAccountsDataStr)
|
||||
return ;
|
||||
if (AccountsDataStr === WasAccountsDataStr)
|
||||
return;
|
||||
WasAccountsDataStr = AccountsDataStr;
|
||||
var arr = Data.arr;
|
||||
var Select = $("idAccount");
|
||||
if(arr.length !== Select.options.length)
|
||||
{
|
||||
if (arr.length !== Select.options.length) {
|
||||
var options = Select.options;
|
||||
options.length = arr.length;
|
||||
}
|
||||
MaxBlockNum = GetCurrentBlockNumByTime();
|
||||
SetGridData(arr, "grid_accounts", "idMyTotalSum");
|
||||
for(var i = 0; arr && i < arr.length; i++)
|
||||
{
|
||||
for (var i = 0; arr && i < arr.length; i++) {
|
||||
var Item = arr[i];
|
||||
Item.MyAccount = true;
|
||||
var Num = ParseNum(Item.Num);
|
||||
if(!MapAccounts[Num])
|
||||
if (!MapAccounts[Num])
|
||||
MapAccounts[Num] = {};
|
||||
CopyObjKeys(MapAccounts[Num], Item);
|
||||
var option = Select.options[i];
|
||||
var StrText = GetAccountText(Item, Num, 1);
|
||||
if(option.text !== StrText)
|
||||
if (option.text !== StrText)
|
||||
CheckNameAccTo();
|
||||
option.value = Num;
|
||||
option.text = StrText;
|
||||
}
|
||||
var CurentValue = LoadMapAfter["idAccount"];
|
||||
if(CurentValue)
|
||||
{
|
||||
if (CurentValue) {
|
||||
Select.value = CurentValue;
|
||||
delete LoadMapAfter["idAccount"];
|
||||
}
|
||||
SetCurCurencyName();
|
||||
};
|
||||
|
||||
function CurTransactionToForm(bForce)
|
||||
{
|
||||
function CurTransactionToForm(bForce) {
|
||||
var Item = $("idTransaction");
|
||||
if(Item && (Item.className === "" || bForce))
|
||||
if (Item && (Item.className === "" || bForce))
|
||||
Item.value = GetJSONFromTransaction(CurrentTR);
|
||||
};
|
||||
|
||||
function CheckNameAccTo()
|
||||
{
|
||||
function CheckNameAccTo() {
|
||||
MaxBlockNum = GetCurrentBlockNumByTime();
|
||||
var ToID = ParseNum($("idTo").value);
|
||||
if(!MapAccounts[ToID] || (MapAccounts[ToID].MustUpdate && MapAccounts[ToID].MustUpdate >= MaxBlockNum))
|
||||
{
|
||||
GetData("GetAccountList", {StartNum:ToID}, function (Data)
|
||||
{
|
||||
if(Data && Data.result === 1 && Data.arr.length)
|
||||
{
|
||||
if (!MapAccounts[ToID] || (MapAccounts[ToID].MustUpdate && MapAccounts[ToID].MustUpdate >= MaxBlockNum)) {
|
||||
GetData("GetAccountList", { StartNum: ToID }, function(Data) {
|
||||
if (Data && Data.result === 1 && Data.arr.length) {
|
||||
var Item = Data.arr[0];
|
||||
Item.UpdateData = Date.now();
|
||||
MapAccounts[Item.Num] = Item;
|
||||
@@ -88,199 +79,173 @@ function CheckNameAccTo()
|
||||
SetNameAccTo();
|
||||
};
|
||||
|
||||
function SetNameAccTo()
|
||||
{
|
||||
function SetNameAccTo() {
|
||||
var Str = "";
|
||||
var ToID = ParseNum($("idTo").value);
|
||||
var Item = MapAccounts[ToID];
|
||||
var element = $("idNameTo");
|
||||
var StrTo = GetAccountText(Item, ToID, 1);
|
||||
if(!element)
|
||||
{
|
||||
if (!element) {
|
||||
element = $("idNameTo2");
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
StrTo = "To: " + StrTo;
|
||||
}
|
||||
if(element.innerText !== StrTo)
|
||||
{
|
||||
if (element.innerText !== StrTo) {
|
||||
element.innerText = StrTo;
|
||||
if(Item && Item.MyAccount)
|
||||
if (Item && Item.MyAccount)
|
||||
element.className = "smallbold";
|
||||
else
|
||||
element.className = "";
|
||||
}
|
||||
};
|
||||
|
||||
function GetAccountText(Item,Num,bGetSum)
|
||||
{
|
||||
if(Item)
|
||||
{
|
||||
function GetAccountText(Item, Num, bGetSum) {
|
||||
if (Item) {
|
||||
var text = Item.Name;
|
||||
if(!text || text.length === 0)
|
||||
if (!text || text.length === 0)
|
||||
text = Num;
|
||||
else
|
||||
text = "" + Num + ". " + text;
|
||||
if(bGetSum)
|
||||
{
|
||||
if (bGetSum) {
|
||||
var StrSum = SUM_TO_STRING(Item.Value, Item.Currency);
|
||||
text += " (" + StrSum + ")";
|
||||
}
|
||||
return text;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
return Num;
|
||||
}
|
||||
};
|
||||
|
||||
function OnEditIdTo()
|
||||
{
|
||||
function OnEditIdTo() {
|
||||
CheckNameAccTo();
|
||||
OnEditTransactionFields();
|
||||
};
|
||||
|
||||
function OnEditTransactionFields()
|
||||
{
|
||||
if(IsVisibleBlock("edit_transaction"))
|
||||
function OnEditTransactionFields() {
|
||||
if (IsVisibleBlock("edit_transaction"))
|
||||
CreateTransaction();
|
||||
SetCurCurencyName();
|
||||
SaveValues();
|
||||
};
|
||||
|
||||
function SetCurCurencyName()
|
||||
{
|
||||
function SetCurCurencyName() {
|
||||
var idCoin = $("idCoinName");
|
||||
if(!idCoin)
|
||||
return ;
|
||||
if (!idCoin)
|
||||
return;
|
||||
var Num = ParseNum($("idAccount").value);
|
||||
var Item = MapAccounts[Num];
|
||||
if(Item)
|
||||
{
|
||||
if (Item) {
|
||||
idCoin.innerText = CurrencyName(Item.Currency);
|
||||
}
|
||||
};
|
||||
|
||||
function CreateTransaction(F,CheckErr,Run)
|
||||
{
|
||||
function CreateTransaction(F, CheckErr, Run) {
|
||||
CheckNameAccTo();
|
||||
CheckSending();
|
||||
var FromID = ParseNum($("idAccount").value);
|
||||
if(CheckErr && FromID === 0)
|
||||
{
|
||||
if (CheckErr && FromID === 0) {
|
||||
SetError("Select valid 'From account'");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
var StrTo = $("idTo").value.trim();
|
||||
var bFindAcc = 0;
|
||||
var ToPubKey = "";
|
||||
var ToID = ParseNum(StrTo);
|
||||
if(StrTo !== "" + ToID)
|
||||
{
|
||||
if(StrTo.length === 66 && (StrTo.substr(0, 2) === "02" || StrTo.substr(0, 2) === "03") && IsHexStr(StrTo))
|
||||
{
|
||||
if (StrTo !== "" + ToID) {
|
||||
if (StrTo.length === 66 && (StrTo.substr(0, 2) === "02" || StrTo.substr(0, 2) === "03") && IsHexStr(StrTo)) {
|
||||
ToID = 0;
|
||||
ToPubKey = StrTo;
|
||||
if(ToPubKey === PubKeyStr)
|
||||
if (ToPubKey === PubKeyStr)
|
||||
bFindAcc = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(CheckErr)
|
||||
else {
|
||||
if (CheckErr)
|
||||
SetError("Valid 'Pay to' - required!");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(CheckErr && ToID <= 0 && ToPubKey === "" && !AttachItem)
|
||||
{
|
||||
if (CheckErr && ToID <= 0 && ToPubKey === "" && !AttachItem) {
|
||||
SetError("Valid 'Pay to' - required!");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
var Description = $("idDescription").value.substr(0, 200);
|
||||
var StrSum = $("idSumSend").value;
|
||||
var indDot = StrSum.indexOf(".");
|
||||
if(indDot >= 0)
|
||||
{
|
||||
if (indDot >= 0) {
|
||||
var StrTER = StrSum.substr(0, indDot);
|
||||
var StrCENT = StrSum.substr(indDot + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
var StrTER = StrSum;
|
||||
var StrCENT = "0";
|
||||
}
|
||||
StrCENT = StrCENT + "000000000";
|
||||
var Coin = {SumCOIN:ParseNum(StrTER), SumCENT:ParseNum(StrCENT.substr(0, 9))};
|
||||
var Coin = { SumCOIN: ParseNum(StrTER), SumCENT: ParseNum(StrCENT.substr(0, 9)) };
|
||||
var OperationID = 0;
|
||||
var Item = MapAccounts[FromID];
|
||||
if(Item)
|
||||
{
|
||||
if (Item) {
|
||||
OperationID = Item.Value.OperationID;
|
||||
}
|
||||
var AttachBody = [];
|
||||
if(AttachItem)
|
||||
{
|
||||
if (AttachItem) {
|
||||
AttachBody = AttachItem.Data.Body;
|
||||
if(!AttachBody)
|
||||
if (!AttachBody)
|
||||
AttachBody = [];
|
||||
}
|
||||
var ToPubKeyArr = [];
|
||||
if(ToPubKey)
|
||||
if (ToPubKey)
|
||||
ToPubKeyArr = GetArrFromHex(ToPubKey);
|
||||
var TR = {Type:111, Version:3, Reserve:0, FromID:FromID, OperationID:OperationID, To:[{PubKey:ToPubKeyArr, ID:ToID, SumCOIN:Coin.SumCOIN,
|
||||
SumCENT:Coin.SumCENT}], Description:Description, Body:AttachBody, Sign:CurrentTR.Sign, };
|
||||
Object.defineProperties(TR, {bFindAcc:{configurable:true, writable:true, enumerable:false, value:bFindAcc}});
|
||||
Object.defineProperties(TR, {Run:{configurable:true, writable:true, enumerable:false, value:Run}});
|
||||
if(JSON.stringify(TR) === JSON.stringify(CurrentTR))
|
||||
{
|
||||
if(F)
|
||||
var TR = {
|
||||
Type: 111, Version: 3, Reserve: 0, FromID: FromID, OperationID: OperationID, To: [{
|
||||
PubKey: ToPubKeyArr, ID: ToID, SumCOIN: Coin.SumCOIN,
|
||||
SumCENT: Coin.SumCENT
|
||||
}], Description: Description, Body: AttachBody, Sign: CurrentTR.Sign,
|
||||
};
|
||||
Object.defineProperties(TR, { bFindAcc: { configurable: true, writable: true, enumerable: false, value: bFindAcc } });
|
||||
Object.defineProperties(TR, { Run: { configurable: true, writable: true, enumerable: false, value: Run } });
|
||||
if (JSON.stringify(TR) === JSON.stringify(CurrentTR)) {
|
||||
if (F)
|
||||
F(CurrentTR);
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
CurrentTR = TR;
|
||||
GetSignTransaction(TR, "", function (TR)
|
||||
{
|
||||
GetSignTransaction(TR, "", function(TR) {
|
||||
CurTransactionToForm(true);
|
||||
if(F)
|
||||
if (F)
|
||||
F(TR);
|
||||
});
|
||||
};
|
||||
|
||||
function SignJSON(F)
|
||||
{
|
||||
if($("idSignJSON").disabled)
|
||||
return ;
|
||||
function SignJSON(F) {
|
||||
if ($("idSignJSON").disabled)
|
||||
return;
|
||||
var TR = GetTransactionFromJSON();
|
||||
if(!TR)
|
||||
return ;
|
||||
if (!TR)
|
||||
return;
|
||||
CurrentTR = TR;
|
||||
GetSignTransaction(TR, "", function (TR)
|
||||
{
|
||||
GetSignTransaction(TR, "", function(TR) {
|
||||
CurTransactionToForm(true);
|
||||
if(F)
|
||||
if (F)
|
||||
F();
|
||||
});
|
||||
};
|
||||
|
||||
function CheckSending(bToStatus)
|
||||
{
|
||||
function CheckSending(bToStatus) {
|
||||
MaxBlockNum = GetCurrentBlockNumByTime();
|
||||
var CanSend = IsPrivateMode();
|
||||
var StrButton = "Send";
|
||||
var StrButtonSign = "Sign JSON";
|
||||
if(!CanSend)
|
||||
{
|
||||
if (!CanSend) {
|
||||
StrButton = " ";
|
||||
StrButtonSign = " ";
|
||||
}
|
||||
if(CanSend)
|
||||
{
|
||||
if (CanSend) {
|
||||
var FromID = ParseNum($("idAccount").value);
|
||||
var Item = MapAccounts[FromID];
|
||||
if(Item && Item.NextSendTime && Item.NextSendTime > MaxBlockNum)
|
||||
{
|
||||
if(bToStatus)
|
||||
if (Item && Item.NextSendTime && Item.NextSendTime > MaxBlockNum) {
|
||||
if (bToStatus)
|
||||
SetStatus("Transaction was sending. Wait... (" + Item.LastTransactionText + ")");
|
||||
CanSend = false;
|
||||
StrButton = "Wait...";
|
||||
@@ -293,31 +258,26 @@ function CheckSending(bToStatus)
|
||||
return CanSend;
|
||||
};
|
||||
|
||||
function AddWhiteList()
|
||||
{
|
||||
function AddWhiteList() {
|
||||
var ToID = ParseNum($("idTo").value);
|
||||
if(ToID && $("idWhiteOnSend").checked)
|
||||
if (ToID && $("idWhiteOnSend").checked)
|
||||
Storage.setItem("White:" + ToID, 1);
|
||||
};
|
||||
|
||||
function SendMoneyBefore()
|
||||
{
|
||||
if($("idSendButton").disabled)
|
||||
return ;
|
||||
function SendMoneyBefore() {
|
||||
if ($("idSendButton").disabled)
|
||||
return;
|
||||
var ToID = ParseNum($("idTo").value);
|
||||
var Item = MapAccounts[ToID];
|
||||
if(Storage.getItem("White:" + ToID) || !$("idSumSend").value || Item && Item.MyAccount)
|
||||
{
|
||||
if (Storage.getItem("White:" + ToID) || !$("idSumSend").value || Item && Item.MyAccount) {
|
||||
SendMoney();
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
var CoinAmount = COIN_FROM_FLOAT($("idSumSend").value);
|
||||
var StrTo = " to " + GetAccountText(Item, ToID);
|
||||
$("idWhiteOnSend").checked = 0;
|
||||
$("idOnSendText").innerHTML = "<B style='color:#ff4534'>" + STRING_FROM_COIN(CoinAmount) + "</B> " + $("idCoinName").innerText + StrTo;
|
||||
if($("idSumSend").value >= 100000)
|
||||
{
|
||||
if ($("idSumSend").value >= 100000) {
|
||||
$("idOnSendText").innerHTML += "<BR><DIV style='color: yellow;'>WARNING: You are about to send a very large amount!</DIV>";
|
||||
}
|
||||
SetVisibleBlock("idBlockOnSend", 1);
|
||||
@@ -325,31 +285,26 @@ function SendMoneyBefore()
|
||||
}
|
||||
};
|
||||
|
||||
function SendMoney2()
|
||||
{
|
||||
function SendMoney2() {
|
||||
AddWhiteList();
|
||||
SendMoney();
|
||||
};
|
||||
|
||||
function SendMoney()
|
||||
{
|
||||
if(!CanSendTransaction)
|
||||
{
|
||||
function SendMoney() {
|
||||
if (!CanSendTransaction) {
|
||||
SetError("Can't Send transaction");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
CheckSending(true);
|
||||
if($("idSendButton").disabled)
|
||||
return ;
|
||||
if ($("idSendButton").disabled)
|
||||
return;
|
||||
SetVisibleBlock("idBlockOnSend", 0);
|
||||
CreateTransaction(SendMoneyTR, true, ClearAttach);
|
||||
};
|
||||
|
||||
function GetJSONFromTransaction(TR)
|
||||
{
|
||||
function GetJSONFromTransaction(TR) {
|
||||
var TR2 = JSON.parse(JSON.stringify(TR));
|
||||
for(var i = 0; i < TR2.To.length; i++)
|
||||
{
|
||||
for (var i = 0; i < TR2.To.length; i++) {
|
||||
var Item = TR2.To[i];
|
||||
Item.PubKey = GetHexFromArr(Item.PubKey);
|
||||
}
|
||||
@@ -359,24 +314,19 @@ function GetJSONFromTransaction(TR)
|
||||
return Str;
|
||||
};
|
||||
|
||||
function GetTransactionFromJSON()
|
||||
{
|
||||
function GetTransactionFromJSON() {
|
||||
var Str = $("idTransaction").value;
|
||||
try
|
||||
{
|
||||
try {
|
||||
var TR = JSON.parse(Str);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
catch (e) {
|
||||
SetError(e);
|
||||
return undefined;
|
||||
}
|
||||
for(var i = 0; i < TR.To.length; i++)
|
||||
{
|
||||
for (var i = 0; i < TR.To.length; i++) {
|
||||
var Item = TR.To[i];
|
||||
Item.PubKey = GetArrFromHex(Item.PubKey);
|
||||
if(Item.SumTER && Item.SumCOIN === undefined)
|
||||
{
|
||||
if (Item.SumTER && Item.SumCOIN === undefined) {
|
||||
Item.SumCOIN = Item.SumTER;
|
||||
delete Item.SumTER;
|
||||
}
|
||||
@@ -386,68 +336,58 @@ function GetTransactionFromJSON()
|
||||
return TR;
|
||||
};
|
||||
|
||||
function SendMoneyJSON()
|
||||
{
|
||||
if(!CanSendTransaction)
|
||||
{
|
||||
function SendMoneyJSON() {
|
||||
if (!CanSendTransaction) {
|
||||
SetError("Can't Send transaction");
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
var TR = GetTransactionFromJSON();
|
||||
if(!TR)
|
||||
return ;
|
||||
if (!TR)
|
||||
return;
|
||||
SendMoneyTR(TR);
|
||||
};
|
||||
|
||||
function SignAndSendFromJSON()
|
||||
{
|
||||
function SignAndSendFromJSON() {
|
||||
SignJSON(SendMoneyJSON);
|
||||
};
|
||||
|
||||
function GetTransactionText(TR,key)
|
||||
{
|
||||
function GetTransactionText(TR, key) {
|
||||
var Str;
|
||||
if(TR)
|
||||
{
|
||||
if(TR.Type === TYPE_TRANSACTION_CREATE)
|
||||
{
|
||||
if (TR) {
|
||||
if (TR.Type === TYPE_TRANSACTION_CREATE) {
|
||||
Str = "New account " + TR.Name.substr(0, 20);
|
||||
}
|
||||
else
|
||||
if(TR.Type === 111)
|
||||
{
|
||||
if (TR.Type === 111) {
|
||||
var MapItem = {};
|
||||
var ValueTotal = {SumCOIN:0, SumCENT:0};
|
||||
var ValueTotal = { SumCOIN: 0, SumCENT: 0 };
|
||||
Str = "" + TR.FromID + "/" + TR.OperationID + " to ";
|
||||
for(var i = 0; i < TR.To.length; i++)
|
||||
{
|
||||
for (var i = 0; i < TR.To.length; i++) {
|
||||
var Item = TR.To[i];
|
||||
if(Item.ID === TR.FromID || MapItem[Item.ID])
|
||||
if (Item.ID === TR.FromID || MapItem[Item.ID])
|
||||
continue;
|
||||
MapItem[Item.ID] = 1;
|
||||
ADD(ValueTotal, Item);
|
||||
if(i === 0)
|
||||
if (i === 0)
|
||||
Str += "[";
|
||||
if(Str.length < 16)
|
||||
{
|
||||
if(i > 0)
|
||||
if (Str.length < 16) {
|
||||
if (i > 0)
|
||||
Str += ",";
|
||||
if(Item.ID || (Item.PubKey && Item.PubKey.length !== 66))
|
||||
if (Item.ID || (Item.PubKey && Item.PubKey.length !== 66))
|
||||
Str += Item.ID;
|
||||
else
|
||||
Str += GetHexFromArr(Item.PubKey).substr(0, 8);
|
||||
}
|
||||
else
|
||||
if(Str.substr(Str.length - 1) !== ".")
|
||||
if (Str.substr(Str.length - 1) !== ".")
|
||||
Str += "...";
|
||||
}
|
||||
Str += "] " + SUM_TO_STRING(ValueTotal);
|
||||
Str += " " + (TR.Description.substr(0, 20)).replace(/\n/g, "");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(key)
|
||||
else {
|
||||
if (key)
|
||||
Str = key;
|
||||
else
|
||||
Str = "";
|
||||
@@ -455,18 +395,15 @@ function GetTransactionText(TR,key)
|
||||
return Str;
|
||||
};
|
||||
|
||||
function SendMoneyTR(TR)
|
||||
{
|
||||
function SendMoneyTR(TR) {
|
||||
var Body = GetArrFromTR(TR);
|
||||
WriteArr(Body, TR.Sign, 64);
|
||||
Body.length += 12;
|
||||
SendTransaction(Body, TR, undefined, function (Err,TR,Body)
|
||||
{
|
||||
if(Err)
|
||||
return ;
|
||||
SendTransaction(Body, TR, undefined, function(Err, TR, Body) {
|
||||
if (Err)
|
||||
return;
|
||||
var Item = MapAccounts[TR.FromID];
|
||||
if(Item)
|
||||
{
|
||||
if (Item) {
|
||||
var key = GetHexFromArr(sha3(Body));
|
||||
var BlockNum = GetCurrentBlockNumByTime();
|
||||
Item.LastTransactionText = GetTransactionText(TR);
|
||||
@@ -477,37 +414,31 @@ function SendMoneyTR(TR)
|
||||
});
|
||||
};
|
||||
|
||||
function ClearTransaction()
|
||||
{
|
||||
function ClearTransaction() {
|
||||
PayList = [];
|
||||
ClearAttach();
|
||||
CheckSendList(1);
|
||||
var arr = ["idAccount", "idTo", "idSumSend", "idDescription"];
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
$(arr[i]).value = "";
|
||||
}
|
||||
SaveValues();
|
||||
CreateTransaction();
|
||||
};
|
||||
|
||||
function StartEditTransactionJSON()
|
||||
{
|
||||
function StartEditTransactionJSON() {
|
||||
var Item = $("idTransaction");
|
||||
Item.className = "smallbold";
|
||||
};
|
||||
|
||||
function EditJSONTransaction()
|
||||
{
|
||||
function EditJSONTransaction() {
|
||||
var name = "edit_transaction";
|
||||
var Item = $("idTransaction");
|
||||
if(IsVisibleBlock(name))
|
||||
{
|
||||
if (IsVisibleBlock(name)) {
|
||||
SetVisibleBlock(name, false);
|
||||
Item.className = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
CreateTransaction();
|
||||
SetVisibleBlock(name, true);
|
||||
Item.className = "";
|
||||
@@ -515,16 +446,14 @@ function EditJSONTransaction()
|
||||
};
|
||||
var glNumPayCount = 0;
|
||||
|
||||
function GetInvoiceHTML(item,onclick,classstr)
|
||||
{
|
||||
if(!item.num)
|
||||
{
|
||||
function GetInvoiceHTML(item, onclick, classstr) {
|
||||
if (!item.num) {
|
||||
glNumPayCount++;
|
||||
item.num = glNumPayCount;
|
||||
}
|
||||
var idname = "idSendInvoice" + item.num;
|
||||
var value = "";
|
||||
if(item.Data.Amount)
|
||||
if (item.Data.Amount)
|
||||
value += "<B>" + item.Data.Amount + "</B> Tera";
|
||||
else
|
||||
value += "<B style='color:green'>No pay</B>";
|
||||
@@ -532,55 +461,46 @@ function GetInvoiceHTML(item,onclick,classstr)
|
||||
return "<button id='" + idname + "' onclick='" + onclick + "' class='" + classstr + "'>" + value + "</button>";
|
||||
};
|
||||
|
||||
function AddSendList(item)
|
||||
{
|
||||
PayList.push({Data:item});
|
||||
function AddSendList(item) {
|
||||
PayList.push({ Data: item });
|
||||
};
|
||||
|
||||
function CheckSendList(bRedraw)
|
||||
{
|
||||
function CheckSendList(bRedraw) {
|
||||
TitleWarning = PayList.length;
|
||||
if(AttachItem)
|
||||
if (AttachItem)
|
||||
TitleWarning++;
|
||||
var Str = Storage.getItem("InvoiceList");
|
||||
if(!Str && !bRedraw)
|
||||
return ;
|
||||
if(!bRedraw)
|
||||
{
|
||||
if (!Str && !bRedraw)
|
||||
return;
|
||||
if (!bRedraw) {
|
||||
SelectTab("TabSend");
|
||||
}
|
||||
if(Str)
|
||||
{
|
||||
if (Str) {
|
||||
var arr = JSON.parse(Str);
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
AddSendList(arr[i]);
|
||||
}
|
||||
Storage.setItem("InvoiceList", "");
|
||||
}
|
||||
var idList = $("idSendList");
|
||||
if(PayList.length)
|
||||
{
|
||||
if (PayList.length) {
|
||||
idList.innerHTML = "<DIV id='PaiListInfo'>Select the item you want to sign (pay) and send to blockchain:</DIV>";
|
||||
for(var i = 0; i < PayList.length; i++)
|
||||
{
|
||||
for (var i = 0; i < PayList.length; i++) {
|
||||
var item = PayList[i];
|
||||
idList.innerHTML += GetInvoiceHTML(item, "UseInvoice(" + i + ")", "btinvoice");
|
||||
}
|
||||
if(AttachItem === undefined)
|
||||
if (AttachItem === undefined)
|
||||
UseInvoice(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
idList.innerHTML = "";
|
||||
}
|
||||
};
|
||||
setInterval(CheckSendList, 200);
|
||||
|
||||
function UseInvoice(Num)
|
||||
{
|
||||
function UseInvoice(Num) {
|
||||
var item = PayList[Num];
|
||||
if(item.Data.From)
|
||||
if (item.Data.From)
|
||||
$("idAccount").value = item.Data.From;
|
||||
$("idTo").value = item.Data.To;
|
||||
$("idSumSend").value = item.Data.Amount;
|
||||
@@ -591,19 +511,16 @@ function UseInvoice(Num)
|
||||
CheckSendList(1);
|
||||
};
|
||||
|
||||
function ClearAttach()
|
||||
{
|
||||
function ClearAttach() {
|
||||
AttachItem = undefined;
|
||||
if($("idAttach"))
|
||||
if ($("idAttach"))
|
||||
$("idAttach").innerHTML = "";
|
||||
};
|
||||
|
||||
function OpenAttach()
|
||||
{
|
||||
if(AttachItem)
|
||||
{
|
||||
function OpenAttach() {
|
||||
if (AttachItem) {
|
||||
var Data2 = JSON.parse(JSON.stringify(AttachItem.Data));
|
||||
if(Data2.Body)
|
||||
if (Data2.Body)
|
||||
Data2.Body = GetHexFromArr(Data2.Body);
|
||||
delete Data2.TransferSecret;
|
||||
alert("DATA:\n" + JSON.stringify(Data2, "", 4));
|
||||
@@ -611,79 +528,65 @@ function OpenAttach()
|
||||
};
|
||||
var CURRENCY, PUBKEY, NAME, SMART;
|
||||
|
||||
function SendTrCreateAccWait(Currency,PubKey,Name,Smart)
|
||||
{
|
||||
function SendTrCreateAccWait(Currency, PubKey, Name, Smart) {
|
||||
CURRENCY = Currency;
|
||||
PUBKEY = PubKey;
|
||||
NAME = Name;
|
||||
SMART = Smart;
|
||||
setTimeout(function ()
|
||||
{
|
||||
setTimeout(function() {
|
||||
SendTrCreateAcc(CURRENCY, PUBKEY, NAME, 0, SMART, 0, 0);
|
||||
}, 50);
|
||||
};
|
||||
|
||||
function SendTrCreateAcc(Currency,PubKey,Description,Adviser,Smart,bFindAcc,bAddToPay)
|
||||
{
|
||||
function SendTrCreateAcc(Currency, PubKey, Description, Adviser, Smart, bFindAcc, bAddToPay) {
|
||||
var TR = GetTrCreateAcc(Currency, PubKey, Description, Adviser, Smart);
|
||||
var Body = GetBodyCreateAcc(TR);
|
||||
TR.bFindAcc = 1;
|
||||
if(bAddToPay)
|
||||
{
|
||||
var Item = {name:Description, To:0, Amount:CONFIG_DATA.PRICE_DAO.NewAccount, Description:"Create acc: " + Description, Body:Body,
|
||||
if (bAddToPay) {
|
||||
var Item = {
|
||||
name: Description, To: 0, Amount: CONFIG_DATA.PRICE_DAO.NewAccount, Description: "Create acc: " + Description, Body: Body,
|
||||
};
|
||||
AddToInvoiceList(Item);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SendTransaction(Body, TR);
|
||||
}
|
||||
$("idAccountName").value = "";
|
||||
CancelCreateAccount();
|
||||
};
|
||||
|
||||
function ChangeSmart(NumAccount,WasSmart)
|
||||
{
|
||||
if(!IsPrivateMode())
|
||||
{
|
||||
function ChangeSmart(NumAccount, WasSmart) {
|
||||
if (!IsPrivateMode()) {
|
||||
SetError("Pls, open wallet");
|
||||
return 0;
|
||||
}
|
||||
var Result = prompt("Enter smart number:", WasSmart);
|
||||
if(Result !== null && Result != WasSmart)
|
||||
{
|
||||
if (Result !== null && Result != WasSmart) {
|
||||
var Smart = parseInt(Result);
|
||||
if(Smart)
|
||||
{
|
||||
GetData("GetDappList", {StartNum:Smart, CountNum:1}, function (Data)
|
||||
{
|
||||
if(Data && Data.result && Data.arr.length === 1)
|
||||
{
|
||||
if (Smart) {
|
||||
GetData("GetDappList", { StartNum: Smart, CountNum: 1 }, function(Data) {
|
||||
if (Data && Data.result && Data.arr.length === 1) {
|
||||
SetSmartToAccount(NumAccount, Smart);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SetError("Error smart number");
|
||||
}
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
SetSmartToAccount(NumAccount, Smart);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function SetSmartToAccount(NumAccount,Smart)
|
||||
{
|
||||
function SetSmartToAccount(NumAccount, Smart) {
|
||||
var OperationID = 0;
|
||||
var Item = MapAccounts[NumAccount];
|
||||
if(Item)
|
||||
{
|
||||
if (Item) {
|
||||
OperationID = Item.Value.OperationID;
|
||||
}
|
||||
OperationID++;
|
||||
var TR = {Type:140, Account:NumAccount, Smart:Smart, FromNum:NumAccount, Reserve:[], OperationID:OperationID, Sign:"", };
|
||||
var TR = { Type: 140, Account: NumAccount, Smart: Smart, FromNum: NumAccount, Reserve: [], OperationID: OperationID, Sign: "", };
|
||||
var Body = [];
|
||||
WriteByte(Body, TR.Type);
|
||||
WriteUint(Body, TR.Account);
|
||||
@@ -694,12 +597,11 @@ function SetSmartToAccount(NumAccount,Smart)
|
||||
SendTrArrayWithSign(Body, TR.Account, TR);
|
||||
};
|
||||
|
||||
function CheckLengthAccDesription(name,Length)
|
||||
{
|
||||
function CheckLengthAccDesription(name, Length) {
|
||||
var Str = $(name).value.substr(0, Length + 1);
|
||||
var arr = toUTF8Array(Str);
|
||||
var Len = Length - arr.length;
|
||||
if(Len < 0)
|
||||
if (Len < 0)
|
||||
SetError("Bad length");
|
||||
else
|
||||
SetStatus("Lost: " + Len + " bytes");
|
||||
|
||||
@@ -18,24 +18,37 @@ var StartTimeConnecting = 0;
|
||||
var ConnectedCount = 0;
|
||||
var NETWORK = "TERA-MAIN";
|
||||
var ServerMap = {};
|
||||
var ServerMainMap = {"127.0.0.1":{"ip":"127.0.0.1", "port":80, "Name":"LOCAL"}, "terafoundation.org":{"ip":"terafoundation.org",
|
||||
"port":443, "Name":"TERA", "System":1}, "dappsgate.com":{"ip":"dappsgate.com", "port":80, "Name":"SUPPORT2", "System":1}, "t1.teraexplorer.com":{"ip":"t1.teraexplorer.com",
|
||||
"port":80, "Name":"t1.teraexplorer.com", "System":1}, "t2.teraexplorer.com":{"ip":"t2.teraexplorer.com", "port":80, "Name":"t2.teraexplorer.com",
|
||||
"System":1}, "t3.teraexplorer.com":{"ip":"t3.teraexplorer.com", "port":80, "Name":"t3.teraexplorer.com", "System":1}, "t4.teraexplorer.com":{"ip":"t4.teraexplorer.com",
|
||||
"port":80, "Name":"t4.teraexplorer.com", "System":1}, "t5.teraexplorer.com":{"ip":"t5.teraexplorer.com", "port":80, "Name":"t5.teraexplorer.com",
|
||||
"System":1}, };
|
||||
var ServerTestMap = {"127.0.0.1":{"ip":"127.0.0.1", "port":80, "Name":"LOCAL"}, "dappsgate.com":{"ip":"dappsgate.com", "port":88,
|
||||
"Name":"SUPPORT2", "System":1}, };
|
||||
var ServerMainMap = {
|
||||
"127.0.0.1": { "ip": "127.0.0.1", "port": 80, "Name": "LOCAL" }, "terafoundation.org": {
|
||||
"ip": "terafoundation.org",
|
||||
"port": 443, "Name": "TERA", "System": 1
|
||||
}, "dappsgate.com": { "ip": "dappsgate.com", "port": 80, "Name": "SUPPORT2", "System": 1 }, "t1.teraexplorer.com": {
|
||||
"ip": "t1.teraexplorer.com",
|
||||
"port": 80, "Name": "t1.teraexplorer.com", "System": 1
|
||||
}, "t2.teraexplorer.com": {
|
||||
"ip": "t2.teraexplorer.com", "port": 80, "Name": "t2.teraexplorer.com",
|
||||
"System": 1
|
||||
}, "t3.teraexplorer.com": { "ip": "t3.teraexplorer.com", "port": 80, "Name": "t3.teraexplorer.com", "System": 1 }, "t4.teraexplorer.com": {
|
||||
"ip": "t4.teraexplorer.com",
|
||||
"port": 80, "Name": "t4.teraexplorer.com", "System": 1
|
||||
}, "t5.teraexplorer.com": {
|
||||
"ip": "t5.teraexplorer.com", "port": 80, "Name": "t5.teraexplorer.com",
|
||||
"System": 1
|
||||
},
|
||||
};
|
||||
var ServerTestMap = {
|
||||
"127.0.0.1": { "ip": "127.0.0.1", "port": 80, "Name": "LOCAL" }, "dappsgate.com": {
|
||||
"ip": "dappsgate.com", "port": 88,
|
||||
"Name": "SUPPORT2", "System": 1
|
||||
},
|
||||
};
|
||||
|
||||
function StartWebWallet()
|
||||
{
|
||||
if(NETWORK === "TERA-TEST2")
|
||||
{
|
||||
function StartWebWallet() {
|
||||
if (NETWORK === "TERA-TEST2") {
|
||||
MIN_SUM_POWER = 0;
|
||||
ServerMap = ServerTestMap;
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
MIN_SUM_POWER = COUNT_BLOCK_PROOF * 35;
|
||||
ServerMap = ServerMainMap;
|
||||
}
|
||||
@@ -44,64 +57,53 @@ function StartWebWallet()
|
||||
ConnectWebWallet();
|
||||
};
|
||||
|
||||
function OnInitWebWallet()
|
||||
{
|
||||
function OnInitWebWallet() {
|
||||
var str = Storage.getItem(NETWORK + "NodesArrayList");
|
||||
if(str)
|
||||
{
|
||||
if (str) {
|
||||
var arr = JSON.parse(str);
|
||||
for(var i = 0; i < arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var Item = ServerMap[arr[i].ip];
|
||||
if(Item && Item.System)
|
||||
if (Item && Item.System)
|
||||
continue;
|
||||
ServerMap[arr[i].ip] = arr[i];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function SaveServerMap()
|
||||
{
|
||||
function SaveServerMap() {
|
||||
var arr = [];
|
||||
for(var key in ServerMap)
|
||||
{
|
||||
for (var key in ServerMap) {
|
||||
var Item = ServerMap[key];
|
||||
if(Item.SumPower >= MIN_SUM_POWER)
|
||||
{
|
||||
arr.push({ip:Item.ip, port:Item.port});
|
||||
if (Item.SumPower >= MIN_SUM_POWER) {
|
||||
arr.push({ ip: Item.ip, port: Item.port });
|
||||
}
|
||||
}
|
||||
Storage.setItem(NETWORK + "NodesArrayList", JSON.stringify(arr));
|
||||
};
|
||||
|
||||
function SetStatus(Str)
|
||||
{
|
||||
function SetStatus(Str) {
|
||||
var id = $("idStatus");
|
||||
id.innerHTML = Str;
|
||||
if(Str)
|
||||
if (Str)
|
||||
console.log(id.innerText);
|
||||
};
|
||||
|
||||
function SetError(Str,bNoSound)
|
||||
{
|
||||
function SetError(Str, bNoSound) {
|
||||
SetStatus("<DIV align='left' style='color:red'><B>" + Str + "</B></DIV>");
|
||||
};
|
||||
var CountConnect = 0;
|
||||
var CountWallet = 0;
|
||||
|
||||
function ConnectWebWallet()
|
||||
{
|
||||
function ConnectWebWallet() {
|
||||
StartTimeConnecting = Date.now();
|
||||
ConnectedCount = 0;
|
||||
for(var key in ServerMap)
|
||||
{
|
||||
for (var key in ServerMap) {
|
||||
var Item = ServerMap[key];
|
||||
Item.SendHandShake = 0;
|
||||
}
|
||||
if(window.BrowserIE && !IsLocalClient())
|
||||
{
|
||||
if (window.BrowserIE && !IsLocalClient()) {
|
||||
MainServer = undefined;
|
||||
return ;
|
||||
return;
|
||||
}
|
||||
CountConnect = 0;
|
||||
CountWallet = 0;
|
||||
@@ -111,68 +113,57 @@ function ConnectWebWallet()
|
||||
};
|
||||
var Stage = 0;
|
||||
|
||||
function LoopHandShake()
|
||||
{
|
||||
function LoopHandShake() {
|
||||
Stage++;
|
||||
SetStatus("Connecting: " + Stage + "...");
|
||||
for(var key in ServerMap)
|
||||
{
|
||||
for (var key in ServerMap) {
|
||||
var Item = ServerMap[key];
|
||||
if(Item.SendHandShake || !Item.port)
|
||||
if (Item.SendHandShake || !Item.port)
|
||||
continue;
|
||||
CountConnect++;
|
||||
if(window.BrowserIE && CountConnect > 4)
|
||||
if (window.BrowserIE && CountConnect > 4)
|
||||
break;
|
||||
DoNodeList(Item);
|
||||
}
|
||||
};
|
||||
|
||||
function DoNodeList(Item)
|
||||
{
|
||||
function DoNodeList(Item) {
|
||||
console.log(GetProtocolServerPath(Item) + "/GetNodeList");
|
||||
if(window.location.protocol === "https:" && Item.port !== 443)
|
||||
return ;
|
||||
if(Item.port === 443 && IsIPAddres(Item.ip))
|
||||
return ;
|
||||
if (window.location.protocol === "https:" && Item.port !== 443)
|
||||
return;
|
||||
if (Item.port === 443 && IsIPAddres(Item.ip))
|
||||
return;
|
||||
SetStatus("Try: " + Item.ip + ":" + Item.port);
|
||||
Item.SendHandShake = 1;
|
||||
GetData(GetProtocolServerPath(Item) + "/GetNodeList", {}, function (Data)
|
||||
{
|
||||
if(Data && Data.result && Data.NETWORK === NETWORK && Data.VersionNum >= MIN_VERSION)
|
||||
{
|
||||
GetData(GetProtocolServerPath(Item) + "/GetNodeList", {}, function(Data) {
|
||||
if (Data && Data.result && Data.NETWORK === NETWORK && Data.VersionNum >= MIN_VERSION) {
|
||||
ConnectedCount++;
|
||||
Item.GetHandShake = 1;
|
||||
Item.BlockChain = Data.BlockChain;
|
||||
SetStatus("Get: " + Item.ip + ":" + Item.port);
|
||||
var bWas = 0;
|
||||
for(var i = 0; i < Data.arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < Data.arr.length; i++) {
|
||||
var Node = Data.arr[i];
|
||||
if(!ServerMap[Node.ip] && Node.port)
|
||||
{
|
||||
if (!ServerMap[Node.ip] && Node.port) {
|
||||
ServerMap[Node.ip] = Node;
|
||||
console.log("New: " + Node.ip + ":" + Node.port);
|
||||
bWas = 1;
|
||||
}
|
||||
}
|
||||
if(bWas && ConnectedCount < MaxConnectedCount && new Date() - StartTimeConnecting < MaxTimeConnecting)
|
||||
{
|
||||
if (bWas && ConnectedCount < MaxConnectedCount && new Date() - StartTimeConnecting < MaxTimeConnecting) {
|
||||
setTimeout(LoopHandShake, 100);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function LoopWalletInfo()
|
||||
{
|
||||
function LoopWalletInfo() {
|
||||
SetStatus("Get wallets info...");
|
||||
for(var key in ServerMap)
|
||||
{
|
||||
for (var key in ServerMap) {
|
||||
var Item = ServerMap[key];
|
||||
if(Item.port)
|
||||
{
|
||||
if (Item.port) {
|
||||
CountWallet++;
|
||||
if(window.BrowserIE && CountWallet > 4)
|
||||
if (window.BrowserIE && CountWallet > 4)
|
||||
break;
|
||||
DoWalletInfo(Item);
|
||||
}
|
||||
@@ -180,18 +171,15 @@ function LoopWalletInfo()
|
||||
setTimeout(FindLider, 500);
|
||||
};
|
||||
|
||||
function DoWalletInfo(Item)
|
||||
{
|
||||
if(window.location.protocol === "https:" && Item.port !== 443)
|
||||
return ;
|
||||
if(Item.port === 443 && IsIPAddres(Item.ip))
|
||||
return ;
|
||||
function DoWalletInfo(Item) {
|
||||
if (window.location.protocol === "https:" && Item.port !== 443)
|
||||
return;
|
||||
if (Item.port === 443 && IsIPAddres(Item.ip))
|
||||
return;
|
||||
Item.StartTime = Date.now();
|
||||
Item.SendWalletInfo = 1;
|
||||
GetData(GetProtocolServerPath(Item) + "/GetCurrentInfo", {BlockChain:1}, function (Data)
|
||||
{
|
||||
if(Data && Data.result && Data.BlockChain && Data.NETWORK === NETWORK)
|
||||
{
|
||||
GetData(GetProtocolServerPath(Item) + "/GetCurrentInfo", { BlockChain: 1 }, function(Data) {
|
||||
if (Data && Data.result && Data.BlockChain && Data.NETWORK === NETWORK) {
|
||||
Item.Name = Data.NODES_NAME;
|
||||
Item.GetWalletInfo = 1;
|
||||
Item.DeltaTime = new Date() - Item.StartTime;
|
||||
@@ -202,49 +190,40 @@ function DoWalletInfo(Item)
|
||||
});
|
||||
};
|
||||
|
||||
function FindLider()
|
||||
{
|
||||
function FindLider() {
|
||||
MainServer = undefined;
|
||||
var Arr = [];
|
||||
var MapSumPower = {};
|
||||
for(var key in ServerMap)
|
||||
{
|
||||
for (var key in ServerMap) {
|
||||
var Item = ServerMap[key];
|
||||
if(Item.GetWalletInfo && Item.BlockChain)
|
||||
{
|
||||
if (Item.GetWalletInfo && Item.BlockChain) {
|
||||
var arr = Item.BlockChain;
|
||||
if(arr.data)
|
||||
if (arr.data)
|
||||
arr = arr.data;
|
||||
Item.SumPower = CalcPowFromBlockChain(arr);
|
||||
if(Item.SumPower < MIN_SUM_POWER)
|
||||
{
|
||||
if (Item.SumPower < MIN_SUM_POWER) {
|
||||
console.log("Skip: " + Item.ip + ":" + Item.port + " SumPower(" + Item.SumPower + ") < MIN_SUM_POWER(" + MIN_SUM_POWER + ")");
|
||||
continue;
|
||||
}
|
||||
if(!MapSumPower[Item.SumPower])
|
||||
if (!MapSumPower[Item.SumPower])
|
||||
MapSumPower[Item.SumPower] = 0;
|
||||
MapSumPower[Item.SumPower]++;
|
||||
Arr.push(Item);
|
||||
}
|
||||
}
|
||||
var Max = 0, MaxKey;
|
||||
for(var key in MapSumPower)
|
||||
{
|
||||
if(MapSumPower[key] >= Max)
|
||||
{
|
||||
for (var key in MapSumPower) {
|
||||
if (MapSumPower[key] >= Max) {
|
||||
Max = MapSumPower[key];
|
||||
MaxKey = parseInt(key);
|
||||
}
|
||||
}
|
||||
Arr.sort(function (a,b)
|
||||
{
|
||||
Arr.sort(function(a, b) {
|
||||
return a.DeltaTime - b.DeltaTime;
|
||||
});
|
||||
for(var i = 0; i < Arr.length; i++)
|
||||
{
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
var Item = Arr[i];
|
||||
if(Item.SumPower === MaxKey)
|
||||
{
|
||||
if (Item.SumPower === MaxKey) {
|
||||
SetStatus("Find " + Item.ip + ":" + Item.port + " with pow=" + Item.SumPower + "/" + MaxKey + " ping=" + Item.DeltaTime);
|
||||
MainServer = Item;
|
||||
SaveServerMap();
|
||||
@@ -254,23 +233,19 @@ function FindLider()
|
||||
OnFindServer();
|
||||
};
|
||||
|
||||
function CalcPowFromBlockChain(BufRead)
|
||||
{
|
||||
function CalcPowFromBlockChain(BufRead) {
|
||||
var Sum = 0;
|
||||
var Arr = GetBlockArrFromBuffer(BufRead);
|
||||
if(Arr.length === COUNT_BLOCK_PROOF)
|
||||
{
|
||||
for(var i = 0; i < Arr.length; i++)
|
||||
{
|
||||
if (Arr.length === COUNT_BLOCK_PROOF) {
|
||||
for (var i = 0; i < Arr.length; i++) {
|
||||
Sum += Arr[i].Power;
|
||||
}
|
||||
}
|
||||
return Sum;
|
||||
};
|
||||
|
||||
function SetAllSum()
|
||||
{
|
||||
function SetAllSum() {
|
||||
var Item = MapAccounts[$("idAccount").value];
|
||||
if(Item)
|
||||
if (Item)
|
||||
$("idSumSend").value = FLOAT_FROM_COIN(Item.Value).toStringF();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user