2019-04-05 10:13:44 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< title > TERA Light< / title >
< link rel = "shortcut icon" href = "./tera.ico" type = "image/vnd.microsoft.icon" >
< link rel = "stylesheet" type = "text/css" href = "./CSS/wallet.css" >
< script type = "text/javascript" src = "./JS/coinlib.js" > < / script >
< script type = "text/javascript" src = "./JS/client.js" > < / script >
< script type = "text/javascript" src = "./JS/sha3.js" > < / script >
< script type = "text/javascript" src = "./JS/crypto-client.js" > < / script >
< script type = "text/javascript" src = "./JS/terahashlib.js" > < / script >
< script type = "text/javascript" src = "./JS/wallet-web.js" > < / script >
< script type = "text/javascript" src = "./JS/wallet-lib.js" > < / script >
< script type = "text/javascript" src = "./JS/diagram.js" > < / script >
<!-- <script type="text/javascript" src="./JS/sign - lib - min.js"></script> -->
< script >
// window.WEBWALLET=1;
var PubKeyStr;
var NumAccountList=0;
//Pagination
var SaveIdArr=["idAccount","idTo","idSumSend","idDescription","idCurTabName","idPubKey","idPrivKey","idViewBlockNum","idViewAccountNum","idViewDappNum"];
var CONFIG_DATA={};
CONFIG_DATA={PRICE_DAO:{NewAccount:10}};
var CountViewRows=20;
var DefAccounts={BlockName:"idPaginationAccount", NumName:"idViewAccountNum", TabName:"explorer_accounts",APIName:"GetAccountList"};
var DefBlock={BlockName:"idPaginationBlock", NumName:"idViewBlockNum", TabName:"explorer_blocks",APIName:"GetBlockList"};
var DefDapps={BlockName:"idPaginationDapps", NumName:"idViewDappNum", TabName:"dapps_list",APIName:"GetDappList",CountViewRows:10};
function SetImg() {};
window.onload=function()
{
LoadSignLib();
2019-04-07 15:09:59 +00:00
if(localStorage["NETWORK"] || IsLocalClient())
2019-04-05 10:13:44 +00:00
{
OnLoad();
}
else
{
GetData("/GetCurrentInfo",{}, function (Data)
{
if(Data & & Data.result)
{
localStorage["NETWORK"]=Data.NETWORK;
console.log("Default network: "+Data.NETWORK);
OnLoad();
}
});
}
}
function OnLoad()
{
if(localStorage["NETWORK"])
NETWORK=localStorage["NETWORK"];
LoadValues();
StartWebWallet();
UpdatesExplorerData();
UpdatesAccountsData();
setInterval(UpdatesExplorerData,1000);
setInterval(UpdatesAccountsData,1000);
DoStableScroll();
setTimeout(SetVisibleItemsKeys,500);
//COMMON MOUSE MOVING
window.onmousemove = function(event)
{
SetDiagramMouseX(event);
}
if(window.location.hash)
{
var LocationPath=window.location.hash.substr(1);
if(LocationPath)
{
SelectTab(LocationPath);
}
}
}
function ChangeNetwork()
{
if(NETWORK==="TERA-TEST2")
{
NETWORK="TERA-MAIN";
}
else
{
NETWORK="TERA-TEST2";
}
localStorage["NETWORK"]=NETWORK;
StartWebWallet();
UpdatesExplorerData();
UpdatesAccountsData();
}
function OnFindServer()
{
if(!MainServer)
{
SetStatus("Server not found");
delete localStorage["MainServer"];
return;
}
localStorage["MainServer"]=JSON.stringify(MainServer);//for use in dapp
//currency fill
FillCurrencyAsync("idAccountCur");
}
function LoadValues()
{
if(LoadValuesByArr(SaveIdArr))
{
//SetVisibleTab();
}
}
function SaveValues()
{
SaveValuesByArr(SaveIdArr);
}
function ViewDapps()
{
ViewCurrent(DefDapps);
}
< / script >
< script >
//TAB TAB
var TabArr=[{name:"TabAccounts"},{name:"TabSend"},{name:"TabDapps"}, {name:"TabExplorer"},{name:"TabLogo"}];
function SelectTab(name)
{
SetStatus("");
$("idCurTabName").value=name;
SetVisibleTab();
SaveValues();
OnSelectTab(name);
window.location.hash="#"+name;
}
function OnSelectTab(name)
{
if(name==="TabDapps")
{
ViewDapps();
}
}
function SetVisibleTab()
{
var CurTabName=$("idCurTabName").value;
if(!CurTabName || CurTabName==="undefined")
CurTabName=TabArr[0].name;
var str;
for (var i=0;i< TabArr.length ; i + + )
{
var name=TabArr[i].name;
var Item=$(name);
if(!Item)
continue;
if(CurTabName===name)
{
Item.style.display = 'block';
str="current bttab"
}
else
{
Item.style.display = 'none';
str="bttab"
}
var ItemM=$("M"+name);
if(ItemM)
{
ItemM.className=str;
}
}
}
< / script >
< script >
//CONFIG
var FirstAccountsData=1;
function UpdatesAccountsData()
{
GetData("/GetAccountListByKey",{Key:$("idPubKey").value,AllData:FirstAccountsData}, function (Data,responseText)
{
if(!Data || !Data.result)
return;
FirstAccountsData=0;
NumAccountList=Data.NumAccountList;
SetAccountsData(Data,responseText);
});
}
function IsPrivateMode()
{
var PrivKeyStr=$("idPrivKey").value;
if(PrivKeyStr & & PrivKeyStr.length===64)
return 1;
else
return 0;
}
function SetVisibleItemsKeys(EditFlag,bOpenEdit)
{
if(bOpenEdit)
{
$("idPrivKeyEdit").value=$("idPrivKey").value;
}
SetPubKey(EditFlag);
var StrNo="none",StrYes="table-row";
SetVisibleBlock("WalRow1",!EditFlag?StrYes:StrNo);
SetVisibleBlock("WalRow2",EditFlag?StrYes:StrNo);
if($("idShowPubKey").checked)
SetVisibleBlock("WalRow3",EditFlag?StrYes:StrNo);
else
SetVisibleBlock("WalRow3","none");
SetVisibleBlock("WalRow4",EditFlag?StrYes:StrNo);
if(!EditFlag)
{
var Str;
if(!$("idPrivKey").value)
{
if($("idPubKey").value)
Str="Wallet in read mode. Using Public key.";
else
Str="Key not set. Pls, press edit and generate key ->";
}
else
{
Str="OK. Using Private key.";
}
$("idPrivKeyButton").innerHTML=Str;
}
if(EditFlag)
{
$("idPrivKeyEdit").focus();
}
}
function SetPubKey(EditFlag)
{
var StrPrivKey;
if(EditFlag)
StrPrivKey=$("idPrivKeyEdit").value.trim();
else
StrPrivKey=$("idPrivKey").value.trim();
if(IsHexStr(StrPrivKey))
{
if(StrPrivKey.length===64)
{
var PrivKey=GetArrFromHex(StrPrivKey);
$("idPubKey").value=GetHexFromArr(SignLib.publicKeyCreate(PrivKey,1));
}
else
{
$("idPubKey").value=StrPrivKey;
}
}
else
{
$("idPubKey").value="";
}
}
function OnPrivKeyNew()
{
var arr = new Uint8Array(32);
window.crypto.getRandomValues(arr);
var Str=GetHexFromArr(sha3(arr));
$("idPrivKeyEdit").value=Str;
SetPubKey(1);
}
function OnPrivKeyOK()
{
$("idPrivKey").value=$("idPrivKeyEdit").value;
SetVisibleItemsKeys(0);
SaveValues();
}
function OpenWallet()
{
if($("idPrivKey").value)
return;
}
//Accounts
function ViewNewAccount()
{
SetVisibleBlock("idAccountEdit",1);
$("idAccountName").focus();
}
function OnSetAccount(FlagOK)
{
if(FlagOK)
{
if(!$("idPrivKey").value)
{
OnPrivKeyNew();
OnPrivKeyOK();
}
var Name=$("idAccountName").value;
var Smart=0;
var Currency=ParseNum($("idAccountCur").value);
if(!Name)
{
SetError("Enter the account name.");
return;
}
SetStatus("Calculate Tx, wait pls ...");
SendTrCreateAccWait(Currency,$("idPubKey").value,Name,Smart);
}
SetVisibleBlock("idAccountEdit",0)
}
function CancelCreateAccount()
{
SetVisibleBlock("idAccountEdit",0)
}
< / script >
< script >
//EXPLORER
function UpdatesExplorerData()
{
var WasSendTr=0;
for(var key in MapSendTransaction)
{
var Item=MapSendTransaction[key];
if(!Item.WasProcess & & !Item.final)
{
WasSendTr=1;
break;
}
}
GetData("GetCurrentInfo",{Diagram:IsVisibleBlock("idStatBlock")?1:0,ArrLog:WasSendTr}, function (Data)
{
if(!Data || !Data.result)
return;
SetExplorerData(Data);
SetBlockChainConstant(Data);
var arr=Data.arr;
for(var i=0;arr & & i< arr.length ; i + + )
{
var ItemServer=arr[i];
var ItemClient=DiagramMap[ItemServer.name];
if(!ItemClient || ItemClient.Extern)
continue;
ItemClient.arr=ItemServer.arr;
ItemClient.AvgValue=ItemServer.AvgValue;
ItemClient.steptime=ItemServer.steptime;
ItemClient.fillStyle="white";
DrawDiagram(ItemClient);
}
});
}
var FirstCallDiagram=1;
function SetExplorerData(Data)
{
if(!Data || !Data.result)
return;
CONFIG_DATA=Data;
window.FIRST_TIME_BLOCK=Data.FIRST_TIME_BLOCK;
if(FirstCallDiagram)
{
ViewEnd(DefAccounts,CONFIG_DATA.MaxAccID,1);
ViewEnd(DefBlock,CONFIG_DATA.MaxNumBlockDB,1);
InitDiagram();
}
FirstCallDiagram=0;
var StrVersion=" 0."+Data.VersionNum;
var Str="Blockchain height: < B > "+Data.MaxNumBlockDB+"< / B > Current create: < B > "+Data.CurBlockNum+"< / B > Wallet ver:"+"< B > "+StrVersion+"< / B > ";
$("idCurrentBlockNum").innerHTML=Str;
SetArrLog(Data.ArrLog);
}
function SetArrLog(arr)
{
if(!arr)
return;
for(var i=0;i< arr.length ; i + + )
{
var Item=arr[i];
if(!Item.final)
continue;
var TR=MapSendTransaction[Item.key];
if(TR & & !TR.WasProcess & & Item.final)
{
TR.WasProcess=1;
SetStatus(Item.text);
if(Item.text.indexOf("Add to blockchain")>=0)
{
if(TR.Run)
{
TR.Run(TR);
TR.Run=undefined;
}
}
var Account=MapCheckTransaction[Item.key];
if(Account)
{
delete MapCheckTransaction[Item.key];
Account.NextSendTime=0;
}
}
}
CheckSending();
}
< / script >
< script >
//Diagrams
var DiagramArr=
[
{name:"MAX:ALL_NODES",text:"All nodes count",value:0,red:"#1d506b"},
{name:"MAX:HASH_RATE_G",text:"HashRate Gh/s",value:0,red:"#286b16"},
];
function InitDiagram()
{
InitDiagramByArr(DiagramArr,800);
}
function ViewCounters(This)
{
var BlockName="idStatBlock";
var element=$(BlockName);
var bVisible=IsVisibleBlock(BlockName);
if(!bVisible)
MoveUp(element);
SetVisibleBlock(BlockName,!bVisible);
var ResVisible=IsVisibleBlock(BlockName);
if(This & & This.className)
{
This.className=This.className.replace("btpress", "");
if(ResVisible)
This.className+=" btpress";
}
}
< / script >
< script >
//SEND
setInterval(CheckSending,1000);
< / script >
< style >
/*TAB TAB*/
#TabHeader th
{
color: white;
background-color: #22547f;
margin: 0;
padding: 0;
height: 34px;
}
.bttab
{
background-color: #2b372d;
vertical-align: middle;
cursor: pointer;
color: white;
width: 100%;
margin: 0;
padding-top: 7px;
height: 100%;
border: 1px solid white;
}
.bttab:hover
{
color: #ff9749;
}
.current
{
background-color: #4b5e4d;
color:#ff9749;
}
#TabHeader th
{
width: 200px;
}
< / style >
< style >
body
{
background-color: #fffefe;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 13px;
line-height: 1.42857143;
}
.DIAGRAM
{
border-radius: 6px;
width: 800px;
}
table
{
border-collapse: collapse;
width:100%;
max-width: 800px;
margin: 10px;
}
.grid th, .grid td
{
border: 1px solid #777678;
padding: 4px;
}
.grid td
{
width: 60px;
vertical-align:top;
}
button
{
font-family: monospace;
}
button:hover
{
filter: brightness(120%);
cursor: pointer;
}
.openblock
{
padding: 2px;
filter: brightness(120%);
}
.btview
{
background-color: #afb0b7;
border: 1px solid #000;
height: 120px;
width: 150px;
padding-top: 0px;
cursor: pointer;
font-size: large;
}
.btview:hover
{
color: #cb7043;
filter:none;
}
.btpress, .btpress:hover
{
border: 2px solid #000;
color: #9c5335;
filter:none;
}
.btnav
{
font-family: monospace;
height: 32px;
}
.pag_num
{
border-radius: 4px;
height: 26px;
margin: 2px;
}
td
{
font-size: small;
}
td.num
{
text-align: right;
width: 50px;
}
td.sum
{
text-align: right;
font-family: "courier new", "times new roman", monospace;
min-width: 150px;
max-width: 150px;
}
td.cur
{
min-width: 80px;
max-width: 80px;
}
td.date
{
text-align: left;
width: 90px;
font-size: small;
}
td.hash
{
max-width: 113px;
min-width: 113px;
font-family: "courier new", "times new roman", monospace;
font-size: 60%;
align-content: left;
text-align: left;
word-break: break-all;
}
td.pubkey
{
min-width: 195px;
max-width: 195px;
}
.accname
{
width: 180px;
min-width: 140px;
align-content: left;
text-align: left;
word-break: break-all;
}
.dappname
{
width: 140px;
min-width: 140px;
align-content: left;
text-align: left;
word-break: break-all;
}
td.dappdesc
{
width: 180px;
min-width: 180px;
word-break: normal;
}
#idCurrentBlockNum
{
margin: 10px;
height: 20px;
}
.delete
{
position: absolute;
display: none;
}
#idCategory
{
margin: 5px;
}
#idPrivKeyButton, #idPrivKeyEdit, #idPubKey
{
width: 100%;
border: 1px solid #1a2ec1;
background-color: white;
font-family: monospace;
padding: 5px;
}
#idPrivKeyEdit
{
color: darkgreen;
font-weight: 600;
}
#idKeys td:first-child
{
width: 80px;
}
#idKeys td:nth-child(2)
{
width: 520px;
}
#idKeys td:nth-child(3)
{
align-content: left;
text-align: left;
}
.btkey
{
width: 60px;
padding: 5px;
}
.bigs
{
padding: 5px;
}
#idStatus
{
top:0px;
left:10px;
text-align: left;
width:700px;
height: 20px;
color:blue;
}
#idNetwork
{
top:0px;
right:10px;
text-align: center;
width:100px;
height: 20px;
color: #286798;
padding-right: 5px;
}
.logo
{
top:0%;
left:0;
}
< / style >
< / head >
< body >
< DIV align = 'center' >
< DIV align = 'left' style = "min-width:600px;max-width:800px;height: 97vh; border: 0px solid #bfc1c0;" >
< INPUT id = "idCurTabName" value = "TabInfo" style = "display: none" >
< table id = "TabHeader" >
< tr >
< th > < DIV id = "MTabAccounts" onclick = "SelectTab('TabAccounts')" class = "bttab" > 账户< / DIV > < / th >
< th > < DIV id = "MTabSend" onclick = "SelectTab('TabSend')" class = "bttab" > 发送< / DIV > < / th >
< th > < DIV id = "MTabDapps" onclick = "SelectTab('TabDapps')" class = "bttab" > 应用< / DIV > < / th >
< th > < DIV id = "MTabExplorer" onclick = "SelectTab('TabExplorer')" class = "bttab" > 浏览器< / DIV > < / th >
< / tr >
< / table >
< table > < tr > < td > < DIV id = "idStatus" > < / DIV > < / td > < td > < button id = "idNetwork" onclick = "ChangeNetwork()" > < / button > < / td > < / tr > < / table >
< DIV id = "TabLogo" style = "display: block;" >
< DIV align = 'center' style = "width: 800px;" >
< svg version = "1.1" class = "logo" height = "480px" width = "480px" >
< path transform = "scale(2)" d = "m116.5,2.58c0,0 114.5,187.5 114.5,187.5c0,0 -52.5,1 -52.5,1c0,0 -28,-44 -28,-44c0,0 -27,44 -27,44c0,0 -53.5,0 -53.5,0c0,0 54,-89 54,-89c0,0 -33.5,-57 -33.5,-57c0,0 26,-42.5 26,-42.5z" fill = "rgb(0,0,0)" id = "svg_2" stroke = "#000000" / >
< path transform = "scale(2)" d = "m81.6,60.6c0,0 27,44 27,44c0,0 -53,87 -53,87c0,0 -54,-1 -54,-1c0,0 80,-130 80,-130z" fill = "rgb(0,0,0)" id = "svg_3" stroke = "#000000" / >
< / svg >
< / DIV >
< / DIV >
< DIV id = "TabAccounts" style = "display: none;" >
< BR >
< table id = "idKeys" >
< tr id = "WalRow1" >
< td > 钱包:< / td >
< td > < button id = "idPrivKeyButton" onclick = "OpenWallet()" > 已打开钱包: < / button > < / td >
< td > < button onclick = "SetVisibleItemsKeys(1,1)" class = "btkey bigs" > 编辑...< / button > < / td >
< / tr >
< tr id = "WalRow2" style = "display: none" >
< td > 公钥:< / td >
< td > < INPUT type = "search" id = "idPrivKeyEdit" oninput = "SetPubKey(1);" > < / td >
< td >
< button onclick = "OnPrivKeyOK()" class = "btkey bigs" > 确定< / button >
< button onclick = "SetVisibleItemsKeys(0)" class = "btkey bigs" > 取消< / button >
< / td >
< / tr >
< tr id = "WalRow3" style = "display: none" >
< td > 公钥:< / td >
< td > < INPUT type = "search" id = "idPubKey" readonly > < / td >
< td > < / td >
< / tr >
< tr id = "WalRow4" style = "display: none" >
< td > < / td >
< td colspan = "1" > < button class = "bigs" onclick = "OnPrivKeyNew()" > 生成新私钥< / button >
< INPUT type = "checkbox" id = "idShowPubKey" oninput = "SetVisibleItemsKeys(1)" > 显示公钥
<!-- Set password:<INPUT class="bigs" type="search" id="idProtKey"> -->
< / td >
< td > < / td >
< / tr >
< / table >
< INPUT type = "hidden" id = "idPrivKey" >
< BR >
< DIV style = "padding: 0 0 0 10px" >
< table >
< tr >
< td style = "width: 220px" >
< button class = "bigs" onclick = "ConnectWebWallet()" > 重新连接< / button >
< button class = "bigs" onclick = "ViewNewAccount()" > 新建账户< / button >
< / td >
< td >
< DIV id = "idAccountEdit" style = "display: none;" >
名称:< INPUT class = "bigs" style = "width: 180px" type = "string" id = "idAccountName" >
币种:
< select size = "1" id = "idAccountCur" class = "bigs" style = "width: 80px" >
< option value = "0" > TERA< / option >
< / select >
< button onclick = "OnSetAccount(1)" class = "btkey bigs" > 确定< / button >
< button onclick = "OnSetAccount(0)" class = "btkey bigs" > 取消< / button >
< / DIV >
< / td >
< / tr >
< / table >
< / DIV >
< 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" > 数量< / th >
< th id = "CurrencyNameItem(Item)" data-name = "Currency" class = "cur hint" > 币种< / th >
< th id = "Item.Name" data-name = "Account name" class = "accname hint" > 名称< / th >
< th id = "(RetChangeSmart(Item))" data-name = "Smart contract (DApp)" class = "smart hint" > 应用< / th >
< / tr >
< / table >
< B > < DIV id = "idMyTotalSum" > < / DIV > < / B >
< / DIV >
< DIV id = "TabSend" style = "display: none;" >
< DIV id = "idSendList" > < / DIV >
< table class = "form_input" >
< tr >
< td style = "min-width: 115px" > 来自账户< / td >
< td >
< select size = "1" id = "idAccount" oninput = "OnEditTransactionFields(); CheckSending();" >
< / select >
< / td >
< / tr >
< tr > < td > < / td > < td > < DIV id = "idNameTo" class = "smallbold" > < / DIV > < / td > < / tr >
< tr >
< td > 付款给< / td >
< td >
< INPUT style = "float: left" type = "string" id = "idTo" value = "" oninput = "OnEditIdTo()" placeholder = "Payee (required)" >
< / td >
< / tr >
< tr >
< td > 数量< / td >
< td >
< INPUT type = "number" id = "idSumSend" style = "color:#1e21cb" value = "" step = 0 min = 0 max = 1000000000 oninput = "OnEditTransactionFields()" >
2019-04-07 15:09:59 +00:00
< button style = "font-family: monospace;" onclick = "SetAllSum()" > ←< / button >
2019-04-05 10:13:44 +00:00
< B id = "idCoinName" > < / B >
< / td >
< / tr >
< tr >
< td > 备注< / td > < td > < textarea id = "idDescription" rows = "4" oninput = "CheckLengthAccDesription('idDescription',200);OnEditTransactionFields()" > < / textarea > < / td >
< td > < DIV id = "idAttach" > < / DIV > < / td >
< / tr >
< tr >
< td >
< / td >
< td >
< INPUT type = "button" onclick = "ClearTransaction()" class = "bsend bt" value = "清除" >
< INPUT type = "button" onclick = "EditJSONTransaction();SetImg(this,'edit_transaction');" class = "bsend bt" value = "编辑数据" id = "idDown" >
< INPUT type = "button" onclick = "SendMoneyBefore()" class = "bsend bt" id = "idSendButton" value = "发送" >
< / 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 = "签名数据" id = "idSignJSON" >
< INPUT type = "button" onclick = "SendMoneyJSON()" class = "btdoit bt" value = "JSON发送" >
< / DIV >
< script >
function SetAllSum()
{
var Item=MapAccounts[$("idAccount").value];
if(Item)
$("idSumSend").value=FLOAT_FROM_COIN(Item.Value).toStringF();
}
< / script >
< / DIV >
< DIV id = "TabHistory" style = "display: none;" >
< / DIV >
< DIV id = "TabDapps" style = "display: none" >
< BR >
< DIV id = "idPaginationDapps" style = "display: block" >
<!-- 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,CONFIG_DATA.MaxDappsID)" class = "btdoit bt" value = "Next >>" >
< INPUT type = "button" onclick = "ViewEnd(DefDapps,CONFIG_DATA.MaxDappsID)" class = "btdoitm bt" value = "->|" >
< table id = "dapps_list" class = "grid" >
< tr >
< th id = "(RetNumDapp(Item))" class = "num" > ID< / th >
< th id = "(RetOpenDapps(Item,0,0))" class = "dappname" > 名称< / th >
< th id = "Item.Description" class = "code dappdesc" > 描述< / th >
< th id = "(RetCategory(Item))" class = "" > 种类< / th >
< th id = "(RetBaseAccount(Item))" class = "num" > 基础账户< / th >
< th id = "Item.Owner" class = "num" > 拥有者< / th >
< th id = "RetBool(Item.TokenGenerate)" class = "bool" > 代币生成< / th >
<!-- <th id="Item.ISIN" class="num">ISIN</th> -->
< th id = "(RetOpenBlock(Item.BlockNum,1))" class = "num" > 区块高度< / th >
< / tr >
< / table >
< / DIV >
< / DIV >
< DIV id = "TabExplorer" align = "center" style = "display: none;" >
<!-- <iframe src="/explorer.html" style="width: 100%;height: 100vh"></iframe> -->
< DIV id = "idCurrentBlockNum" > < / DIV >
< button onclick = "ViewCurrent(DefAccounts,1,this);" class = "btview" > 账户< / button >
< button onclick = "ViewCurrent(DefBlock,1,this)" class = "btview" > 区块和交易< / button >
<!-- <button onclick="ViewCurrent(DefBlock,1,this)" class="btview">DApps</button> -->
< button onclick = "ViewCounters(this)" class = "btview" > 算力情况< / button >
< DIV >
< DIV id = "idPaginationAccount" style = "display: none" >
< BR >
< button onclick = "ViewBegin(DefAccounts)" class = "btnav" > |< - < / button >
< button onclick = "ViewPrev(DefAccounts)" class = "btnav" > < < 上一页 < / button >
< INPUT type = "number" class = "pag_num" id = "idViewAccountNum" style = "text-align: center" value = "0" min = 0 onchange = "ViewCurrent(DefAccounts)" >
< button onclick = "ViewNext(DefAccounts,CONFIG_DATA.MaxAccID)" class = "btnav" > 下一页 >>< / button >
< button onclick = "ViewEnd(DefAccounts,CONFIG_DATA.MaxAccID)" class = "btnav" > ->|< / button >
< table id = "explorer_accounts" class = "grid" >
< tr >
< th id = "(RetHistoryAccount(Item))" class = "num" > ID< / th >
< th id = "SUM_TO_STRING(Item.Value)" class = "sum" > 数量< / th >
< th id = "CurrencyNameItem(Item)" class = "cur" > 币种< / th >
< th id = "Item.Name" class = "accname" > 名称< / th >
< th id = "Item.PubKeyStr" class = "hash pubkey" > 公钥< / th >
< th id = "Item.Value.OperationID" class = "num" > 操作< / th >
< th id = "Item.Value.Smart" class = "num" > 应用< / th >
< th id = "(RetOpenBlock(Item.BlockNumCreate,1))" class = "num" > 区块高度< / th >
< / tr >
< / table >
< / DIV >
< DIV id = "idPaginationBlock" style = "display: none" >
< BR >
< DIV > Blocks< BR > < / DIV >
< button onclick = "ViewBegin(DefBlock)" class = "btnav" > |< - < / button >
< button onclick = "ViewPrev(DefBlock)" class = "btnav" > < < Prev < / button >
< INPUT type = "number" class = "pag_num" id = "idViewBlockNum" style = "text-align: center" value = "0" min = 0 onchange = "ViewCurrent(DefBlock)" >
< button onclick = "ViewNext(DefBlock,CONFIG_DATA.MaxNumBlockDB)" class = "btnav" > Next >>< / button >
< button onclick = "ViewEnd(DefBlock,CONFIG_DATA.MaxNumBlockDB)" class = "btnav" > ->|< / button >
< table id = "explorer_blocks" 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 = "Item.TrDataLen" class = "num" > Bytes< / th >
< th id = "Item.Power" class = "num" > Pow< / th >
< th id = "Item.Miner" class = "num" > Miner< / th >
< / tr >
< / table >
< / DIV >
< DIV id = "idStatBlock" style = "display: none" >
< BR >
< DIV id = "diagr_content" align = 'center' >
< DIV id = "diargams" align = 'center' >
< / DIV >
< / DIV >
< / DIV >
< / DIV >
< BR >
< / DIV >
< / DIV >
< 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 >
< DIV id = "idStableScroll" align = 'center' >
< A href = "https://terafoundation.org/" > 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://web.telegram.org/#/im?p=@terafoundation" > Telegram< / A >
< A href = "https://discord.gg/CvwrbeG" > Discord< / A >
<!-- <A href="https://github.com/terafoundation/wallet">GitHub</A> -->
<!-- progr76@gmail.com -->
< / DIV >
< / DIV >
< / body >
< / html >