SolidityFoundry 安全審計測試 memory濫用

?名稱:

memory濫用

https://github.com/XuHugo/solidityproject/tree/master/vulnerable-defi
描述:

在合約函數中濫用storage和memory。

memory是一個關鍵字,用于臨時存儲執行合約所需的數據。它保存函數的參數數據,并在執行后清除。
storage可以看作是默認的數據存儲。它持久地保存數據,消耗更多的gas

函數updaterewardDebt的功能是,更新UserInfo結構體的rewardDebt值。為了節約gas,我們將變量用關鍵字memory聲明了,這樣會導致的問題是,在函數執行結束之后,rewardDebt的值并不會保存下來。因為一旦函數完成執行,內存就會被清除,所做的更改也會丟失。

參考:

Cover protocol hack analysis: Infinite Cover tokens minted via an exploit - Mudit Gupta's Blog

解決方法:

https://mudit.blog/cover-protocol-hack-analysis-tokens-minted-exploit/

proxy合約:

contract Array is Test {mapping(address => UserInfo) public userInfo; // storagestruct UserInfo {uint256 amount; // How many tokens got staked by user.uint256 rewardDebt; // Reward debt. See Explanation below.}function updaterewardDebt(uint amount) public {UserInfo memory user = userInfo[msg.sender]; // memory, vulnerable pointuser.rewardDebt = amount;}function fixedupdaterewardDebt(uint amount) public {UserInfo storage user = userInfo[msg.sender]; // storageuser.rewardDebt = amount;}
}

foundry測試合約;

// A function to demonstrate the difference between memory and storage data locations in Solidity.
function testDataLocation() public {// Simulate dealing 1 ether to Alice and Bob.address alice = vm.addr(1);address bob = vm.addr(2);vm.deal(address(alice), 1 ether);vm.deal(address(bob), 1 ether);// Create a new instance of the Array contract.ArrayContract = new Array();// Update the rewardDebt storage variable in the Array contract to 100.ArrayContract.updaterewardDebt(100); // Retrieve the userInfo struct for the contract's address and print the rewardDebt variable.// Note that the rewardDebt should still be the initial value, as updaterewardDebt operates on a memory variable, not the storage one.(uint amount, uint rewardDebt) = ArrayContract.userInfo(address(this));console.log("Non-updated rewardDebt", rewardDebt);// Print a message.console.log("Update rewardDebt with storage");// Now use the fixedupdaterewardDebt function, which correctly updates the storage variable.ArrayContract.fixedupdaterewardDebt(100);// Retrieve the userInfo struct again, and print the rewardDebt variable.// This time the rewardDebt should be updated to 100.(uint newamount, uint newrewardDebt) = ArrayContract.userInfo(address(this));console.log("Updated rewardDebt", newrewardDebt);
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39118.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

xcrun: error: unable to find utility “simctl“, not a developer tool or in PATH

目錄 前言 一、問題詳情 二、解決方案 1.確認Xcode已安裝 2.安裝Xcode命令行工具 3.指定正確的開發者目錄 4. 確認命令行工具路徑 5. 更新PATH環境變量 前言 今天使用cocoapods更新私有庫的時候,遇到了"xcrun: error: unable to find utility &…

hadoop集群部署【二】YARN MapReduce 的部署

提前注意:請注意路徑是否和我的相同,放置的位置不同,請修改標紅處 HDFS部署 HDFS介紹及部署http://t.csdnimg.cn/Q3H3Y 部署說明 Hadoop HDFS分布式文件系統,我們會啟動: NameNode進程作為管理節點 DataNode進程…

歡太主題商店 官方資源提取與應用第三方資源方法一覽

前言疊甲:支持正版,尊重他人勞動成果,反對盜版提取,不要傳播提取版,我本人也在支持正版,但是最近懶得用主題,用一段時間的默認吧,如有主題開發者不滿,請聯系刪除 &#x…

JAVA 判斷一系列區間值有沒有重疊

判斷一系列區間值比喻 0-20 10-8 21-100 ...等等 這些區間有沒有重疊的方法&#xff1a; /*** Author Minco* Date 15:44 2024-07-01* Description 區間范圍*//***/ public class Interval implements Comparable<Interval> {double start;double end;public Interval(…

機器人入門路線及參考資料(機器人操作方向)

機器人&#xff08;操作方向&#xff09;入門路線及參考資料 前言1 數理基礎和編程2 機器人學理論3 計算機視覺4 機器人實操5 專攻方向總結Reference: 前言 隨著機器人和具身智能時代的到來&#xff0c;機器人越來越受到大家的重視&#xff0c;本文就介紹了機器人&#xff08;…

基于SpringBoot民宿管理系統設計和實現(源碼+LW+調試文檔+講解等)

&#x1f497;博主介紹&#xff1a;?全網粉絲10W,CSDN作者、博客專家、全棧領域優質創作者&#xff0c;博客之星、平臺優質作者、專注于Java、小程序技術領域和畢業項目實戰?&#x1f497; &#x1f31f;文末獲取源碼數據庫&#x1f31f; 感興趣的可以先收藏起來&#xff0c;…

13-4 GPT-5:博士級AI,人工智能的新時代

圖片來源&#xff1a;AI Disruptive 人工智能世界正在迅速發展&#xff0c;新的創新和突破層出不窮。在本文中&#xff0c;我們將深入探討最新的進展&#xff0c;從即將推出的 GPT-5 模型到 Apple 和 Meta 之間可能的合作。 GPT-5&#xff1a;博士級別的人工智能 雖然尚未正…

為何交易價格可能超出預期?

當你嘗試執行訂單時&#xff0c;如果收到“報價超出”的提示&#xff0c;這通常意味著交易無法按你的預期價格成交。對于某些交易者來說&#xff0c;這可能會帶來一些困擾&#xff0c;但在外匯等流動性極高的市場中&#xff0c;這種情況是相當常見的。 外匯市場之所以吸引眾多…

java 一鍵打包exe (GraalVM方式)

1.GraalVM 版本下載java地址 https://www.graalvm.org/downloads/ 這邊我選擇java17長期支持版本和window系統方式。 本次安裝電腦window10專業版本。 2.下載好后&#xff0c;進行解壓 tar -zxvf apache-maven-3.9.8-bin.tar.gz3.增加變量 名稱&#xff1a;GRAALVM_HOME 路徑…

Ubuntu20.04 有線網絡圖標消失解決方案

Ubuntu20.04 有線網絡圖標消失解決方案 問題描述&#xff1a; ubuntu20.04系統提示的software updater有軟件包更新&#xff0c;按提示安裝更新軟件包&#xff0c;重啟系統后&#xff0c;ubuntu系統的網絡圖標消失不見&#xff1b;無法正常上網&#xff1b;檢查網口&#xff0…

Linux:ollama+Dify大模型本地化部署打造個人知識庫 (2)

ollama大模型部署-CSDN博客文章瀏覽閱讀26次。Ollama 是一個能在本地機器上輕松構建和運行大型語言模型的輕量級、可擴展框架&#xff0c;適用于多種場景&#xff0c;具有易于使用、資源占用少、可擴展性強等特點。https://blog.csdn.net/weixin_72819498/article/details/1400…

高效批量復制與覆蓋:一鍵實現文件管理,輕松應對同名文件,簡化工作流程

在數字時代&#xff0c;我們每天都在與海量的文件和數據打交道。你是否曾經遇到過這樣的情況&#xff1a;需要批量復制文件到指定文件夾&#xff0c;但一遇到同名文件就頭疼不已&#xff0c;要么手動一個個確認覆蓋&#xff0c;要么冒著數據丟失的風險直接操作&#xff1f;別擔…

OpenSearch的演進與語義檢索技術革新

周末聽了一場關于Open Search的技術分析&#xff0c;整理如下&#xff0c;供大家參考。OpenSearch&#xff0c;作為ElasticSearch的一個分支&#xff0c;不僅繼承了其強大的搜索和分析能力&#xff0c;更在開源社區的驅動下&#xff0c;不斷演進和創新。本文將介紹OpenSearch的…

Pythonnet能導入clr,但無法引入System模塊?

【pythonnet詳解】—— Python 和 .NET 互操作的庫_pythonnet 詳細使用-CSDN博客 Python中動態調用C#的dll動態鏈接庫中方法_python 如何調用c# dll-CSDN博客 需求&#xff1a;Python調用并傳List<float>類型參數給.Net 起初&#xff1a;直接 # 創建一個Python浮點數…

【Altium】如何處理PCB上所有焊盤被誤蓋油

【更多軟件使用問題請點擊億道電子官方網站】 1、 文檔目標 解決焊盤被誤蓋油的操作 2、 問題場景 所有焊盤都可以設置為蓋油或不蓋油&#xff0c;由于焊盤需要用來焊接元器件&#xff0c;所以都不會設置蓋油。由于誤操作或者創建封裝時設置錯誤&#xff0c;造成一定數量的焊盤…

“論單元測試方法及應用”寫作框架,軟考高級論文,系統架構設計師論文

論文真題 1、概要敘述你參與管理和開發的軟件項目,以吸你所擔的主要工作。 2、結給你參與管理和開發的軟件項目&#xff0c;簡要敘述單元測試中靜態測試和動態測試方法的基本內容。 3、結給你慘與管理和研發的軟件項目,體闡述在玩測試過程中,如何確定白盒測試的覆蓋標準,及如…

IT行業:現狀、未來與無限可能

隨著技術的不斷進步&#xff0c;IT行業已成為推動全球經濟和社會發展的關鍵力量。從云計算、大數據、人工智能到物聯網、5G通信和區塊鏈&#xff0c;這些技術正在重塑我們的生活和工作方式。作為當今全球經濟和社會發展的核心驅動力&#xff0c;IT行業正經歷著前所未有的變革與…

Hadoop權威指南-讀書筆記-01-初識Hadoop

Hadoop權威指南-讀書筆記 記錄一下讀這本書的時候覺得有意思或者重要的點~ 第一章—初識Hadoop Tips&#xff1a; 這個引例很有哲理嘻嘻&#x1f604;&#xff0c;道出了分布式的靈魂。 1.1 數據&#xff01;數據&#xff01; 這一小節主要介紹了進入大數據時代&#xff0c;面…

方正小標宋簡體、仿宋GB2312、楷體GB2312字體

文章目錄 下載地址所有的文件wps使用方正小標宋簡體、仿宋GB2312、楷體GB2312 字體用途方正小標宋簡體仿宋GB2312楷體GB2312 下載地址 【金山文檔 | WPS云文檔】 方正小標宋簡體、仿宋GB2312、楷體GB2312 https://kdocs.cn/l/cksgHDLneqDk 所有的文件 wps使用 方正小標宋簡體…

監聽 web 容器內的網絡請求

需求 iOS 項目中 wkwebview 實現的 web 容器&#xff0c;需要監聽 web 容器內的所有網絡請求 實現 在 iOS 項目中使用 WKWebView 實現的 Web 容器&#xff0c;監聽 Web 容器內的網絡請求是一個常見需求。可以通過實現 WKURLSchemeHandler 協議來處理自定義的 URL scheme&#…