BM:如何防止意外的RAM資源消耗?

原創文章,版權聲明:以下內容來自微信公眾號"EOSCochain",搜索 "EOSCochain"即可訂閱,作者:MW。轉載必須保留以上聲明。

BM近日在Medium發文,文章內容關於“防止預料之外的RAM消耗”。以下是翻譯文:

BM:如何防止意外的RAM資源消耗?

無意之中,部分用戶和基於EOSIO的智能合約擁有的RAM資源被已創建專門智能合約的惡意第三方所消耗。

發生這種情況的原因是對合約通知事件功能的錯誤理解,例如收入轉賬。惡意合約會利用此通知功能,在未經知情同意的情況下使用隨機數據填充其他人的RAM,並且這些隨機數據無法被釋放。

內容概述

1. Token未被盜取

2. 正確實施的合同不容易受到攻擊

3.治理流程可以修復與各方意圖相悖的代碼行為

4. BP區塊生產者-只有緩解型的保護措施

5. 長期升級可使默認行為更安全

➤沒有Token被盜

惡意合同利用了對智能合約開發者和用戶對開發智能合約的最佳實踐的誤解。這種攻擊類似於故意破壞而非盜竊,一旦EOS治理流程可以審查和糾正這種情況,就不再會對涉及其中的各方造成長期損害。

➤防止濫用的最佳實踐

我們期望每個用戶都能審查一下與他們交互的合約,或委託可信任的第三方代表他們審查合約。這意味著審閱者應該謹慎地與使用通知功能的智能合約進行交互。一個例子是消耗CPU和RAM資源,將代幣發送到他們不信任的智能合約。

開發人員以編程的方式,將代幣發送到不受信任的第三方指定的賬戶,應通過沒有可用RAM資源的賬戶中繼傳輸。這既適用於中心化交易所處理用戶的提現,也適用於中心化交易所通過智能合約執行此操作。有幾個可用的可信任中繼合同。

目前,已經有許多錢包提供商採取措施在交易中提示用戶可能會有RAM資源的消耗。

BM:如何防止意外的RAM資源消耗?

➤通過治理流程釋放消耗的RAM

我認為應該強制執行代碼的意圖(用戶和開發者所理解的)。如果惡意合約很明顯的利用了用戶的意圖與代碼實際效果之間的不匹配,那麼在惡意合約起草者與牽扯其中的各方進行仲裁時,BP有權將惡意合約列入黑名單。

如果仲裁發現代碼的行為違背了與代碼交互各方的意圖,那麼當選的BP有權更新代碼,使得結果儘可能地與各方的原始意圖相匹配。在這種情況下,代碼將被更新以釋放意外消耗的RAM,並且確保將來不會繼續消耗RAM。

➤為什麼這是EOSIO的一個功能?

目前有很多因這個功能而導致RAM資源被濫用的事例。最常見的例子便是企圖獲取用戶資金存款的遊戲合約。

交易所將執行代碼以處理來自代幣合約的轉賬通知,然後將交易所的餘額記在轉出方。在這種情況下,交易所和用戶可以合理地掌控對交易合約消耗用戶的RAM資源來存儲餘額的授權。交易所並不一定非得要將用戶的餘額存儲在用戶自己的 RAM 中,因為當許多賬戶同時向交易所發送小額交易時,易遭到不同的攻擊。

EOSIO有一個相關的功能:inline actions,允許合同作為當前交易的一部分調用另一個合約的代碼。與action notification功能不同的是,inline actions僅限於分配生成inline actions合約的資源。action notification推動原始action的資源分配許可。

➤防止意外消耗繼續發生

雖然現存設計有許多合理用途,但我們卻發現代碼的默認行為與用戶和開發者的直觀理解對立而行。為了簡化不太常見的用例,必須採取相應措施,防止資源濫用加重常規用例複雜程度的情況發生。

展望未來,我們建議通知操作過程中,只有通知接收方才有權利消耗RAM資源。這樣一來,可以安全地將代幣發送到任何合同,同時不用RAM資源意外消耗的情況發生。交易所能夠安全地處理提現,而無需在處理提現請求之前審查部署到用戶賬戶的合約。

據此提議提及的變更,現有合同必須獲得直接授權才能消耗用戶的部分可用RAM。在接受用戶的存入之前,交易所合約將要求用戶“開立有可用空間來預留存儲其餘額的賬戶”。然後,存入通知將只增加預先已分配的RAM,而不是增加新的RAM。

➤提議升級路徑

我們正在準備一個僅限區塊生產者的升級,它將改變默認行為,以防止action通知的Receiver(接收者)無意中意外消耗發送者的RAM(例如代幣轉賬通知)。如果所有區塊生產者都採用此升級,那麼濫用緩解措施將不再那麼必要。而且其實,這些緩解措施可能會破壞有效合同,除非它們可以在 action 通知處理期間不再依賴於用戶賬戶裡的RAM分配。

幸運的是,通過升級合約來採用新的最佳實踐的過程應該相對簡單。

是否所有節點都將採用這個升級,將作為下一次公投的一部分內容。

➤結論

EOSIO 現在運行良好,符合最初的設計理念,使用方式正確合理即可確保安全。我們相信,大部分情況下,我們可以更輕鬆地正確使用EOSIO,同時我們也正與 EOS 社區合作開發最強大的整體解決方案。

BM:如何防止意外的RAM資源消耗?

BM:如何防止意外的RAM資源消耗?

✎【EOS Cochain】Technology Oriented

Cochain跨鏈科技以技術作為團隊的核心力量,團隊技術人員致力於研究最前沿的區塊鏈技術,包括不僅限於跨鏈協議、DAPP擴展、區塊鏈性能擴展等。

團隊將最益於EOS生態繁榮的前沿技術,融入EOS Cochain的打造中,服務於區塊鏈行業,服務於區塊鏈用戶。

感謝閱讀


分享到:


相關文章: