原文來源: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/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 進行比較。這是推薦交易平臺的正確檢查鏈狀態並保持內部報告系統同步的步驟。
原文來源
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia