小赖子的英国生活和资讯

怎么样计算STEEM区块链的上线率(UpTime)和宕机时间(DownTime)

阅读 桌面完整版

判断一个区块链是否靠谱有一个指标就是看链跑的时间久不久, 还有就是上线率/Uptime和宕机时间/Downtime, 有点类似计算服务器的上线时间.

不靠谱的链一般没几多久就停了(Halted). STEEM区块链不算新链了, 已经跑了有7年之久, 我很好奇STEEM链的上线时间和故障率, 本文就来计算一下.

STEEM在过去因为链的BUG停过几次, 我记得有一次是STEEM在硬分叉的时候引起了新的资源计算模型, 但有BUG, 导致链停了, 虽然当时Steem Inc组织程序员紧急改BUG, 再号召见证人同时重启链, 不过那几天折腾过程中停了有2-3次吧.

比特币BTC据说到现在为止历史上一共停过两次.

创世纪块和时间 Steem Genesis Block and Time

每条区块链都有一个创世纪块, 也就是第一块, STEEM上的创世纪块是在 2016-03-24 16:05:00.

产生一块所需要的时间

这个每条链不一样, STEEM是基于DPOS共识算法(Delegated Proof of Stake), 每3秒产生一个块.

最新块和时间 Head Block

我们可以通过 Steem JS 库来获得链上的最新块 (Head Block):

1
2
3
4
5
6
steem.api.getDynamicGlobalProperties(function(err, result) {
    var latestBlock = result.head_block_number;
    var latestBlockTime = result.time;
    console.log(`STEEM区块链上的最新块/Head Block是 ${latestBlock}.`);
    console.log(`STEEM区块链上的最新块/Head Block时间是 ${latestBlockTime}.`);
}
steem.api.getDynamicGlobalProperties(function(err, result) {
    var latestBlock = result.head_block_number;
    var latestBlockTime = result.time;
    console.log(`STEEM区块链上的最新块/Head Block是 ${latestBlock}.`);
    console.log(`STEEM区块链上的最新块/Head Block时间是 ${latestBlockTime}.`);
}

STEEM区块链的长度时间(Chain Age)

有了最新块的时间, 还有第一块的时间(创世纪块/Genesis Block), 我们做一下减法, 就可以得出链的时间长度.

其中 A 就是链的长度, T是最新头步块的时间戳/Time Stamp, 而T’是创世纪块的时间戳.

通过Javascript函数来计算两个时间字符串的间隔时间/秒

我们需要计算两个时间字符串间隔时间/秒数, 日期时间的格式为 “YYYY-MM-DD HH:MM:SS”. 比如: “2016-03-24 16:05:00”, 链上的都是UTC时区.

1
2
3
4
5
6
7
8
9
function secondsBetweenDates(dateStr1, dateStr2) {
  const date1 = new Date(dateStr1);
  const date2 = new Date(dateStr2);
  // 毫秒差另
  const diffMilliseconds = Math.abs(date2 - date1);
  // 转成秒数
  const diffSeconds = diffMilliseconds / 1000;
  return diffSeconds;
}
function secondsBetweenDates(dateStr1, dateStr2) {
  const date1 = new Date(dateStr1);
  const date2 = new Date(dateStr2);
  // 毫秒差另
  const diffMilliseconds = Math.abs(date2 - date1);
  // 转成秒数
  const diffSeconds = diffMilliseconds / 1000;
  return diffSeconds;
}

有了秒数就可以推算出其它时间单位, 如: 分时天年.

STEEM区块链的宕机时间

利用最新的块号和每个块所需的时间(即 3 秒), 我们可以计算生成所有块所需的总时间(头块号) – 令其为 t.

其中 B 是最新头部块号(Head Block).

然后通过简单的数学: 就可以算出上线率/Uptime.

总宕机时间为 , 或者算出百分比: 宕机率 .

我们可以用下面的JAVASCRIPT函数来计算STEEM区块链的宕机时间:

1
2
3
4
5
6
7
8
function compute_down_time_for_steem_blockchain(latestBlock, latestBlockTime) {
  latestBlockTime = latestBlockTime.replace("T", " ");
  const genesisBlockTime = "2016-03-24 16:05:00";
  const timePerBlock = 3;
  const secondsBetween = secondsBetweenDates(genesisBlockTime, latestBlockTime);
  const downTime = secondsBetween - (latestBlock * timePerBlock);
  return downTime;
}
function compute_down_time_for_steem_blockchain(latestBlock, latestBlockTime) {
  latestBlockTime = latestBlockTime.replace("T", " ");
  const genesisBlockTime = "2016-03-24 16:05:00";
  const timePerBlock = 3;
  const secondsBetween = secondsBetweenDates(genesisBlockTime, latestBlockTime);
  const downTime = secondsBetween - (latestBlock * timePerBlock);
  return downTime;
}

更新: Steem 区块链信息概况

我已经把上面的信息计算集成到了 Steem 区块链信息概况, 打开工具你就可以看到STEEM区块链实时的上线率(Uptime)/总宕机时间(Downtime)/总宕机率/链总时间(Chain Age).

STEEM区块链的上线率和宕机时间

Steem 坐火箭🚀!

英文: How to Compute the Chain Age, Uptime and Downtime for Steem Blockchain?

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version