Smart Contract 開發實戰(一) — 變數型態
這一系列主要紀錄學習開發 Smart Contract 的過程…
Smart Contract 為在以太坊網絡上運行的分散式應用程式通稱.Smart Contract 其實就是一段程式語言,部署在以太坊網絡上,因此也具備去中心以及不可變等特性,而程式運行的結果會被寫在以太坊上,變成區塊鏈的一份子.(簡單來說如果寫錯就 GG 了)
Solidity
Solidity 為開發 Smart Contract 的程式語言,文件可以參考http://solidity.readthedocs.io/en/v0.4.24/
Helloworld
學新語言一定要來一下 Helloworld 的
pragma solidity ^0.4.19; //1. 宣告使用的版本//2. 宣告 contract Helloworld 是合約的名字contract HelloWorld {}
宣告變數
Solidity 裡面也可以宣告變數.這裡的變數又稱為 State Variable,這個變數在執行後會被寫入區塊鏈中(一樣,命名寫歪就 GG,而且全世界的人都看得到).
範例中宣告的變數 uint 等同於 uint256,這邊要注意 Solidity 也會有溢位的情況,溢位後該變數就等於 0… 之後會發生什麼事請參考以下悲劇…
pragma solidity ^0.4.19;contract HelloWorld{ uint digits = 16;}
數學運算
- 加:
x + y
- 減:
x - y
, - 乘:
x * y
- 除:
x / y
- 餘數:
x % y
不過強烈建議使用 safeMath…
https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/math/SafeMath.sol
Struct
Solidity 也支援比較複雜的資料格式,可以用 Struct 來定義一組變項的集合.
struct Person{
string name;
uint dna;
}
如果想要巢狀的 Struct 的話,可以用 Struct in Struct 的方式.
struct IpfsHash {
bytes32 hash;
uint hashSize;
}
struct Member {
IpfsHash ipfsHash;
}
Array
Solidity 中有支援兩種 Array,固定和動態的.
uint[2] fixedArray; //長度為 2 的 int arraystring[5] stringArray; //長度為 5 的 string Arrayuint[] dynamicArray; //動態 Array
另外還可以建立 struct 的 Array,像這樣:
Person[] public people;
短評:
定義 Struct Array 的方式真的滿方便的!