0.1049
parent
a0768062a5
commit
c0f093cab2
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,6 @@
|
|||
## API v1
|
||||
|
||||
This API is available if the node is running public http-access. Set the constant HTTP_HOSTING_PORT.
|
||||
This API is available if the node is running public http-access. Set the constant HTTP_HOSTING_PORT=80
|
||||
|
||||
DappStaticCall - call static method
|
||||
Example (GET)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
## API v1
|
||||
|
||||
Данный API доступен если на ноде запущен публичный http-доступ. Т.е. задана константа HTTP_HOSTING_PORT
|
||||
Данный API доступен если на ноде запущен публичный http-доступ. Т.е. задана константа HTTP_HOSTING_PORT=80
|
||||
|
||||
DappStaticCall - статический вызов метода смарт-контракта
|
||||
Example (GET)
|
||||
|
|
|
@ -60,7 +60,7 @@ function DIV(Coin,Value)
|
|||
|
||||
function FLOAT_FROM_COIN(Coin)
|
||||
{
|
||||
var Sum = Coin.SumCOIN + Coin.SumCENT / 1e9;
|
||||
var Sum = Coin.SumCOIN + Coin.SumCENT / MAX_SUM_CENT;
|
||||
return Sum;
|
||||
};
|
||||
|
||||
|
@ -75,10 +75,18 @@ function COIN_FROM_FLOAT(Sum)
|
|||
var SumCOIN = Math.floor(Sum);
|
||||
var SumCENT = Math.floor((Sum - SumCOIN) * MAX_SUM_CENT);
|
||||
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT};
|
||||
return Coin;
|
||||
};
|
||||
|
||||
function COIN_FROM_FLOAT2(Sum)
|
||||
{
|
||||
var SumCOIN = Math.floor(Sum);
|
||||
var SumCENT = Math.floor(Sum * MAX_SUM_CENT - SumCOIN * MAX_SUM_CENT);
|
||||
var Coin = {SumCOIN:SumCOIN, SumCENT:SumCENT};
|
||||
var Sum2 = FLOAT_FROM_COIN(Coin);
|
||||
if(Sum2 !== Sum2)
|
||||
if(Sum2 !== Sum)
|
||||
{
|
||||
throw "ERR CHECK COIN_FROM_FLOAT";
|
||||
throw "ERR CHECK COIN_FROM_FLOAT: " + Sum2 + "/" + Sum;
|
||||
}
|
||||
return Coin;
|
||||
};
|
||||
|
|
|
@ -600,6 +600,9 @@
|
|||
|
||||
$("idHintStyle").disabled = !CONFIG_DATA.USE_HINT;
|
||||
|
||||
|
||||
DrawBlockInfo();
|
||||
|
||||
}
|
||||
|
||||
function SetVisibleBtOpenWallet()
|
||||
|
@ -1082,6 +1085,158 @@
|
|||
|
||||
</script>
|
||||
|
||||
|
||||
<script>
|
||||
var 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}
|
||||
];
|
||||
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])//есть нули
|
||||
{
|
||||
MustUpdate=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(Item.TimeBlockNum)
|
||||
{
|
||||
var DeltaTime=Math.abs(Item.TimeBlockNum-TimeBlockNum);
|
||||
if(DeltaTime>Item.Delta/20)
|
||||
{
|
||||
//ToLog("i="+i+" DeltaTime="+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];
|
||||
}
|
||||
}
|
||||
|
||||
DrawBlockInfoByArr();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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 x=0;
|
||||
var lastx=x;var lastvalue=0;
|
||||
ctx.beginPath();
|
||||
var path = new Path2D();
|
||||
path.moveTo(0,obj.height);
|
||||
for(var i=0;i<ArrInfo.length;i++)
|
||||
{
|
||||
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,obj.height-Arr[n]/2);
|
||||
}
|
||||
else
|
||||
{
|
||||
path.lineTo(lastx,obj.height-Arr[n]/2);
|
||||
}
|
||||
lastvalue=Arr[n];
|
||||
|
||||
lastx=x+x2;
|
||||
x2+=DeltaX;
|
||||
}
|
||||
Item.x=x;
|
||||
x+=Item.DX;
|
||||
}
|
||||
path.lineTo(lastx,obj.height);
|
||||
path.lineTo(0,obj.height);
|
||||
ctx.stroke(path);
|
||||
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.moveTo(Item.x,0);
|
||||
ctx.lineTo(Item.x,obj.height);
|
||||
ctx.fillText(""+Item.Name,Item.x+Item.DX/2-4*Item.Name.length/2,25);
|
||||
}
|
||||
ctx.stroke();
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
<style type="text/css">
|
||||
|
||||
table.password
|
||||
|
@ -1221,6 +1376,7 @@
|
|||
<HR>
|
||||
</DIV>
|
||||
</DIV>
|
||||
<canvas width='800' height='30' id='idBlockInfo'></canvas>
|
||||
<BR><BR><DIV id="idCurrentBlockNum" style="float: left"></DIV>
|
||||
|
||||
<DIV id="wallet_config_tab" style="display: none;float: left">
|
||||
|
|
|
@ -1033,6 +1033,8 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||
}
|
||||
CorrectTime()
|
||||
{
|
||||
var MaxCorrect = MAX_TIME_CORRECT;
|
||||
var PerioadAfterCanStart = this.PerioadAfterCanStart;
|
||||
var ArrNodes = this.GetHotTimeNodes();
|
||||
var CountNodes = ArrNodes.length;
|
||||
var DeltaArr = [];
|
||||
|
@ -1044,7 +1046,7 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||
continue;
|
||||
if(Node.Times.Count < 2)
|
||||
continue;
|
||||
if(this.PerioadAfterCanStart >= PERIOD_FOR_START_CHECK_TIME)
|
||||
if(PerioadAfterCanStart >= PERIOD_FOR_START_CHECK_TIME)
|
||||
if(Node.Times.Count < 5)
|
||||
continue;
|
||||
NodesSet.add(Node)
|
||||
|
@ -1055,9 +1057,14 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||
}
|
||||
if(DeltaArr.length < 1)
|
||||
return ;
|
||||
if(this.LoadHistoryMode && CountNodes > 10)
|
||||
{
|
||||
PerioadAfterCanStart = 0
|
||||
CountNodes = 10
|
||||
}
|
||||
if(DeltaArr.length < CountNodes / 2)
|
||||
return ;
|
||||
if(this.PerioadAfterCanStart >= PERIOD_FOR_START_CHECK_TIME)
|
||||
if(PerioadAfterCanStart >= PERIOD_FOR_START_CHECK_TIME)
|
||||
{
|
||||
if(DeltaArr.length < 3 * CountNodes / 4)
|
||||
return ;
|
||||
|
@ -1085,20 +1092,20 @@ module.exports = class CConnect extends require("./transfer-msg")
|
|||
Count++
|
||||
}
|
||||
var AvgDelta = Sum / Count;
|
||||
if(this.PerioadAfterCanStart < PERIOD_FOR_START_CHECK_TIME)
|
||||
if(PerioadAfterCanStart < PERIOD_FOR_START_CHECK_TIME)
|
||||
{
|
||||
var KT = (PERIOD_FOR_START_CHECK_TIME - this.PerioadAfterCanStart) / PERIOD_FOR_START_CHECK_TIME;
|
||||
var KT = (PERIOD_FOR_START_CHECK_TIME - PerioadAfterCanStart) / PERIOD_FOR_START_CHECK_TIME;
|
||||
AvgDelta = AvgDelta * KT
|
||||
}
|
||||
else
|
||||
{
|
||||
MAX_TIME_CORRECT = 25
|
||||
MaxCorrect = 25
|
||||
}
|
||||
if(AvgDelta < ( - MAX_TIME_CORRECT))
|
||||
AvgDelta = - MAX_TIME_CORRECT
|
||||
if(AvgDelta < ( - MaxCorrect))
|
||||
AvgDelta = - MaxCorrect
|
||||
else
|
||||
if(AvgDelta > MAX_TIME_CORRECT)
|
||||
AvgDelta = MAX_TIME_CORRECT
|
||||
if(AvgDelta > MaxCorrect)
|
||||
AvgDelta = MaxCorrect
|
||||
AvgDelta = Math.trunc(AvgDelta)
|
||||
if(Math.abs(AvgDelta) < 15)
|
||||
{
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* Telegram: https://t.me/terafoundation
|
||||
*/
|
||||
|
||||
global.UPDATE_CODE_VERSION_NUM = 1047;
|
||||
global.UPDATE_CODE_VERSION_NUM = 1049;
|
||||
global.MIN_CODE_VERSION_NUM = 1020;
|
||||
global.MINING_VERSION_NUM = 3;
|
||||
global.InitParamsArg = InitParamsArg;
|
||||
|
|
|
@ -35,6 +35,8 @@ ContenTypeMap["exe"] = "application/octet-stream";
|
|||
ContenTypeMap["msi"] = "application/octet-stream";
|
||||
ContenTypeMap[".js"] = "application/javascript";
|
||||
ContenTypeMap["tml"] = "text/html";
|
||||
ContenTypeMap["tml"] = "text/html";
|
||||
ContenTypeMap["psd"] = "application/octet-stream";
|
||||
global.HTTPCaller = {};
|
||||
|
||||
function DoCommand(response,Type,Path,params,remoteAddress)
|
||||
|
@ -1837,3 +1839,66 @@ function GetEventArray(SmartNum,Context)
|
|||
}
|
||||
return ArrRet;
|
||||
};
|
||||
var BlockTree = new STreeBuffer(300 * 1000, CompareItemHashSimple, "number");
|
||||
HTTPCaller.GetHashRate = function (ArrParams)
|
||||
{
|
||||
var CurBlockNum = GetCurrentBlockNumByTime();
|
||||
var ResArr = [];
|
||||
for(var i = 0; i < ArrParams.length; i++)
|
||||
{
|
||||
var Item = ArrParams[i];
|
||||
if(!Item)
|
||||
{
|
||||
ResArr[i] = undefined;
|
||||
continue;
|
||||
}
|
||||
if(Item.BlockNum1 < 0)
|
||||
Item.BlockNum1 = 0;
|
||||
if(Item.BlockNum2 > CurBlockNum)
|
||||
Item.BlockNum2 = CurBlockNum;
|
||||
var Delta = Item.BlockNum2 - Item.BlockNum1;
|
||||
var Count = Delta;
|
||||
if(Count > 20)
|
||||
Count = 20;
|
||||
else
|
||||
if(Count <= 0)
|
||||
Count = 1;
|
||||
var StepDelta = Math.floor(Delta / Count);
|
||||
if(StepDelta < 1)
|
||||
StepDelta = 1;
|
||||
var CountAvg = 10;
|
||||
if(i === ArrParams.length - 1)
|
||||
CountAvg = 3;
|
||||
var ItervalArr = [];
|
||||
for(var Num = Item.BlockNum1; Num < Item.BlockNum2; Num += StepDelta)
|
||||
{
|
||||
var Power;
|
||||
var Item2 = BlockTree.LoadValue(Num, 1);
|
||||
if(Item2 && i !== ArrParams.length - 1)
|
||||
{
|
||||
Power = Item2.Power;
|
||||
}
|
||||
else
|
||||
{
|
||||
var Sum = 0;
|
||||
var CountSum = 0;
|
||||
for(var d = 0; d < CountAvg; d++)
|
||||
{
|
||||
var Block = SERVER.ReadBlockHeaderDB(Num + d);
|
||||
if(Block)
|
||||
{
|
||||
CountSum++;
|
||||
Sum += GetPowPower(Block.PowHash);
|
||||
}
|
||||
}
|
||||
if(!CountSum)
|
||||
CountSum = 1;
|
||||
Power = Math.floor(Sum / CountSum);
|
||||
BlockTree.SaveValue(Num, {BlockNum:Num, Power:Power});
|
||||
}
|
||||
ItervalArr.push(Power);
|
||||
}
|
||||
ResArr[i] = ItervalArr;
|
||||
}
|
||||
return {result:1, ItervalArr:ResArr};
|
||||
};
|
||||
|
|
|
@ -35,9 +35,8 @@ setTimeout(function ()
|
|||
global.glCurNumFindArr = 0;
|
||||
global.ArrReconnect = [];
|
||||
global.ArrConnect = [];
|
||||
var FindList = [{"ip":"91.235.136.81", "port":30005}, {"ip":"149.154.70.158", "port":30000}, {"ip":"69.30.225.26", "port":30000},
|
||||
{"ip":"185.240.243.182", "port":30000}, {"ip":"212.109.197.205", "port":30000}, {"ip":"212.109.197.209", "port":30000}, {"ip":"80.87.192.24",
|
||||
"port":30000}, ];
|
||||
var FindList = [{"ip":"91.235.136.81", "port":30005}, {"ip":"149.154.70.158", "port":30000}, {"ip":"185.240.243.182", "port":30000},
|
||||
{"ip":"212.109.197.205", "port":30000}, {"ip":"212.109.197.209", "port":30000}, {"ip":"80.87.192.24", "port":30000}, ];
|
||||
if(global.LOCAL_RUN)
|
||||
{
|
||||
FindList = [{"ip":"127.0.0.1", "port":50001}, {"ip":"127.0.0.1", "port":50002}];
|
||||
|
|
|
@ -173,7 +173,6 @@ function DoTXProcess()
|
|||
var Item0 = BlockTree.LoadValue(Block0.BlockNum, 1);
|
||||
if(Item0 && CompareArr(Item0.SumHash, Block0.SumHash) !== 0)
|
||||
{
|
||||
ToLog("WAS_CHANGED_PREV_BLOCK = " + Block0.BlockNum);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -793,6 +793,16 @@ HostingCaller.GetHistoryTransactions = function (Params)
|
|||
return {result:0};
|
||||
return HTTPCaller.GetHistoryTransactions(Params);
|
||||
};
|
||||
HostingCaller.GetSupply = function (Params)
|
||||
{
|
||||
var Data = DApps.Accounts.ReadState(0);
|
||||
if(!Data)
|
||||
return "";
|
||||
else
|
||||
{
|
||||
return "" + (global.TOTAL_SUPPLY_TERA - Data.Value.SumCOIN);
|
||||
}
|
||||
};
|
||||
global.GlobalRunID = 0;
|
||||
global.GlobalRunMap = {};
|
||||
process.RunRPC = function (Name,Params,F)
|
||||
|
|
Loading…
Reference in New Issue