Solidity--學(xué)習(xí)筆記

函數(shù)參數(shù),包括返回值的默認(rèn)數(shù)據(jù)存儲(chǔ)位置是memory。
局部變量的默認(rèn)數(shù)據(jù)存儲(chǔ)位置是storage。
狀態(tài)變量默認(rèn)數(shù)據(jù)存儲(chǔ)位置強(qiáng)制為storage

使用new創(chuàng)建的memory的數(shù)組,不能使用length改變長(zhǎng)度
改小數(shù)組長(zhǎng)度,被移除的元素會(huì)被銷(xiāo)毀

function f() returns (uint, bool, uint) {
    return (7, true, 2);
  }
(data.length,) = f(); // Sets the length to 7 設(shè)定長(zhǎng)度為7
(,data[3]) = f(); // Sets data[3] to 2  將data[3] 設(shè)為2

在函數(shù)中任何位置聲明的變量,它的作用域?yàn)檎麄€(gè)函數(shù),與聲明位置無(wú)關(guān)

(1)在以下情況下會(huì)生成assert風(fēng)格異常:
以過(guò)大或負(fù)數(shù)索引訪問(wèn)數(shù)組(比如x[i] ,i >= x.length 或 i < 0)
以過(guò)大或負(fù)數(shù)索引訪問(wèn)固定長(zhǎng)度的bytesN。
除數(shù)或模數(shù)為零(例如5/0或23%0)。
對(duì)負(fù)數(shù)進(jìn)行位移
將過(guò)大或負(fù)數(shù)轉(zhuǎn)化為枚舉類(lèi)型。
調(diào)用內(nèi)部函數(shù)類(lèi)型的0初始化(zero-initialized)變量。
assert的條件為false
(2)在以下情況下會(huì)生成require風(fēng)格異常:
調(diào)用throw
調(diào)用require并且條件為false
通過(guò)消息調(diào)用來(lái)調(diào)用函數(shù),但是它沒(méi)有正確完成(即,用盡了gas,沒(méi)有匹配的函數(shù),或者拋出了異常),除非使用底層別的操作call,send,delegatecall或callcode。 底層別的操作不會(huì)拋出異常,而是通過(guò)返回false來(lái)表示失敗。
使用new關(guān)鍵字創(chuàng)建合約但是失敗。
執(zhí)行一個(gè)外部函數(shù)調(diào)用,其指向不包含代碼的合約。
合約通過(guò)public函數(shù)接收Ether,但沒(méi)有payable修飾符。包括構(gòu)造函數(shù)和回退函數(shù)。
合約通過(guò)一個(gè)public的getter函數(shù)接收Ether。
如果.transfer()失敗。
(3)assert風(fēng)格的異常消耗調(diào)用中可用的所有g(shù)as,而require風(fēng)格的異常將不會(huì)消耗從Metropolis版本開(kāi)始的任何gas。

編譯器會(huì)自動(dòng)為所有public狀態(tài)變量創(chuàng)建getter函數(shù)。
getter函數(shù)具有外部可見(jiàn)性。
如果在內(nèi)部訪問(wèn)符號(hào)(即不使用this.關(guān)鍵字),則將其作為狀態(tài)變量。
如果它是外部訪問(wèn)的(即使用this.),則將其作為函數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容