前言
在以太坊上,我們可以通過部署智能合約來實現我們需要的功能,合約代碼中我們往往需要定義一些變量,這就涉及到了智能合約變量的存儲機制。
這篇文章我們將根據solidity的所有的變量命名的類型來講解智能合約的存儲機制。
存儲機制
每個在以太坊虛擬機中運行的智能合約的狀態都在鏈上永久地存儲著。這些值存儲在一個巨大的數組中,數組的長度為2^256,下標從零開始且每一個數組能夠儲存32字節(256個比特)長度的值。并且存儲是稀疏的,并沒有那么密集。
變量類型
Solidity的數據變量類型分為兩類:
Sommelier與MystenLabs與合作以推出Cosmos智能合約:金色財經報道,以太坊虛擬機(EVM)的協同處理協議Sommelier今天宣布與Web3.0基礎設施平臺MystenLabs建立研發合作伙伴關系,以提高流動性交易速度并在Cosmos區塊鏈上啟動智能合約應用。[2021/9/22 16:56:35]
值類型-valuetype
引用類型-referencetype
值類型
布爾型(bool)2bit(0/1)
整型(int/uint)根據關鍵字的不同表示不同長度,int8表示8bits有符號數
杭州中院:面推進數字法院建設,拓展區塊鏈智能合約應用場景:8月16日消息,杭州中院院黨組書記、院長斯金錦今日在2021年“一府兩院”工作報告會上向人大報告杭州法院2021年上半年工作情況和下半年工作安排。斯金錦表示,杭州中院上半年全面推進數字法院建設,在推動杭州互聯網法院深化改革、迭代升級“鳳凰智審”、拓展區塊鏈智能合約應用場景等方面走在全浙江省前列。下半年將敢于創新,全力推進全域數字法院建設。(杭州中院官方公眾號)[2021/8/16 22:17:47]
定長浮點型(fixed/ufixed)Solidity還沒有完全支持定長浮點型。可以聲明定長浮點型的變量,但不能給它們賦值或把它們賦值給其他變量
Hubble Chain 智能合約協議框架完成優化:哈勃公鏈(Hubble Chain)技術團隊宣布,基于Hubble Chain主網架構的智能合約協議框架,已經完成結構優化,合約代碼即將編寫完成。哈勃技術團隊負責人介紹,哈勃智能合約以數字化的形式寫入Hubble Chain主網中,由哈勃公鏈區塊鏈技術的特性保障存儲、讀取、執行整個過程的透明、可跟蹤,以及不可篡改。[2020/6/17]
定長字節數組(byte/bytes)定義數組時定義長度
地址類型(adress)160bits
地址類型成員變量(balance,transfer....)?
動態 | 360Vulcan 團隊:EOS 智能合約底層 asset 類存在嚴重缺陷:據360Vulcan 團隊情報稱,EOS 智能合約底層 asset 類存在嚴重缺陷,在數值計算時存在溢出風險,目前 360Vulcan 團隊已反饋給 EOS 官方漏洞平臺。這與慢霧安全團隊7 月 25 日預警的 EOS 狼人游戲出現溢出攻擊的根源有一定關系,狼人團隊與我們取得聯系后,與 360Vulcan 團隊都通過對合約源碼進行審計發現,asset 計算存在該溢出問題。[2018/8/3]
balanceuint256(256bits)?
transfer()uint256(256bits)
引用類型
不定長字節數組類型(bytes/byte,string,uint....)
結構體(struct)
映射(mapping)
簡單分析
寫一個簡單值類型的合約
pragmasolidity^0
可以看到雖然規定了了長度為5,但是實際上只用了4個,所以就只是用了四個bytes8的空間。
是不是可以加一個,編譯器會報錯。
變長數組
pragmasolidity^0
functionunlock(bytes32_password)public{?if(password==_password){??locked=false;?}}}
定義為私有變量只能組織其他合約訪問,但是無法阻止公開訪問
按照其代碼,可以知道password的存儲位置是1
web3.eth.getStorageAt(contract.address,1)
直接使用
contract.unlock("Averystrongsecretpassword:)")//密碼錯誤
contract.unlock(web3.utils.hexToBytes('0x412076657279207374726f6e67207365637265742070617373776f7264203a29'))
題目二--LockBox
pragmasolidity0.4.24;import"../CtfFramework.sol";contractLockbox1isCtfFramework{?uint256privatepin;?constructor(address_ctfLauncher,address_player)publicpayable???CtfFramework(_ctfLauncher,_player)?{???pin=now000;?}??functionunlock(uint256_pin)externalctf{???require(pin==_pin,"IncorrectPIN");???msg.sender.transfer(address(this).balance);?}}
讀取私有變量
constructor只在構造的時候執行一次
總結
本篇文章詳細講解了智能合約的優化存儲原則,數組類型,字符串類型,結構體類型和映射類型的存儲機制。同時提供了基于python的計算代碼,用以驗證機制分析的正確性。
當然,本文設計的智能合約設計并不復雜,在實際開發過程中遠比此復雜,需要經歷一些分析,在能找到正確的存儲位置。最后,希望通過本文章可以幫助大家進一步的了解智能合約。
Tags:ASSINTWORSOLAlnassr FC Fan TokenJetmint TokenKAELA Networksol幣歷史價格走勢圖
尊敬的XT用戶: XT現已完成資金劃轉功能維護,劃轉已全部恢復正常使用。維護期間給您帶來的不便,敬請諒解!感謝您對XT.COM的支持與信任!XT.COM團隊2021年9月26日BitMEX與開源.
1900/1/1 0:00:00撰文:Ventures Dfinity概覽 Dfinity基金會 Dfinity是一個非營利性組織,致力于將互聯網重塑為能承載具有超高能力并具有安全性的計算機.
1900/1/1 0:00:00據韓聯社消息,韓國金融委員會28日宣布,《特定金融信息法實施令》修正案在內閣會議上獲得通過。修正案內容顯示,加密貨幣交易所必須制定和實施業務指南,以防止經營者和高管在自己工作的交易所買賣虛擬貨幣.
1900/1/1 0:00:00親愛的BitMart用戶:BitMart將會支持AQUAGOAT代幣遷移,并為用戶提供置換服務,平臺內的用戶無需進行任何操作即可完成兌換。對應兌換比例為100:1.
1900/1/1 0:00:00金色財經報道,RobinhoodCrypto首席運營官ChristineBrown早前曾表示Robinhood正在考慮質押、借貸和其他DeFi工具.
1900/1/1 0:00:00鏈聞消息,虛擬現實元宇宙項目Bloktopia完成420萬美元私募輪融資,AnimocaBrands領投.
1900/1/1 0:00:00