溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

solidity開發(fā)以太坊智能合約時(shí)memory和storage有什么不同

發(fā)布時(shí)間:2021-12-07 15:57:05 來源:億速云 閱讀:244 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“solidity開發(fā)以太坊智能合約時(shí)memory和storage有什么不同”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“solidity開發(fā)以太坊智能合約時(shí)memory和storage有什么不同”吧!

在使用solidity開發(fā)以太坊智能合約時(shí),可以為變量聲明memory和storage關(guān)鍵字。那么,它們有什么不同之處?如果在聲明合約變量時(shí)沒有使用memory關(guān)鍵字,Solidity會(huì)嘗試在storage中存儲(chǔ)這個(gè)變量。

storage是什么

根據(jù)Solidity首席工程師Chriseth的說法:“你可以把storage想像成一個(gè)大數(shù)組,它有自己的結(jié)構(gòu),這個(gè)結(jié)構(gòu)是由你的合約中的狀態(tài)變量所決定的,因此在運(yùn)行時(shí)不能改變”。

這就是說,storage的結(jié)構(gòu)是在合約部署創(chuàng)建時(shí),根據(jù)你的合約中狀態(tài)變量的聲明,就固定下來了,并且不能在將來的合約方法調(diào)用中改變這個(gè)結(jié)構(gòu)。但是,storage中的內(nèi)容是可以通過交易來改變的。這些交易調(diào)用因此將修改合約的狀態(tài),這也是為什么合約中的變量被稱為狀態(tài)變量的原因。因此在合約層面聲明的一個(gè)uint8類型的storage變量, 它的值可以修改為任何0-255之間的有效uint8值,但是該變量在storage結(jié)構(gòu)中的位置始終不會(huì)變化。

函數(shù)中的變量

如果你在合約函數(shù)中聲明變量時(shí)沒有使用memory關(guān)鍵字,那么solidity將會(huì)嘗試使用storage結(jié)構(gòu),目前來講,這樣做可以通過編譯,但是可能導(dǎo)致不可預(yù)期的結(jié)果。memory關(guān)鍵字告訴solidity應(yīng)當(dāng)在該函數(shù)運(yùn)行時(shí)為變量創(chuàng)建一塊空間,使其大小和結(jié)構(gòu)滿足函數(shù)運(yùn)行的需要。

在合約層面你不能為變量應(yīng)用memory關(guān)鍵字。

到此,相信大家對(duì)“solidity開發(fā)以太坊智能合約時(shí)memory和storage有什么不同”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI