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