2080 lines
70 KiB
HTML
2080 lines
70 KiB
HTML
<!DOCTYPE HTML>
|
|
|
|
<html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>TERA</title>
|
|
<link rel="shortcut icon" href="/HTML/PIC/wallet.png" type="image/png">
|
|
|
|
<link rel="stylesheet" type="text/css" href="../HTML/CSS/style.css">
|
|
<link rel="stylesheet" type="text/css" href="../HTML/CSS/wallet.css">
|
|
<link rel="stylesheet" type="text/css" href="../HTML/CSS/buttons.css">
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<script>
|
|
window.RUN_CLIENT=1;
|
|
window.RUN_SERVER=0;
|
|
if(typeof global === 'object')
|
|
{
|
|
global.RUN_CLIENT=1;
|
|
global.RUN_SERVER=0;
|
|
}
|
|
</script>
|
|
|
|
<script type="text/javascript" src="/HTML/JS/coinlib.js"></script>
|
|
<script type="text/javascript" src="../HTML/JS/client.js"></script>
|
|
<script type="text/javascript" src="../HTML/JS/sha3.js"></script>
|
|
<script type="text/javascript" src="../HTML/JS/crypto-client.js"></script>
|
|
|
|
<script type="text/javascript" src="/HTML/JS/wallet-lib.js"></script>
|
|
<script type="text/javascript" src="/HTML/JS/wallet-node.js"></script>
|
|
<script type="text/javascript" src="/HTML/JS/terahashlib.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
var CONFIG_DATA={}; CONFIG_DATA.CONSTANTS={};
|
|
var ServerBlockNumDB=0;
|
|
var ServerCurBlockNum=0;
|
|
var ServerTime=0;
|
|
var MiningAccount=0;
|
|
//var min_power_pow_acc_create=0;
|
|
var WalletStatus;
|
|
var BLOCK_PROCESSING_LENGTH=8;
|
|
var PubKeyStr;
|
|
var PrivKeyStr;
|
|
var WalletOpen;
|
|
|
|
|
|
|
|
var INTERNET_IP_FROM_STUN;
|
|
var SERVER_IP;
|
|
var SERVER_PORT;
|
|
|
|
var CurTabName;
|
|
|
|
var TabArr=[{name:"TabAccounts",log:1},{name:"TabSend",log:1},{name:"TabDapps"},{name:"TabExplorer"}];
|
|
var SaveIdArr=["idAccount","idTo","idSumSend","idDescription","idSelStyle",
|
|
"idViewAccountNum","idViewBlockNum","idViewActNum","idViewHashNum","idViewDappNum",
|
|
"idRunText","idViewAccountFilter",
|
|
"idBlockCount","idPeriodAutoCheckPoint"];
|
|
|
|
|
|
var MaxAccID=0;
|
|
var MaxDappsID=0;
|
|
var MaxActNum=0;
|
|
var HistoryMaxNum=0;
|
|
|
|
var idPercentItem;
|
|
|
|
var WasSetRestart=0;
|
|
|
|
</script>
|
|
|
|
<script>
|
|
/*User action User action User action User action User action User action User action User action User action */
|
|
|
|
//CONFIG
|
|
//CONFIG
|
|
//CONFIG
|
|
function IsPrivateMode()
|
|
{
|
|
if(PrivKeyStr && PrivKeyStr.length===64 && PrivKeyStr!=="0000000000000000000000000000000000000000000000000000000000000000")
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
|
|
function NewPrivateKey()
|
|
{
|
|
var arr = new Uint8Array(32);
|
|
window.crypto.getRandomValues(arr);
|
|
var Str=GetHexFromArr(sha3(arr));
|
|
|
|
document.getElementById("idKeyNew").value=Str;
|
|
SetVisibleEditKeys(1);
|
|
|
|
var Select=document.getElementById("idTypeKey");
|
|
Select.value="private";
|
|
|
|
SetVisibleItemByTypeKey();
|
|
}
|
|
function EditPrivateKey()
|
|
{
|
|
if(!IsVisibleBlock("edit_keys"))
|
|
{
|
|
var Select=document.getElementById("idTypeKey");
|
|
if(IsPrivateMode())
|
|
{
|
|
document.getElementById("idKeyNew").value=PrivKeyStr;
|
|
Select.value="private";
|
|
}
|
|
else
|
|
{
|
|
document.getElementById("idKeyNew").value=PubKeyStr;
|
|
Select.value="public";
|
|
}
|
|
|
|
|
|
|
|
SetVisibleEditKeys(1);
|
|
}
|
|
else
|
|
{
|
|
CancelSavePrivateKey();
|
|
}
|
|
}
|
|
|
|
function ConvertToPrivateKey()
|
|
{
|
|
var Str=document.getElementById("idKeyNew").value;
|
|
if(!Str || Str.length<20)
|
|
{
|
|
SetError("Enter secret words that are at least 20 characters long");
|
|
return;
|
|
}
|
|
|
|
var Str2=document.getElementById("idKeyNew2").value;
|
|
if(Str2 && Str!==Str2)
|
|
{
|
|
SetError("Re-entered secret does not match");
|
|
return;
|
|
}
|
|
|
|
document.getElementById("idTypeKey").value="private";
|
|
SetVisibleItemByTypeKey();
|
|
document.getElementById("idKeyNew").value=GetPrivateKeyFromStr(Str);
|
|
document.getElementById("idKeyNew2").value="";
|
|
}
|
|
|
|
function GetPrivateKeyFromStr(Str)
|
|
{
|
|
var StrHex=sha3_str(Str);
|
|
for(var i=0;i<100000;i++)
|
|
StrHex=sha3_str(StrHex);
|
|
|
|
return StrHex.toUpperCase();
|
|
}
|
|
|
|
function CancelSavePrivateKey()
|
|
{
|
|
SetVisibleEditKeys(0);
|
|
}
|
|
|
|
|
|
|
|
|
|
//ACCOUNTS
|
|
//ACCOUNTS
|
|
//ACCOUNTS
|
|
function FindMyAccounts()
|
|
{
|
|
GetData("FindMyAccounts",{},function (Data)
|
|
{
|
|
WasAccountsDataStr="";
|
|
UpdatesData();
|
|
});
|
|
|
|
}
|
|
|
|
|
|
function ViewNewAccount()
|
|
{
|
|
var name="idAccountEdit";
|
|
if(IsVisibleBlock(name))
|
|
{
|
|
SetVisibleBlock(name,false);
|
|
}
|
|
else
|
|
{
|
|
SetVisibleBlock(name,true);
|
|
$("idAccountName").focus();
|
|
|
|
var Select=document.getElementById("idAccount");
|
|
SetViewWN();
|
|
}
|
|
}
|
|
function SetViewWN()
|
|
{
|
|
document.getElementById("Item.WN").innerText="";
|
|
SetVisibleBlock("Item.WN","none");
|
|
}
|
|
function CancelCreateAccount()
|
|
{
|
|
var name="idAccountEdit";
|
|
SetVisibleBlock(name,false)
|
|
}
|
|
|
|
var WasCreateAccountInfo;
|
|
function CreateAccount(bAddToPay)
|
|
{
|
|
if(!CanSendTransaction)
|
|
{
|
|
SetError("Can't Send transaction");
|
|
return;
|
|
}
|
|
|
|
WasCreateAccountInfo=PubKeyStr;
|
|
|
|
var Description=document.getElementById("idAccountName").value;
|
|
var Adviser=0;//ParseNum(document.getElementById("idAdviser").value);
|
|
var Smart=ParseNum(document.getElementById("idSmart").value);
|
|
var Currency=ParseNum(document.getElementById("idCurrency").value);
|
|
|
|
var WN=ParseNum(document.getElementById("idWN").value);
|
|
|
|
if(!Description)
|
|
{
|
|
SetError("Enter the account name.");
|
|
return;
|
|
}
|
|
|
|
if(WN)
|
|
{
|
|
GetData("GetAccountKey",WN,function (Data)
|
|
{
|
|
if(Data && Data.result===1)
|
|
{
|
|
SendTrCreateAcc(Currency,Data.PubKeyStr,Description,Adviser,Smart,1,bAddToPay);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
SendTrCreateAcc(Currency,PubKeyStr,Description,Adviser,Smart,0,bAddToPay);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function SetVisibleEditKeys(bSet)
|
|
{
|
|
SetVisibleBlock("edit_keys",bSet);
|
|
if(bSet)
|
|
{
|
|
SetVisibleItemByTypeKey();
|
|
document.getElementById("idKeyNew").focus();
|
|
}
|
|
}
|
|
|
|
function SelectTypeKey()
|
|
{
|
|
var Select=document.getElementById("idTypeKey");
|
|
var Item=document.getElementById("idKeyNew");
|
|
var Item2=document.getElementById("idKeyNew2");
|
|
|
|
if(Select.value==="public" && (Item.value.length!==66 || Item.value.substr(0,1)!=="0"))
|
|
{
|
|
Item.value="";
|
|
Item2.value="";
|
|
}
|
|
else
|
|
if(Select.value==="private" && Item.value===PubKeyStr)
|
|
{
|
|
Item.value="";
|
|
Item2.value="";
|
|
}
|
|
else
|
|
if(Select.value==="brain" && Item.value.length>=64 && IsHexStr(Item.value))
|
|
{
|
|
Item.value="";
|
|
Item2.value="";
|
|
}
|
|
|
|
SetVisibleItemByTypeKey();
|
|
|
|
}
|
|
function SetVisibleItemByTypeKey()
|
|
{
|
|
var Select=document.getElementById("idTypeKey");
|
|
if(Select.value==="brain")
|
|
{
|
|
SetVisibleBlock("idViewKeyNew2","table-row");
|
|
SetVisibleBlock("idBtConvertKey","inline-block");
|
|
SetVisibleBlock("idBtSaveKey",false);
|
|
}
|
|
else
|
|
{
|
|
SetVisibleBlock("idViewKeyNew2","none");
|
|
SetVisibleBlock("idBtConvertKey",false);
|
|
SetVisibleBlock("idBtSaveKey","inline-block");
|
|
}
|
|
}
|
|
|
|
//SEND
|
|
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<script>
|
|
|
|
//Pagination
|
|
var CountViewRows=20;
|
|
var DefAccounts={BlockName:"idPaginationAccount", NumName:"idViewAccountNum", TabName:"grid_accounts_all",APIName:"GetAccountList",Param3:"",FilterName:"idViewAccountFilter",TotalSum:"idTotalSum"};
|
|
var DefBlock={BlockName:"idPaginationBlock", NumName:"idViewBlockNum", TabName:"grid_block_all",APIName:"GetBlockList",Param3:"",FilterName:""};//idViewBlockFilter
|
|
|
|
|
|
var DefHistory={BlockName:"idPaginationHistory", NumName:"idViewHistoryNum", TabName:"grid_history",APIName:"GetHistoryAct",Param3:"",FilterName:"idViewHistoryFilter",TotalSum:"idTotalSumH"};
|
|
var DefActs={BlockName:"idPaginationAct", NumName:"idViewActNum", TabName:"grid_acts_all",APIName:"GetActList",Param3:""};
|
|
var DefHash={BlockName:"idPaginationHash", NumName:"idViewHashNum", TabName:"grid_hash_all",APIName:"GetHashList",Param3:""};
|
|
|
|
var DefDapps={BlockName:"idPaginationDapps", NumName:"idViewDappNum", TabName:"grid_dapps_all",APIName:"GetDappList",Param3:"",FilterName:"idViewDappsFilter",FilterName2:"idCategory",CountViewRows:10};
|
|
|
|
|
|
|
|
function ViewHistory()
|
|
{
|
|
ViewCurrent(DefHistory);
|
|
}
|
|
function ViewDapps()
|
|
{
|
|
ViewCurrent(DefDapps);
|
|
}
|
|
|
|
|
|
var MapCheckBtPress={};
|
|
var ArrCheckEscPress=[];
|
|
function SetImg(This,Name)
|
|
{
|
|
if(!This)
|
|
return;
|
|
|
|
MapCheckBtPress[Name]=This;
|
|
|
|
if(IsVisibleBlock(Name))
|
|
{
|
|
This.id="idUp";
|
|
|
|
for(var i=ArrCheckEscPress.length-1;i>=0;i--)
|
|
{
|
|
var element=ArrCheckEscPress[i];
|
|
if(element.name===Name)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
ArrCheckEscPress.push({name:Name,item:This,tab:CurTabName});
|
|
}
|
|
else
|
|
{
|
|
This.id="idDown";
|
|
}
|
|
//console.log("This="+This.value);
|
|
}
|
|
setInterval(function ()
|
|
{
|
|
for(var key in MapCheckBtPress)
|
|
{
|
|
var item=MapCheckBtPress[key];
|
|
SetImg(item,key);
|
|
}
|
|
},300);
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
/*Get data from server Get data from server Get data from server Get data from server Get data from server */
|
|
function UpdatesConfigData()
|
|
{
|
|
GetData("GetWalletInfo",{}, function (Data)
|
|
{
|
|
SetConfigData(Data);
|
|
});
|
|
}
|
|
function UpdatesAccountsData()
|
|
{
|
|
GetData("/GetWalletAccounts",{}, function (Data,responseText)
|
|
{
|
|
SetAccountsData(Data,responseText);
|
|
});
|
|
}
|
|
|
|
function UpdatesData()
|
|
{
|
|
|
|
UpdatesAccountsData();
|
|
CheckNameAccTo();
|
|
CheckSending();
|
|
}
|
|
|
|
|
|
var TitleWarning=0;
|
|
function SetTitle(TitleName)
|
|
{
|
|
if(TitleWarning===1)
|
|
document.title="*"+TitleName+"*";
|
|
else
|
|
if(TitleWarning===2)
|
|
document.title="**"+TitleName+"**";
|
|
else
|
|
if(TitleWarning>2)
|
|
document.title="***"+TitleName+"***";
|
|
else
|
|
document.title=TitleName;
|
|
}
|
|
function SetConfigData(Data)
|
|
{
|
|
if(!Data || !Data.result)
|
|
return;
|
|
|
|
CONFIG_DATA=Data;
|
|
ServerBlockNumDB=Data.BlockNumDB;
|
|
ServerCurBlockNum=Data.CurBlockNum;
|
|
ServerTime=Data.CurTime;
|
|
var DeltaTime=Data.DELTA_CURRENT_TIME/1000;
|
|
|
|
var Name="TERA";
|
|
if(CONFIG_DATA.CONSTANTS.WALLET_NAME)
|
|
Name=CONFIG_DATA.CONSTANTS.WALLET_NAME;
|
|
|
|
|
|
if(CONFIG_DATA.CONSTANTS.COUNT_VIEW_ROWS)
|
|
CountViewRows=CONFIG_DATA.CONSTANTS.COUNT_VIEW_ROWS;
|
|
|
|
SetBlockChainConstant(Data);
|
|
MaxBlockNum=GetCurrentBlockNumByTime();
|
|
|
|
var StrVersion=" 0."+Data.VersionNum;
|
|
if(Data.CODE_VERSION.VersionNum && Data.VersionNum<Data.CODE_VERSION.VersionNum)
|
|
{
|
|
StrVersion=StrVersion+"/0."+Data.CODE_VERSION.VersionNum;
|
|
}
|
|
|
|
SetTitle(Name+StrVersion);
|
|
|
|
|
|
if(Data.RelayMode && Data.CurBlockNum>Data.BlockNumDB+BLOCK_PROCESSING_LENGTH*2)
|
|
{
|
|
CanSendTransaction=0;
|
|
var StrMode="";
|
|
var MaxNum=Data.CurBlockNum-BLOCK_PROCESSING_LENGTH;
|
|
if(MaxNum>0)
|
|
{
|
|
var Percent=100*Data.BlockNumDB/MaxNum;
|
|
if(Percent<0)
|
|
Percent=0;
|
|
Percent=Percent.toFixed(2);
|
|
StrMode=" "+Percent+"% "+" ("+Data.BlockNumDB+"/"+MaxNum+")";
|
|
}
|
|
|
|
SetMainStatus("<DIV align='center' style='color:red'><big><B>Waiting for synchronization "+StrMode+"</B></big></DIV>");
|
|
WalletStatus="WAIT";
|
|
}
|
|
else
|
|
if(WalletStatus==="WAIT")
|
|
{
|
|
CanSendTransaction=1;
|
|
WalletStatus="OK";
|
|
SetMainStatus("<DIV align='center' style='color:green'><big><B>Synchronization complete</B></big></DIV>",1);
|
|
}
|
|
else
|
|
{
|
|
CanSendTransaction=1;
|
|
}
|
|
|
|
MaxAccID=Data.MaxAccID;
|
|
MaxDappsID=Data.MaxDappsID;
|
|
MaxActNum=Data.MaxActNum;
|
|
|
|
|
|
//min_power_pow_acc_create=Data.MIN_POWER_POW_ACC_CREATE+3;
|
|
PubKeyStr=Data.PublicKey;
|
|
PrivKeyStr=Data.PrivateKey;
|
|
|
|
WalletOpen=Data.WalletOpen;
|
|
SetVisibleBtOpenWallet();
|
|
|
|
HistoryMaxNum=Data.HistoryMaxNum;
|
|
|
|
DeltaTime=DeltaTime.toFixed(3);
|
|
|
|
var DeltaDB=Data.CurBlockNum-Data.BlockNumDB;
|
|
var DeltaTX=Data.CurBlockNum-Data.TXBlockNum;
|
|
|
|
|
|
$("idCurBlockNum").innerText=Data.CurBlockNum;
|
|
$("idDeltaDB").innerText=DeltaDB;
|
|
$("idDeltaTX").innerText=DeltaTX;
|
|
$("idDeltaTime").innerText=DeltaTime;
|
|
$("idWalletVersion").innerText=StrVersion;
|
|
$("idSpeedSignLib").innerText=Data.SpeedSignLib;
|
|
|
|
var MIN_SPEED=700;
|
|
if(CONFIG_DATA.SpeedSignLib<MIN_SPEED)
|
|
$("idSpeedSignLib").className="red";
|
|
else
|
|
$("idSpeedSignLib").className="";
|
|
if(CONFIG_DATA.SpeedSignLib)
|
|
SetVisibleBlock("idSignLibError",(CONFIG_DATA.SpeedSignLib<MIN_SPEED));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SetArrLog(Data.ArrLog);
|
|
|
|
if(document.getElementById("idPubKey").innerText!==PubKeyStr)
|
|
document.getElementById("idPubKey").innerText=PubKeyStr;
|
|
if(document.getElementById("idDataPath").innerText!==Data.DATA_PATH)
|
|
document.getElementById("idDataPath").innerText=Data.DATA_PATH;
|
|
// if(document.getElementById("idNodeAddr").innerText!==Data.NodeAddrStr)
|
|
// document.getElementById("idNodeAddr").innerText=Data.NodeAddrStr;
|
|
|
|
|
|
|
|
//document.getElementById("idTo").max=MaxAccID;
|
|
//document.getElementById("idAdviser").max=MaxAccID;
|
|
|
|
SetVisibleBlock("idDevelopService",Data.IsDevelopAccount);
|
|
SetVisibleBlock("idDevelopService2",Data.IsDevelopAccount);
|
|
// SetVisibleBlock("idFilterA",Data.IsDevelopAccount);
|
|
//SetVisibleBlock("idFilterB",Data.IsDevelopAccount);
|
|
//SetVisibleBlock("idFilterH",Data.IsDevelopAccount);
|
|
|
|
//SetVisibleBlock("idNetwork",CONFIG_DATA.CONSTANTS.COMMON_KEY);
|
|
|
|
|
|
|
|
|
|
if(Data.NeedRestart)
|
|
{
|
|
DoRestartWallet();
|
|
}
|
|
|
|
|
|
INTERNET_IP_FROM_STUN=Data.INTERNET_IP_FROM_STUN;
|
|
SERVER_IP=Data.ip;
|
|
SERVER_PORT=Data.port;
|
|
|
|
//Mining
|
|
MiningAccount=Data.MiningAccount;
|
|
document.getElementById("idUseMining").checked=CONFIG_DATA.CONSTANTS.USE_MINING;
|
|
if(!idPercentItem || document.activeElement!==idPercentItem)
|
|
{
|
|
idPercentItem=document.getElementById("idPercentMining");
|
|
idPercentItem.value=CONFIG_DATA.CONSTANTS.POW_MAX_PERCENT;
|
|
}
|
|
if(Data.CountMiningCPU>0 && CONFIG_DATA.CONSTANTS.USE_MINING)
|
|
SetVisibleBlock("idMiningParams","inline-block");
|
|
else
|
|
SetVisibleBlock("idMiningParams",0);
|
|
|
|
SetStatusMining(" Mining on:<B>"+MiningAccount+"</B> HashRate:<B>"+(Math.floor(Data.HashRate*10)/10)+"</B>Mh/s CPU RUN:<B>"+Data.CountRunCPU+"</B>/"+Data.CountMiningCPU+" "+(Data.MiningPaused?"<B style='color:darkred;'>=PAUSED=</B>":""));
|
|
if(CONFIG_DATA.CONSTANTS.USE_MINING && Data.CountRunCPU!==Data.CountMiningCPU)
|
|
{
|
|
$("idUseMining").className="checkbox checkbox_red";
|
|
}
|
|
else
|
|
{
|
|
$("idUseMining").className="checkbox";
|
|
}
|
|
|
|
if(Data.CODE_VERSION.VersionNum && Data.VersionNum<Data.CODE_VERSION.VersionNum)
|
|
{
|
|
$("idAutoUpdate").className="checkbox checkbox_alert";
|
|
}
|
|
else
|
|
{
|
|
$("idAutoUpdate").className="checkbox";
|
|
}
|
|
|
|
document.getElementById("idAutoUpdate").checked=CONFIG_DATA.CONSTANTS.USE_AUTO_UPDATE;
|
|
|
|
|
|
|
|
window.DEBUG_WALLET=CONFIG_DATA.CONSTANTS.DEBUG_WALLET;
|
|
|
|
|
|
SetViewWN();
|
|
|
|
$("idHintStyle").disabled = !CONFIG_DATA.USE_HINT;
|
|
|
|
|
|
DrawBlockInfo();
|
|
|
|
|
|
}
|
|
|
|
function SetVisibleBtOpenWallet()
|
|
{
|
|
SetVisibleBlock("idOpenWallet",WalletOpen!==undefined);
|
|
var item=document.getElementById("idOpenWallet");
|
|
if(WalletOpen==true)
|
|
{
|
|
item.value="Wallet opened";
|
|
item.style="background-image: url('/HTML/PIC/lock_open.png');color:green;";
|
|
}
|
|
else
|
|
if(WalletOpen==false)
|
|
{
|
|
item.value="Wallet closed";
|
|
item.style="background-image: url('/HTML/PIC/lock_closed.png');color:"+"#9b712a";
|
|
}
|
|
|
|
SetVisibleBlock("wallet_config_tab",WalletOpen!==false);
|
|
}
|
|
|
|
function TestSignLib()
|
|
{
|
|
GetData("TestSignLib",{});
|
|
}
|
|
</script>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
//LIB
|
|
function ConfirmationFromBlock(BlockNum)
|
|
{
|
|
var Length=MaxBlockNum-8-BlockNum;
|
|
if(Length>0)
|
|
{
|
|
if(Length<=100)
|
|
return Length;
|
|
else
|
|
{
|
|
return ">"+Math.floor(Length/100)*100;
|
|
}
|
|
}
|
|
else
|
|
return "";
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function ToLogServer(Str)
|
|
{
|
|
GetData("ToLogServer",Str, function (Data)
|
|
{
|
|
UpdatesData();
|
|
});
|
|
}
|
|
|
|
var PrevServerStr;
|
|
function SetStatusFromServer(Str)
|
|
{
|
|
var id = document.getElementById("idServerLog");
|
|
if(PrevServerStr!==Str)
|
|
{
|
|
PrevServerStr=Str;
|
|
id.innerText=Str;
|
|
}
|
|
}
|
|
|
|
var bMainCanClear=true;
|
|
var StrMainStatus="";
|
|
var StrNormalStatus="";
|
|
function SetMainStatus(Str,bCanClear)
|
|
{
|
|
bMainCanClear=bCanClear;
|
|
StrMainStatus=Str;
|
|
ViewStatus();
|
|
}
|
|
function SetStatus(Str,bError)
|
|
{
|
|
if(bError)
|
|
return SetError(Str);
|
|
|
|
StrNormalStatus=Str;
|
|
if(bMainCanClear)
|
|
{
|
|
StrMainStatus="";
|
|
}
|
|
ViewStatus();
|
|
}
|
|
|
|
function ViewStatus()
|
|
{
|
|
var Str=StrMainStatus+StrNormalStatus;
|
|
var id = $("idStatus");
|
|
id.innerHTML=Str;
|
|
}
|
|
function SetError(Str,bNoSound)
|
|
{
|
|
if(!bNoSound)
|
|
$("sound_err").play();
|
|
SetStatus("<DIV align='left' style='color:red'><B>"+Str+"</B></DIV>");
|
|
}
|
|
function SetStatusMining(Str)
|
|
{
|
|
var id = $("idStatusMining");
|
|
id.innerHTML=Str;
|
|
}
|
|
|
|
|
|
//EVENTS
|
|
//EVENTS
|
|
//EVENTS
|
|
function SetVisibleTab()
|
|
{
|
|
if(!CurTabName)
|
|
CurTabName=TabArr[0].name;
|
|
|
|
var bLogVisible=0;
|
|
var str;
|
|
for (var i=0;i<TabArr.length;i++)
|
|
{
|
|
var name=TabArr[i].name;
|
|
var Item=document.getElementById(name);
|
|
if(!Item)
|
|
continue;
|
|
if(CurTabName===name)
|
|
{
|
|
bLogVisible=TabArr[i].log;
|
|
Item.style.display = 'block';
|
|
str="current bt bttab"
|
|
}
|
|
else
|
|
{
|
|
Item.style.display = 'none';
|
|
str="bttab bt"
|
|
}
|
|
|
|
var ItemM=document.getElementById("M"+name);
|
|
if(ItemM)
|
|
ItemM.className=str;
|
|
}
|
|
|
|
|
|
|
|
//SetVisibleBlock("idStatus",bLogVisible);
|
|
SetVisibleBlock("idServerBlock",bLogVisible);
|
|
}
|
|
|
|
function OnSelectTab(name)
|
|
{
|
|
if(name==="TabDapps")
|
|
{
|
|
ViewDapps();
|
|
}
|
|
}
|
|
|
|
function SelectTab(name)
|
|
{
|
|
CurTabName=name;
|
|
OnSelectTab(name);
|
|
history.pushState(null,null,"#"+name);
|
|
//window.location.hash="#"+name;
|
|
|
|
SetVisibleTab();
|
|
SaveValues();
|
|
DoStableScroll();
|
|
}
|
|
|
|
function CheckCtrlEnterAndESC(e,F)
|
|
{
|
|
SaveValues();
|
|
|
|
if(e.ctrlKey && e.keyCode===13)
|
|
{
|
|
|
|
if(CurTabName==="TabAccounts" && IsVisibleBlock("edit_keys"))
|
|
SavePrivateKey();
|
|
else
|
|
if(CurTabName==="TabAccounts" && IsVisibleBlock("idAccountEdit"))
|
|
CreateAccount(0);
|
|
else
|
|
if(CurTabName==="TabAccounts" && IsVisibleBlock("edit_mining_set"))
|
|
SaveMiningSet();
|
|
else
|
|
if(CurTabName==="TabSend")
|
|
{
|
|
if(IsVisibleBlock("edit_transaction"))
|
|
SignAndSendFromJSON();
|
|
else
|
|
if(IsVisibleBlock("idBlockOnSend"))
|
|
SendMoney2();
|
|
else
|
|
SendMoneyBefore();
|
|
|
|
}
|
|
else
|
|
if(IsVisibleBlock("idBlockPasswordSet"))
|
|
SetPassword();
|
|
else
|
|
if(IsVisibleBlock("idBlockPasswordGet"))
|
|
SetPassword();
|
|
else
|
|
if(WalletOpen===false)
|
|
{
|
|
ViewOpenWallet();
|
|
}
|
|
}
|
|
else
|
|
if(e.keyCode===27)
|
|
{
|
|
for(var i=ArrCheckEscPress.length-1;i>=0;i--)
|
|
{
|
|
var element=ArrCheckEscPress[i];
|
|
if(element.tab===CurTabName)
|
|
{
|
|
SetVisibleBlock(element.name,false);
|
|
SetImg(element.item,element.name);
|
|
ArrCheckEscPress.splice(i,1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function LoadValues()
|
|
{
|
|
if(LoadValuesByArr(SaveIdArr))
|
|
{
|
|
CurTabName=localStorage["CurTabName"];
|
|
|
|
LoadMapAfter["idAccount"]=localStorage.getItem("idAccount");
|
|
|
|
}
|
|
}
|
|
function SaveValues()
|
|
{
|
|
SaveValuesByArr(SaveIdArr);
|
|
localStorage["CurTabName"]=CurTabName;
|
|
}
|
|
|
|
//INIT
|
|
//INIT
|
|
//INIT
|
|
function SelectStyle(value)
|
|
{
|
|
var Select=document.getElementById("idSelStyle");
|
|
if(value)
|
|
Select.value=value;
|
|
|
|
if(!Select.value)
|
|
Select.value=Select.options[0].value;
|
|
|
|
document.body.className="univers "+Select.value;
|
|
}
|
|
window.onload=function()
|
|
{
|
|
FillCategory("idCategory");
|
|
|
|
LoadValues();
|
|
InitPasItems();
|
|
SelectStyle();
|
|
SelectTypeKey();
|
|
InitRun();
|
|
window.onkeydown = CheckCtrlEnterAndESC;
|
|
SetVisibleTab();
|
|
|
|
localStorage["BIGWALLET"]=1;
|
|
|
|
window.OnInitWallet();
|
|
}
|
|
if(!window.OnInitWallet)
|
|
window.OnInitWallet=function()
|
|
{
|
|
|
|
|
|
UpdatesConfigData();
|
|
UpdatesData();
|
|
setInterval(UpdatesData,1000);
|
|
setInterval(UpdatesConfigData,335);
|
|
setInterval(CheckNewMoney,1000);
|
|
setInterval(SaveValues,2000);
|
|
setTimeout(CheckNameAccTo,100);
|
|
|
|
if(window.location.hash)
|
|
{
|
|
var LocationPath=window.location.hash.substr(1);
|
|
//console.log("LocationPath="+LocationPath)
|
|
if(LocationPath)
|
|
{
|
|
SelectTab(LocationPath);
|
|
}
|
|
}
|
|
|
|
setTimeout(function ()
|
|
{
|
|
OnSelectTab(CurTabName);
|
|
},100)
|
|
|
|
|
|
}
|
|
function InitRun()
|
|
{
|
|
if(localStorage["WasStart"]!=="1")
|
|
{
|
|
var ValText=document.getElementById("idRunText").value;
|
|
if(ValText && ValText!=="undefined" && ValText.trim())
|
|
{
|
|
localStorage["WasStart"]="1";
|
|
SetError("Run script ... Was Error?",1);
|
|
eval(ValText);
|
|
SetStatus("Run script ... OK");
|
|
}
|
|
localStorage["WasStart"]="0";
|
|
}
|
|
}
|
|
|
|
function SetRun()
|
|
{
|
|
SaveValues();
|
|
localStorage["WasStart"]="0";
|
|
SetStatus("Set to Run script");
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<script>
|
|
var itemPasswordGet,itemPassword1,itemPassword2,itemBtPassword;
|
|
function InitPasItems()
|
|
{
|
|
itemPassword1=$("idPassword1");
|
|
itemPassword2=$("idPassword2");
|
|
itemPasswordGet=$("idPasswordGet");
|
|
}
|
|
|
|
function OnClickOpenCloseWallet()
|
|
{
|
|
if(WalletOpen===true)
|
|
{
|
|
GetData("CloseWallet",{},function (Data)
|
|
{
|
|
if(Data && Data.result===1)
|
|
{
|
|
SetStatus("Wallet close");
|
|
}
|
|
});
|
|
}
|
|
else
|
|
if(WalletOpen===false)
|
|
{
|
|
ViewOpenWallet();
|
|
}
|
|
|
|
}
|
|
|
|
function ViewOpenWallet()
|
|
{
|
|
if(WalletOpen!==false)
|
|
{
|
|
SetStatus("Wallet not close");
|
|
return;
|
|
}
|
|
|
|
itemPasswordGet.onkeydown = OnEnterPas1;
|
|
itemPasswordGet.value="";
|
|
SetVisibleBlock("idBlockPasswordGet",true);
|
|
itemPasswordGet.focus();
|
|
}
|
|
function OpenWallet()
|
|
{
|
|
var Passwd1=itemPasswordGet.value;
|
|
GetData("OpenWallet",Passwd1, function (Data)
|
|
{
|
|
if(Data && Data.result===1)
|
|
{
|
|
itemPasswordGet.value="";
|
|
SetStatus("Wallet open");
|
|
SetVisibleBlock("idBlockPasswordGet",false);
|
|
SetImg(itemBtPassword,'idBlockPasswordGet');
|
|
}
|
|
else
|
|
{
|
|
SetError("Wrong password!")
|
|
}
|
|
});
|
|
|
|
}
|
|
function CancelOpenWallet()
|
|
{
|
|
SetVisibleBlock("idBlockPasswordGet",false);
|
|
SetImg(itemBtPassword,'idBlockPasswordGet');
|
|
}
|
|
|
|
|
|
function ViewSetPassword()
|
|
{
|
|
if(WalletOpen===false)
|
|
{
|
|
SetError("First open wallet!");
|
|
return;
|
|
}
|
|
|
|
itemPassword1.onkeydown = OnEnterPas1;
|
|
itemPassword2.onkeydown = OnEnterPas2;
|
|
|
|
itemPassword1.value="";
|
|
itemPassword2.value="";
|
|
SetVisibleBlock("idBlockPasswordSet",!IsVisibleBlock("idBlockPasswordSet"));
|
|
SetImg(itemBtPassword,'idBlockPasswordSet');
|
|
itemPassword1.focus();
|
|
}
|
|
|
|
|
|
function SetPassword()
|
|
{
|
|
if(!IsVisibleBlock("idBlockPasswordSet"))
|
|
{
|
|
OpenWallet();
|
|
return;
|
|
}
|
|
|
|
var Passwd1=itemPassword1.value;
|
|
var Passwd2=itemPassword2.value;
|
|
if(Passwd1!==Passwd2)
|
|
{
|
|
SetError("Passwords are not equal");
|
|
return;
|
|
}
|
|
itemPassword1.value="";
|
|
itemPassword2.value="";
|
|
|
|
GetData("SetWalletPasswordNew",Passwd1, function (Data)
|
|
{
|
|
if(Data && Data.result===1)
|
|
{
|
|
SetStatus("New password was set");
|
|
SetVisibleBlock("idBlockPasswordSet",false);
|
|
SetImg(itemBtPassword,'idBlockPasswordSet');
|
|
}
|
|
});
|
|
}
|
|
function CancelSetPassword()
|
|
{
|
|
SetVisibleBlock("idBlockPasswordSet",false);
|
|
SetImg(itemBtPassword,'idBlockPasswordSet');
|
|
SetVisibleBlock("idBlockPasswordGet",false);
|
|
SetImg(itemBtPassword,'idBlockPasswordGet');
|
|
}
|
|
|
|
function OnEnterPas1(e)
|
|
{
|
|
if(e.keyCode===13)
|
|
{
|
|
if(IsVisibleBlock("idBlockPasswordSet"))
|
|
{
|
|
itemPassword2.focus();
|
|
}
|
|
else
|
|
{
|
|
OpenWallet();
|
|
}
|
|
}
|
|
//SetStatus("e.keyCode="+e.keyCode)
|
|
}
|
|
function OnEnterPas2(e)
|
|
{
|
|
if(e.keyCode===13)
|
|
{
|
|
SetPassword();
|
|
}
|
|
//SetStatus("e.keyCode="+e.keyCode)
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<script>
|
|
var ArrInfo;
|
|
var MapInfo={};
|
|
function InitArrInfo()
|
|
{
|
|
MapInfo={};
|
|
ArrInfo=
|
|
[
|
|
{Name:"Hashrate from the beginning of the chain", Delta:1000000000, DX:310},
|
|
{Name:"month", Delta:30.5*24*3600, DX:200},
|
|
{Name:"day", Delta:24*3600, DX:140},
|
|
{Name:"hour", Delta:3600, DX:90},
|
|
{Name:"minute", Delta:60, DX:60}
|
|
];
|
|
|
|
for(var i=0;i<ArrInfo.length;i++)
|
|
{
|
|
var Item=ArrInfo[i];
|
|
MapInfo[Item.Name]=Item;
|
|
}
|
|
|
|
}
|
|
InitArrInfo();
|
|
function DrawBlockInfo()
|
|
{
|
|
var TimeBlockNum=GetCurrentBlockNumByTime();
|
|
var CurBlockNum=TimeBlockNum;
|
|
if(CurBlockNum<ServerBlockNumDB+8)
|
|
CurBlockNum=ServerBlockNumDB;
|
|
|
|
|
|
var WasArr=0;
|
|
var Arr=[];
|
|
for(var i=ArrInfo.length-1;i>=0;i--)
|
|
{
|
|
var Item=ArrInfo[i];
|
|
Item.BlockNum2=CurBlockNum;
|
|
Item.BlockNum1=Item.BlockNum2-Item.Delta;
|
|
if(Item.BlockNum1<0)
|
|
Item.BlockNum1=0;
|
|
|
|
CurBlockNum=Item.BlockNum1;
|
|
|
|
var MustUpdate=0;
|
|
if(Item.PowerArr)
|
|
for(var n=0;n<Item.PowerArr.length;n++)
|
|
{
|
|
if(!Item.PowerArr[n])//есть нули
|
|
{
|
|
//ToLog("n="+n+" Item.BlockNum1="+Item.BlockNum1);
|
|
MustUpdate=1;
|
|
break;
|
|
}
|
|
}
|
|
if(Item.TimeBlockNum)
|
|
{
|
|
var DeltaTime=Math.abs(Item.TimeBlockNum-TimeBlockNum);
|
|
if(DeltaTime>Item.Delta/20)
|
|
{
|
|
MustUpdate=1;
|
|
}
|
|
}
|
|
|
|
if(!Item.PowerArr || Item.PowerArr.length===0 ||MustUpdate || i===ArrInfo.length-1)
|
|
{
|
|
WasArr=1;
|
|
Arr[i]={BlockNum1:Item.BlockNum1,BlockNum2:Item.BlockNum2};
|
|
}
|
|
}
|
|
|
|
|
|
if(!WasArr)
|
|
return;
|
|
//ToLog("GetHashRate: "+JSON.stringify(ArrInfo));
|
|
GetData("GetHashRate",Arr, function (Data)
|
|
{
|
|
//ToLog("GetHashRate: ")
|
|
var TimeBlockNum=GetCurrentBlockNumByTime();
|
|
if(Data && Data.result)
|
|
{
|
|
for(var i=0;i<Data.ItervalArr.length;i++)
|
|
{
|
|
var Item=ArrInfo[i];
|
|
if(Data.ItervalArr[i])
|
|
{
|
|
Item.TimeBlockNum=TimeBlockNum;
|
|
Item.PowerArr=Data.ItervalArr[i];
|
|
Item.AvgPow=CalcAvg(Item.PowerArr);
|
|
}
|
|
}
|
|
|
|
DrawBlockInfoByArr();
|
|
}
|
|
});
|
|
}
|
|
function CalcAvg(Arr)
|
|
{
|
|
var Sum=0;
|
|
var Count=0;
|
|
for(var i=0;i<Arr.length;i++)
|
|
{
|
|
if(Arr[i])
|
|
{
|
|
Sum+=Arr[i];
|
|
Count++;
|
|
}
|
|
}
|
|
if(!Count)
|
|
return 0;
|
|
return Math.floor((Sum/Count)*10)/10;
|
|
}
|
|
|
|
function DrawBlockInfoByArr()
|
|
{
|
|
var obj = document.getElementById("idBlockInfo");
|
|
var ctx = obj.getContext('2d');
|
|
|
|
var bodystyles = window.getComputedStyle(document.body, null);
|
|
|
|
ctx.fillStyle = bodystyles.backgroundColor;
|
|
ctx.fillRect(0, 0, obj.width, obj.height);
|
|
ctx.fillStyle = "#000";
|
|
ctx.strokeStyle = "#040";
|
|
ctx.lineWidth=2;
|
|
|
|
var Month=MapInfo["month"];
|
|
if(!Month)
|
|
return;
|
|
|
|
|
|
var AvgTotal=0;
|
|
for(var i=0;i<ArrInfo.length;i++)
|
|
{
|
|
var Item=ArrInfo[i];
|
|
AvgTotal+=Item.AvgPow;
|
|
}
|
|
AvgTotal=AvgTotal/ArrInfo.length;
|
|
|
|
function ValueToY(Value)
|
|
{
|
|
var Y=Value-3*AvgTotal/4;
|
|
if(Y<0)
|
|
if(Value>=2)
|
|
Y=1;
|
|
else
|
|
Y=0;
|
|
|
|
return obj.height-Y*2;
|
|
}
|
|
|
|
var x=0;
|
|
var lastx=x;
|
|
var lastvalue=0;
|
|
var WasRed=0;
|
|
for(var i=0;i<ArrInfo.length;i++)
|
|
{
|
|
var firstx=lastx;
|
|
|
|
ctx.beginPath();
|
|
var path = new Path2D();
|
|
path.moveTo(firstx,obj.height);
|
|
path.lineTo(firstx,ValueToY(lastvalue));
|
|
|
|
|
|
var Item=ArrInfo[i];
|
|
|
|
var Arr=Item.PowerArr;
|
|
var DeltaX=Item.DX/Arr.length;
|
|
var x2=0;
|
|
for(var n=0;n<Arr.length;n++)
|
|
{
|
|
if(Arr[n] && Arr[n]>lastvalue/3)
|
|
{
|
|
if(!lastvalue || lastvalue<Arr[n]/3)
|
|
path.moveTo(x+x2,obj.height);
|
|
path.lineTo(x+x2,ValueToY(Arr[n]));
|
|
}
|
|
else
|
|
{
|
|
path.lineTo(lastx,ValueToY(Arr[n]));
|
|
}
|
|
lastvalue=Arr[n];
|
|
|
|
lastx=x+x2;
|
|
x2+=DeltaX;
|
|
}
|
|
Item.x=x;
|
|
x+=Item.DX;
|
|
|
|
path.lineTo(lastx,obj.height);
|
|
path.lineTo(firstx,obj.height);
|
|
ctx.stroke(path);
|
|
|
|
var Delta=Month.AvgPow-Item.AvgPow;
|
|
if(i>1 && Delta>=1)
|
|
{
|
|
WasRed=1;
|
|
ctx.fillStyle = "#ff791a";
|
|
}
|
|
else
|
|
if(i>1 && Delta>=2)
|
|
{
|
|
WasRed=1;
|
|
ctx.fillStyle = "#e22317";
|
|
}
|
|
else
|
|
{
|
|
ctx.fillStyle = "#080";
|
|
}
|
|
ctx.fill(path);
|
|
|
|
}
|
|
|
|
|
|
ctx.lineWidth=0.5;
|
|
ctx.fillStyle = "#ffffff";
|
|
ctx.strokeStyle = ctx.fillStyle;
|
|
ctx.beginPath();
|
|
ctx.moveTo(obj.width,0);
|
|
ctx.lineTo(obj.width,obj.height);
|
|
for(var i=0;i<ArrInfo.length;i++)
|
|
{
|
|
var Item=ArrInfo[i];
|
|
ctx.fillText(""+Item.Name+(WasRed?"-"+Item.AvgPow:""),Item.x+Item.DX/2-4*Item.Name.length/2-16,25);
|
|
}
|
|
ctx.stroke();
|
|
|
|
}
|
|
|
|
</script>
|
|
<style type="text/css">
|
|
|
|
table.password
|
|
{
|
|
border-collapse: collapse;
|
|
width: 400px;
|
|
}
|
|
|
|
#idOpenWallet
|
|
{
|
|
z-index:1001;
|
|
position:relative;
|
|
float: right;
|
|
top:15px;
|
|
right:0px;
|
|
padding: 0 0 0 20px;
|
|
text-align: center;
|
|
box-shadow: 0 0 0 1px;
|
|
|
|
width: 130px;
|
|
height: 40px;
|
|
line-height: 20px;
|
|
margin: 10px;
|
|
background: transparent;
|
|
font-weight: 600;
|
|
|
|
background-image: url('/HTML/PIC/lock_closed.png');
|
|
background-repeat: no-repeat;
|
|
background-size: 20%;
|
|
cursor: pointer;
|
|
}
|
|
|
|
#idBlockPasswordSet,#idBlockPasswordGet
|
|
{
|
|
z-index:1000;
|
|
position:absolute;
|
|
top:150px;
|
|
right:25%;
|
|
height:150px;
|
|
width:320px;
|
|
padding: 10px;
|
|
background: #d9d9d9;
|
|
text-align: left;
|
|
box-shadow: 0 0 0 1px;
|
|
|
|
background-image: url('/HTML/PIC/key.png');
|
|
background-repeat: no-repeat;
|
|
|
|
}
|
|
|
|
|
|
</style>
|
|
|
|
<style id="idHintStyle">
|
|
th.hint:hover:after
|
|
{
|
|
position: absolute;
|
|
content: attr(data-name);
|
|
background: #f7efa3;
|
|
text-align: center;
|
|
font-size:smaller;
|
|
padding: 10px;
|
|
border-radius: 5px;
|
|
border: 1px solid #3b1c0e;
|
|
transform: translateY(-50px) translateX(-30px);
|
|
}
|
|
</style>
|
|
<script>
|
|
$("idHintStyle").disabled=1;
|
|
</script>
|
|
|
|
<style>
|
|
.red
|
|
{
|
|
color:red;
|
|
}
|
|
</style>
|
|
|
|
|
|
<body>
|
|
<DIV align='center'>
|
|
<DIV align='left' style="width: 800px;border2: 1px solid #727473;">
|
|
|
|
<table id="TabHeader">
|
|
<tr>
|
|
<th><DIV id="MTabAccounts" onclick="SelectTab('TabAccounts')" class="bttab">CONFIG</DIV></th>
|
|
<th><DIV id="MTabSend" onclick="SelectTab('TabSend')" class="bttab">SEND</DIV></th>
|
|
<th><DIV id="MTabDapps" onclick="SelectTab('TabDapps')" class="bttab">DApps</DIV></th>
|
|
<th><DIV id="MTabExplorer" onclick="SelectTab('TabExplorer')" class="bttab">EXPLORER</DIV></th>
|
|
</tr>
|
|
</table>
|
|
|
|
<INPUT id="idOpenWallet" style="display: none" type="button" onclick="OnClickOpenCloseWallet()" value="Wallet closed">
|
|
|
|
<DIV id="idStatus" style="height: 40px"> </DIV>
|
|
<BR><BR><BR>
|
|
|
|
<DIV id="TabAccounts" style="display: block">
|
|
<BR>
|
|
<DIV id="idNodeUpdateMiningStatus" style="display: block">
|
|
<DIV style="float: left">
|
|
<input type="checkbox" class="checkbox" id="idAutoUpdate" onchange = "UseAutoUpdate()"/>
|
|
<label for="idAutoUpdate">Autoupdate</label>
|
|
</DIV>
|
|
<DIV style="float: left">
|
|
<input type="checkbox" class="checkbox" id="idUseMining" onchange = "UseMining()"/>
|
|
<label for="idUseMining">Mining</label>
|
|
</DIV>
|
|
<DIV style="float: left;display: none" id="idMiningParams">
|
|
<DIV style="float: left; color: blue;">CPU use:<input type="number" min=0 max=100 id="idPercentMining" onchange="SetPercentMining()"/>%</DIV>
|
|
<DIV style="float: left; margin: 2px 0 0 8px;" id="idStatusMining"></DIV>
|
|
</DIV>
|
|
</DIV>
|
|
<DIV id="idDevelopService" style="display: none">
|
|
<BR>
|
|
<INPUT type="button" id="idDown" onclick="SetVisibleBlock('idDevelopServiceView',!IsVisibleBlock('idDevelopServiceView'));SetImg(this,'idDevelopServiceView')"
|
|
class="btdoit bt" value="DEV SERVICE">
|
|
<DIV id="idDevelopServiceView" style="display: none">
|
|
<table>
|
|
<tr>
|
|
<td style="width: 100px">
|
|
<BR>
|
|
<INPUT type="button" class="bt btdoit" onclick="SetCodeVersionJSON()" value="CODE VERS >>"><BR>
|
|
<INPUT type="button" class="bt btdoit" onclick="SetCorrTimeJSON()" value="DELTA TIME >>"><BR>
|
|
<INPUT type="button" class="bt btdoit" onclick="SetNetConstJSON()" value="NET CONST >>"><BR>
|
|
|
|
</td>
|
|
<td style="width: 500px">
|
|
Value:<INPUT type="string" id="idDevValue" value="0"><BR>
|
|
<TEXTAREA id="idDevService" rows="15" cols="90"> </TEXTAREA><BR>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<INPUT type="button" onclick="CreateCheckPoint()" class="btdoit bt" value="CHECK POINT">
|
|
<INPUT type="button" onclick="SetNewCodeVersion()" class="btdoit bt" value=">>NEW VERSION">
|
|
<INPUT type="button" onclick="StartTimeCorrect()" class="btdoit bt" value=">>TIME CORR.">
|
|
<INPUT type="button" onclick="StartNetConst()" class="btdoit bt" value=">>SET CONST.">
|
|
|
|
<input type="checkbox" class="checkbox" id="idUseAutoCheckPoint" onchange = "UseAutoCheckPoint()"/>
|
|
<label for="idUseAutoCheckPoint">Auto check point each :</label>
|
|
<INPUT type="number" id="idPeriodAutoCheckPoint" style="width: 60px" value="10"> sec<BR>
|
|
|
|
<input type="checkbox" class="checkbox" id="idUseAutoCorrTime" onchange = "UseAutoCorrTime()"/>
|
|
<label for="idUseAutoCorrTime">Auto corr time</label><BR>
|
|
|
|
<HR>
|
|
</DIV>
|
|
</DIV>
|
|
<canvas width='800' height='30' id='idBlockInfo'></canvas>
|
|
<BR><BR>
|
|
<DIV style="float: left; font-family: monospace">
|
|
Block:<B id="idCurBlockNum"></B>
|
|
DB delta:<B id="idDeltaDB" style="min-width: 30px"></B>
|
|
TX delta:<B id="idDeltaTX" style="min-width: 30px"></B>
|
|
Time delta:<B id="idDeltaTime"></B>
|
|
Wallet ver:<B id="idWalletVersion"></B>
|
|
Max:<B id="idSpeedSignLib" style="cursor: pointer" onclick='TestSignLib()'></B> tps
|
|
</DIV>
|
|
<DIV id="idSignLibError" style="display: none;">
|
|
<BR><BR><DIV align='center' style="border: 1px solid #ff791a;padding: 5px"><b class="red">*************** WARNING: VERY SLOW LIBRARY: secp256k1 ***************<BR>Install all dependent packages, see detail: <a href="https://www.npmjs.com/package/secp256k1">https://www.npmjs.com/package/secp256k1</a></b>
|
|
</DIV>
|
|
<BR>
|
|
</DIV>
|
|
|
|
|
|
<DIV id="wallet_config_tab" style="display: none;float: left">
|
|
Wallet data path: <B id="idDataPath"></B><BR>
|
|
Public key: <B id="idPubKey"></B><BR>
|
|
<!--Node addr: <B id="idNodeAddr"></B><BR>-->
|
|
|
|
|
|
<INPUT type="button" onclick="MoveUp($('edit_keys'));NewPrivateKey();" class="btdoit bt" value="New wallet..." id="idDown2">
|
|
<INPUT type="button" onclick="MoveUp($('edit_keys'));EditPrivateKey();SetImg(this,'edit_keys');" class="btdoit bt" value="Edit wallet" id="idDown">
|
|
<INPUT type="button" onclick="MoveUp($('idAccountEdit'));ViewNewAccount();SetImg(this,'idAccountEdit');" class="btdoit bt" value="New account" id="idDown">
|
|
<INPUT type="button" onclick="MoveUp($('edit_mining_set'));MiningSets();SetImg(this,'edit_mining_set');" class="btdoit bt" value="Set mining" id="idDown">
|
|
<INPUT type="button" onclick="ViewSetPassword();itemBtPassword=this; SetImg(itemBtPassword,'idBlockPasswordSet');" class="bt btdoit" value="Set password" id="idDown">
|
|
|
|
</DIV>
|
|
|
|
|
|
<DIV>
|
|
<DIV id="edit_mining_set" style="display: none">
|
|
<table class="form_input keys" id="grid_mining_set">
|
|
<tr>
|
|
<td><DIV>Mining account:</DIV></td><td><INPUT type="number" id="idMiningAccount" min=0 max=1000000000000 value="0"></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td></td>
|
|
<td><INPUT type="button" onclick="SaveMiningSet()" class="bt" value="Save">
|
|
<INPUT type="button" onclick="CancalMiningSet()" class="bt" value="Cancel"></td>
|
|
</tr>
|
|
</table>
|
|
</DIV>
|
|
|
|
<DIV id="edit_keys" style="display: none">
|
|
<table class="form_input keys" id="grid_edit_key">
|
|
<tr>
|
|
<td>
|
|
<select size="1" id="idTypeKey" onkeyup="SelectTypeKey();" onchange="SelectTypeKey();">
|
|
<option value="private">Private key</option>
|
|
<option value="public">Public key (sign from another wallet)</option>
|
|
<option value="brain">Brain key generator</option>
|
|
</select>
|
|
</td><td><INPUT type="string" autocomplete="off" id="idKeyNew" value=""></td>
|
|
</tr>
|
|
<tr id="idViewKeyNew2" style="display: none">
|
|
<td>You can repeat the secret words:</td>
|
|
<td><INPUT type="string" id="idKeyNew2" value=""></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td></td>
|
|
<td>
|
|
<INPUT type="button" onclick="ConvertToPrivateKey()" class="btdoit bt" style="width: 130px;display: none;" id="idBtConvertKey" value="Convert to key">
|
|
<INPUT type="button" onclick="SavePrivateKey()" class="bt" id="idBtSaveKey" value="Save">
|
|
<INPUT type="button" onclick="CancelSavePrivateKey()" class="bt" value="Cancel">
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</DIV>
|
|
|
|
<DIV id="idAccountEdit" style="display: none">
|
|
<table class="form_input keys" id="grid_edit_newacc">
|
|
<tr>
|
|
<td><DIV>Public name:</DIV></td>
|
|
<td>
|
|
<INPUT type="string" maxlength="40" autocomplete="off" id="idAccountName" onkeyup="CheckLengthAccDesription('idAccountName',40)" value="">
|
|
</td>
|
|
</tr>
|
|
<!--<tr>-->
|
|
<!--<td>-->
|
|
<!--<DIV>Adviser:</DIV></td><td><INPUT type="number" id="idAdviser" min=0 max=1000000000000 value="0">-->
|
|
<!--</td>-->
|
|
<!--</tr>-->
|
|
|
|
<tr>
|
|
<td>
|
|
<DIV>Currency:</DIV></td><td><INPUT type="number" id="idCurrency" min=0 max=1000000000 value="0">
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<DIV>Smart:</DIV></td><td><INPUT type="number" id="idSmart" min=0 max=1000000000 value="0">
|
|
</td>
|
|
</tr>
|
|
<!--<tr>-->
|
|
<!--<td></td><td><INPUT type="checkbox" checked id="idAutoSetMining">Mining on this account</td>-->
|
|
<!--</tr>-->
|
|
|
|
<tr id="idRowWN" style="display: none">
|
|
<td>
|
|
<DIV>Wallet number:</DIV></td><td><INPUT type="number" id="idWN" min=0 max=100 value="0">
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td></td>
|
|
<td><INPUT type="button" onclick="CreateAccount(0)" class="bt" value="Create">
|
|
<INPUT type="button" onclick="CancelCreateAccount()" class="bt" value="Cancel">
|
|
<INPUT type="button" onclick="CreateAccount(1)" class="bt btdoit" style="width: 130px;" id="idBtRun" value="Add to Pay list">
|
|
</td>
|
|
</tr>
|
|
|
|
</table>
|
|
</DIV>
|
|
</DIV>
|
|
|
|
|
|
<BR>
|
|
<table id="grid_accounts" class="grid">
|
|
<tr>
|
|
<th id="(RetHistoryAccount(Item))" class="num">ID</th>
|
|
<th id="SUM_TO_STRING(Item.Value)" class="sum bold">Amount</th>
|
|
<th id="CurrencyNameItem(Item)" data-name="Currency" class="cur hint">Cur</th>
|
|
<th id="Item.Name" data-name="Account name" class="accname hint">Name</th>
|
|
<th id="Item.Value.OperationID" data-name="Operation ID" class="snum hint">OP</th>
|
|
<th id="(RetHistoryAccount(Item,'Adviser'))" data-name="Adviser" class="snum hint">Adv</th>
|
|
|
|
<th id="(RetChangeSmart(Item))" data-name="Smart contract (DApp)" class="smart hint">Smart</th>
|
|
<th id="Item.WN" class="num" style="width: 30px;"></th>
|
|
</tr>
|
|
</table>
|
|
|
|
<B><DIV id="idMyTotalSum"></DIV></B>
|
|
|
|
|
|
<INPUT type="button" id="idDown" onclick="MoveUp($('idNetworkView'));ViewNetworkMode();SetImg(this,'idNetworkView')"
|
|
class="btdoit bt" value="NET CONNECT">
|
|
<INPUT type="button" id="idDown" onclick="MoveUp($('idRemoteView'));ViewRemoteParams();SetImg(this,'idRemoteView')"
|
|
class="btdoit bt" value="HTTP ACCESS">
|
|
<INPUT type="button" id="idDown" onclick="MoveUp($('idConstantView'));ViewConstant();SetImg(this,'idConstantView')"
|
|
class="btdoit bt" value="CONSTANTS">
|
|
<INPUT type="button" onclick="FindMyAccounts();" class="btdoit bt" value="Refresh accounts">
|
|
|
|
<DIV>
|
|
<DIV id="idNetworkView" style="display: none">
|
|
<H3>Network connections:</H3>
|
|
<INPUT type="checkbox" id="idUseDirectIP">Run server and use direct IP:<BR>
|
|
IP:<INPUT maxlength="16" id="idIP"> Port:<INPUT maxlength="9" id="idPort"><BR>
|
|
<!--<INPUT type="checkbox" id="idUseIncomeGrayIP">Allow connection users without a direct ip:<BR>-->
|
|
<!--White list nodes (HEX-format):<BR>-->
|
|
<TEXTAREA id="idNodeWhiteList" rows="4" cols="100" style="display: none"> </TEXTAREA>
|
|
<BR>
|
|
|
|
<!--<INPUT type="button" onclick="SetNetworkParams(0)" class="btdoit bt" value="Save">-->
|
|
<INPUT type="button" onclick="SetNetworkParams(1)" class="btdoit bt" value="Save and Restart">
|
|
<HR>
|
|
</DIV>
|
|
|
|
<DIV id="idRemoteView" style="display: none">
|
|
<H3>Remote access:</H3>
|
|
|
|
<table class="form_input keys">
|
|
<tr>
|
|
<td>HTTP port:</td>
|
|
<td><INPUT type="string" id="idHTTPPort" maxlength="6" value="80"></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Password on HTTP:</td>
|
|
<td><INPUT type="string" id="idHTTPPassword"></td>
|
|
</tr>
|
|
</table>
|
|
<BR>
|
|
<!--<INPUT type="button" onclick="SetRemoteParams(0)" class="btdoit bt" value="Save">-->
|
|
<INPUT type="button" onclick="SetRemoteParams(1)" class="btdoit bt" value="Save and Restart">
|
|
<HR>
|
|
</DIV>
|
|
|
|
<DIV id="idConstantView" style="display: none">
|
|
<H3>All constants (only for advanced users):</H3>
|
|
<TEXTAREA id="idConstant" rows="20" cols="110"> </TEXTAREA><BR>
|
|
<BR>
|
|
<INPUT type="button" onclick="SaveConstant(0)" class="btdoit bt" value="Save">
|
|
<INPUT type="button" onclick="SaveConstant(1)" class="btdoit bt" value="Save and Restart">
|
|
<HR>
|
|
</DIV>
|
|
</DIV>
|
|
|
|
|
|
Style:
|
|
<select size="1" id="idSelStyle" onkeyup="SelectStyle();SaveValues()" onchange="SelectStyle();SaveValues()">
|
|
<option value="styleBrown">Brown</option>
|
|
<option value="styleBlue">Blue</option>
|
|
<option value="styleGreen">Green</option>
|
|
<option value="styleDark">Dark</option>
|
|
<option value="styleGray">Gray</option>
|
|
<option value="styleContrast1">Contrast 1</option>
|
|
<option value="styleContrast2">Contrast 2</option>
|
|
<option value="styleContrast3">Contrast 3</option>
|
|
</select>
|
|
|
|
|
|
|
|
</DIV>
|
|
|
|
|
|
|
|
<DIV id="TabSend" style="display: none">
|
|
|
|
<DIV id="idSendList"> </DIV>
|
|
<table class="form_input">
|
|
<tr>
|
|
<td style="min-width: 115px">From account</td>
|
|
<td>
|
|
|
|
<select size="1" id="idAccount" onkeyup="OnEditTransactionFields()" onchange="OnEditTransactionFields()">
|
|
</select>
|
|
|
|
</td>
|
|
</tr>
|
|
<tr><td> </td><td><DIV id="idNameTo" class="smallbold"></DIV></td></tr>
|
|
<tr>
|
|
<td>Pay to</td>
|
|
<td>
|
|
<INPUT style="float: left" type="string" id="idTo" value="" onkeyup="OnEditIdTo()" onchange="OnEditIdTo()"placeholder="Payee (required)" >
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Amount</td>
|
|
<td>
|
|
<INPUT type="number" id="idSumSend" style="color:#1e21cb" value="" step=0 min=0 max=1000000000 onkeyup="OnEditTransactionFields()" onchange="OnEditTransactionFields()">
|
|
<button style="font-family: monospace;" onclick="SetAllSum()">←</button>
|
|
<B id="idCoinName"></B>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Description (optional)</td><td><textarea id="idDescription" rows="4" onkeyup="CheckLengthAccDesription('idDescription',200);OnEditTransactionFields()" onchange="OnEditTransactionFields()"></textarea></td>
|
|
<td><DIV id="idAttach"> </DIV></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
</td>
|
|
<td>
|
|
<INPUT type="button" onclick="ClearTransaction()" class="bsend bt" value="Clear">
|
|
<INPUT type="button" onclick="EditJSONTransaction();SetImg(this,'edit_transaction');" class="bsend bt" value="Edit JSON" id="idDown">
|
|
<INPUT type="button" onclick="SendMoneyBefore()" class="bsend bt" id="idSendButton" value="Send" >
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<DIV id="edit_transaction" style="display: none">
|
|
<textarea id="idTransaction" rows="20" onkeyup="StartEditTransactionJSON()" onchange="StartEditTransactionJSON()"></textarea>
|
|
<BR>
|
|
<INPUT type="button" onclick="SignJSON()" class="btdoit bt" value="Sign JSON" id="idSignJSON">
|
|
<INPUT type="button" onclick="SendMoneyJSON()" class="btdoit bt" value="Send from JSON">
|
|
</DIV>
|
|
|
|
<script>
|
|
function SetAllSum()
|
|
{
|
|
var Item=MapAccounts[$("idAccount").value];
|
|
if(Item)
|
|
$("idSumSend").value=FLOAT_FROM_COIN(Item.Value).toStringF();
|
|
}
|
|
</script>
|
|
|
|
|
|
</DIV>
|
|
|
|
|
|
<DIV id="TabDapps" style="display: none">
|
|
|
|
|
|
<INPUT type="button" onclick="window.Open('./HTML/dapp-edit.html','smart',1240)" class="btdoit btopen bt" id="idOpenSmart" value="Dapps editor">
|
|
|
|
|
|
<BR>
|
|
<DIV id="idPaginationDapps" style="display: block">
|
|
<!--<DIV id="view_header" >DAPPS</DIV><BR>-->
|
|
Search:<INPUT type="search" id="idViewDappsFilter" value="" onchange="CheckNewSearch(DefDapps); ViewCurrent(DefDapps)">
|
|
Category:
|
|
<select size="1" id="idCategory" onchange="ViewCurrent(DefDapps)">
|
|
</select>
|
|
<BR>
|
|
|
|
<INPUT type="button" onclick="ViewBegin(DefDapps)" class="btdoitm bt" value="|<-">
|
|
<INPUT type="button" onclick="ViewPrev(DefDapps)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="number" id="idViewDappNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewCurrent(DefDapps)">
|
|
<INPUT type="button" onclick="ViewNext(DefDapps,MaxDappsID)" class="btdoit bt" value="Next >>">
|
|
<INPUT type="button" onclick="ViewEnd(DefDapps,MaxDappsID)" class="btdoitm bt" value="->|">
|
|
|
|
<table id="grid_dapps_all" class="grid">
|
|
<tr>
|
|
<th id="(RetNumDapp(Item))" class="num">ID</th>
|
|
<th id="(RetOpenDapps(Item,0,0))" class="accname">Name</th>
|
|
<th id="Item.Description" class="code">Description</th>
|
|
<th id="(RetCategory(Item))" class="">Category</th>
|
|
|
|
<th id="(RetBaseAccount(Item))" class="num">Base Account</th>
|
|
|
|
<th id="(RetHistoryAccount(Item,'Owner'))" class="num">Owner</th>
|
|
|
|
<th id="RetBool(Item.TokenGenerate)" class="bool">Token generate</th>
|
|
<!--<th id="Item.ISIN" class="num">ISIN</th>-->
|
|
<th id="(RetOpenBlock(Item.BlockNum,1))" class="num">Block Num</th>
|
|
|
|
<!--<th id="GetHexFromArr(Item.SumHash)" class="hash">SumHash</th>-->
|
|
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
<INPUT type="button" onclick="ViewPrev(DefDapps)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="button" onclick="ViewNext(DefDapps,MaxDappsID)" class="btdoit bt" value="Next >>">
|
|
|
|
</DIV>
|
|
|
|
|
|
</DIV>
|
|
|
|
|
|
<DIV id="TabExplorer" style="display: none">
|
|
|
|
<INPUT type="button" onclick="window.Open('./HTML/stat.html','counters',920)" class="btdoit btopen bt" id="idCounters" value="Counters">
|
|
<INPUT type="button" onclick="window.Open('./HTML/chains.html','chains',1240,600)" class="btdoit btopen bt" id="idChains" value="Chains">
|
|
<INPUT type="button" onclick="window.Open('./HTML/console.html','console',1240)" class="btdoit btopen bt" id="idConsole" value="Console">
|
|
<INPUT type="button" onclick="window.Open('./HTML/monitor.html','monitor',1200)" class="btdoit btopen bt" id="idMonitor" value="Monitor">
|
|
|
|
<INPUT type="button" onclick="window.Open('./HTML/network.html','network',1200)" class="btdoit btopen bt" id="idNetwork" value="Network">
|
|
|
|
|
|
<BR>
|
|
<INPUT type="button" onclick="ViewCurrent(DefAccounts,1,this);" class="btdoit bt btexlporer" id="idDown" value="Accounts">
|
|
<INPUT type="button" onclick="ViewCurrent(DefBlock,1,this)" class="btdoit bt btexlporer" id="idDown" value="Blocks & Tr">
|
|
<INPUT type="button" onclick="ViewCurrent(DefActs,1,this)" class="btdoit bt btexlporer" id="idDown" value="Accounts acts">
|
|
<INPUT type="button" onclick="ViewCurrent(DefHash,1,this)" class="btdoit bt btexlporer" id="idDown" value="Accounts hash">
|
|
<INPUT type="button" onclick="SetVisibleUtil(this)" class="btdoit bt btexlporer" id="idDown" value="Utilites">
|
|
|
|
<script>
|
|
function SetVisibleUtil(This)
|
|
{
|
|
MoveUp($("idUtilView"));
|
|
SetVisibleBlock('idUtilView',!IsVisibleBlock('idUtilView'));
|
|
SetImg(This,'idUtilView');
|
|
}
|
|
</script>
|
|
|
|
|
|
<BR>
|
|
<DIV>
|
|
<DIV id="idPaginationAccount" style="display: none">
|
|
<HR>
|
|
<DIV id="view_header" >Accounts</DIV><BR>
|
|
Search:<INPUT type="search" id="idViewAccountFilter" value="" onchange="CheckNewSearch(DefAccounts); ViewCurrent(DefAccounts)">
|
|
<INPUT type="button" onclick="ViewBegin(DefAccounts)" class="btdoitm bt" value="|<-">
|
|
<INPUT type="button" onclick="ViewPrev(DefAccounts)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="number" id="idViewAccountNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewCurrent(DefAccounts)">
|
|
<INPUT type="button" onclick="ViewNext(DefAccounts,MaxAccID)" class="btdoit bt" value="Next >>">
|
|
<INPUT type="button" onclick="ViewEnd(DefAccounts,MaxAccID)" class="btdoitm bt" value="->|">
|
|
|
|
<table id="grid_accounts_all" class="grid">
|
|
<tr>
|
|
<th id="(RetHistoryAccount(Item))" class="num">ID</th>
|
|
<th id="SUM_TO_STRING(Item.Value)" class="sum smallbold">Amount</th>
|
|
<th id="CurrencyNameItem(Item)" class="cur">Cur</th>
|
|
<th id="Item.Name" class="accname">Name</th>
|
|
<th id="Item.PubKeyStr" class="pubkey">PubKey</th>
|
|
<th id="Item.Value.OperationID" class="num">Operation</th>
|
|
<th id="(RetHistoryAccount(Item,'Adviser'))" class="num">Adviser</th>
|
|
<th id="Item.Value.Smart" class="num">Smart</th>
|
|
<th id="(RetOpenBlock(Item.BlockNumCreate,1))" class="num">Block Num</th>
|
|
<!--<th id="Item.Arr[0].BlockNum" class="num">0</th>-->
|
|
<!--<th id="Item.Arr[1].BlockNum" class="num">1</th>-->
|
|
<!--<th id="Item.Arr[2].BlockNum" class="num">2</th>-->
|
|
<!--<th id="Item.Arr[3].BlockNum" class="num">3</th>-->
|
|
<!--<th id="Item.Arr[4].BlockNum" class="num">4</th>-->
|
|
</tr>
|
|
</table>
|
|
|
|
<INPUT type="button" onclick="ViewPrev(DefAccounts)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="button" onclick="ViewNext(DefAccounts,MaxAccID)" class="btdoit bt" value="Next >>">
|
|
|
|
<BR>
|
|
<B><DIV id="idTotalSum"></DIV></B>
|
|
<BR>
|
|
</DIV>
|
|
|
|
<DIV id="idPaginationBlock" style="display: none">
|
|
<HR>
|
|
<DIV id="view_header" >Blocks<BR></DIV>
|
|
<!--<DIV id="idFilterB">JS:<INPUT type="search" id="idViewBlockFilter" value="" onchange="ViewCurrent(DefBlock)"></DIV>-->
|
|
<INPUT type="button" onclick="ViewBegin(DefBlock)" class="btdoitm bt" value="|<-">
|
|
<INPUT type="button" onclick="ViewPrev(DefBlock)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="number" id="idViewBlockNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewCurrent(DefBlock)">
|
|
<INPUT type="button" onclick="ViewNext(DefBlock,ServerBlockNumDB)" class="btdoit bt" value="Next >>">
|
|
<INPUT type="button" onclick="ViewEnd(DefBlock,ServerBlockNumDB)" class="btdoitm bt" value="->|">
|
|
|
|
<table id="grid_block_all" class="grid">
|
|
<tr>
|
|
|
|
<th id="(RetOpenBlock(Item.BlockNum,Item.TrDataLen))" class="num">Num</th>
|
|
<th id="(DateFromBlock(Item.BlockNum,1))" class="date">Date</th>
|
|
<th id="GetHexFromArr(Item.TreeHash)" class="hash">Data Hash</th>
|
|
<th id="GetHexFromArr(Item.PowHash)" class="hash">PowHash</th>
|
|
<th id="GetHexFromArr(Item.Hash)" class="hash">Block Hash</th>
|
|
<!--<th id="GetHexFromArr(Item.SumHash)" class="hash">SumHash</th>-->
|
|
<th id="Item.TrDataLen" class="num">Bytes</th>
|
|
<th id="Item.Power" class="num">Pow</th>
|
|
<th id="(RetHistoryAccount(Item,'Miner')+'<BR><b>'+Item.MinerName)+'</b>'" class="num">Miner</th>
|
|
|
|
|
|
<!--<th id="GetHexFromArr(Item.Hash1)" class="hash">Hash1</th>-->
|
|
<!--<th id="GetHexFromArr(Item.Hash2)" class="hash">Hash2</th>-->
|
|
|
|
<!--<th id="GetHexFromArr(Item.AddrHash)" class="hash">AddrHash</th>-->
|
|
|
|
<!--<th id="ReadUintFromArr(Item.AddrHash,6)" class="hash">Nonce0</th>-->
|
|
<!--<th id="ReadUintFromArr(Item.AddrHash,12)" class="hash">Nonce1</th>-->
|
|
<!--<th id="ReadUintFromArr(Item.AddrHash,18)" class="hash">Nonce2</th>-->
|
|
|
|
<!--<th id="GetPowPower(Item.Hash1)" class="num">Pow1</th>-->
|
|
<!--<th id="GetPowPower(Item.Hash2)" class="num">Pow2</th>-->
|
|
</tr>
|
|
</table>
|
|
|
|
<INPUT type="button" onclick="ViewPrev(DefBlock)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="button" onclick="ViewNext(DefBlock,ServerBlockNumDB)" class="btdoit bt" value="Next >>">
|
|
|
|
</DIV>
|
|
|
|
|
|
<DIV id="idPaginationAct" style="display: none">
|
|
<HR>
|
|
<DIV id="view_header" >Accounts acts<BR></DIV>
|
|
<INPUT type="button" onclick="ViewBegin(DefActs)" class="btdoitm bt" value="|<-">
|
|
<INPUT type="button" onclick="ViewPrev(DefActs)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="number" id="idViewActNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewCurrent(DefActs)">
|
|
<INPUT type="button" onclick="ViewNext(DefActs,MaxActNum)" class="btdoit bt" value="Next >>">
|
|
<INPUT type="button" onclick="ViewEnd(DefActs,MaxActNum)" class="btdoitm bt" value="->|">
|
|
|
|
|
|
<table id="grid_acts_all" class="grid">
|
|
<tr>
|
|
<th id="Item.Num" class="num">Num</th>
|
|
<th id="Item.ID" class="num">Account</th>
|
|
<th id="Item.Mode">Mode</th>
|
|
<th id="(RetOpenBlock(Item.BlockNum,1))" class="num">Block</th>
|
|
<th id="Item.TrNum" class="num">TrNum</th>
|
|
<th id="(escapeHtml(DateFromBlock(Item.BlockNum,1)))" class="date">Date</th>
|
|
|
|
<th id="Item.PrevValue.OperationID" class="num">Prev. Operation</th>
|
|
<th id="SUM_TO_STRING(Item.PrevValue)" class="sum">Prev. amount</th>
|
|
<th id="Item.PrevValue.NextPos" class="num">Prev. History</th>
|
|
</tr>
|
|
</table>
|
|
<INPUT type="button" onclick="ViewPrev(DefActs)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="button" onclick="ViewNext(DefActs,MaxActNum)" class="btdoit bt" value="Next >>">
|
|
|
|
</DIV>
|
|
|
|
<DIV id="idPaginationHash" style="display: none">
|
|
<HR>
|
|
<DIV id="view_header" >Accounts hash<BR></DIV>
|
|
<INPUT type="button" onclick="ViewBegin(DefHash)" class="btdoitm bt" value="|<-">
|
|
<INPUT type="button" onclick="ViewPrev(DefHash)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="number" id="idViewHashNum" style="text-align: center" value="0" min=0 max=1000000000 onchange="ViewCurrent(DefHash)">
|
|
<INPUT type="button" onclick="ViewNext(DefHash,CONFIG_DATA.MAX_ACCOUNT_HASH)" class="btdoit bt" value="Next >>">
|
|
<INPUT type="button" onclick="ViewEnd(DefHash,CONFIG_DATA.MAX_ACCOUNT_HASH)" class="btdoitm bt" value="->|">
|
|
|
|
<table id="grid_hash_all" class="grid">
|
|
<tr>
|
|
<th id="Item.Num" class="num">Num</th>
|
|
<th id="(RetOpenBlock(Item.BlockNum,3))" class="">Block</th>
|
|
<th id="(escapeHtml(DateFromBlock(Item.BlockNum,1)))" class="date">Date</th>
|
|
<th id="GetHexFromArr(Item.AccHash)" class="code">AccHash</th>
|
|
<th id="GetHexFromArr(Item.SumHash)" class="code">SumHash</th>
|
|
<th id="Item.AccountMax" class="num">AccountMax</th>
|
|
<th id="Item.SmartCount" class="num">SmartCount</th>
|
|
<th id="GetHexFromArr(Item.SmartHash)" class="code">SmartHash</th>
|
|
<th id="GetHexFromArr(Item.Hash100)" class="code">Hash100</th>
|
|
</tr>
|
|
</table>
|
|
<INPUT type="button" onclick="ViewPrev(DefHash)" class="btdoit bt" value="<< Prev">
|
|
<INPUT type="button" onclick="ViewNext(DefHash,CONFIG_DATA.MAX_ACCOUNT_HASH)" class="btdoit bt" value="Next >>">
|
|
</DIV>
|
|
|
|
<DIV id="idUtilView" style="display: none">
|
|
<HR>
|
|
<DIV id="view_header" >UTILITES<BR></DIV>
|
|
|
|
Number of blocks in depth:<INPUT type="number" id="idBlockCount" onchange = "SaveValues()" value="0"><BR>
|
|
<INPUT type="button" onclick="RestartNode()" class="bt btdoit btlong" value="Restart node">
|
|
<INPUT type="button" onclick="RewriteTransactions()" class="bt btdoit btlong" value="Rewrite transactions">
|
|
<INPUT type="button" onclick="TruncateBlockChain()" class="btdoit btlong bt" value="Truncate chain">
|
|
<INPUT type="button" onclick="ClearDataBase();InitArrInfo();" class="btdoit btlong bt" value="Clear DataBase <!>">
|
|
|
|
|
|
|
|
|
|
<DIV id="idDevelopService2">
|
|
<INPUT type="button" onclick="CleanChain()" class="bt btdoit btlong" value="Clean chain">
|
|
<BR>
|
|
<textarea id="idRunText" rows="8" cols="98" autofocus></textarea>
|
|
<BR>
|
|
<INPUT type="button" onclick="SetRun()" class="bt btdoit" value="Set run">
|
|
</DIV>
|
|
|
|
<BR>
|
|
|
|
</DIV>
|
|
</DIV>
|
|
|
|
</DIV>
|
|
|
|
|
|
|
|
<BR>
|
|
<DIV id="idServerBlock" style="width: 99.5%">
|
|
<HR>
|
|
Log from node:
|
|
<DIV id="idServerLog"></DIV><BR>
|
|
</DIV>
|
|
|
|
|
|
<FORM id="idBlockPasswordSet" style="display: none">
|
|
<H3 align="center">Enter new password:</H3>
|
|
<table class="password" id="idTablePassword1">
|
|
<tr style="display: none">
|
|
<td><DIV>Login:</DIV></td><td><INPUT type="string" id="Login1" value=""></td>
|
|
</tr>
|
|
<tr>
|
|
<td><DIV>Password:</DIV></td><td><INPUT type="password" autocomplete="WalletPassword" id="idPassword1" value=""></td>
|
|
</tr>
|
|
<tr>
|
|
<td><DIV>Repeat:</DIV></td><td><INPUT type="password" autocomplete="WalletPassword" id="idPassword2" onkeyup="" value=""></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td></td>
|
|
<td><INPUT type="button" onclick="SetPassword()" class="bt" value="Set">
|
|
<INPUT type="button" onclick="CancelSetPassword()" class="bt" value="Cancel"></td>
|
|
</tr>
|
|
|
|
</table>
|
|
</FORM>
|
|
<FORM id="idBlockPasswordGet" style="display: none">
|
|
<H3 align="center">Enter your password:</H3>
|
|
<table class="password" id="idTablePassword2">
|
|
<tr style="display: none">
|
|
<td><DIV>Login:</DIV></td><td><INPUT type="string" id="Login2" value=""></td>
|
|
</tr>
|
|
<tr>
|
|
<td><DIV>Password:</DIV></td><td><INPUT type="password" autocomplete="WalletPassword" id="idPasswordGet" value=""></td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td><INPUT type="button" onclick="SetPassword()" class="bt" value="Set">
|
|
<INPUT type="button" onclick="CancelSetPassword()" class="bt" value="Cancel"></td>
|
|
</tr>
|
|
</table>
|
|
</FORM>
|
|
|
|
|
|
|
|
<DIV id="idBlockOnSend" style="display: none">
|
|
<DIV align="center">
|
|
Send <B id="idOnSendText"></B><BR>
|
|
<button onclick="SendMoney2()" id="idBtOnSend" class="radius">Send</button>
|
|
<button onclick='SetVisibleBlock("idBlockOnSend",0);' class="radius">Cancel</button>
|
|
|
|
<DIV align="left">
|
|
<DIV id="idCheckOnSend"><input type="checkbox" id="idWhiteOnSend"/> Add this account to white list</DIV>
|
|
</DIV>
|
|
</DIV>
|
|
</DIV>
|
|
|
|
|
|
<audio style="visibility: hidden;" controls="controls" id="sound_coin">
|
|
<source src="coin.mp3" type="audio/mpeg"/>
|
|
</audio>
|
|
<audio style="visibility: hidden;" controls="controls" id="sound_err">
|
|
<source src="click.mp3" type="audio/mpeg"/>
|
|
</audio>
|
|
|
|
|
|
</DIV>
|
|
|
|
</DIV>
|
|
</body>
|
|
</html>
|
|
|
|
<DIV id="idStableScroll" align='center'>
|
|
<A href="https://terafoundation.org/?utm_source=full_node&utm_medium=link&utm_campaign=wallet">Web</A>
|
|
<A href="https://bitcointalk.org/index.php?topic=4573801.0">ANN</A>
|
|
<A href="https://twitter.com/terafoundation">Twitter</A>
|
|
<A href="https://t.me/terafoundation">Telegram</A>
|
|
<A href="https://discord.gg/CvwrbeG">Discord</A>
|
|
<A href="https://jq.qq.com/?_wv=1027&k=5KpN5fw">QQ</A>
|
|
<!--progr76@gmail.com-->
|
|
</DIV>
|
|
|