2019-07-10 04:01:15 +00:00
|
|
|
/*
|
|
|
|
* @project: TERA
|
|
|
|
* @version: Development (beta)
|
|
|
|
* @license: MIT (not for evil)
|
|
|
|
* @copyright: Yuriy Ivanov (Vtools) 2017-2019 [progr76@gmail.com]
|
|
|
|
* Web: https://terafoundation.org
|
|
|
|
* Twitter: https://twitter.com/terafoundation
|
|
|
|
* Telegram: https://t.me/terafoundation
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2019-07-10 07:59:04 +00:00
|
|
|
function DoRest(r, t, e) {
|
|
|
|
var u = r.Arr[0], o = Math.floor(e / global.REST_BLOCK_SCALE);
|
|
|
|
if (o !== Math.floor((u.BlockNum - 1) / global.REST_BLOCK_SCALE)) {
|
|
|
|
for (var n = GetRestArr(o), l = [], a = n.length - 2; 0 <= a; a--)
|
|
|
|
l.push(n[a] * global.REST_BLOCK_SCALE);
|
2019-07-10 04:01:15 +00:00
|
|
|
RestPush(r, l, e, 1);
|
|
|
|
}
|
2019-07-10 07:59:04 +00:00
|
|
|
r.Arr[0] = { BlockNum: e, Value: t.Value };
|
2019-07-10 04:01:15 +00:00
|
|
|
};
|
|
|
|
|
2019-07-10 07:59:04 +00:00
|
|
|
function RestPush(r, t, e, u) {
|
2019-07-10 04:01:15 +00:00
|
|
|
var o = r.Arr[u - 1], n = r.Arr[u];
|
2019-07-10 07:59:04 +00:00
|
|
|
if (1 < u) {
|
2019-07-10 04:01:15 +00:00
|
|
|
var l = t[u - 2];
|
2019-07-10 07:59:04 +00:00
|
|
|
if (o.BlockNum > l)
|
|
|
|
return;
|
2019-07-10 04:01:15 +00:00
|
|
|
}
|
2019-07-10 07:59:04 +00:00
|
|
|
if (n.BlockNum && n.BlockNum >= e || o.BlockNum >= e)
|
2019-07-10 04:01:15 +00:00
|
|
|
return n.BlockNum = 0, void (n.Value = {});
|
|
|
|
n.BlockNum && u < r.Arr.length - 1 && RestPush(r, t, e, u + 1), r.Arr[u] = o;
|
|
|
|
};
|
|
|
|
|
2019-07-10 07:59:04 +00:00
|
|
|
function GetRestArr(r) {
|
|
|
|
for (var t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], e = t.length, u = 0; u <= r; u++)
|
|
|
|
for (var o = 0, n = u, l = e - 1; 0 <= l; l--) {
|
2019-07-10 04:01:15 +00:00
|
|
|
var a = t[l];
|
2019-07-10 07:59:04 +00:00
|
|
|
if (t[l] = n, n = a, 0 == ((o = o << 4 | 15) & u))
|
2019-07-10 04:01:15 +00:00
|
|
|
break;
|
2019-07-10 07:59:04 +00:00
|
|
|
if (0 != (o & n))
|
2019-07-10 04:01:15 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
return t;
|
|
|
|
};
|
|
|
|
var RestArrMap = {};
|
|
|
|
|
2019-07-10 07:59:04 +00:00
|
|
|
function GetCurrentRestArr() {
|
|
|
|
var r = global.GetCurrentBlockNumByTime(), t = Math.floor(r / global.REST_BLOCK_SCALE), e = RestArrMap[t];
|
|
|
|
if (void 0 === e) {
|
2019-07-10 04:01:15 +00:00
|
|
|
RestArrMap = {}, (e = GetRestArr(t)).length = e.length - 1;
|
2019-07-10 07:59:04 +00:00
|
|
|
for (var u = 0; u < e.length; u++)
|
|
|
|
e[u] = e[u] * global.REST_BLOCK_SCALE;
|
2019-07-10 04:01:15 +00:00
|
|
|
RestArrMap[t] = e;
|
|
|
|
}
|
|
|
|
return e;
|
|
|
|
};
|
|
|
|
|
2019-07-10 07:59:04 +00:00
|
|
|
function GetCurrentRestNum(r) {
|
|
|
|
for (var t = global.GetCurrentBlockNumByTime() - r, e = GetCurrentRestArr(), u = e.length - 1; 0 <= u; u--)
|
|
|
|
if (e[u] <= t)
|
2019-07-10 04:01:15 +00:00
|
|
|
return e[u];
|
|
|
|
return 0;
|
|
|
|
};
|
2019-07-10 07:59:04 +00:00
|
|
|
global.DoRest = DoRest
|
|
|
|
global.GetRestArr = GetRestArr
|
|
|
|
global.GetCurrentRestArr = GetCurrentRestArr
|
|
|
|
global.GetCurrentRestNum = GetCurrentRestNum;
|