判断一个区块链是否靠谱有一个指标就是看链跑的时间久不久, 还有就是上线率/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 坐火箭🚀!
- 您可以通过 steem2sol 交换 STEEM/SBD 到 SOL Solana 索拉纳!
- 您可以通过 steem2eth 兑换 STEEM/SBD 到 ETH (Ethereum 以太网)
- 您可以通过 steem2usdt 兑换 STEEM/SBD 到 Tether USDT (波场U, TRC-20)
- 您可以通过 steem2trx 兑换 STEEM/SBD 到 波场 TRX (TRON)
- 您可以通过 steem2bts 兑换 STEEM/SBD 到 比特股 BTS (BitShares)
- 在 SteemYY 免费注册 STEEM 帐户
- Steem 区块链浏览器
英文: How to Compute the Chain Age, Uptime and Downtime for Steem Blockchain?
loading...
上一篇: 如何解决微博视频下载出现的403错误(Denied by Referer ACL)?
下一篇: 老大英国小学毕业了