星球日报
搜索
手机客户端
iPhone · Android
公众号
微信公众号

BTCP 虚增 200 多万,突破 2100 万上限

2018-12-26

该报告称,BTCP 虚增 204 万个,将 BTCP 的实际发行量推升至 2304 万,而非官方宣称的 2100 万。

编者按:原文来自theblockcryptomedium,作者分别为Steven Zheng和Bitcoin Private。

加密资产数据提供商 Coinmetrics 近期发布了一份长达 10 页的报告,题为《不要轻信,要去验证:BTCP 案例研究》 ( Don 's trust, verify: a Bitcoin Private case study ),分析了 Bitcoin Private 的发行量。

该报告称,BTCP 虚增 204 万个,将 BTCP 的实际发行量推升至 2304 万,而非官方宣称的 2100 万。

解读Coinmetrics 报告 

Bitcoin Private 是比特币与 ZClassic 的分叉合并( fork-merge )。所谓的分叉合并,就是将两条现有的链的 UTXO ( Unspent Transaction Output )集合组合成一个新的链。

值得注意的是,ZClassic最初就是从 Zcash 分叉出来的,因此具有较强的隐私功能,其分叉目的是为了取消区块创始人的奖励;之后为了振兴 ZClassic 社区,ZClassic 又分叉出了 Bitcoin Private 。

与比特币类似,Bitcoin Private 总发行量也被设定为 2100 万个。但 Coinmetrics 发现:“在比特币 UTXO 导入和发送到屏蔽池的过程中,有 204 万枚 BTCP 被秘密发行,从而将实际的 BTCP 发行上限推高至2304万枚。”

(Odaily 星球日报注:屏蔽池包含存储在屏蔽地址中的 Token,屏蔽地址使用一种匿名交易的隐私技术 Zk-SNARKS  )

根据 Coinmetrics 的数据,这些虚增的 BTCP 与 BTCP 的白皮书和官方公告相矛盾,因为白皮书和官方公告宣称 BTCP 总量被设定为 2100 万枚且没有预挖矿。 

BTCP 虚增 200 多万,突破 2100 万上限

BTCP 虚增 200 多万,突破 2100 万上限

在发现从 BTCP 节点提取的发行数据与 BTCP 预期剩余发行量之间存在差异后, Coinmetrics 开始思索 BTCP 被预挖矿的可能性。根据计算,在 Coinmetric 撰写报告时,预计 BTCP 剩余发行量为2060.7万。然而, Coinmetrics 观察到的节点数据显示,BTCP剩余发行量为 2084.1 万个 ( Coinmetrics 指出,这个数字不包括屏蔽池里的 Token )。 

根据 Coinmetrics 的说法,有几个假设可以解释这种差异: 

  • Coinmetrics 观测的节点不在正确的链上,并且正在接收错误的数据。

Coinmetrics证实,他们观测的节点与 btcprivate.org 运行的浏览器发布的区块哈希是相同的,btcprivate.org 是 BTCP 官方网站。

  • 在 pull 代码中有一个错误,导致 Coinmetrics 无法准确接受数据。

Coinmetrics 证实,同样的 pull 代码能够将比特币数据准确地发送到比特币节点。

  • 自白皮书发表以来,挖矿奖励发生了变化。

Coinmetrics 证实,BTCP 的挖矿奖励没有发生变化。

  • BTCP 使用的隐私保护技术 Zk-SNARKS 遭到破坏,有人将已经生成BTCP 发送回屏蔽池里了。

Coinmetrics 认为这不可能的,因为如果 Zk-SNARKS 被利用,黑客就会攻击更具有价值的 Zcash,它和 BTCP 使用相同的技术。

  • 有一个隐藏的预挖矿区块,Coinmetrics 证实了这一点。

Coinmetrics 解释说,在 UXTO 导入 BTCP 过程中,BTCP 网络生成了一个“特殊块”。该网络包含 400 个额外输出( extra outputs ),每个输出包含 50 个比特币。Coinmetrics 发现有 102 个这样的“特殊块”。通过计算这些数字( 102 个特殊块* 400 个额外输出* 50 个比特币),Coinmetrics 得出结论,额外产生了 204 万个 BTCP。

在下图中,Coinmetrics 列出了预期的比特币UXTO导入与实际导入的对比:

BTCP 虚增 200 多万,突破 2100 万上限下面这张图清晰地显示了这些异常的数据块:

BTCP 虚增 200 多万,突破 2100 万上限那么这些虚增的 BTCP 去了哪儿? Coinmetrics 发现,这些 Token 在 2018 年 4 月 29日被转入到屏蔽地址(即屏蔽池);7 月 11 日至 8 月 18 日,大约有 30 万枚 BTCP 从屏蔽池中转出,剩下的 174万 枚“地雷”没有异动。

Coinmetrics 估计,如果这30万枚 Token 在公开市场上出售,卖家“可能已经净赚 100 万至 300 万美元。”

Coinmetrics 注意到的一件有趣的事情是,“ BTCP 上只有大约 15% 的Token是活跃的。”这意味着,预先挖矿产生的 BTCP 将在市场上活跃的BTCP 中占相当大的比例。 

Coinmetrics 估计,在分叉期间有 312万 BTCP 产生并活跃,而从矿屏蔽池转移的 30 万个BTCP 将占活跃 BTCP 的9.5%。换句话说,“每 10 个后分叉后的 BTCP 中,就有 0.95 个来自预挖矿。”

报告的最后,Coinmetrics 也探讨了为什么这些“地雷”(预挖矿)没有被探测到。Coinmetrics给出了两种解释:不好的发行量检查机制;弱 UTXO 导入验证。 

1.不好的发行量检查机制:

BTCP 产生来源十分复杂,这种“秘密而陌生”的过程造成发行量审计工具和功能十分薄弱。“BTCP 用户不得不相信,UTXO 导入和挖掘过程都是按照开发人员的要求进行的。” 

2.弱 UTXO 导入验证:

在 UTXO 导入之后,BTCP 团队向社区成员发布了文件和审计工具。这些文件“包含单个导入块的内容”,以及由单个比特币 UTXO 导入的 10000 个交易。

根据 Coinmetrics 的说法,使用共识代码来审核这些文件的人不会发现任何问题,即每个块确实有10000个事务,并且每个事务的第一个输出与预期的BTC值和脚本确实是匹配的。但是,共识代码并没有检查块中是否“没有额外输出”。因此,块中的任何额外输出(硬币)都会被忽视。 

BTCP 官方回应:等待社区投票达成销币共识

12 月 23 日,BTCP 开发团队发表声明称,核心开发团队在看到 Coinmetrics 文章后,立即进行了调查,目前可以确定这些数字(虚增204万)是准确的,但BTCP 开发团队并不清楚这个漏洞的来源、目的和受益者。

BTCP 团队称,由于该项目是开源的,所以导致了这次的问题。此前,BTCP 将开发代码进行公开,公开的目的是社群贡献者能够查看并帮助修复代码;然而,代码开源也带来负面影响,发现漏洞的人会选择故意不报告,并在分叉期间利用漏洞牟利。

核心开发团队还表示,隐藏预先挖矿的原因是缺少一行代码合并来自 BTCP 代码贡献者的拉取请求,缺少的这行代码允许“由于节点没有正确验证伪造的分叉块,所以可以利用分叉挖矿”。

“BTCP 源代码中的所有错误在分叉之前都没有被发现,我们对此表示遗憾。” BTCP 开发团队说,“但是这种情况在技术领域很常见。”

不过,BTCP 开发团队也表示,这个漏洞今后不可能再次发生,也不可能再被利用。“这种特殊的漏洞,只能在今年早些时候分叉期间被利用。”

下一步怎么办? BTCP 团队也给出解决方案:

1.CoinMetrics 认为屏蔽地址中只有不到 2 万个合法的 BTCP 代币,以及 170—180 万个非法的 BTCP 代币。因此,我们团队倾向于删除所有屏蔽地址中的代币,虽然这会导致 20 万个合法的 BTCP 代币消失,但总比将 170—180 万个非法代币留在市场更可取。同时,这也可以解决供大于求的问题。

2. 我们可以执行一个硬分叉来删除所有“死币”(不活跃的币),当然这个数量可能会超过 1200 万,我们认为这会解决供应总量超标的问题,但不会删除非法代币。 

目前,BTCP 开发团队正着手进行第一个选择,当然最后的决定需要社群投票达成共识。不过,BTCP 团队也强调,无论哪种选择一定要尽快落实,因为黑客可能会提前从屏蔽池中将代币转移。

“最坏的情况就是,我们对这 170 万枚 BCTP 进行快照,及时回滚交易,但我们不希望这样的情况发生。”

BTCP 团队也向交易所及个人发布通知,要求所有的交易所关闭 BTCP 的存款以及取款,从而降低未来可能发生的回滚对网络造成的伤害;对于个人,用户在转账时最好谨慎操作。

参与讨论

登录后参与讨论

秦晓峰

新锐作者

秦晓峰

做最专业的区块链报道,爆料交流加微信 Pnjun0811~

总文章数: 78


分享至

微信扫一扫分享

0
金融比特币