前言
在以太坊上,我們可以通過部署智能合約來實現我們需要的功能,合約代碼中我們往往需要定義一些變量,這就涉及到了智能合約變量的存儲機制。
這篇文章我們將根據solidity的所有的變量命名的類型來講解智能合約的存儲機制。
存儲機制
每個在以太坊虛擬機中運行的智能合約的狀態都在鏈上永久地存儲著。這些值存儲在一個巨大的數組中,數組的長度為2^256,下標從零開始且每一個數組能夠儲存32字節(256個比特)長度的值。并且存儲是稀疏的,并沒有那么密集。
變量類型
Solidity的數據變量類型分為兩類:
OneSwap智能合約代碼通過慢霧、成都鏈安、PeckShield安全審計:據海外媒體消息,OneSwap已9月6日順利通過智能合約代碼安全審計,此次審計工作由三家業內知名的安全公司慢霧科技,派盾PeckShield,成都鏈安完成。在審計過程中,三家獨立的審計團隊采取自身獨特的策略對OneSwap智能合約代碼進行全方位開展代碼審計工作,以最大程度確保及時發現漏洞。
審計團隊分別從攻擊漏洞測試、合約復雜度分析、代碼通用性、鏈上數據安全、代碼邏輯等方面對OneSwap智能合約代碼進行全方位的測試分析。OneSwap智能合約代碼均符合三家安全公司的安全審核標準,審計中發現的問題目前都已解決或正在解決中。
OneSwap是一個基于智能合約的完全去中心化的交易協議,在CFMM模型的基礎之上引入鏈上訂單簿來改善AMM用戶的交易體驗。上幣無需許可,可支持自動化做市、支持掛單挖礦、流動性挖礦和交易挖礦。據官方消息,Oneswap將在2020年9月7日正式上線并開啟公測。[2020/9/7]
值類型-valuetype
Telos發布以太坊虛擬機EVM 可運行與以太坊兼容的智能合約:Telos今日在其測試網上發布了一個以太坊虛擬機(EVM)。它將使開發者能夠創建和運行與以太坊兼容的智能合約,而無需支付交易費用。開發者已經被邀請使用以太坊的主要編程語言Solidity來在測試網上運行智能合約,之后在7月份將在mainnet上啟動Telos EVM。Telos聲稱可以支持每秒10000次交易(TPS),而且不收取交易費用。這是以太坊每秒14次交易收費的一個有競爭力的替代品。(Cointelegraph)[2020/6/18]
引用類型-referencetype
值類型
洪蜀寧:DeFi必須擺脫以太坊智能合約范式的依賴才能成功:金丘區塊鏈研究院院長洪蜀寧今日發微博稱,imBTC的uniswap做市商被黑,是tokenlon自己的問題,uniswap本身就不支持erc777 tokrn非要強上。這種漏洞,究其根本原因跟不久前兩次flashloan事件是一樣的,還是起源于以太坊智能合約范式的不安全性。DEFI必須擺脫對這種范式的依賴才能真正成功。[2020/4/19]
布爾型(bool)2bit(0/1)
整型(int/uint)根據關鍵字的不同表示不同長度,int8表示8bits有符號數
定長浮點型(fixed/ufixed)Solidity還沒有完全支持定長浮點型。可以聲明定長浮點型的變量,但不能給它們賦值或把它們賦值給其他變量
EDU團隊發布關于EduCoin(EDU)智能合約升級的公告聲明:EDU團隊發布關于EduCoin(EDU)智能合約升級的公告聲明:
1、EDU團隊內部技術工程師在昨日發現合約漏洞之后,為確保用戶資產安全,我們第一時間通知交易所,并暫停了充提業務和交易業務。
2、EDU團隊已對異常賬戶出現前的資產地址進行快照,快照時間為2018年5月23日22:51分。智能合約升級后,將對快照地址做資產映射,快照時的用戶資產不會受到任何影響。
3、EDU團隊正在全力做智能合約的升級,預計24-96小時升級成功。
4、重要提示:EDU的交易所充提及交易業務將在智能合約升級完成后重新開啟,請各位耐心等待。
EDU團隊還建議用戶在智能合約升級期間,不要進行任何交易行為(場外交易等),以免被投機分子利用,造成財產損失。[2018/5/24]
定長字節數組(byte/bytes)定義數組時定義長度
地址類型(adress)160bits
地址類型成員變量(balance,transfer....)?
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:EDU以太坊INTSWAPEDU幣項目方比特幣以太坊最新價格Interest ProtocolOnigiriSwap
尊敬的用戶: 因節點升級,WBF暫時關閉ZEC的充提幣,給您帶來的不便,敬請諒解。掃碼加入WBF官方QQ群 WBF風險提示: Ripple CEO敦促美立法者處理SEC主席關于“現有證券法足以監.
1900/1/1 0:00:00前言 EVM是一個輕量級的虛擬機,其設計初衷就是提供一種可以忽略硬件、操作系統等兼容性的虛擬的執行環境供以太坊網絡運行智能合約.
1900/1/1 0:00:00金色財經報道,RobinhoodCrypto首席運營官ChristineBrown早前曾表示Robinhood正在考慮質押、借貸和其他DeFi工具.
1900/1/1 0:00:00尊敬的中幣用戶: ???HarricaneSwap福利申購活動已圓滿完成,感謝所有用戶的熱情參與!???HCT福利申購活動結束后的BTC第一個區塊哈希值為:0000000000000000000.
1900/1/1 0:00:00《TheCathedralandtheBazaar》被譽為開源運動的「圣杯」,是作者EricStevenRaymond所撰寫的軟件工程方法論.
1900/1/1 0:00:00為幫助用戶更輕松實現數字資產量化交易,Gate.io量化交易中心全面升級,改名“量化跟單”全新上線,功能及頁面全面升級.
1900/1/1 0:00:00