【翻译】 孤儿块

原文:https://medium.com/@jb395official/orphan-blocks-june-16-2018-a8f4799dcc2c
译者:中山大学数学学院(珠海)林学渊
大二时给量子做的翻译,转载注明出处,谢谢

孤儿块 — 2018年4月16日

这一次我们讨论孤儿块。当两个钱包在相近的时间获得块奖励并将块发布到网络时,就会产生孤儿块。其中一个区块将被接受并扩充区块链,另一个区块将成为孤儿并被拒绝。

我们看一下孤儿块的两个问题:

  1. 谁挖到了孤儿块?
  2. 我的钱包是否挖到了孤儿块?我该怎么办?

我们转向一位熟悉的朋友来回答这些问题:钱包的 debug.log 文件。

我承认这是一个只有少数人感兴趣的专门话题。 如果你好奇区块链,请继续阅读; 如果你认为你已经挖到了一个孤儿块,你必须阅读; 如果你对区块链和糟糕的区块链笑话有普遍兴趣,那随你便……

我是一名独立的区块链研究员,偶尔写博客和主持社交媒体,十分中意 Qtum 团队的技术指导。如果你对本文有任何意见或更正,请在社交媒体上联系我。


主网性能

首先简要回顾一下 Qtum 主网的最新性能。

网络权重

我另一种计算网络权重的方法依赖于大赌注钱包所获得的积分奖励的百分比,这些大赌注钱包具有已知余额。我的方法也提供了比钱包的计算的网络权重估计更准确的数字。在上周,这些 175 万余钱的大钱包获得了9.96%的积分奖励,网络权重为 1760 万。 网络权重为 1760 万意味着年度回报率为 5.0%

交易费用

由于合约调用,最近出现了一些初始两位数的交易费用。 重量级是 167,861 块,收 5.9 QTUM 交易费,其中包括来自与 Luna Stars 促销相关的一系列 LSTR 令牌转账的 gas。

与Luna Stars DAPP约会

该区块持有 323 笔交易,在 gas 退款后为区块奖励获奖者支付了9.9 QTUM(4.0 QTUM 区块奖励 + 5.9 交易费用(来自 10 种方式))后支付 29.92 QTUM 的初始交易费用。 请注意,对于此区块,交易费用大于区块奖励。


孤儿块

TL;DR 当两个节点在相似时间发布新块时,分散式区块链挖矿平台偶尔会挖出孤儿块。孤儿块对于分散式网络来说是完全正常和健康的。 Qtum 的孤儿块率约为1.6%,即每天有 10 个孤儿块。 Qtum 网络一视同仁处理孤儿块(它们被取消),但偶尔中断这一过程会导致孤儿块奖励搁浅,在这种情况下,可以使用一些钱包命令行工具进行恢复。

孤儿简介

百老汇音乐剧“小孤儿安妮”于 1977 年在纽约市首映,并讲述了这个勇敢的(有音乐天赋的)小孤儿安妮的故事,她在孤儿院里生活艰苦,并最终被百万富翁实业家 Daddy Warbucks 领养。 在电影版的安妮故事里,汉尼根小姐,孤儿院的邪恶女校长说:

克莱斯勒大厦由大卫Shankbone,裁剪过

.
“为什么所有孩子都想成为一个孤儿?我不懂。你会熬夜工作直到这个垃圾场…像克莱斯勒大厦的顶部一样耀眼。”
.
.
.

在 Qtum 区块链上,当两个 Staking 钱包在相似的时间产生新的区块时,就会生成孤儿块。 对于分散节点,这是偶然且完全自然的结果。 孤儿块与主区块链的关系如下:

为了分析产生的孤儿块的数量,我在 Excel 中处理 debug.log 文件来检查何时挖到新块。 对于允许入站连接的钱包,每个块接收自许多不同的节点(30 个或更多),并且钱包将验证并选择一个附到本地区块链副本。 所有 30 个块都收到相同的数据,包括相同的交易 ID,因为它们来自奖励获奖钱包的那一区块,嗯,你知道这是为啥。

如果挖掘了孤儿块,与其他块相比,它将有相同的块编号,但有不同的交易 ID。 如果将一周的 debug.log 文件行导入 Excel,并运行一些字符串匹配公式,则会弹出孤儿块。

怎么算孤儿块个数? 我在之前的博客中有一些估计。 比特币的孤儿率约为0.5%(可能是由于快速中继网络),而目前约为 23% 以太坊叔块(以太坊的叔块激励和处理的方式与 Qtum 孤儿块不同)。

我的分析显示,Qtum 的孤儿块率为1.6%。 这意味着每天 600 块,将会有大约 10 个孤儿。 另一种看待这个问题的方法是:如果一个钱包平均 63 块(在一段时间内)挖矿,那么平均一个将成为一个孤儿。


谁挖到了孤儿块?

寻找一个孤儿块有点像在干草堆里找针。解析 debug.log 文件查找孤儿意味着多达 1,000,000 行的多个 Excel 工作表。 幸运的是,有一个 Excel FINDNEEDLE 函数可以找到那些害羞的孤儿块[参考文献2]:

67名孤儿发现于6月1日至6月7日,为164,075至168,274

在一周的数据里,我发现了 67 个孤儿(可能还有几个孤儿)。 注意孤儿块 165,136 和 165,137 是相连的孤儿,孤儿高度是两个块(孤儿块 165,137 的父亲是 Mainchain 块 165,136)。

大 staking 钱包将创造许多孤儿块。 我们可以看看 QNqKe …,这是目前最大的 Staking 钱包,我相信这是一个交易热门钱包,而且也 Staking 了(我不知道是属于哪个交易所,但感谢帮忙保护区块链!)。 我们知道钱包会在每 63 块奖励中击中一个孤儿块(但有很多随机变化),而 QNqKe ……在 2 天多一点的时间里获得 63 块奖励。 这是来自 QNqKe 的孤儿块 163,638 …:

请注意这个区块的两件事情,资源管理器将其标记为“孤儿”,下一个应该列出区块的空间却是空的。 这个孤儿块有上一个区块 163,637,但没有下一个区块。 有一个父块但没有子块[参考文献3]。 只有 explorer.qtum.org 会显示孤儿块,其他资源管理器没有。

主网区块 163,638 实际上是通过钱包 QgVXC 赢得的……并且其资源管理器页面显示“Mainchain”和Next Block 163,639:

那些眼睛犀利的人可能会注意到挖到 Mainchain 块的难度高于孤儿块,这就是其他节点在孤儿块上选择 Mainchain 块的方式:赋予区块链最高难度(最安全) 。


当坏事情发生在好钱包时

从你的钱包中检测孤儿块的一种方法是查看 debug.log 文件。 如果你不熟悉 debug.log 文件,请参阅此博客

要查看你的钱包是否已挖到孤儿块,请打开 debug.log 文件并从底部向上搜索“conflicts with wallet transaction”。 如果你的钱包挖到了一个孤儿,你会发现这条日志行和几行后面的日志行显示 “CT_DELETED”,它会从交易表中删除孤儿交易。 如果你正在看你的桌面 GUI 钱包,你会看到一开始 0.4+ 挖矿交易出现,然后神秘地消失。

怎么看这个日志?

从 “conflicts with wallet transaction” 一行取出两个交易 ID 并在 Explorer.qtum.org 中搜索它们。 你可能会看到这些事务 ID 都不能在区块链中找到,或者它们可以显示为孤儿块。 无论结果如何,这都意味着你肯定挖到了孤儿块。

让我们来回顾一下赢得大块奖励时你的钱包有什么行为。 得到块奖励的获奖钱包将 1)选择一个或多个先前的交易金额(UTXO)来 stake 500 块,2)尽可能多地抓取内存池里正在等待的交易,并将它们组装到新块中,3)根据区块链的本地副本执行这些交易中的所有智能合约调用,4)将新块发布到网络。 当你的钱包完成所有这一切时,它不知道它是创建了一个 Mainchain 块还是一个孤儿块,因为它只是做完这一切并提交了这个 stake。

当你的钱包挖到孤儿块时,最好的办法是不要做任何事情,保持冷静。 你的钱包会发现它挖到了一个孤儿并且迟早会取消所有的孤儿块活动,包括返还 stake。

不管如何,这种孤儿块取消过程很少会中断。 我说实话,我不完全理解孤儿中断过程,但可以猜测,如果你对服务感到紧张,正在密切关注你的钱包,并开始恢复它交换 wallet.dat 文件以取回孤儿 stake - 这可能会滞留孤儿 stake。 在这种情况下,资源管理器将显示地址的正确余额,否则你的钱包将在该地址处显示余额低于 stake 的 UTXO 的金额。 钱包中丢失的金额可能与之前未花费的交易金额完全匹配,你的钱包选择为该孤立区块进行 stake。

如果你发现自己处于这种状况,那么现在是某些命令行工具的时候了。 为了从孤儿 stake 中恢复,“打捞钱包”是无效的,因为它可以修复损坏的 wallet.dat 文件,这不是问题。

请注意,我们正在查看启动钱包时使用的命令行参数,而不是在钱包运行后在调试控制台输入/qtum-cli 命令。 这些命令行工具在你从命令行启动钱包时使用。 对于 Mac OS X,你将在终端中输入命令行,如本博客中所述。 对于 Windows,你将使用本博客中描述的 Windows 命令提示符输入命令。 如果你正在运行服务器钱包 qtumd ,则可以在启动 qtumd 时添加命令行参数(请勿对这些命令使用qtum-cli)。

只有在你拥有 wallet.dat 文件的 良好备份 并完成上述故障排除以确认孤儿块时才使用这些步骤。

重新扫描命令

重新扫描命令将通过你本地的区块链副本并从头构建数据库。 在这篇文章中了解重新扫描工作原理。

输入重新扫描命令:

1
qtum-qt.exe -rescan

当你输入 qtum-qt 的命令时,启动屏幕将显示状态“重新扫描… XX%”一两分钟,然后打开主钱包。

Zapwallettxes 命令

zapwalletxes 命令将重新扫描本地区块链,并删除(“zap”)钱包中未发布在区块链上的所有交易。 在维基 阅读更多关于 zapwallettxes 的信息。

输入 zapwallettxes 命令:

1
qtumd.exe –zapwallettxes=2

输入命令后,qtum-qt 将启动并在右下角显示“重新扫描…”。 一两分钟后,将出现完整的钱包窗口,很有希望会恢复孤儿 stake。

如果你在 qtumd 中使用这些命令,请给它一两分钟来完成重新扫描,在此之前它不会响应 info 命令。


在音乐剧和电影的结尾,百万富翁工业家爸爸 Warbucks 领养了小孤儿安妮,然后过上了奢华的生活。 同样地,Qtum 孤儿块会返还它们的 stake 然后 staking 并保护 Qtum 区块链。

请保持在线安全,

Jackson


参考资料

  1. 看我的过去的博客,包含以下主题:

QRC20 Token 更新,设定发送QRC20代币的气体限价和气体价格,发布于2018年5月28日

Qtum 对等连接,详细了解Qtum节点连接到2018年5月21日发布的其他节点,传出/传入连接以及一些用于监控流量的工具

Qtum 新用户十大问题,2018年4月22日发布的新Qtum用户的答案

网络哈希率,比特币,以太坊和Qtum网络哈希率的比较,这些数字可能会让你感到惊讶,2018年4月6日发布

新手钱包 :分析块奖励获奖钱包和新中文节点,发布于2018年4月1日

调试日志,虚拟机日志:debug.log(和虚拟机日志)是你的朋友,如何查找和阅读调试日志,发布于2018年3月13日

QTUM上限供应减半:QTUM的供应量是多少,将会有多少? QTUM的上限,“减半”的工作原理以及2018年3月4日发布的新资源管理器

QRC20令牌报告:QRC20令牌,BOT空投,发布于2018年2月25日

Qtum PoS模拟器:发布于2018年2月16日

Testnet:Qtum测试网络,于2018年1月7日发布

虚拟专用网络(VPN):使用VPN进行赌注,于2017年12月31日发布

交易费用,2017年12月24日发布

密码短语,密码短语和密码猜测脚本,2017年12月17日发布

内存池(mempool),内存池和未确认事务的处理,于2017年12月10日发布

孤儿块,发布于2017年12月3日

QTUM.explorer.io合同页面:2017年11月26日发布

SHA256哈希算法和难度,于2017年11月20日发布

“钱包赢得座位奖励”的分发,2017年11月12日发布

SHA256哈希算法,目标和难度,于2017年11月5日发布

Qtum 采矿权益证明的介绍 - 赛车故事,关于PoS采矿的ELI5故事。2017年10月29日发布

基础的钱包离场,2017年10月29日发布

非官方赌注常见问题解答,2017年10月26日发布

网络权重,奖励时间,Nodemap,2017年10月22日发布

模拟 Qtum 采矿权益证明,2017年10月21日发布

用于PoS挖掘的早期模拟器 Stake 采矿的Qtum证明,2017年10月16日发布

Qtum 主网点火结果10月9日至15日,主网图表和图表介绍,于2017年10月15日发布

  1. 另一个糟糕的杰克逊笑话。 在 Excel 中没有 FINDNEEDLE 函数,但是这些公式对于使用 E 列中的块事务 ID 和 F 列中的块号加载的 debug.log 数据工作得很好。使用字符串函数来提取事务 ID 和块号:
1
2
=IF(FIND(“height”, F2),MID(F2, 8, 6)) — extract the block number
=IF(FIND(“height”, F2),MID(E, 6, 64)) — extract the transaction ID
  1. “孤儿”不是这些块最好的名词。 孤儿块有父母,我们知道孤儿块的父母,但他们没有孩子。 我认为一个更好的术语是 Freemartin。 显然,Satoshi 不是一个行话。
  1. 比特币孤儿块显示在 blockchain.info 上

百老汇音乐剧安妮开幕之夜是1977年4月21日在纽约市的阿尔文剧院。 制作有2,377场演出,并于1983年1月2日结束。

  1. 孤儿研究的音乐,Aileen Quinn 在 1982 年的电影“安妮”中演唱“明日”。 明天太阳会出现,明天你会赢得奖励奖励。

  2. Spotify 专辑链接,Annie:百老汇音乐剧 30 周年演员录音

  1. 纽约无人机航班,4k观看

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器