前言
EVM是一個輕量級的虛擬機,其設計初衷就是提供一種可以忽略硬件、操作系統等兼容性的虛擬的執行環境供以太坊網絡運行智能合約。
簡單來說EVM是一個完全獨立的沙盒,在EVM中運行的代碼是無法訪問網絡、文件系統和其他進程的,以此來避免錯誤的代碼能讓智能合約毀滅或者影響外部環境。
在此基礎上,知道創宇區塊鏈安全實驗室帶大家一起深入理解EVM的存儲機制和安全問題。
EVM存儲結構
可以看到EVM存儲數據分為兩類:
存儲在code和storage里的數據是non-volatile(不容易丟失的)
Fireblocks Web3負責人:傳統金融公司正在深入研究加密貨幣:金色財經報道,Fireblocks的Web3負責人表示,傳統金融公司正在進一步進入加密領域。Fireblocks代表1,500多家金融機構托管資金,并使它們能夠與區塊鏈和加密服務進行交互。
Amsel表示,這些公司,尤其是更傳統的公司,從托管服務開始,然后慢慢轉向更多的加密原生交互。Amsel說,“我們看到越來越多的傳統金融正在探索進入加密貨幣的方式,也許他們正在采取一種更加膽小的方法”。
Amsel舉了一個假設的例子,一家公司可能在一兩年前開始使用加密貨幣托管。他說,這些公司邁出了第一步,看到沒問題,然后開始更多地探索這項技術。[2022/11/6 12:21:55]
存儲在stack,args,memory里數據是volatile(容易丟失的)
外匯局山西省分局深入推進跨境金融區塊鏈服務平臺試點工作:疫情期間,外匯局山西省分局深入推進國家外匯管理局推出的跨境金融區塊鏈服務平臺的試點工作,專題調研全省中小微外貿企業融資現狀;深入宣傳,促進更多中小微外貿企業了解區塊鏈平臺融資的便利性;加強推動,鼓勵銀行對中小微外貿企業建立專營服務機制;及時引導,推進銀行主動對接中小微外貿企業,開展出口應收賬款融資;“點對點”輔導,加快推進地方法人銀行上線區塊鏈平臺,挖掘中小微外貿企業融資需求。通過外匯局的有效措施,銀行對中小企業融資的積極性有了明顯提高,企業對區塊鏈融資的便利性也越來越了解,銀行擴大了對中小微企業的融資規模,企業獲得了便捷的融資,實現了“一項政策、多方共贏”。截至今年3月底,16家銀行加入了區塊鏈平臺,全省通過區塊鏈平臺累計放款7.65億美元。山西省涉外中小微外貿企業復工復產1458戶,復工率達91%。(金融時報)[2020/4/9]
各個存儲位置的含義
聲音 | 中國銀行支付清算部總經理:商業銀行借助區塊鏈等技術,深入分析客戶行為以提升支付效率:金色財經報道,11月28日,中國銀行支付清算部總經理范耀勝在第八屆中國支付清算論壇上指出,如今數字化轉型已經成為商業銀行共同關注融入和推動的行業趨勢,主要體現在一智能化,借助大數據、機器學習、區塊鏈等技術,深入分析客戶行為,提升支付效率,實現安全便捷的統一。[2019/11/29]
Code
code部署合約時儲存data字段也就是合約內容的空間,即專門存儲智能合約的二進制源碼的空間
Storage
Storage是一個可以讀寫修改的持久存儲的空間,也是每個合約持久化存儲數據的地方。Storage是一個巨大的map,一共2^256個插槽(slot),每個插糟有32byte,合約中的“狀態變量”會根據其具體類型分別保存到這些插槽中。
聲音 | 北郵教授:5G的本質是無限連接 將促進區塊鏈等技術的深入發展:據澎湃新聞消息,5月26日下午,2019中國國際大數據產業博覽會舉行“5G重構數字社會基礎生態”高端對話,中國信息經濟學會副會長、北京郵電大學教授呂廷杰在會上表示,5G循序漸進的發展一定會帶來一個完全不同的社會,它會使社會的效率更高,因此也會涉及到更大的安全問題。他指出,5G的本質是無限連接,連接產生了高價值的關鍵數據,未來的大數據會有全新的飛躍,將促進人工智能、區塊鏈等技術的深入發展,生產很多新的架構和生態,必將重構數字經濟的生態,在未來5-8年會滲透到生活的方方面面,也將改變10年以后的整個社會的游戲規則。[2019/5/26]
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:區塊鏈TORTORARAGE區塊鏈游戲tourstorageserverStorage Coinrage幣買不了
盡管政府監管仍然不夠明確,印度Crypto行業一直在蓬勃發展,并隨著時間的推移而增長。事實上,根據NASSCOM和WazirX編寫的研究報告表明,截止2030年,這個國家的Crypto產業規模會.
1900/1/1 0:00:00第九次波卡插槽拍賣正在火熱進行中。目前KintsugiBTC以164,065.8928KSM的質押量排名靠前,截至2021年9月28日14:00,Gate.ioKINT鎖倉理財已鎖113.695.
1900/1/1 0:00:00尊敬的XT用戶: XT即將上線AVAX(Avalanche),并在創新區(DeFi)開放AVAX/USDT交易對.
1900/1/1 0:00:00過去,許多人將互聯網和Crypto革命做比較,兩者都帶來了巨大的金融領域的變革。美國商品期貨和交易委員會(CFTC)前負責人指出,繼互聯網之后,Crypto行業的發展可能會引發下一波創新浪潮,推.
1900/1/1 0:00:00親愛的用戶:幣安為KOL社區推出第二輪專屬KYC推薦活動,邀請好友認證賬戶,瓜分25,000BUSD的獎池.
1900/1/1 0:00:009月24日中午,名為“街舞怪才”的用戶在淘寶阿里拍賣平臺拍賣編號為NO.1的杭州亞運會數字火炬數字藝術品。有用戶出價至大約315萬人民幣.
1900/1/1 0:00:00