《solidity學習筆記》chapter 1-solidity基礎知識


框架
    就像其他語言的HelloWorld一樣,使用solidity寫智能合約的框架如下:
    contract Helloworld{
    ……
    }


版本指令
    每個智能合約文件第一行指定solidity編譯器版本號,格式如下:
    pragma solidity ^版本號;
    栗子:
    pragma solidity ^0.4.19;


狀態變量
    狀態變量是被永久地保存在合約中。也就是說它們被寫入以太幣區塊鏈中。可以用storage標識。
    對應狀態變量,單節點上不需要同步的變量可以用memory標識,標識該變量存儲於內存中,不需要被寫入區塊鏈。


整數
    solidity內的整數可以使用uint來標識。uint默認爲uint256,代表是一個256位無符號整型,對應有uint8,uint16,uint32等。


運算符
    solidity內的運算符與其他語言相似,+,-,*,/等等。


結構體
solidity內的結構體與其他語言相似:
struct Person{
        string name;
        bool sexual;
    ……
}
這裏有一點要注意的是同類型變量最好放在一起,這樣可以節省空間:
struct Person{
        string name;
        string hairColor;
        bool sexual;
        uint8 age;
    ……
}


類型轉換

uint a;

uint8 b;

uint8 c;

//c = a+b; //編譯器不給過,因爲a和b類型不同

c=uint8(a)+b;


數組
solidity支持靜態和動態數組:
uint[2] a;
uint[] b;
還可以支持結構體數組:
Person[] people;
公共數組
你可以定義 public 數組, Solidity會自動創建 getter 方法. 語法如下:

Person[] public people;
其它的合約可以從這個數組讀取數據(但不能寫入數據),所以這在合約中是一個有用的保存公共數據的模式。

在函數尾部增加新元素

people.push(Person("eddie",true));


函數
類似JS:
function example(string  _a,uint _b) returns (string){
    string s;
    return s;
}

習慣:

參數都使用_開頭。


函數修飾符
public:    合約內外均可調用。
private:合約內可調用。
internal:合約內和繼承合約的可調用。
external:合約外可調用。
栗子:

contract example{

    function _aaa(uint _a)private{
    }

}

習慣:

當函數爲私有時,函數名以_開頭。


modifier:指明修飾符體
栗子:

contract example{

    modifier aboveMinEth(){
        require (msg.value >= 0.001 ether);     //require:條件判斷語句,爲否則函數體不執行。
        _;    //繼續執行函數體。
    }

     function aaa(uint _a) public aboveMinEth {

    ……;   

    }

}

view:沒有改變任何值或者寫任何東西,最多隻有讀操作。

pure:沒有讀寫操作,只根據輸入值來決定輸出值。

contract example{

    uint a=9;

    function add1(uint _b)public view returns(uint){

        return  a+_b;

    }

    function add2(uint _b,uint _c)public pure returns(uint){

        return  _b+_c;

    }

}


事件

事件是合約與區塊鏈之間通訊的一種機制。

contract example{

    uint a=9;

    event addsomething(uint _x,uint _y,uint result);    //建立事件

    function add2(uint _b,uint _c)public pure returns(uint){

        addsomething(_b,_c,_b+_c);    //觸發事件,通知app

        return  _b+_c;

    }

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章