前言
EVM是一個輕量級的虛擬機,其設計初衷就是提供一種可以忽略硬件、操作系統等兼容性的虛擬的執行環境供以太坊網絡運行智能合約。
簡單來說EVM是一個完全獨立的沙盒,在EVM中運行的代碼是無法訪問網絡、文件系統和其他進程的,以此來避免錯誤的代碼能讓智能合約毀滅或者影響外部環境。
在此基礎上,知道創宇區塊鏈安全實驗室帶大家一起深入理解EVM的存儲機制和安全問題。
EVM存儲結構
可以看到EVM存儲數據分為兩類:
存儲在code和storage里的數據是non-volatile(不容易丟失的)
高鴻股份:公司正在深入研究可信計算在區塊鏈的應用:高鴻股份在互動平臺表示,公司正在深入研究可信計算在區塊鏈的應用,可信計算可以有效提高區塊鏈節點設備的安全,并保護底層軟件不被滲透和篡改。公司計劃為區塊鏈產業提供以可信計算為核心的安全加固技術支持。(財聯社)[2021/4/19 20:36:09]
存儲在stack,args,memory里數據是volatile(容易丟失的)
各個存儲位置的含義
Code
code部署合約時儲存data字段也就是合約內容的空間,即專門存儲智能合約的二進制源碼的空間
聲音 | 中國銀行支付清算部總經理:商業銀行借助區塊鏈等技術,深入分析客戶行為以提升支付效率:金色財經報道,11月28日,中國銀行支付清算部總經理范耀勝在第八屆中國支付清算論壇上指出,如今數字化轉型已經成為商業銀行共同關注融入和推動的行業趨勢,主要體現在一智能化,借助大數據、機器學習、區塊鏈等技術,深入分析客戶行為,提升支付效率,實現安全便捷的統一。[2019/11/29]
Storage
Storage是一個可以讀寫修改的持久存儲的空間,也是每個合約持久化存儲數據的地方。Storage是一個巨大的map,一共2^256個插槽(slot),每個插糟有32byte,合約中的“狀態變量”會根據其具體類型分別保存到這些插槽中。
動態 | 2019年7月國內一級市場區塊鏈融資10強發布 區塊鏈行業的發展不斷向產業端深入:據中國金融信息網報道,8月8日,中國金融信息網與烯牛數據聯合發布2019年7月份國內一級市場區塊鏈項目融資10強榜單。從榜單來看,在整體融資大幅下滑的趨勢下,2019年7月份國內區塊鏈項目融資數量出現回升。監測數據顯示,數字貨幣和交易平臺類融資項目明顯增多,天秤幣白皮書的發布在一定程度上提振了市場預期,但是此類項目將面臨與天秤幣的直接競爭,其商業邏輯未來或將受到天秤幣嚴酷打壓。與實體經濟結合的項目依然占據著榜單的主流,分別涉及金融、大數據、交通運輸、電商、傳媒、產權、房地產和游戲領域。從連續發布的榜單來看,區塊鏈行業的發展不斷向產業端深入,應用端的開發落地越來越具體,與實體經濟結合發展的想象空間逐漸立體化。從技術角度來看,加密、數據庫、共識、P2P和智能合約的發展日益成熟,區塊鏈作為集成性創新技術的發揮邊界正在逐步拓展。[2019/8/8]
Stack
聲音 | Evolution capital創始合伙人:熊市有更多時間做深入思考:11月16日, Evolution capital 創始合伙人老葛在“499加油站第二十期”接受火幣英才CEO張曉媛和節點資本合伙人及貝殼公關CEO姜曉玉的采訪時表示, 熊市過冬寶典一,是意識的升級,慢慢對這個行業的理解跟上了,自然比隔岸觀火的人理解更深。熊市過冬寶典二,是多宣傳,PR成本低;好好做社群,做精,有更優質的用戶;扎實的做合規。花時間在這些領域提升,積累經驗和技能的小伙伴,下一波行情來的時候,就有了更多的優勢。保持敏銳,等下一波機會大批涌來的時候,肯定是觀念超前,行動在一線的人,最有機會把握住。[2018/11/17]
stack即所謂的“運行棧",用來保存EVM指令的輸入和輸出數據。可以免費使用,沒有gas消耗,用來保存函數的局部變量,數量被限制在16個。stack的最大深度為1024,其中每個單元是32byte。
Args
args也叫calldata,是一段只讀的可尋址的保存函數調用參數的空間,與棧不同的地方的是,如果要使用calldata里面的數據,必須手動指定偏移量和讀取的字節數。
Memory
Memory一個簡單的字節數組,主要是在運行期間存儲數據,將參數傳遞給內部函數。基于32byte進行尋址和擴展。
EVM數據存儲概述
前面已經說過Storage是每個合約持久化存儲數據的地方其儲存數據的方式是通過插槽來實現的,現在就具體介紹它是怎么實現的:
狀態變量
1.對于大小在32字節以內的變量(常量),以其定義的順序作為它的索引值來存儲。即第一個變量的索引為key(0),第二個變量的索引為key(1)...
2.對于連續較小的值,可能被優化存儲在同一個位置,比如:合約中前四個狀態變量都是uint64類型的,則四個狀態變量的值會被打包成一個32字節的值存儲在0位置。
未優化:
pragmasolidity^0
??functionm()?externalreturns(uint256,uint256){????Infostorageinfo;????info
??functiontest(bytes32_name,address?_mappedAddress)public{????Personperson;????person.name=_name;????person.mappedAddress=_mappedAddress;????require(unlocked);?}}
漏洞合約分析:
可以看到該合約在函數部分創建新的結構體時沒有進行初始化,由此我們可以利用該函數進行對owner的修改。不過使用該函數我們還要通過require驗證,不過這也不難因為狀態變量unlocked也同樣在我們可控的范圍內。
具體操作:
調用test函數分別傳入向_name傳入:0x0000000000000000000000000000000000000000000000000000000000000001(真值)
_mappedAddress傳入:0xfB89eCb0188cb83c220aADDa1468C1635208e821(個人地址)
傳參前:
傳參后:
可以看到已經成功更改了地址。
總結
可以看到EVM的存儲器就是一個key=>value的健值數據庫,存儲的數據可以通過校驗和來確保一致。但是其也是和智能合約語言進行交互的,當其中一些規則發生沖突很可能就被別有用心的人用來作惡,所以規范的使用智能合約語言是避開漏洞的必要條件。
Tags:區塊鏈ADDSTORRAGE區塊鏈技術的特點DADDYETHstorj幣總量多少tourstorageserver
頭條 CryptoPunk#9997在佳士得以3385萬港元拍賣價成交在佳士得舉行的主題為“NoTimeLikePresent”的拍賣中.
1900/1/1 0:00:00此前Gate.ioEPK/USDT流動性礦池已開啟自動做市商AMM模式,為鼓勵更多用戶積極參與,今日中午12:00,EPK/USDT流動性礦池獎勵各新增額外25.
1900/1/1 0:00:00據證券時報消息,9月27日,由中國信息通信研究院、中關村區塊鏈產業聯盟、中關村安信網絡身份認證產業聯盟主辦的ICT中國·2021高層論壇之區塊鏈應用發展論壇在國家會議中心召開.
1900/1/1 0:00:00根據最近Chainalysis的報告指出,中歐、北歐和西歐(CNWE)已成為世界上最大的Crypto經濟體.
1900/1/1 0:00:00吳說作者|談叔 本期編輯|ColinWuCoinbase收到來自SEC的“宣戰”本月,Coinbase的CEO和聯合創始人BranArmstrong發了一系列的推.
1900/1/1 0:00:00親愛的用戶: ????ZT將于2021年10月01日10:00-2021年10月08日23:59舉行交易抽獎活動.
1900/1/1 0:00:00