前言
EVM是一個輕量級的虛擬機,其設計初衷就是提供一種可以忽略硬件、操作系統等兼容性的虛擬的執行環境供以太坊網絡運行智能合約。
簡單來說EVM是一個完全獨立的沙盒,在EVM中運行的代碼是無法訪問網絡、文件系統和其他進程的,以此來避免錯誤的代碼能讓智能合約毀滅或者影響外部環境。
在此基礎上,知道創宇區塊鏈安全實驗室帶大家一起深入理解EVM的存儲機制和安全問題。
EVM存儲結構
可以看到EVM存儲數據分為兩類:
存儲在code和storage里的數據是non-volatile(不容易丟失的)
彭博社:美CFTC和SEC正在深入調查三箭資本:金色財經報道,兩位知情人士透露,美國商品期貨交易委員會(CFTC)和證券交易委員會(SEC)目前正在深入調查三箭資本(Three Arrows Capital),以確定該公司是否違反了規則,在資產負債表方面誤導投資者,并且沒有在兩家監管機構注冊。兩家機構均拒絕置評,但其審查可能導致對公司和個人處以罰款和其他處罰。
此前報道,總部位于新加坡的三箭公司于7月申請破產,稱其業務“在加密貨幣市場劇烈波動后崩潰”,三箭聯合創始人Su Zhu和Kyle Davies目前仍下落不明,導致該破產案的清算人及其律師無法追蹤,清算人向法院申請通過二人的電子郵件地址、Twitter帳戶及其律師的電子郵件地址送達傳票。(彭博社)[2022/10/18 17:29:38]
存儲在stack,args,memory里數據是volatile(容易丟失的)
動態 | 人民日報:深入實施國家大數據戰略 應突破區塊鏈等十大技術瓶頸:9月14日訊,人民日報發文表示,深入實施國家大數據戰略,應集中力量協同攻關,突破大數據的十大技術瓶頸,包括數據供給層面的區塊鏈技術、數據交換技術,數據處理層面的大數據存儲管理技術、分布式計算技術、編程語言技術,數據分析層面的大數據基礎算法、機器學習、數據智能技術,大數據應用層面的大數據可視化、真偽判定技術。[2018/9/14]
各個存儲位置的含義
Code
code部署合約時儲存data字段也就是合約內容的空間,即專門存儲智能合約的二進制源碼的空間
Binance Labs主管Christy Choi:正與對區塊鏈和加密貨幣有深入見解的基金進行合作:今日Binance Labs主管Christy Choi在reddit的Ask Me Anything環節表示,幣安生態系統基金的目的是確定和支持對整個生態系統產生持久影響的項目。因此目前正在與關心整個行業、對投資負責、對區塊鏈和加密貨幣有深入見解的基金進行合作。只要關心生態系統并建立一個健康的產業,BNB最終會變得更好。[2018/6/7]
Storage
Storage是一個可以讀寫修改的持久存儲的空間,也是每個合約持久化存儲數據的地方。Storage是一個巨大的map,一共2^256個插槽(slot),每個插糟有32byte,合約中的“狀態變量”會根據其具體類型分別保存到這些插槽中。
Facebook創始人稱要深入的學習和了解加密貨幣技術:扎克伯格在Facebook發帖稱,2018年他的新挑戰是解決Facebook存在的一些問題,并且還要深入了解和學習加密技術和加密貨幣,并運用到Facebook的服務中去。[2018/1/5]
Stack
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:TORTORAORARAGEGATOR價格Storage area network anywhereAgoraSeigniorage Shares
據Coinnounce10月2日報道,美國商品期貨交易委員會(CFTC)破獲了一起大規模的外匯和比特幣交易騙局,并對八名實施該計劃的個人提起民事執法指控.
1900/1/1 0:00:00鏈聞消息,非托管交易所DeversiFi針對此前包含7676.62ETH的Gas費用的交易發布事后分析報告稱.
1900/1/1 0:00:00自Gate.io在2021年8月1日上線新版流動性池以來,用戶反響熱烈;為進一步滿足廣大用戶投資需求,Gate.io現已上線借貸挖礦功能,用戶存入代幣提供流動性即可賺取收益.
1900/1/1 0:00:00HMT/USDT、HMT/ETH新版流動性礦池模式)已正式上線,交易市場50%手續費收益將新增投入到流動獎金池中;Taker和Maker手續費即日起調整至0.3%.
1900/1/1 0:00:00第10次波卡插槽拍賣已于2021年9月29日20:00正式開始,正在火熱進行中。目前Genshiro以15,441.8956KSM的質押量排名靠前,截至2021年10月4日14:00,Gate.
1900/1/1 0:00:00據Bitcoin.com9月27日消息,約翰內斯堡大學教授RabelaniDagada敦促南非,如果該國仍想成為數字貨幣創新中心,就要最終確定其加密貨幣公共政策.
1900/1/1 0:00:00