【翻译】 调试日志,虚拟机日志
原文:https://medium.com/@jb395official/the-debug-log-the-virtual-machine-log-march-13-2018-76ddbe568f2
译者:中山大学数学学院(珠海)林学渊
大二时给量子做的翻译,转载注明出处,谢谢
调试日志,虚拟机日志,2018 年 3 月 13 日
这个星期我们研究 debug.log。当你怀疑你的钱包有问题时(或者如果你只是对 Qtum 感到好奇的话),debug.log 就是你的好朋友。我们来看看如何找到调试日志(debug log),如何阅读它,以及如何从中发现问题。特别奖主题是虚拟机日志 vm.log。
我是一名独立研究员,偶尔是博主,社交版主,并中意 Qtum 团队的技术指导和社区的高谈阔论。如果你对本文有任何意见或更正,请在社交媒体上联系我。
网络权重,节点数
从 3 月 4 日至 11 日,已知余额为 590.5 万的大钱包赢得了总 4,779 块奖励中的 709 块,或者说 14.84%,网络权重为 3980 万,年回报率为 2.20%。本计算用了大约 11 倍的数据点,并且用了比钱包计算网络权重更好的算法(IMHO),但这个数字是每周更新,而钱包计算的网络权重是每块更新。(编辑过)
调试日志文件
TL;DR debug.log 文件与 wallet.dat 文件位于同一 Qtum 目录中,是记录基本钱包操作和错误情况的文本日志。每行日志都带有 UTC 时间戳,并显示每个同步到钱包区块链的新区块,发送动作,接收动作和错误情况。Qtum 虚拟机日志记录了钱包添加到区块链的合约交易,是代币交易问题很好的参考文件。
每次你更新钱包时,你只要重命名 debug.log 文件为当前日期,比如“debug-2018-03-13.log”,就能保留旧的调试日志,以供参考(或者不保留删掉)。重启新版本钱包就可以写入一个新的 debug.log 文件了。对于 qtumd,使用默认设置的话,debug.log 文件每周保存大约4 MB。
在与 wallet.dat 文件相同的目录下找 debug.log 文件。 debug.log 文件是纯文本文件,可以使用任何文本编辑器或 QT 钱包打开。
每条日志都以 UTC 时间戳开头(不是你当地的时间,不用担心夏令时转换)
这行日志表示在 3 月 7 日 14:27:34 UTC,钱包处理了一个区块并接受了这个区块。
我一般在钱包运行时获取 debug.log 文件的副本。我不确定这在技术上是否正确,但也没有弄坏钱包。QT 钱包中点击帮助 - 调试窗口 - 信息,屏幕的右下角提供了一个按钮,用于打开 debug.log 文件。
非常自然,非常健康
我们将从调试日志显示的正常钱包操作开始,包括钱包启动,正常同步以及发送和接收操作。
启动
启动时,钱包在初始化节点和读取多个文件方面做了很多工作,也许最重要的是 wallet.dat 文件,它包含钱包私钥。初始化后,钱包开始与其他节点建立连接,加载区块,同步区块链。Qtum Core 钱包是一个全节点,需要完整的区块链副本。调试日志显示追赶块写入很快,每秒几个。钱包验证每个区块并将其写入本地的区块链副本。下面例子中,整个启动流程记录了 148 行。这里有摘录的一些要点,为了清晰起见缩短了一些行,黄色高亮是我标出的:
钱包初始化后,在 18:01:26 处它比当前区块链高度落后大约半天(350个区块),并开始从其他对等点快速下载它没有的区块。直到 18:09:27,区块同步更新完毕,继续正常同步新区块。
下面我会举一个钱包日志文件的例子,它无法连接到对等点来同步区块链,so sad。
接收
接受到交易后,日志会显示一个带有交易 ID 的 “AddToWallet” 交易:
交易可以是支付区块奖励或其他接收交易。金额没有列出来,但可以使用交易 ID 在你喜欢的资源管理器中找到详细信息。
发送
发送日志稍微复杂一些。现在我发送 0.2 QTUM; 你可以看到金额和交易ID:
发送的简单解释是 Qtum(née bitcoin)未花费交易输出(UTXO)模型。钱包选择先前整个未花费交易,在本例子中,未花费交易是 1.00000000 QTUM (在日志中没显示,但你可以在资源管理器中查看详细信息)。钱包必须发送整个 1.00000000 交易,对应指令将 0.20000000 提供给新地址并将 0.79909600 返回到钱包控制的零钱地址。发送的 1.00000000,接收地址的 0.20000000 和零钱地址的 0.79909600 之间的差值是 0.00090400:
这个差值是块奖励获奖钱包保留作为发布交易的“小费”,称为交易费用。
其他调试模式
如果你想研究内存池如何管理未确认交易,你可以在启动钱包时使用“-mempool”来记录有关 mempool 的调试记录详细信息。其他调试选项包括:
探索这些选项能产生什么有趣日志行留作练习,“miner”选项就看起来特别好玩。
坏事发生在好钱包
如果你的钱包有问题,那你可能需要从 debug.log 文件中的错误报告中获得排除故障的提示,因为调试文件是你的好朋友。
1. 网络连接断开
Testnet 钱包将新区块同步到#99,479,这时钱包突然断开以太网,因为有人 “意外” 失去互联网连接。从 20:46:46 开始强行关闭8个对等连接(听起来很痛苦)(为清晰起见,缩短了几行):
19分钟后,互联网连接在 21:03:09 恢复,但当前的区块是#99,485(钱包落后6个区块),钱包开始迅速同步区块 99480,99481,99482,99483等。如果你看到 debug.log 文件中的这些“强制关闭”,你绝对应该与你的Internet服务提供商沟通。
2. 时钟设置不正确
我一直强调人们在社交媒体上要把时钟设置正确,但现在我认为这对钱包来说更是个问题。钱包的参考时间是相当宽容的,钱包从它连接的所有对等点收集参考时间,并与当地时间交叉验证。Qtum 中的参考时间(继承自比特币)非常灵活,如果你在糟糕的时间启动它(Qtumd 不太确定),QT钱包会抱怨。 如果你的计算机时区和时钟设置正确,你可以执行“getinfo”命令,可以看到“timeoffset”接近零。
如果你正在运行 qtumd 服务器钱包 - 它可以与许多对等点连接,那肯定会发现一些有错误时间戳的区块,记录有 “block timestamp too far in the future”。 成功挖到新区块但是搞错参考时间的钱包运气不太好。 debug.log 会显示 10 到 20 个或更多由其他对等点中继的相同坏区块。下面是来自 4 个节点的相同坏区块(为清楚起见,缩短了几行日志):
qtumd 记录了网络所有或好或坏的行为。你可以把你的钱包想象成在吵闹聊天室里的一个公平而无情的管理员(向 Tony Sydney 大喊大叫),它必须拒绝,删除和禁止用户提供不适当的消息。钱包必须禁掉节点,断开不活动的节点,并拒绝具有错误请求头的区块。你的钱包和其他钱包都是被称为 Qtum Mainnet Ignition 网络节点的“聊天室”中的 24/7(7天24小时) 管理员。
3. 钱包不同步区块
老实说,很难通过防火墙阻止我的钱包连接到网络;钱包总是不停地穿过防火墙。 最后,我弄坏了钱包中的网络,因此它无法连接到其他对等点来获取本次启动的调试日志文件。钱包记录了 77 行,调试日志在“dnsseed thread exit”之后停止,没有同步区块。
特别奖主题:虚拟机日志
每个节点都将每个合约交易保存到区块链的本地副本上。当节点验证包含了合约交易的新区块时,它会将区块链索引到存储合约的区块,再处理这些合约交易。节点将这些合约交易的结果记录到虚拟机日志 vm.log 中。
你可以在 Qtum 文件夹中找到 vm.log 文件,以及 wallet.dat 和 debug.log。 vm.log 文件很简洁。 它列出了 UTC 交易时间和合约地址。如果发生错误,合约交易失败,它会将原因和时间、地址记录在一起。
好交易
这里有一些很好的合约交易,vm.log 中记录的:
如何阅读:日志行通常比资源管理器时间戳晚几秒钟,而资源管理器每 16 秒显示一次。在 24 小时制 UTC 时间 12:49:54 显示有 112,818 块,这时资源管理器时间戳为 UTC 时间 12:49:52。合约地址 57931faffdec114056a49adfcaa1caac159a1a25 是区块链里的 SpaceCash(SpaceChain)智能合约,因此我们知道钱包处理了 SPC 代币交易,我们可以查看区块 112,818,可以看到有人交易了 3,960 个 SPC 代币:
你的博主坚信在资源管理器上浏览加密交易,较小的测试量是最好的开始。 如何才能进行代币交易?
假设你是最近空投的接收者。你已将 QRC20 代币添加到钱包,现在你已准备好发送代币交易。你从之前的博客中了解到,所有代币交易都是通过将交易发送到智能合约来实现的,你可以观察所有智能合约交易的执行,包括你的交易。
当你从钱包发送一些代币时,你可以查看合约交易页面并观察你测试的小交易。在确认交易进入智能合约后,无需更改钱包的其他内容,就可以放心发送剩余代币的交易。
但是要是好的钱包发生了坏事 – 你的测试交易没有执行呢?
不太好
以下是 vm.log 中记录的一些有问题的交易:
如何阅读:在 06:30:16 的第一笔交易中,智能合约在执行交易前耗尽了gas。 有人将 gas 设置得太低,所以他们失去了那部分 gas,但有机会重试。
在 10:05:39 的第二个例子中,合约报告有一个错误指令。我没有分析过这类错误,但是我认为如果你试图在 ICO 售罄后进行购买,它们可能会产生。
对于失败的合约调用,资源管理器将显示该交易为空白(没有代币名称,没有交易金额),但据我所知,vm.log 是找出合约交易失败原因的唯一方法。 如果你在代币交易方面遇到问题,那虚拟机日志也是你的好朋友。
我们今天在罗马这个永恒的城市写完博客。《总统杀局》(Ides of March)是在两天后的 3 月 15 日放映,但我不想等到那个时候才发布这个博客。根据 Nodemap,意大利有 6 个Qtum节点,其中一个在罗马。Qtum 真的是世界级的(甚至至少有一颗低地球轨道卫星) - 为什么不庆祝一下罗马的历史,大都会文化和 Qtum 节点呢?
这里希望你所有的交易都顺利进行,如果不的话,调试日志和虚拟机日志就是你的好朋友。
保重,保持在线安全。
Jackson
参考
研究调试日志时听的音乐:Radio Easy&Italy - Rome
无人机在古罗马斗兽场,Yuneec Q500无人机,4k观看.
通过以下主题查看我过去的报告
QTUM 的有限供应量 - 减半 - 2018年3月4日
如何减半,以及为什么永远不会超过 107,822,406.25 QTUM
QRC20 代币报告 - 2018年2月25日
QRC20 代币如何工作,最近的空投为例。 (阿姆斯特丹)
Testnet 和 Qtum Mainnet 性能 - 1月1日至8日
Qtum 测试网络(testnet)。 (巴西里约热内卢)
发布于2018年1月7日
使用虚拟专用网络(VPN)进行 staking。(首尔)
发布于2017年12月31日
交易费用。
发表于2017年12月24日
Passphrases,一个密码短语猜测脚本。(日内瓦,瑞士)
发布于2017年12月17日
内存池(mempool)和未确认交易处理。 (悉尼)
发布于2017年12月10日
Qtum Mainnet 成果 – 11月27日 - 12月3日
孤儿块(香港 - 大屿山)
发布于2017年12月3日
Qtum Mainnet 成果 – 11 月 20 日至 26 日
QTUM.explorer.io 合约页面(柏林)
发布于2017年11月26日
一个非常简单的 SHA-256 哈希算法示例(柏林 - 弗里德里希斯海因)
发布于2017年11月20日
分发钱包获得区块奖励 ,五大网络权重(Big Five Network Weight )(北京)
发布于2017年11月12日
Qtum Mainnet 成果 – 10月30日 - 11月5日
SHA-256哈希算法,目标和难度(首尔)
发布于2017年11月5日
关于 PoS 采矿的故事(柏林马拉松)
发布于2017年10月29日
基金会钱包的离开(柏林)
发布于2017年10月29日
非正式的 staking 常见问题。
发布于2017年10月26日
网络权重,奖励统计时间和节点图(2017年悉尼)
发布于2017年10月22日
为 PoS挖矿模拟选择正确的UTXO大小
发布于2017年10月21日
我的 1.0 版 PoS 挖矿模拟器
发布于2017年10月16日
Qtum Mainnet 点火结果 – 10月9 - 15日
Mainnet 图表介绍(新加坡)
发布于2017年10月15日