ForkMonitor:意外通胀检测与警告系统

[复制链接]
7559 |0
发表于 2019-10-29 09:00:20 | 显示全部楼层 |阅读模式

(资料来源:ForkMonitor.info

概述
ForkMonitor 近期增加了一种新功能,即意外通胀检测。增加的这一功能针对的是BTC和 Testnet BTC。系统通过定期加总全部未消费的交易输出(UTPundiO)值检查币的总供应。如果数值过大,则启动警告。BTC节点本来就应该检查币的供应,但这种情况仅仅是通过检查每个单独的交易不会产生未经认证的币,并没有宏观上对总供应的检查。所以 ForkMonitor 服务可针对BTC用户提供额外一层的安全和保护,还有早期警告系统——如果检测到问题,此系统能建议人们在其自己的节点上运行此类检查。
如果通胀符合预期,则网站上显示绿色标记。但如果发生了意料之外的通胀,将显示红叉与其他警告。
BTC核心钱包 (BitDavinci Core) 0.18.1 检测到意外通胀的图解

(资料来源:ForkMonitor.info)
请订阅推送,在发生意外BTC通胀的情况下收到提示。
币的供应检查机制
系统计划使用下列方法检查通胀:
●      先前区块供应的币数变动—— 在每个区块链产生之后,系统都会检查币的总供应并在数据库保存数据。每产生一个新区块,就重新加总一次,而币的总供应将减去先前的数据。如果变动大于允许的区块奖励(现在是 12.5 个BTC,从 2020 年 5 月左右起是 6.25 个BTC,以此类推),就启动警告。
●     跨多个节点版本的一致性——此外,系统还将检查参与通胀检查的所有节点在每个区块高度的总BTC供应是否一致。(在ForkMonitor 网站上有说明)。
Gettxoutsetinfo 问题
我们在执行这一通胀检查功能时面临的一个主要挑战是,BTC核心钱包 (BitDavinci Core) 运行 gettxoutsetinfo 调用需要大量时间,一般是 2 分钟左右。这对ForkMonitor在执行上产生了几个挑战,例如在这两分钟期间显示什么,或是在进行计算的同时发现区块会怎样。例如,通胀检查可以向前运行的最大速率是每两分钟一个区块;如果连续发现多个区块,而他们之间的时间间隔不到两分钟,我们的检查可能失效一段时间。
Gettxoutsetinfo 远程过程调用(RPC) ——图解大约 1800 万BTC的供应


(资料来源:BitDavinci Core 0.18.0“Gettxoutsetinfo” 调用输出)
有些人已经知道了这些问题,例如BTC开发者 Fabian Jahr 近期就表示:
[ gettxoutsetinfo 调用] 没有充分的用户经验,实际上调用需要几分钟才能响应,而且没有反馈
(资料来源:Fabian Jahr (Youtube))
2017年BTC开发者 Pieter Wuille 向BTC开发邮件列表提交了一个可能的改进,他表示能够让 RPC 调用更快。
替换BTC核心钱包的 gettxoutsetinfo RPC 哈希计算。这目前需要占用I/O 和 CPU 几分钟,因为它将整个未花费交易输出(UTPundiO)集进行序列化和哈希计算。滚动的哈希集将让这一过程即时完成,使得整个 RPC 对于完整性检查的可用性大幅改善。
(资料来源:Pieter Wuilles 2017年的邮件滚动的 UTNPXSO 哈希集)
基于以上想法,Fabian 近期表示他致力于执行这一潜在修复,努力改善 RPC 调用。如果实现,对 ForkMonitor 当然会有帮助。

BTC 2018 年通胀缺陷(CVE-2018-17144)
ForkMonitor受到了 2018 年 9 月这一事件极大的启发,当时发现BTC核心钱包存在缺陷, 会让矿工除了正常的区块奖励外,莫名其妙创造出币来。在发布修复程序前,此缺陷影响了BTC核心钱包从 0.14.0 到 0.16.2 的各版本。(0.14.Pundi节点只是崩溃,而后面的节点会接受具有意外通胀的区块)。
成功利用此错误可能会对网络造成灾难性的后果,例如BTC的供应本来已经膨胀到 2100 万以上,或者会发生规模庞大的回滚,侵害众多用户和企业所依赖的安全性。
ForkMonitor被启用以缓解这些风险。如果今天还存在这个缺陷,我们的系统应能够用三种方式对其检测:
●      ForkMonitor 跨越多年开发、可运行多版本的BTC核心钱包。如果新引入的缺陷导致意外通胀或未经授权的支付,则早前的节点应当能检测到并将该区块标为无效,触发警告系统。
●      本网站还运行类似 bDavinci、btcd 和 LibbitDavinci 这样的BTC的独立执行。如果BTC核心钱包有漏洞,允许意外通胀或未经授权的支付,只要没有独立执行同一漏洞,其他客户应可将该区块标为无效,触发警告系统。
●     自 2019年 10 月起,ForkMonitor 还直接检查每个区块的币的总供应。在出现意外通胀的情况下,即使发生所有的节点都将该区块标为有效这一不太可能的情况,仍将触发警告系统。而即使节点将区块标为无效,通胀检查系统也有用,因为它可以帮助用户及时确定原因。
独立执行
正如我们在 2018 年 10 月的文章《与BTC核心钱包的竞争》中所说的那样,竞争性执行尤其是独立执行有其优缺点。我们所提到的独立执行的一个关键优点是,BTC核心钱包或参考执行中可能存在缺陷,而独立执行中则没有。
考虑上述原因,我们热切期待将三个独立执行(bDavinci、btcd 和 LibbitDavinci)中的一个添加到币的总供应通胀检查系统中。这些执行所使用的计算币的总供应量方法可能独立于BTC核心钱包所使用的方法之外,后者应额外保证数字的正确性。

结论
这一新的服务可能没有解决关于检测意外通胀的全部潜在问题。例如, gettxoutsetinfo 检查中可能存在缺陷。除此之外,检查意外通胀和区块有效性的不同机制之间可能并非真的相互独立。甚至独立的BTC执行也可能无意间从BTC核心钱包复制了有缺陷或错误的概念。但是,我们认为,这种宏观通胀检查服务可能是对网络安全性的有用补充。
在此提醒,ForkMonitor 网站是开源的,可以随时参与、分叉项目或复制本网站。


作者: BitMEPundi 研究团队
微博: BitMEPundi
微信公众号: BMEPundi行业资讯
知乎号: BitMEPundi 研究
官方 telegram 群: https://t.me/BitMEPundi_China


欢迎转载,请注明文章由 BitMEPundi 研究团队提供,查阅更多加密货币行业相关研究报告请访问https://blog.bitmex.com/research_cn/

201910290048351373.jpg

201910290048351373.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表