2021年3月18日,根据相关报道称,由于Filecoin的远程过程调用代码存在“严重漏洞”,出现了“双花”。所谓“双花”,指的是双重支付,一笔资金被花费了两次。这就好比有些人使用投币电话,在硬币上狡猾地穿了一根细绳,尽管投掷了硬币,但实际的交易并没有完成,他可以在打完电话后利用细绳再将硬币取出,如法炮制,便能用这枚硬币打无数次电话。V|jasonbody
但此次这样的说法是不正确的,且具有强烈的误导性。对于此次事件Lotus团队对该报告进行了彻底的调查,并在事后声称“没有发现任何Filecoin网络和RPCAPI代码的相关问题”。链上并不存在双花问题,API代码也没有错误。有关交易所已经修正了该交易所内的错误交易记录。
Sygnum宣布将ATOM添加到数字资产银行产品和服务组合中:金色财经报道,数字资产银行Sygnum宣布将Cosmos代币ATOM?添加到其受监管数字资产银行的产品和服务组合中。Sygnum客户现在可以方便地在其机构级平台上购买和持有ATOM,并抵押他们的股份以获得有吸引力的抵押奖励。[2023/5/11 14:57:44]
事件回顾
事件报告:早前Lotus团队收到交易所错误使用LotusAPI计算Filecoin中的转账/存款。因为用户报告了交易所他们的账户被交易所记账系统错误地重复记录。该问题被记账系统恢复,链上本身并没有重复记录。
Circle 2022年12月储备报告:金库储备资金超445亿美元:金色财经报道,美元稳定币 USDC 发行方 Circle 发布 2022 年 12 月的储备报告,该报告由 GrantThornton 会计集团审计,详细说明了稳定币发行方 Circle 的储备金库的构成,目前 44,553,543,212 USDC由托管账户中的 44,693,963,701 美元支持,其中很大一部分为美国国债。Circle 的储备基金注册为政府货币市场基金,该基金的股权由 Circle 全资拥有,包括 14 种不同的美国债券,价值超过 235 亿美元,该基金还持有 4890 万美元现金,另外还有 3300 万美元应归该基金(due to the Fund),但被“时间和结算差异”所抵消。持有 Circle 现金储备的美国银行包括纽约梅隆银行、Citizens Trust Bank、Customers Bank、New York Community Bank、Signature Bank、硅谷银行和Silvergate Bank。(cointelgraph)[2023/1/30 11:36:50]
API误解:出现此次问题的核心原因在于对Lotus链状态检查API使用不当,在多消息处理时与期待处理方式不同。误解LotusAPI的输出会导致记账系统将原始消息和替换消息都算作相同的发送者和接收者。目前为止只有一个交易所出现了该问题。
以太坊向下触及1300美元/枚:金色财经报道,行情显示,以太坊向下触及1300美元/枚,日内跌17.54%。[2022/11/9 12:35:11]
自媒体虚假报道:出现了该问题之后,有关“双花”的不正确的文章在自媒体中传播。大部分的报道已经被勘误,RPCAPI代码并不存在代码问题。
当前采取的行动
受影响交易所:发现错误的交易所立即采取措施对于API的错误使用,暂停了用户的充值、交易和转账。该错误被快速恢复,用户并没有资金损失。该交易所正在采取措施纠正对LotusAPI的使用。
预警:其他交易所受到此次事件的预警,并着手审查他们的代码逻辑,以确保不受此次错误的影响,目前还没有另外的交易所出现同样的错误。
华商报发布数字藏品:金色财经报道,据华商报官方公众号,为庆祝改版25周年,华商报将在区块链上发售改版25周年珍贵头版数字藏品系列,头版数藏发售分两个批次,分别是公益免费版和特别付费版(共4款,每款发售价格9.9元),目前头版数藏的上链发布筹备工作已经完成,另外,华商报还为本次发售活动额外准备了一份限量空投藏品,这9款头版数藏将通过区块链确权。[2022/6/28 1:36:35]
Lotus团队:目前Lotus团队正在积极的与交易所沟通合作,以确保这一事件正确解决,并改进API文档。
社区和媒体:社区某些团队正在积极与媒体联系以消除这次错误事件的负面影响。
社区团队:社区成员提供可以帮助其他社区成员准确、周到地报告问题的方法,避免意外传播错误信息。
技术细节
相同信息:根据Lotus团队披露的消息,此次问题的根源在于有两条消息有相同的发送者/收到者详细信息、相同的nonce但拥有不同的Gas参数——被包含在同一tipset中。这样类似的信息非常常见,但这样的情况通常Filecoin都会安全且正常的处理,不会出现这次错误情况。一般其中一条信息被执行,另一条被忽略。
错误使用API:但这次根据人们对链的检查方式,呈现出了消息被处理两次的样子。具体来说,有关交易所使用了一种错误的处理链状态的方式——在tipset的每个块上调用ChainGetBlockMessages,然后在这些消息上调用StateGetReceipt。
错误的API期望:当StateGetReceipt被调用在两个相似的消息上,它将提供相同的结果给人感觉两种消息都被执行了。这诚然是一种违背直觉思维的行为,但却是有意为之。StateGetReceipt的主要应用场景是在Lotus矿工和处理交易过程中使用的事件处理程序(https://github.com/filecoin-project/lotus/blob/79a8ff04fd5362a367fd7d6469e5287a47baa571/chain/events/events_called.go#L586)中。在消息被替换的情况下,这些模块并不关心返回的信息是对应原始消息,还是对应替换的消息——它们只是想知道消息是否在链上成功执行。我们已经在这里的文档中增加了澄清:https://github.com/filecoin-project/lotus/pull/5838。
API的正确使用方式:大多数交易所都是正确使用了ChainGetParentMessages和ChainGetParentReceipts来记账,以计算出链上执行了什么消息、哪些消息成功。这些都是Lotus本身在链state计算过程中使用的API,以保证使用者能通过这种方式正确反映链状态。
对每一条消息执行StateReplay,可以得到完整的调用结果,这样使用者就可以将返回的InvocResult中的MsgCid与查询消息的CID进行比较。这是推荐交易所的正确检查链状态并保持内部报告系统同步的步骤。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。