solidity學習筆記

2022-10-08 03:18:08 字數 1578 閱讀 6542

1、狀態變數是放在區塊鏈上

2、view修飾的函式,讀取和訪問狀態變數,表示訪問狀態變數(區塊鏈上的資料),但是不會修改,僅限於訪問,不消耗資源

3、pure修飾的函式,不修飾也不讀取狀態變數(區塊鏈上的資料),不會消耗任何資源

4、不用view,pure等修飾的函式,會修改區塊鏈上的資料,會消耗資源

5、memory是儲存方式

狀態變數:只要在合約中直接定義的變數

區域性變數:除狀態變數外,其餘全是區域性變數

在solidity中,所有需要命名的都是識別符號,如合約名稱,變數名等

識別符號的命名規則

字元,數字,下劃線,$組成,不能以數字開頭,要見名知意,按照這個函式是什麼作用來命名,區分大小寫,多個單詞組成是要按照駝峰式命名規則。

關鍵字:不能被當成識別符號使用,在remix中所有變顏色的都為關鍵字,不可使用

int8代表能夠用8位儲存資料,依此類推int256能夠用256位儲存資料

設定n-2n-1 ~~ 2n-1-1

byte <== >bytes1

returns定義乙個怎樣的返回型別

引用型別位址拷貝

值型別值拷貝

共分為位運算,賦值運算,算術運算,關係運算,邏輯運算

a++ 先加上a的值,再將a+上1

++a 先將a加上1,再使用a的值

除法運算,使用變數運算時,是截斷的,但是用整形的常量則不截斷

定長不考慮用new的方式

solidity的變長陣列寫在uint x = new uint(4);

length:長度,獲取長度,修改length修改陣列的長度,但0.6.0以上的版本無論定長還是變長不能通過length修改陣列的長度

push:定長陣列不能用push ,變長陣列storage可以變,memory不能放。

狀態變數預設的位置在stroge,所以uint fix,可以用push方法往uint fix存放資料

memory定義的變長陣列不能使用push

變長陣列可以直接賦值也可以push,但是用push只存在於變長陣列是存在stroa ge,也就是資料位置在stroge中

返回陣列

變長第一次使用push

下標越界是:長度是5的陣列,如果下標是從0-4算,到了5就會丟擲異常

加不加memroy的前提是:只用引用資料型別才需要定義儲存在memroy還是storage中,除此之外的基本資料型別是不用定

byte這樣寫的陣列不會給壓縮打包,比較浪費空間,作為引數被外部應用去呼叫時並不會去壓縮打包

solidity中每個漢字佔3個位元組

定長位元組陣列bytes1 。。。 bytes2

變長位元組陣列

定長位元組陣列如何如何轉變長位元組陣列

實現借助於bytes方法

bytes,byte裡面都是位元組的方式儲存資料,string:utf-8

byte定長位元組陣列 to string 沒有,需要借助bytes,定長轉變長,在用string()把bytes轉成string格式

如果字串的長度固定(長度可以確定)情況下,建議使用bytes32,代替string,從消耗gas方面考慮,bytes32gas消耗更少

1、陣列字面量

Solidity學習筆記(3)

在此後的學習,將更加深入理解solidity的方方面面 solidity原始檔的布局 引入其他的原始檔 注釋合約的結構 型別變數型別 列舉 參考型別對映 包括左賦值的操作符 在基本型別間的轉換 型別匯出 單元區域性和全域性可見變數 ether單元 time單元 特殊變數和函式 表示式和控制結構 控制...

Solidity語言學習筆記 34 繼承

pragma solidity 0.4.16 contract owned address owner 使用 is 繼承另乙個合約。子合約可以訪問所有非私有成員,包括 內部函式和狀態變數。不過,不能通過 this 來外部訪問這些。contract mortal is owned 這些抽象合約僅用於建...

以太坊 Solidity學習

函式set和get可以用來變更或取出變數的值。該合約能完成的事情並不多 由於以太坊構建的基礎架構的原因 它能允許任何人在合約中儲存乙個單獨的數字,並且這個數字可以被世界上任何人訪問,且沒有可行的辦法阻止你發布這個數字。當然,任何人都可以再次呼叫 set 傳入不同的值,覆蓋你的數字,但是這個數字仍會被...