BM又搞事情了:避免意外的RAM內存消耗

BM又搞事情了:避免意外的RAM內存消耗

所有人都知道,BM就是EOS的皇帝,BM隨便發個聲,EOS的價格就會出現劇烈波動。關注EOS,最要關注的內容之一就是BM的講話和文章。

BM最新文章:《避免意外的RAM內存消耗》

原文鏈接:

https://medium.com/eosio/preventing-unexpected-ram-consumption-8029a9342659

避免意外的內存消耗

一些用戶和基於EOSIO的智能合約的RAM資源無意間被惡意的第三方通過創建專門的智能合約進行消耗。發生這種情況其實是對一個功能的誤解,該功能旨在讓合約能夠通知其他合約事件,例如收益轉移。 而惡意合約使用此通知功能在未經知情同意的情況下使用隨機數據佔用其他人的RAM,然後卻沒有提供釋放內存數據的方法。

BM又搞事情了:避免意外的RAM內存消耗

概述

  1. 並不是通證被盜竊
  2. 實現恰當的合約不易受攻擊
  3. 治理程序可以修復與當事人意圖相反的行為
  4. 勾選“只允許區塊生產者減排選項”有利於保護
  5. 長期升級可以使默認行為更安全

並不是通證被盜竊

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

BM又搞事情了:避免意外的RAM內存消耗

防止濫用的最佳實踐

期望每個用戶審查他們與之交互的合約或信任第三方代表他們審查合約。 這就意味著審閱者應該謹慎地與使用通知功能的智能合約進行交互。 例如:發送通證給他們不信任他們的CPU和RAM資源的智能合約。

通過程序化發送通證到不受信任的第三方指定的賬戶時,開發者應該使用一個沒有空閒RAM資源的賬戶進行中繼傳輸。中心化交易所處理用戶提現以及去中心化交易所的智能合約處理都是這樣弄的。他們都有一些可信的中繼合約可用。

當一項交易可能需要消耗RAM時,許多錢包也已經會對用戶進行提醒告知。

BM又搞事情了:避免意外的RAM內存消耗

通過治理程序釋放消耗的內存

我相信應該強制執行用戶和開發人員所理解的代碼意圖。 如果惡意合約顯然利用了用戶的意圖與代碼的實際效果之間的不匹配,那麼惡意合約的創造者和與之交互的人的糾紛在進行仲裁時,區塊生產者可以將惡意合約列入黑名單。

如果仲裁發現代碼的行為違背了與代碼交互的各方的意圖,那麼當選的生產者就可以自由地更新代碼,從而使結果與各方的原始意圖儘可能地匹配。在這種情況下,代碼將被更新,釋放意外消耗的RAM,且未來也不會意外消耗RAM。

BM又搞事情了:避免意外的RAM內存消耗

為什麼這是EOSIO的一個特性?

被濫用於消耗RAM的特性的有效案例有很多。最基本的案例就是一個想接收用戶存款資金的賭博合約。交易所會實現代碼去處理來自token合約中的一個轉移通知,然後對發送者在交易所中的餘額進行對應的記貸。在這種情況下,交換所和存款的用戶可以合理地授權交易所合約使用用戶的RAM來存儲他們的餘額。交換所並不想在自己的RAM中存儲用戶的餘額,因為這可能會導致不同的攻擊,如許多帳戶將極小餘額發送到交易所。

EOSIO有一個相關的特性,內聯操作,它允許合約調用另一個合約的代碼作為當前事務的一部分。 與操作通知功能不同的是,內聯操作僅限於分配生成內聯動作的合約的資源。操作通知則是轉移原始操作的資源分配許可。

BM又搞事情了:避免意外的RAM內存消耗

防止意外行為的發生

雖然現有設計有許多合法正常使用,但我們現在認為,代碼的默認行為與用戶和開發人員的直覺相反。為了簡化不太常見的用例,必須採取的防止濫用的步驟使普通的用例變得更加複雜。

展望未來,我們建議通知處理程序只有權限消耗接收通知的合約中的RAM。這樣你就可以安全地向任何合約發送通證,而不必擔心它會以意想不到的方式消耗您的RAM。在處理提現請求之前,交易所將能夠安全地處理提現,而無需審查部署到用戶帳戶的合約。

在這個變更提議下,現有的合約將必須獲得直接授權來消耗一些用戶可用的RAM。在接受用戶的存款之前,交易所合約會要求用戶“開放帳戶為存儲餘額預留空間 ”。然後,傳入的存款通知將簡單地增加預先分配的RAM,而不是分配新的RAM。

BM又搞事情了:避免意外的RAM內存消耗

提議的升級路線

我們正在準備一個只需生產者的升級,這次升級將會更改默認行為,以防止操作通知的接受者(例如:一個token轉移通知)意外地消耗了發送者的RAM。如果所有區塊生產者都接納這次升級,那麼濫用緩解策略就沒有必要了。不幸的是,這種緩解可能會破壞有效的合同,直到它們能夠被更新,在操作通知處理程序期間不依賴於用戶帳戶上的RAM分配。

好在升級合約以採用新的最佳實踐的流程應該相對簡單。

作為下一次公投的一部分,所有節點都將採用這次只需生產者的升級。

總結

目前EOSIO如預期正常運行,並且在正確使用時是安全的。我們相信我們能夠在大部分案例下讓EOSIO更加容易使用,同時在與EOS社區合作下,開發出最健壯的整體解決方案。


分享到:


相關文章: