ETH 路由器更新。 ERC-777 再入錯誤,THORChain 交易…… THORChain 2021 年7 月


ERC-777 再入漏洞、交易中斷、路由器升級、USDT 救助、恢復償付能力和運營改進

2021 年7 月9 日,白帽子在涉及ERC-777 代幣時發現了THORChain 路由器中的一個漏洞,並與團隊合作將資金拯救到THORStarter 實施者的賬戶。該路由器已在測試網上進行了修補和實施,但在測試期間發現了處理非標準ERC-20(特別是USDT)的問題。向社區提出了一個恢復計劃,其中包括將USDT 放回倉庫(在24 小時通知後),其餘代幣通過路由器的正常升級路徑遷移。由於同時發現測試網無法運行,出現了複雜情況,因此必須建立一個新的測試網。最後,更新了路由器並恢復了交易。

ERC-777 再入

一個簡單的錯誤,但在THORChain 社區為MCCN 版本實施或修改路由器時並未考慮。 TrailOfBits 已安排在7 月進行路由器審核,該審核將繼續進行,但現在在路由器V3 上進行。

主要原因是ERC-777 允許在傳輸時調用鉤子。這與向合約發送ETH 相同(可以調用鉤子)。鉤子請求在路由器上進行二次存款,導致資金部分“翻倍”,會員貸記的分配超出了他們應有的額度。該成員稱為遞歸存款,直到他的“津貼”是路由器的總餘額。然後他們轉移了這個。

解決方案是添加一個簡單的再入保護器。

https://gitlab.com/thorchain/ethereum/eth-router/-/blob/master/contracts/THORChain_Router.sol

修復:添加再入守衛

擾亂貿易

然後通過mimir 進行商業保留,因為無意識的用戶可以存入XRUNE(出售)並讓模仿者立即竊取它們。

對此的一個明顯改進是具有特定於鏈的停止而不是全局停止。這很明顯,因為當只有一條鏈出現問題時,整個網絡都出現了故障。

這已經準備好了,應該發布:

解決“ADD:特定鏈交易中斷”

測試網問題

THORChain 核心開發者不運行任何鏈接的測試網絡或核心網絡節點。他們只運行為社區提供服務的完整節點(如thornode.thorchain.info)。

多鏈測試網運營商使用它來練習攪動。有一個已知問題,即節點在ETH 中略有資不抵債(由於gas 問題)並且無法撤消。眾所周知,這會給節點運營商帶來摩擦(也許他們需要更好的工具),導致他們中的一些人放棄並放棄他們的節點,而不是進行故障排除並優雅地移除。由於不幸的時刻,超過1/3的網絡離線/廢棄,無法用於測試。

這在主網上不太可能發生——頭腦正常的運營商不會放棄超過300 萬美元的獎金。

重新建立一個新的測試網花費了團隊一天的時間。

路由器問題

在測試路由器時,另一個問題出現了:USDT資產無法遷移,因為它不符合ERC-20標準。

USDT 不返回布爾值

解決辦法是去掉ERC-20接口,直接在函數中編碼,只需要成功即可; 這將跳過對返回數據的搜索。

Router V2中的解決方案

USDT回收

由於USDT 不支持首選遷移路徑,因此向社區提供了三個選項:

Ragnarok 所有LP 從USDT 遷移,無需USDTR 取回USDT 到庫房地址,手動遷移取回USDT 到智能合約,無信任遷移(任何人都可以調用後續存款)

社區最終將(2) 定為實現恢復的最安全、最快的方式,因為其目的是重新建立交易所,而不是去中心化的測試。

移民協調員

路由器更新通常被設計為獨立且無需信任的。一旦將新路由器添加到網絡中,節點將使用現有的輪換邏輯移動到它。他們將路由器傳遞給他們的通話數據,智能合約* 本身* 將向前遷移; 請參閱下面的代碼。

如果是新路由器,遷移

但是,這次更新是緊急的,需要額外的步驟,例如贖回USDT和重新存入USDT和XRUNE。因此,添加了特殊邏輯以允許mimir 編排該過程。具體的11個步驟如下:

1. Mimir 將`StopFundYggdrasil` 設置為`1`,這將停止資助yggdrasil 金庫
2. Mimir 將`MimirRecallFund` 設置為`1`,該網絡將要求yggdrasil 將所有資金發送到ETH 鏈上的asgard
3. 檢查所有yggdrasil 金庫是否歸還了他們的erc20 代幣,如果所有yggdrasil 金庫只剩下ETH 粉,請轉到步驟4)
4. Mimir 設置`MimirWithdrawUSDT` 為`1` 提取USDT,這將觸發外發USDT,確保外發已發送所有USDT 以指定地址
5. Mimir 將`MimirUpgradeContract` 設置為`1`,這將激活網絡以將合約更新為新合約
6. 確保整個yggdrasil 合約已經更新到新的合約地址。
7. Mimir 將`ChurnInterval` 設置回43200,以便可以開始節點輪換。
8.一旦開始輪換,確保新asgard有新合約,遷移就是將資金遷移到新合約。
9.輪換結束時,使用`noop`備忘錄將USDT和XRUNE記回新的asgard,新的合約。
10. Mimir 將`StopFundYggdrasil` 設置為0,網絡將繼續資助yggdrasil 金庫
11.一旦ygg資助,Mimir將“HaltTrading”設置為0,網絡即可進行交易。

返回操作

團隊和社區共同努力協調:
1) 與提示同步更新
2) 發布更新,等待100%的節點採用
3) 協調路由器遷移
4)恢復貿易

這終於在停電五天后的7 月14 日完成。

改進清單:

RouterV2 具有再入保護器,與非標準ERC-20 兼容,並具有社區要求的新功能來使存款到期。 THORChain 社區已經驗證了路由器升級邏輯,並將準備好更輕鬆地遷移到路由器V3(具有更高級的邏輯) THORNode 將具有特定於鏈的業務中斷邏輯,這將保持網絡的大部分運行,重置路由器測試網並與優質節點運營商交互運行測試網絡。

此外,RouterV3 將很快接受Halborn 和TrailOfBits 的審核。

資訊來源:由0x資訊編譯自CRIPTOMONEDA。版權歸作者所有,未經許可,不得轉載

Total
0
Shares
Related Posts