LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > Filecoin网络不存在“双花”问题

Filecoin网络不存在“双花”问题

2021-03-23 FilCloud 来源:区块链网络

2021 年 3 月 18 日,有报道称,由于 Filecoin 的远程过程调用(RPC)代码中出现了一个“严重漏洞”,出现了“双花”。这些说法是不正确的,具有误导性。


Lotus 团队对报告进行了彻底的调查,没有发现 Filecoin 网络或 RPC API 代码有任何问题。区块链本身没有重复支出,API 代码中也没有错误。

有问题的交易所已经在他们的簿记系统中恢复了不正确的交易(没有资金损失),并正在审查他们的存款处理逻辑,以纠正他们的 API 使用情况。

“双花”又名双重支付,也就是双重花费的意思。指的是在数字货币系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况。
PART1.事件回顾

1. 事件报告

今天早些时候,Lotus 团队收到一份报告,称一家交易所错误地使用 Lotus API 来评估 Filecoin 网络中的转账/存款。

API 错误使用情况是因为用户报告了交易所他们的帐户被交易所记账系统错误地重复记录。这一问题已在交易所记账系统恢复 — 链上本身并没有重复记录。

2. API 误解

问题的核心是 Lotus 的链状态检查 API 使用不当,API 在处理多个类似消息时的行为与预期不同。误解 Lotus API 的输出会导致记账系统将原始消息和替换消息都算作相同的发送者和接收者。到目前为止,我们只知道一家交易所受到这个问题的影响。

虚假报道登上了头条新闻。关于网络上“双花”的不准确说法在社交媒体渠道上被传播开来,并成为了文章的头条新闻。这些说法中有许多已经经过调查,并被确定为虚假的。团队并没有发现 Filecoin 网络或 RPC API 代码有任何问题。在得知事实后,许多团体和媒体机构都在更正他们的报道。

PART2.正在采取的行动

1. 受到影响的交易所

交易所发现了这对于 API 的错误使用,并已立即采取行动停止存款、提现和转账。他们已经恢复了有关的错误交易(因此在这次事件中没有资金损失),并且正在更正他们对 Lotus API 的使用,以符合推荐的使用方法。

2. 偶发实例

其他交易所已经收到预警,正在审查自己的代码逻辑,以确保不受影响。其中许多审查已经完成,据我们所知,目前还没有其他交易所以这种方式错用 API。

3. Lotus 团队

Lotus 团队正在积极与所有交易所合作,以确保正确处理此行为,并改进 API 文档,以确保所有其他交易所都能正确地检查 Filecoin 链状态。


4. 社区和媒体

一些团队正在共同努力,与媒体联系,澄清被指控事件的细节和事实,并帮助消除错误信息。


5. 社区团队

社区成员提供可以帮助其他社区成员准确、周到地报告问题的方法,避免意外传播错误信息。

PART3.技术细节


1. 相同信息

Lotus 团队了解到,问题产生于两条消息共享相同的发送方/接收方详细信息和相同的 nonce 但在同一个 tipset 中包含不同的 Gas 参数而引起的。像这样两个类似的消息是非常常见的,比如以改变与消息的 Gas 费来替代消息就会形成这样两条类似的消息。

这种情况可以由 Filecoin 网络安全、正确地处理,不会导致两次转账:两条消息中的一条会被执行,另一条被忽略。

2. 错误使用 API

但是,根据人们对链的检查方式,这会呈现出消息被处理两次的外观。具体地说,有关交易所使用了一种错误的处理链状态的方式——在 tipset 的每个块上调用 ChainGetBlockMessages,然后在这些消息上调用 StateGetReceipt。

3. 错误的 API 期望

容易引发错误的地方是,当对两条相似的消息调用 StateGetReceipt 时(其中一条被执行,另一条被跳过),它将提供相同的结果:两者都对应于执行的消息。无可否认,这是违反直觉思维的,但却是有意为之的行为。

StateGetReceipt 方法的主要用例是 Lotus Miner 和交易流程使用的事件处理程序。

在替换消息的情况下,这些模块并不关心返回的回执对应于原始消息还是替换消息,它们只想知道消息是否在链上成功执行。

我们在此处对文档进行了说明:

https://github.com/filecoin-project/lotus/pull/5838.

4. 使用正确的 API

大多数交易所都正确地使用 ChainGetParentMessages 和 ChainGetParentReceipts 进行记账,以确定链上执行和成功执行了哪些消息。

这些是 Lotus 本身在状态计算期间使用的 API,因此可以保证以这种方式正确反映链状态。

对每条消息执行 StateReplay 将为您提供完整的调用结果,这样您就可以将返回的 InvocResult 中的 MsgCid 与查询消息的 CID 进行比较。这是推荐交易所正确检查链状态并保持其内部报告系统同步的路径。

End

非常感谢您对 IPFS&Filecoin 项目的持续支持。我们很高兴继续与您一起,为人类信息建立一个强大的,去中心化和高效的基础。

FilCloud 帮你迅速了解 IPFS 领域的热点技术和应用公众号:filcloud

—-

编译者/作者:FilCloud

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...