Sat Jul 20 14:20:10 CST 2019 Source Update...
This commit is contained in:
		@@ -20,6 +20,7 @@ body {
 | 
				
			|||||||
main {
 | 
					main {
 | 
				
			||||||
	max-width: 1200px;
 | 
						max-width: 1200px;
 | 
				
			||||||
	margin: 0 auto;
 | 
						margin: 0 auto;
 | 
				
			||||||
 | 
						padding-top: 100px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*,
 | 
					*,
 | 
				
			||||||
@@ -207,9 +208,14 @@ textarea {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.header {
 | 
					.header {
 | 
				
			||||||
 | 
						position: fixed;
 | 
				
			||||||
 | 
						z-index: 100;
 | 
				
			||||||
 | 
						width: 100%;
 | 
				
			||||||
	background: linear-gradient(270deg, #3D4C61 0%, #445368 100%);
 | 
						background: linear-gradient(270deg, #3D4C61 0%, #445368 100%);
 | 
				
			||||||
	color: #fff;
 | 
						color: #fff;
 | 
				
			||||||
	box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
 | 
						box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.15);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*position: fixed;    top: 0;*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.header__wrapper {
 | 
					.header__wrapper {
 | 
				
			||||||
	display: flex;
 | 
						display: flex;
 | 
				
			||||||
@@ -1738,6 +1744,9 @@ td.hash {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@media (min-width: 768px) {
 | 
					@media (min-width: 768px) {
 | 
				
			||||||
 | 
						.main {
 | 
				
			||||||
 | 
							padding-top: 60px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	.main-logo {
 | 
						.main-logo {
 | 
				
			||||||
		width: 125px;
 | 
							width: 125px;
 | 
				
			||||||
		height: 30px;
 | 
							height: 30px;
 | 
				
			||||||
@@ -1845,12 +1854,11 @@ td.hash {
 | 
				
			|||||||
		position: absolute;
 | 
							position: absolute;
 | 
				
			||||||
		font-size: 14px;
 | 
							font-size: 14px;
 | 
				
			||||||
		line-height: 16px;
 | 
							line-height: 16px;
 | 
				
			||||||
		bottom: -38px;
 | 
							right: 165px;
 | 
				
			||||||
		right: 7px;
 | 
					 | 
				
			||||||
		width: 60px;
 | 
							width: 60px;
 | 
				
			||||||
		border-radius: 3px;
 | 
							border-radius: 3px;
 | 
				
			||||||
		background: transparent;
 | 
							background: transparent;
 | 
				
			||||||
		color: var(--blue-grey);
 | 
							color: rgba(255, 255, 255, 0.6);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	.white-select {
 | 
						.white-select {
 | 
				
			||||||
		display: block;
 | 
							display: block;
 | 
				
			||||||
@@ -2107,6 +2115,13 @@ td.hash {
 | 
				
			|||||||
} 
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (min-width: 768px) and (max-width: 800px) {
 | 
				
			||||||
 | 
						.header__nav {
 | 
				
			||||||
 | 
							margin-right: 35px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@media (max-width: 960px) {
 | 
					@media (max-width: 960px) {
 | 
				
			||||||
	/* .prod-card--line:hover {
 | 
						/* .prod-card--line:hover {
 | 
				
			||||||
@@ -2211,7 +2226,7 @@ td.hash {
 | 
				
			|||||||
		margin-left: 0;
 | 
							margin-left: 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	.header__right select {
 | 
						.header__right select {
 | 
				
			||||||
		right: 37px;
 | 
							right: 207px;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	.send-page__send-btn-wrp {
 | 
						.send-page__send-btn-wrp {
 | 
				
			||||||
		max-width: 100%;
 | 
							max-width: 100%;
 | 
				
			||||||
@@ -2438,7 +2453,7 @@ td.hash {
 | 
				
			|||||||
		margin-right: 18px;
 | 
							margin-right: 18px;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	.header__right select {
 | 
						.header__right select {
 | 
				
			||||||
		right: 10px;
 | 
							right: 190px;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	.accounts-info__add .key-field {
 | 
						.accounts-info__add .key-field {
 | 
				
			||||||
		min-width: 920px;
 | 
							min-width: 920px;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1035,7 +1035,7 @@ function RetHistoryAccount(Item,Name)
 | 
				
			|||||||
    if(Num < 1)
 | 
					    if(Num < 1)
 | 
				
			||||||
        return "" + Num;
 | 
					        return "" + Num;
 | 
				
			||||||
    var Str;
 | 
					    var Str;
 | 
				
			||||||
    if(IsLocalClient())
 | 
					    if(UseInnerPage())
 | 
				
			||||||
        Str = "<a class='olink' target='_blank' onclick='OpenHistoryPage(" + Num + ")'>" + Num + "</a>";
 | 
					        Str = "<a class='olink' target='_blank' onclick='OpenHistoryPage(" + Num + ")'>" + Num + "</a>";
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        Str = "<a class='olink' target='_blank' href='./history.html#" + Num + "'>" + Num + "</a>";
 | 
					        Str = "<a class='olink' target='_blank' href='./history.html#" + Num + "'>" + Num + "</a>";
 | 
				
			||||||
@@ -1052,7 +1052,7 @@ function RetBaseAccount(Item)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function ViewTransaction(BlockNum)
 | 
					function ViewTransaction(BlockNum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(IsLocalClient())
 | 
					    if(UseInnerPage())
 | 
				
			||||||
        OpenBlockViewerPage(BlockNum);
 | 
					        OpenBlockViewerPage(BlockNum);
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        window.Open('./blockviewer.html#' + BlockNum, 'viewer', 800, 800);
 | 
					        window.Open('./blockviewer.html#' + BlockNum, 'viewer', 800, 800);
 | 
				
			||||||
@@ -1966,3 +1966,20 @@ function Right(Str,count)
 | 
				
			|||||||
    else
 | 
					    else
 | 
				
			||||||
        return Str.substr(0, Str.length);
 | 
					        return Str.substr(0, Str.length);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function UseInnerPage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if(isMobile() && !IsLocalClient())
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function isMobile()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,6 +71,11 @@ window.onload = function ()
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        window.attachEvent("onmessage", OnMessage);
 | 
					        window.attachEvent("onmessage", OnMessage);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if(UseInnerPage())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        AddFrame("HistoryPage", "./history.html");
 | 
				
			||||||
 | 
					        AddFrame("BlockViewerPage", "./blockviewer.html");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function OnLoad()
 | 
					function OnLoad()
 | 
				
			||||||
@@ -110,11 +115,13 @@ function OnLoad()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ChangeNetwork()
 | 
					function ChangeNetwork(bStart)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    CONNECT_STATUS = 0;
 | 
					    CONNECT_STATUS = 0;
 | 
				
			||||||
    NETWORK = $("idCurNetwork").value;
 | 
					    NETWORK = $("idCurNetwork").value;
 | 
				
			||||||
    Storage.setItem("NETWORK", NETWORK);
 | 
					    Storage.setItem("NETWORK", NETWORK);
 | 
				
			||||||
 | 
					    if(bStart)
 | 
				
			||||||
 | 
					        StartWebWallet();
 | 
				
			||||||
    ConnectWebWallet();
 | 
					    ConnectWebWallet();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1047,7 +1054,7 @@ function MyToggleList(e)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function OpenHistoryPage(Num)
 | 
					function OpenHistoryPage(Num)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(!IsLocalClient())
 | 
					    if(!UseInnerPage())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        window.open("./history.html#" + Num);
 | 
					        window.open("./history.html#" + Num);
 | 
				
			||||||
        return ;
 | 
					        return ;
 | 
				
			||||||
@@ -1058,7 +1065,7 @@ function OpenHistoryPage(Num)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function OpenBlockViewerPage(Num)
 | 
					function OpenBlockViewerPage(Num)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(!IsLocalClient())
 | 
					    if(!UseInnerPage())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        window.open("./blockviewer.html#" + Num);
 | 
					        window.open("./blockviewer.html#" + Num);
 | 
				
			||||||
        return ;
 | 
					        return ;
 | 
				
			||||||
@@ -1067,6 +1074,17 @@ function OpenBlockViewerPage(Num)
 | 
				
			|||||||
    SendMessage("BlockViewerPage", {BlockNum:Num, FrameName:"idBlockViewerPage"});
 | 
					    SendMessage("BlockViewerPage", {BlockNum:Num, FrameName:"idBlockViewerPage"});
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function AddFrame(name,filename)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    var iframe = document.createElement('iframe');
 | 
				
			||||||
 | 
					    iframe.name = name;
 | 
				
			||||||
 | 
					    iframe.src = filename;
 | 
				
			||||||
 | 
					    iframe.sandbox = "allow-scripts allow-same-origin allow-popups";
 | 
				
			||||||
 | 
					    iframe.id = "id" + name;
 | 
				
			||||||
 | 
					    iframe.style = "display: none";
 | 
				
			||||||
 | 
					    document.getElementsByTagName('body')[0].appendChild(iframe);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function SetVisibleFrame(name,bVisible)
 | 
					function SetVisibleFrame(name,bVisible)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SetVisibleBlock("idMainHeader", !bVisible);
 | 
					    SetVisibleBlock("idMainHeader", !bVisible);
 | 
				
			||||||
@@ -1175,7 +1193,7 @@ function ChangeLang()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function GetNewLangItem()
 | 
					function GetNewLangItem()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ToLog(JSON.stringify(LangMap["ENG"]));
 | 
					    console.log(JSON.stringify(LangMap["ENG"]));
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
var LangMap = {};
 | 
					var LangMap = {};
 | 
				
			||||||
LangMap["ENG"] = {};
 | 
					LangMap["ENG"] = {};
 | 
				
			||||||
@@ -1189,17 +1207,18 @@ LangMap["RUS"] = {"TERA WALLET":"TERA КОШЕЛЕК", "Generate key":"Сген
 | 
				
			|||||||
    "Current create:":"Текущий блок:", "Protocol ver:":"Версия протокола:", "ID: {Item.Num}":"ИД: {Item.Num}", "Token generate":"Генерация токенов",
 | 
					    "Current create:":"Текущий блок:", "Protocol ver:":"Версия протокола:", "ID: {Item.Num}":"ИД: {Item.Num}", "Token generate":"Генерация токенов",
 | 
				
			||||||
    "ACCOUNTS":"СЧЕТА", "SEND":"ПОСЛАТЬ", "DAPPS":"ДАППС", "EXPLORER":"ПРОСМ", "ATTENTION: Before using the wallet, save the private key.":"ВНИМАНИЕ: Перед использованием кошелька сохраните приватный ключ",
 | 
					    "ACCOUNTS":"СЧЕТА", "SEND":"ПОСЛАТЬ", "DAPPS":"ДАППС", "EXPLORER":"ПРОСМ", "ATTENTION: Before using the wallet, save the private key.":"ВНИМАНИЕ: Перед использованием кошелька сохраните приватный ключ",
 | 
				
			||||||
    "Web-site":"Веб-сайт", "Bitcointalk":"Bitcointalk", "Twitter":"Твиттер", "Telegram":"Телеграм", "Discord":"Дискорд", "QQchat":"QQchat",
 | 
					    "Web-site":"Веб-сайт", "Bitcointalk":"Bitcointalk", "Twitter":"Твиттер", "Telegram":"Телеграм", "Discord":"Дискорд", "QQchat":"QQchat",
 | 
				
			||||||
    "Buy/sell/mine TERA":"Купить/Продать", "+ CREATE NEW":"+ СОЗДАТЬ НОВЫЙ", "Confirm Transaction":"Подтверждение транзакции",
 | 
					    "Buy/sell/mine TERA":"Купить/Продать", "+ CREATE NEW":"+ СОЗДАТЬ", "Confirm Transaction":"Подтверждение транзакции", "CREATE DAPPS":"СОЗДАТЬ",
 | 
				
			||||||
    "CREATE DAPPS":"СОЗДАТЬ", "Set pass":"Установить пароль", "Unlock":"Разблокировать", "Entrance to sub-wallet":"Войти в под-кошелек",
 | 
					    "Set pass":"Установить пароль", "Unlock":"Разблокировать", "Entrance to sub-wallet":"Войти в под-кошелек", "Public name":"Публичное имя",
 | 
				
			||||||
    "Public name":"Публичное имя", "Currency":"Валюта", "Pay to:":"Получатель:", "Amount:":"Сумма:", "Description:":"Описание:",
 | 
					    "Currency":"Валюта", "Pay to:":"Получатель:", "Amount:":"Сумма:", "Description:":"Описание:", "Welcome to TERA Wallet":"Добропожаловать в кошелек TERA",
 | 
				
			||||||
    "Welcome to TERA Wallet":"Добропожаловать в кошелек TERA", "Edit your wallet":"Редактирование вашего кошелька", "Key settings":"Задание ключей",
 | 
					    "Edit your wallet":"Редактирование вашего кошелька", "Key settings":"Задание ключей", "KEY SETTINGS":"ЗАДАНИЕ КЛЮЧЕЙ", "Create an account":"Создание счета",
 | 
				
			||||||
    "KEY SETTINGS":"ЗАДАНИЕ КЛЮЧЕЙ", "Create an account":"Создание счета", "Sending coins":"Отправка монет", "Decentralized applications (dApps)":"Децентрализованные приложения (Даппс)",
 | 
					    "Sending coins":"Отправка монет", "Decentralized applications (dApps)":"Децентрализованные приложения (Даппс)", "Secure your wallet":"Безопасность вашего кошелька",
 | 
				
			||||||
    "Secure your wallet":"Безопасность вашего кошелька", "Wallet is secured":"Установлен пароль", "Total":"Всего", "Item.Name":"Item.Name",
 | 
					    "Wallet is secured":"Установлен пароль", "Total":"Всего", "Item.Name":"Item.Name", "You have no accounts yet":"У вас нет ни одного счета",
 | 
				
			||||||
    "You have no accounts yet":"У вас нет ни одного счета", "Wait 10-15 sec":"Ждите 10-15 сек", "Creating your account":"Идет создание вашего счета",
 | 
					    "Wait 10-15 sec":"Ждите 10-15 сек", "Creating your account":"Идет создание вашего счета", "From:":"Отправитель:", "Set a password for protect entry":"Установите пароль для безопасности",
 | 
				
			||||||
    "From:":"Отправитель:", "Set a password for protect entry":"Установите пароль для безопасности", "Enter password to unlock wallet":"Введите пароль для разблокировки кошелька",
 | 
					    "Enter password to unlock wallet":"Введите пароль для разблокировки кошелька", "From ID:":"Отправитель:", "Pay to ID:":"Получатель:",
 | 
				
			||||||
    "From ID:":"Отправитель:", "Pay to ID:":"Получатель:", "Account":"Счет", "Owner":"Владелец", "Block num":"Ном блока", "Private key (secret)":"Приватный ключ (секретно)",
 | 
					    "Account":"Счет", "Owner":"Владелец", "Block num":"Ном блока", "Private key (secret)":"Приватный ключ (секретно)", "Load key":"Загруз.",
 | 
				
			||||||
    "Load key":"Загруз.", "Create your first account and start using TERA":"Создайте свой первый счет и начните использовать TERA",
 | 
					    "Create your first account and start using TERA":"Создайте свой первый счет и начните использовать TERA", "0 Accounts":"0 Счетов",
 | 
				
			||||||
    "0 Accounts":"0 Счетов", "OWNER: {Item.Owner}":"Владелец: {Item.Owner}", "More info":"Информация", "Public key":"Публичный ключ"};
 | 
					    "OWNER: {Item.Owner}":"Владелец: {Item.Owner}", "More info":"Информация", "Public key":"Публичный ключ", "Enter number of dapp":"Введите номер Даппа",
 | 
				
			||||||
 | 
					    "Enter the dapps number that will be added to your account. Attention make sure that you trust this dapp, otherwise you may lose all funds in this account.":"Введите номер Даппа, который будет добавлен в ваш аккаунт. Внимание убедитесь, что Вы доверяете ему, в противном случае вы можете потерять все средства на этом счете."};
 | 
				
			||||||
LangMap["简体中文"] = {"TERA WALLET":"TERA 钱包", "Generate key":"生成私钥", "OK":"OK", "Cancel":"取消", "Edit":"编辑", "Save key":"保存私钥",
 | 
					LangMap["简体中文"] = {"TERA WALLET":"TERA 钱包", "Generate key":"生成私钥", "OK":"OK", "Cancel":"取消", "Edit":"编辑", "Save key":"保存私钥",
 | 
				
			||||||
    "+ CREATE A NEW ACCOUNT":"+ 新建账号", "Create account":"创建账号", "Send":"发送", "SEND":"转账", "CONFIRM":"确认", "Accounts":"账号", "Account(s)":"账号",
 | 
					    "+ CREATE A NEW ACCOUNT":"+ 新建账号", "Create account":"创建账号", "Send":"发送", "SEND":"转账", "CONFIRM":"确认", "Accounts":"账号", "Account(s)":"账号",
 | 
				
			||||||
    "Blocks and Tx":"区块和交易", "Counters":"状态统计", "Open DApp":"打开DApp", "Back":"返回", "Delete":"删除", "Save to book":"保存到地址本", "Choose":"选择",
 | 
					    "Blocks and Tx":"区块和交易", "Counters":"状态统计", "Open DApp":"打开DApp", "Back":"返回", "Delete":"删除", "Save to book":"保存到地址本", "Choose":"选择",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,12 +8,13 @@
 | 
				
			|||||||
 * Telegram:  https://t.me/terafoundation
 | 
					 * Telegram:  https://t.me/terafoundation
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var MIN_VERSION = 1020;
 | 
					var MIN_VERSION = 1114;
 | 
				
			||||||
var COUNT_BLOCK_PROOF = 300;
 | 
					var COUNT_BLOCK_PROOF = 300;
 | 
				
			||||||
var MIN_SUM_POWER = COUNT_BLOCK_PROOF * 35;
 | 
					var MIN_SUM_POWER = 0;
 | 
				
			||||||
var MainServer = undefined;
 | 
					var MainServer = undefined;
 | 
				
			||||||
var MaxConnectedCount = 10;
 | 
					var MaxConnectedCount = 10;
 | 
				
			||||||
var MaxTimeConnecting = 3 * 1000;
 | 
					var TIME_LENGTH_CONNECT_ALL = 2 * 1000;
 | 
				
			||||||
 | 
					var MAX_TIME_FOR_CONNECT = 1000;
 | 
				
			||||||
var StartTimeConnecting = 0;
 | 
					var StartTimeConnecting = 0;
 | 
				
			||||||
var ConnectedCount = 0;
 | 
					var ConnectedCount = 0;
 | 
				
			||||||
var NETWORK = "TERA-MAIN";
 | 
					var NETWORK = "TERA-MAIN";
 | 
				
			||||||
@@ -26,7 +27,8 @@ var ServerMainMap = {"127.0.0.1":{"ip":"127.0.0.1", "port":80, "Name":"LOCAL"},
 | 
				
			|||||||
        "port":80, "Name":"SUPPORT2", "System":1}, "t1.teraexplorer.com":{"ip":"t1.teraexplorer.com", "port":80, "Name":"t1.teraexplorer.com",
 | 
					        "port":80, "Name":"SUPPORT2", "System":1}, "t1.teraexplorer.com":{"ip":"t1.teraexplorer.com", "port":80, "Name":"t1.teraexplorer.com",
 | 
				
			||||||
        "System":1}, };
 | 
					        "System":1}, };
 | 
				
			||||||
var ServerTestMap = {"127.0.0.1":{"ip":"127.0.0.1", "port":80, "Name":"LOCAL"}, "dappsgate.com":{"ip":"dappsgate.com", "port":88,
 | 
					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}, };
 | 
					        "Name":"SUPPORT1", "System":1}, "terablockchain.org":{"ip":"terablockchain.org", "port":88, "Name":"SUPPORT2", "System":1},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function StartWebWallet()
 | 
					function StartWebWallet()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -111,9 +113,11 @@ function ConnectWebWallet()
 | 
				
			|||||||
    setTimeout(LoopWalletInfo, 1500);
 | 
					    setTimeout(LoopWalletInfo, 1500);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
var Stage = 0;
 | 
					var Stage = 0;
 | 
				
			||||||
 | 
					var PreparingStartLoopHandShake = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function LoopHandShake()
 | 
					function LoopHandShake()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    PreparingStartLoopHandShake = 0;
 | 
				
			||||||
    Stage++;
 | 
					    Stage++;
 | 
				
			||||||
    SetStatus("Connecting: " + Stage + "...");
 | 
					    SetStatus("Connecting: " + Stage + "...");
 | 
				
			||||||
    for(var key in ServerMap)
 | 
					    for(var key in ServerMap)
 | 
				
			||||||
@@ -130,13 +134,12 @@ function LoopHandShake()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function DoNodeList(Item)
 | 
					function DoNodeList(Item)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    console.log(GetProtocolServerPath(Item) + "/GetNodeList");
 | 
					 | 
				
			||||||
    if(window.location.protocol === "https:" && Item.port !== 443)
 | 
					    if(window.location.protocol === "https:" && Item.port !== 443)
 | 
				
			||||||
        return ;
 | 
					        return ;
 | 
				
			||||||
    if(Item.port === 443 && IsIPAddres(Item.ip))
 | 
					    if(Item.port === 443 && IsIPAddres(Item.ip))
 | 
				
			||||||
        return ;
 | 
					        return ;
 | 
				
			||||||
    SetStatus("Try: " + Item.ip + ":" + Item.port);
 | 
					 | 
				
			||||||
    Item.SendHandShake = 1;
 | 
					    Item.SendHandShake = 1;
 | 
				
			||||||
 | 
					    Item.StartTime = Date.now();
 | 
				
			||||||
    GetData(GetProtocolServerPath(Item) + "/GetNodeList", {}, function (Data)
 | 
					    GetData(GetProtocolServerPath(Item) + "/GetNodeList", {}, function (Data)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if(Data && Data.result && Data.NETWORK === NETWORK && Data.VersionNum >= MIN_VERSION)
 | 
					        if(Data && Data.result && Data.NETWORK === NETWORK && Data.VersionNum >= MIN_VERSION)
 | 
				
			||||||
@@ -144,7 +147,7 @@ function DoNodeList(Item)
 | 
				
			|||||||
            ConnectedCount++;
 | 
					            ConnectedCount++;
 | 
				
			||||||
            Item.GetHandShake = 1;
 | 
					            Item.GetHandShake = 1;
 | 
				
			||||||
            Item.BlockChain = Data.BlockChain;
 | 
					            Item.BlockChain = Data.BlockChain;
 | 
				
			||||||
            SetStatus("Get: " + Item.ip + ":" + Item.port);
 | 
					            Item.DeltaTime = Date.now() - Item.StartTime;
 | 
				
			||||||
            var bWas = 0;
 | 
					            var bWas = 0;
 | 
				
			||||||
            for(var i = 0; i < Data.arr.length; i++)
 | 
					            for(var i = 0; i < Data.arr.length; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -152,33 +155,47 @@ function DoNodeList(Item)
 | 
				
			|||||||
                if(!ServerMap[Node.ip] && Node.port)
 | 
					                if(!ServerMap[Node.ip] && Node.port)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    ServerMap[Node.ip] = Node;
 | 
					                    ServerMap[Node.ip] = Node;
 | 
				
			||||||
                    console.log("New: " + Node.ip + ":" + Node.port);
 | 
					 | 
				
			||||||
                    bWas = 1;
 | 
					                    bWas = 1;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if(bWas && ConnectedCount < MaxConnectedCount && new Date() - StartTimeConnecting < MaxTimeConnecting)
 | 
					            var DeltaAll = Date.now() - StartTimeConnecting;
 | 
				
			||||||
 | 
					            if(!PreparingStartLoopHandShake && bWas && ConnectedCount < MaxConnectedCount && DeltaAll < TIME_LENGTH_CONNECT_ALL)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                PreparingStartLoopHandShake = 1;
 | 
				
			||||||
                setTimeout(LoopHandShake, 100);
 | 
					                setTimeout(LoopHandShake, 100);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					var idTimeFindLider = 0;
 | 
				
			||||||
 | 
					var CountDoWalletInfoAll = 0;
 | 
				
			||||||
 | 
					var CountDoWalletInfoGet = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function LoopWalletInfo()
 | 
					function LoopWalletInfo()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SetStatus("Get wallets info...");
 | 
					    CountDoWalletInfoAll = 0;
 | 
				
			||||||
 | 
					    CountDoWalletInfoGet = 0;
 | 
				
			||||||
 | 
					    var Arr = [];
 | 
				
			||||||
    for(var key in ServerMap)
 | 
					    for(var key in ServerMap)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var Item = ServerMap[key];
 | 
					        var Item = ServerMap[key];
 | 
				
			||||||
        if(Item.port)
 | 
					        if(Item.port && Item.DeltaTime < MAX_TIME_FOR_CONNECT)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            CountWallet++;
 | 
					            Arr.push(Item);
 | 
				
			||||||
            if(window.BrowserIE && CountWallet > 4)
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            DoWalletInfo(Item);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    setTimeout(FindLider, 500);
 | 
					    Arr.sort(function (a,b)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        a.DeltaTime - b.DeltaTime;
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    CountWallet = Math.min(Arr.length, 8);
 | 
				
			||||||
 | 
					    if(window.BrowserIE && CountWallet > 4)
 | 
				
			||||||
 | 
					        CountWallet = 4;
 | 
				
			||||||
 | 
					    for(var i = 0; i < CountWallet; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        DoWalletInfo(Arr[i]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    idTimeFindLider = setTimeout(FindLider, 2500);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function DoWalletInfo(Item)
 | 
					function DoWalletInfo(Item)
 | 
				
			||||||
@@ -187,18 +204,28 @@ function DoWalletInfo(Item)
 | 
				
			|||||||
        return ;
 | 
					        return ;
 | 
				
			||||||
    if(Item.port === 443 && IsIPAddres(Item.ip))
 | 
					    if(Item.port === 443 && IsIPAddres(Item.ip))
 | 
				
			||||||
        return ;
 | 
					        return ;
 | 
				
			||||||
 | 
					    CountDoWalletInfoAll++;
 | 
				
			||||||
    Item.StartTime = Date.now();
 | 
					    Item.StartTime = Date.now();
 | 
				
			||||||
    Item.SendWalletInfo = 1;
 | 
					    Item.SendWalletInfo = 1;
 | 
				
			||||||
    GetData(GetProtocolServerPath(Item) + "/GetCurrentInfo", {BlockChain:1}, function (Data)
 | 
					    GetData(GetProtocolServerPath(Item) + "/GetCurrentInfo", {BlockChain:1}, function (Data)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if(!idTimeFindLider)
 | 
				
			||||||
 | 
					            return ;
 | 
				
			||||||
        if(Data && Data.result && Data.BlockChain && Data.NETWORK === NETWORK)
 | 
					        if(Data && Data.result && Data.BlockChain && Data.NETWORK === NETWORK)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            Item.Name = Data.NODES_NAME;
 | 
					            Item.Name = Data.NODES_NAME;
 | 
				
			||||||
            Item.GetWalletInfo = 1;
 | 
					            Item.GetWalletInfo = 1;
 | 
				
			||||||
            Item.DeltaTime = new Date() - Item.StartTime;
 | 
					            Item.DeltaTime = Date.now() - Item.StartTime;
 | 
				
			||||||
            Item.BlockChain = Data.BlockChain;
 | 
					            Item.BlockChain = Data.BlockChain;
 | 
				
			||||||
            Item.MaxNumBlockDB = Data.MaxNumBlockDB;
 | 
					            Item.MaxNumBlockDB = Data.MaxNumBlockDB;
 | 
				
			||||||
            console.log("Get: " + Item.ip + ":" + Item.port + " delta=" + Item.DeltaTime);
 | 
					            SetStatus("Get: " + Item.ip + ":" + Item.port + " t:" + Item.DeltaTime);
 | 
				
			||||||
 | 
					            CountDoWalletInfoGet++;
 | 
				
			||||||
 | 
					            if(idTimeFindLider && CountDoWalletInfoAll && CountDoWalletInfoGet >= 2 && CountDoWalletInfoGet / CountDoWalletInfoAll > 0.7)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                clearTimeout(idTimeFindLider);
 | 
				
			||||||
 | 
					                idTimeFindLider = 0;
 | 
				
			||||||
 | 
					                FindLider();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -219,7 +246,6 @@ function FindLider()
 | 
				
			|||||||
            Item.SumPower = CalcPowFromBlockChain(arr);
 | 
					            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;
 | 
					                continue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if(!MapSumPower[Item.SumPower])
 | 
					            if(!MapSumPower[Item.SumPower])
 | 
				
			||||||
@@ -246,7 +272,7 @@ function FindLider()
 | 
				
			|||||||
        var Item = Arr[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);
 | 
					            SetStatus("Find " + Item.ip + ":" + Item.port + " pow=" + Item.SumPower + "  t:" + Item.DeltaTime + " ms");
 | 
				
			||||||
            MainServer = Item;
 | 
					            MainServer = Item;
 | 
				
			||||||
            SaveServerMap();
 | 
					            SaveServerMap();
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -359,6 +359,9 @@
 | 
				
			|||||||
                    SendMessage({cmd:"History",OPEN_PATH:OPEN_PATH});
 | 
					                    SendMessage({cmd:"History",OPEN_PATH:OPEN_PATH});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            }, false);
 | 
					            }, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(isMobile())
 | 
				
			||||||
 | 
					                SetMobileMode();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function CreateFrame(SetData)
 | 
					        function CreateFrame(SetData)
 | 
				
			||||||
@@ -409,8 +412,6 @@
 | 
				
			|||||||
            newchild.name = "viewport"
 | 
					            newchild.name = "viewport"
 | 
				
			||||||
            newchild.content = "width=device-width, initial-scale=1.0";//, maximum-scale=1.0, user-scalable=0;
 | 
					            newchild.content = "width=device-width, initial-scale=1.0";//, maximum-scale=1.0, user-scalable=0;
 | 
				
			||||||
            window.parent.document.getElementsByTagName("head")[0].appendChild(newchild);
 | 
					            window.parent.document.getElementsByTagName("head")[0].appendChild(newchild);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            //ToLog("SetMobileMode 2");
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1105,10 +1105,10 @@
 | 
				
			|||||||
        ArrInfo=
 | 
					        ArrInfo=
 | 
				
			||||||
            [
 | 
					            [
 | 
				
			||||||
                {Name:"Hashrate from the beginning of the chain",  Delta:1000000000,   DX:310},
 | 
					                {Name:"Hashrate from the beginning of the chain",  Delta:1000000000,   DX:310},
 | 
				
			||||||
                {Name:"month",     Delta:30.5*24*3600, DX:200},
 | 
					                {Name:"month",     Delta:30.5*24*3600, DX:200, Mult:10000},
 | 
				
			||||||
                {Name:"day",       Delta:24*3600,      DX:140},
 | 
					                {Name:"day",       Delta:24*3600,      DX:140, Mult:1000},
 | 
				
			||||||
                {Name:"hour",      Delta:3600,         DX:90},
 | 
					                {Name:"hour",      Delta:3600,         DX:90,  Mult:100},
 | 
				
			||||||
                {Name:"minute",    Delta:60,           DX:60}
 | 
					                {Name:"minute",    Delta:60,           DX:60, Mult:2},
 | 
				
			||||||
            ];
 | 
					            ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for(var i=0;i<ArrInfo.length;i++)
 | 
					        for(var i=0;i<ArrInfo.length;i++)
 | 
				
			||||||
@@ -1137,7 +1137,7 @@
 | 
				
			|||||||
            if(Item.BlockNum1<0)
 | 
					            if(Item.BlockNum1<0)
 | 
				
			||||||
                Item.BlockNum1=0;
 | 
					                Item.BlockNum1=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            CurBlockNum=Item.BlockNum1;
 | 
					            CurBlockNum=Math.floor(Item.BlockNum1/Item.Mult)*Item.Mult;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var MustUpdate=0;
 | 
					            var MustUpdate=0;
 | 
				
			||||||
            if(Item.PowerArr)
 | 
					            if(Item.PowerArr)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -635,7 +635,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<section class="modal password-modal" id="idSmartEnter">
 | 
					<section class="modal password-modal" id="idSmartEnter">
 | 
				
			||||||
    <h2 class="password-modal__title">Enter number of dapp</h2>
 | 
					    <h2 class="password-modal__title"><span>Enter number of dapp</span></h2>
 | 
				
			||||||
    <p class="password-modal__subtitle">Enter the dapps number that will be added to your account. Attention make sure that you trust this dapp, otherwise you may lose all funds in this account.</p>
 | 
					    <p class="password-modal__subtitle">Enter the dapps number that will be added to your account. Attention make sure that you trust this dapp, otherwise you may lose all funds in this account.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <input type="number" class="password-modal__input" placeholder="Dapp number" id="idSmartNum">
 | 
					        <input type="number" class="password-modal__input" placeholder="Dapp number" id="idSmartNum">
 | 
				
			||||||
@@ -647,7 +647,7 @@
 | 
				
			|||||||
<div class="fixed-status">
 | 
					<div class="fixed-status">
 | 
				
			||||||
    <div class="fixed-status__wrap">
 | 
					    <div class="fixed-status__wrap">
 | 
				
			||||||
        <div id="idStatus" class="fixed-status__status"> </div>
 | 
					        <div id="idStatus" class="fixed-status__status"> </div>
 | 
				
			||||||
        <select  class="grey-btn" id="idCurNetwork" onchange="ChangeNetwork()">
 | 
					        <select  class="grey-btn" id="idCurNetwork" onchange="ChangeNetwork(1)">
 | 
				
			||||||
            <option value="TERA-MAIN">TERA MAIN</option>
 | 
					            <option value="TERA-MAIN">TERA MAIN</option>
 | 
				
			||||||
            <option value="TERA-TEST3">TERA TEST3</option>
 | 
					            <option value="TERA-TEST3">TERA TEST3</option>
 | 
				
			||||||
        </select>
 | 
					        </select>
 | 
				
			||||||
@@ -668,8 +668,8 @@
 | 
				
			|||||||
    </DIV>
 | 
					    </DIV>
 | 
				
			||||||
</DIV>
 | 
					</DIV>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<iframe id="idHistoryPage" name="HistoryPage" style="display: none" src="./history.html"></iframe>
 | 
					<!--<iframe id="idHistoryPage" name="HistoryPage" style="display: none" src="./history.html"></iframe>-->
 | 
				
			||||||
<iframe id="idBlockViewerPage" name="BlockViewerPage" style="display: none" src="./blockviewer.html"></iframe>
 | 
					<!--<iframe id="idBlockViewerPage" name="BlockViewerPage" style="display: none" src="./blockviewer.html"></iframe>-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
</html>
 | 
					</html>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
 * Telegram:  https://t.me/terafoundation
 | 
					 * Telegram:  https://t.me/terafoundation
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
global.UPDATE_CODE_VERSION_NUM = 1151;
 | 
					global.UPDATE_CODE_VERSION_NUM = 1159;
 | 
				
			||||||
global.MIN_CODE_VERSION_NUM = 1114;
 | 
					global.MIN_CODE_VERSION_NUM = 1114;
 | 
				
			||||||
global.MINING_VERSION_NUM = 0;
 | 
					global.MINING_VERSION_NUM = 0;
 | 
				
			||||||
global.InitParamsArg = InitParamsArg;
 | 
					global.InitParamsArg = InitParamsArg;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -360,7 +360,7 @@ module.exports = class CDB extends require("../code")
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        var BufWrite, FileItem, written;
 | 
					        var BufWrite, FileItem, written;
 | 
				
			||||||
        var BlockNum = Math.trunc(Block.BlockNum);
 | 
					        var BlockNum = Math.trunc(Block.BlockNum);
 | 
				
			||||||
        this.ClearBufMap()
 | 
					        this.TruncateBufMap(BlockNum)
 | 
				
			||||||
        Block.VersionDB = global.DB_VERSION
 | 
					        Block.VersionDB = global.DB_VERSION
 | 
				
			||||||
        BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader)
 | 
					        BufWrite = BufLib.GetBufferFromObject(Block, FORMAT_STREAM_HEADER, 200, WorkStructStreamHeader)
 | 
				
			||||||
        FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1)
 | 
					        FileItem = BlockDB.OpenDBFile(FILE_NAME_BODY, 1)
 | 
				
			||||||
@@ -401,7 +401,7 @@ module.exports = class CDB extends require("../code")
 | 
				
			|||||||
    WriteBufHeaderToFile1(BufWrite, BlockNum)
 | 
					    WriteBufHeaderToFile1(BufWrite, BlockNum)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        BlockNum = Math.trunc(BlockNum)
 | 
					        BlockNum = Math.trunc(BlockNum)
 | 
				
			||||||
        this.ClearBufMap()
 | 
					        this.TruncateBufMap(BlockNum)
 | 
				
			||||||
        var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
 | 
					        var FileItem = BlockDB.OpenDBFile(FILE_NAME_HEADER, 1);
 | 
				
			||||||
        var Position = BlockNum * BLOCK_HEADER_SIZE;
 | 
					        var Position = BlockNum * BLOCK_HEADER_SIZE;
 | 
				
			||||||
        var written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position);
 | 
					        var written = fs.writeSync(FileItem.fd, BufWrite, 0, BufWrite.length, Position);
 | 
				
			||||||
@@ -578,6 +578,19 @@ module.exports = class CDB extends require("../code")
 | 
				
			|||||||
        Block.Prepared = true
 | 
					        Block.Prepared = true
 | 
				
			||||||
        return this.PrepareBlockFields(Block, BlockNum);
 | 
					        return this.PrepareBlockFields(Block, BlockNum);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    ClearBufMap()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        this.MapHeader = {}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    TruncateBufMap(BlockNum)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if(BlockNum % 10000 === 0)
 | 
				
			||||||
 | 
					            this.ClearBufMap()
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            delete this.MapHeader[BlockNum]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    ReadBlockHeaderFromMapDB(BlockNum)
 | 
					    ReadBlockHeaderFromMapDB(BlockNum)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        var Block = this.MapHeader[BlockNum];
 | 
					        var Block = this.MapHeader[BlockNum];
 | 
				
			||||||
@@ -586,6 +599,10 @@ module.exports = class CDB extends require("../code")
 | 
				
			|||||||
            Block = this.ReadBlockHeaderDB(BlockNum)
 | 
					            Block = this.ReadBlockHeaderDB(BlockNum)
 | 
				
			||||||
            this.MapHeader[BlockNum] = Block
 | 
					            this.MapHeader[BlockNum] = Block
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Block.FromMap = 1
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return Block;
 | 
					        return Block;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    SetTruncateBlockDB(BlockNum)
 | 
					    SetTruncateBlockDB(BlockNum)
 | 
				
			||||||
@@ -659,10 +676,6 @@ module.exports = class CDB extends require("../code")
 | 
				
			|||||||
        this.CreateGenesisBlocks()
 | 
					        this.CreateGenesisBlocks()
 | 
				
			||||||
        this.StartSyncBlockchain()
 | 
					        this.StartSyncBlockchain()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ClearBufMap()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        this.MapHeader = {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    Close()
 | 
					    Close()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        this.ClearBufMap()
 | 
					        this.ClearBufMap()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,9 +22,9 @@ ContenTypeMap["wav"] = "audio/wav";
 | 
				
			|||||||
ContenTypeMap["mp3"] = "audio/mpeg";
 | 
					ContenTypeMap["mp3"] = "audio/mpeg";
 | 
				
			||||||
ContenTypeMap["mp4"] = "video/mp4";
 | 
					ContenTypeMap["mp4"] = "video/mp4";
 | 
				
			||||||
ContenTypeMap["ico"] = "image/vnd.microsoft.icon";
 | 
					ContenTypeMap["ico"] = "image/vnd.microsoft.icon";
 | 
				
			||||||
 | 
					ContenTypeMap["jpg"] = "image/jpeg";
 | 
				
			||||||
ContenTypeMap["png"] = "image/png";
 | 
					ContenTypeMap["png"] = "image/png";
 | 
				
			||||||
ContenTypeMap["gif"] = "image/gif";
 | 
					ContenTypeMap["gif"] = "image/gif";
 | 
				
			||||||
ContenTypeMap["jpg"] = "image/jpeg";
 | 
					 | 
				
			||||||
ContenTypeMap["html"] = "text/html";
 | 
					ContenTypeMap["html"] = "text/html";
 | 
				
			||||||
ContenTypeMap["txt"] = "text/plain";
 | 
					ContenTypeMap["txt"] = "text/plain";
 | 
				
			||||||
ContenTypeMap["csv"] = "text/csv";
 | 
					ContenTypeMap["csv"] = "text/csv";
 | 
				
			||||||
@@ -35,7 +35,6 @@ ContenTypeMap["pdf"] = "application/pdf";
 | 
				
			|||||||
ContenTypeMap["exe"] = "application/octet-stream";
 | 
					ContenTypeMap["exe"] = "application/octet-stream";
 | 
				
			||||||
ContenTypeMap["msi"] = "application/octet-stream";
 | 
					ContenTypeMap["msi"] = "application/octet-stream";
 | 
				
			||||||
ContenTypeMap["woff"] = "application/font-woff";
 | 
					ContenTypeMap["woff"] = "application/font-woff";
 | 
				
			||||||
ContenTypeMap[".js"] = "application/javascript";
 | 
					 | 
				
			||||||
ContenTypeMap["html"] = "text/html";
 | 
					ContenTypeMap["html"] = "text/html";
 | 
				
			||||||
ContenTypeMap["psd"] = "application/octet-stream";
 | 
					ContenTypeMap["psd"] = "application/octet-stream";
 | 
				
			||||||
global.HTTPCaller = {};
 | 
					global.HTTPCaller = {};
 | 
				
			||||||
@@ -1456,7 +1455,11 @@ function SendWebFile(response,name,StrCookie,bParsing)
 | 
				
			|||||||
    var type = name.substr(name.length - 4, 4);
 | 
					    var type = name.substr(name.length - 4, 4);
 | 
				
			||||||
    if(type.substr(0, 1) === ".")
 | 
					    if(type.substr(0, 1) === ".")
 | 
				
			||||||
        type = type.substr(1);
 | 
					        type = type.substr(1);
 | 
				
			||||||
    var Path = "./" + name;
 | 
					    var Path;
 | 
				
			||||||
 | 
					    if(name.substr(0, 2) !== "./")
 | 
				
			||||||
 | 
					        Path = "./" + name;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        Path = name;
 | 
				
			||||||
    if(!fs.existsSync(Path))
 | 
					    if(!fs.existsSync(Path))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if(type === "ico")
 | 
					        if(type === "ico")
 | 
				
			||||||
@@ -1492,6 +1495,13 @@ function SendWebFile(response,name,StrCookie,bParsing)
 | 
				
			|||||||
        response.end(data);
 | 
					        response.end(data);
 | 
				
			||||||
        return ;
 | 
					        return ;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        if("image/jpeg,image/vnd.microsoft.icon,image/svg+xml,image/png,application/javascript,text/css,text/html".indexOf(StrContentType) >  - 1)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var data = GetFileSimpleBin(Path);
 | 
				
			||||||
 | 
					            response.end(data);
 | 
				
			||||||
 | 
					            return ;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    const stream = fs.createReadStream(Path);
 | 
					    const stream = fs.createReadStream(Path);
 | 
				
			||||||
    setTimeout(function ()
 | 
					    setTimeout(function ()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -1595,6 +1605,18 @@ function GetFileSimple(Path)
 | 
				
			|||||||
    return data;
 | 
					    return data;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function GetFileSimpleBin(Path)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    var Key = "GetFileSimpleBin-" + Path;
 | 
				
			||||||
 | 
					    var data = global.SendHTMLMap[Key];
 | 
				
			||||||
 | 
					    if(!data)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        data = (fs.readFileSync(Path));
 | 
				
			||||||
 | 
					        global.SendHTMLMap[Key] = data;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return data;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function SaveFileSimple(Path,Str)
 | 
					function SaveFileSimple(Path,Str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    global.SendHTMLMap = {};
 | 
					    global.SendHTMLMap = {};
 | 
				
			||||||
@@ -1609,6 +1631,14 @@ global.GetFileHTMLFromMarkdown = GetFileHTMLFromMarkdown;
 | 
				
			|||||||
global.GetFileSimple = GetFileSimple;
 | 
					global.GetFileSimple = GetFileSimple;
 | 
				
			||||||
global.SaveFileSimple = SaveFileSimple;
 | 
					global.SaveFileSimple = SaveFileSimple;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function ReloaSenddBufer()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    global.SendHTMLMap = {};
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					setInterval(ReloaSenddBufer, 60 * 1000);
 | 
				
			||||||
 | 
					if(global.DEV_MODE)
 | 
				
			||||||
 | 
					    setInterval(ReloaSenddBufer, 1 * 1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function GetStrTime(now)
 | 
					function GetStrTime(now)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(!now)
 | 
					    if(!now)
 | 
				
			||||||
@@ -1926,6 +1956,7 @@ function GetEventArray(SmartNum,Context)
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
HTTPCaller.GetHashRate = function (ArrParams)
 | 
					HTTPCaller.GetHashRate = function (ArrParams)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    var AllReadCount = 0;
 | 
				
			||||||
    var CurBlockNum = GetCurrentBlockNumByTime();
 | 
					    var CurBlockNum = GetCurrentBlockNumByTime();
 | 
				
			||||||
    var ResArr = [];
 | 
					    var ResArr = [];
 | 
				
			||||||
    for(var i = 0; i < ArrParams.length; i++)
 | 
					    for(var i = 0; i < ArrParams.length; i++)
 | 
				
			||||||
@@ -1950,9 +1981,7 @@ HTTPCaller.GetHashRate = function (ArrParams)
 | 
				
			|||||||
        var StepDelta = Math.floor(Delta / Count);
 | 
					        var StepDelta = Math.floor(Delta / Count);
 | 
				
			||||||
        if(StepDelta < 1)
 | 
					        if(StepDelta < 1)
 | 
				
			||||||
            StepDelta = 1;
 | 
					            StepDelta = 1;
 | 
				
			||||||
        var CountAvg = 10;
 | 
					        var CountAvg = 3;
 | 
				
			||||||
        if(i === ArrParams.length - 1)
 | 
					 | 
				
			||||||
            CountAvg = 3;
 | 
					 | 
				
			||||||
        var StepDeltaAvg = Math.floor(StepDelta / CountAvg);
 | 
					        var StepDeltaAvg = Math.floor(StepDelta / CountAvg);
 | 
				
			||||||
        if(StepDeltaAvg < 1)
 | 
					        if(StepDeltaAvg < 1)
 | 
				
			||||||
            StepDeltaAvg = 1;
 | 
					            StepDeltaAvg = 1;
 | 
				
			||||||
@@ -1971,9 +2000,11 @@ HTTPCaller.GetHashRate = function (ArrParams)
 | 
				
			|||||||
                var CountSum = 0;
 | 
					                var CountSum = 0;
 | 
				
			||||||
                for(var d = 0; d < CountAvg; d++)
 | 
					                for(var d = 0; d < CountAvg; d++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var Block = SERVER.ReadBlockHeaderDB(Num + d * StepDeltaAvg);
 | 
					                    var Block = SERVER.ReadBlockHeaderFromMapDB(Num + d * StepDeltaAvg);
 | 
				
			||||||
                    if(Block)
 | 
					                    if(Block)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
					                        if(!Block.FromMap)
 | 
				
			||||||
 | 
					                            AllReadCount++;
 | 
				
			||||||
                        CountSum++;
 | 
					                        CountSum++;
 | 
				
			||||||
                        Sum += GetPowPower(Block.PowHash);
 | 
					                        Sum += GetPowPower(Block.PowHash);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user