掃碼下載
BTC $74,658.56 -0.12%
ETH $2,329.77 -1.05%
BNB $628.91 +0.99%
XRP $1.42 +1.96%
SOL $87.89 +3.59%
TRX $0.3266 +0.21%
DOGE $0.0976 +2.13%
ADA $0.2547 +3.45%
BCH $451.82 +2.37%
LINK $9.43 +1.82%
HYPE $43.52 -2.27%
AAVE $113.02 +6.74%
SUI $0.9866 +2.62%
XLM $0.1664 +4.96%
ZEC $334.12 -2.31%
BTC $74,658.56 -0.12%
ETH $2,329.77 -1.05%
BNB $628.91 +0.99%
XRP $1.42 +1.96%
SOL $87.89 +3.59%
TRX $0.3266 +0.21%
DOGE $0.0976 +2.13%
ADA $0.2547 +3.45%
BCH $451.82 +2.37%
LINK $9.43 +1.82%
HYPE $43.52 -2.27%
AAVE $113.02 +6.74%
SUI $0.9866 +2.62%
XLM $0.1664 +4.96%
ZEC $334.12 -2.31%

Filecoin「雙花事件」回顧:交易所記帳不準確

Summary: Filecoin沒有出現雙花問題。
FilecoinNetwork
2021-03-19 11:39:17
收藏
Filecoin沒有出現雙花問題。

本文來自於Filecoin Network。

2021年3月18日,有報導稱,由於Filecoin的遠程過程調用(RPC)代碼存在 "嚴重漏洞",出現了 "雙花"。這些說法是不正確的且具有強烈誤導性。

Lotus團隊對該報告進行了徹底調查,沒有發現任何Filecoin網絡和RPC API代碼的相關問題。鏈本身不存在雙花問題,API代碼也沒有錯誤。有關交易所已經修正了該交易所內的錯誤交易記錄,並正在審查他們記帳系統中的充值處理邏輯,以改正他們的API使用。

事件回顧

  • 事件報告 --- 今日早前,Lotus團隊收到交易所錯誤使用Lotus API來計算Filecoin網絡中的轉帳/存款。API錯誤使用情況是因為用戶報告了交易所他們的帳戶被交易所記帳系統錯誤地重複記錄。這一問題已在交易所記帳系統恢復 --- 鏈上本身並沒有重複記錄。

  • API誤解 --- 該問題的核心是對於Lotus的鏈狀態檢查API使用不當,在處理多個類似消息時,其處理方式與所期待的不同。誤解Lotus API的輸出會導致記帳系統將原始消息和替換消息都算作相同的發送者和接收者。到目前為止,我們只知道有一個交易所受到這個問題的影響。

  • 虛假報導成為文章標題 --- 有關網絡"雙花"的不正確陳述在社交媒體渠道中傳播,並進入文章標題。這些報導中的內容已被調查並確定為錯誤信息。團隊並沒有發現Filecoin網絡或RPC API代碼的問題。在了解了事實之後,許多團隊和媒體機構正在糾正其報導。

正在採取的行動

  • 受到影響的交易所 --- 有關交易所發現了這對於API的錯誤使用,並已立即採取行動,停止充值、提現和轉帳。他們已經恢復了有關的錯誤交易(所以在這次事件中沒有資金損失),並正在糾正他們對Lotus API的使用,以符合推薦的使用方法。

  • 偶發案例 --- 其他交易所已經收到預警,正在審查他們的代碼邏輯,以確保他們不受同樣錯誤的影響。其中許多審查已經完成------據我們所知,目前還沒有其他交易所以這種方式錯用API。

  • Lotus團隊 --- Lotus團隊正在積極與所有交易所合作,以確保正確處理這一行為,並改進API文檔(https://github.com/filecoin-project/lotus/pull/5838),確保所有其他交易所正確檢查Filecoin的鏈狀態。

  • 社區和媒體 --- 一些團隊正在共同努力,與媒體聯繫,澄清所稱事件的細節和事實,並幫助消除錯誤信息。

  • 社區團隊 --- 社區成員提供可以幫助其他社區成員準確、周到地報告問題的方法,避免意外傳播錯誤信息。

技術細節

  • 相同信息 --- 就lotus團隊所知問題源自於有兩條消息有相同的發送者/收到者詳細信息、相同的nonce但擁有不同的Gas參數------被包含在同一tipset中。像這樣兩個類似的消息是非常常見的,比如以改變與消息的Gas費來替代消息就會形成這樣兩條類似的消息。這樣的情況會由Filecoin網絡安全、正確地處理,不會導致兩次轉帳:兩條消息中的一條會被執行,另一條被忽略。

  • 錯誤使用API--- 然而,根據人們對鏈的檢查方式,這會呈現出消息被處理了兩次的樣子。具體來說,有關交易所使用了一種錯誤的處理鏈狀態的方式------在tipset的每個塊上調用ChainGetBlockMessages,然後在這些消息上調用StateGetReceipt。

  • 錯誤的API期望 --- 容易引發錯誤的地方是,當StateGetReceipt被調用在兩個相似的消息上(其中一個被執行,另一個被跳過),它將提供相同的結果給人感覺兩種消息都被執行了。這誠然是一種違背直覺思維的行為,但卻是有意為之。StateGetReceipt的主要應用場景是在Lotus礦工和處理交易過程中使用的事件處理程序中。在消息被替換的情況下,這些模塊並不關心返回的信息是對應原始消息,還是對應替換的消息------它們只是想知道消息是否在鏈上成功執行。我們已經在這裡的文檔中增加了澄清:https://github.com/filecoin-project/lotus/pull/5838。

  • 使用正確的API--- 大多數交易所都是正確使用了ChainGetParentMessages和ChainGetParentReceipts來記帳,以計算出鏈上執行了什麼消息、哪些消息成功了。這些都是Lotus本身在鏈state計算過程中使用的API,以保證使用者能通過這種方式正確反映鏈狀態。對每一條消息執行StateReplay,可以得到完整的調用結果,這樣使用者就可以將返回的InvocResult中的MsgCid與查詢消息的CID進行比較。這是推薦交易所的正確檢查鏈狀態並保持內部報告系統同步的步驟。

關聯標籤
warnning 風險提示
app_icon
ChainCatcher 與創新者共建Web3世界