版本指令
pragma solidity ^0.4.19;
狀態(tài)變量
狀態(tài)變量是被永久地保存在合約中。也就是說它們被寫入以太幣區(qū)塊鏈中,你可以想象成寫入一個數(shù)據(jù)庫。
contract Example {
// 這個無符號整數(shù)將會永久的被保存在區(qū)塊鏈中
uint myUnsignedInteger = 100;
}
無符號整數(shù): uint
uint 無符號數(shù)據(jù)類型, 指其值不能是負數(shù),對于有符號的整數(shù)存在名為 int 的數(shù)據(jù)類型。
注: Solidity中, uint 實際上是 uint256代名詞。你也可以定義位數(shù)少的uints — uint8, uint16, uint32, 等…… 但一般來講你愿意使用簡單的 uint, 除非在某些特殊情況下。
數(shù)學(xué)運算
- 加法: x + y
- 減法: x - y,
- 乘法: x * y
- 除法: x / y
- 取模 / 求余: x % y (例如, 13 % 5 余 3, 因為13除以5,余3)
- 乘方: x ** y (x^y)
結(jié)構(gòu)體
struct Person {
uint age;
string name;
}
創(chuàng)建新的結(jié)構(gòu)體
Person[] public people;
// 創(chuàng)建一個新的Person:
Person satoshi = Person(172, "Satoshi");
// 將新創(chuàng)建的satoshi添加進people數(shù)組:
people.push(satoshi);
數(shù)組
Solidity 支持兩種數(shù)組: 靜態(tài) 數(shù)組和動態(tài) 數(shù)組
// 固定長度為2的靜態(tài)數(shù)組:
uint[2] fixedArray;
// 固定長度為5的string類型的靜態(tài)數(shù)組:
string[5] stringArray;
// 動態(tài)數(shù)組,長度不固定,可以動態(tài)添加元素:
uint[] dynamicArray;
// 結(jié)構(gòu)體類型的數(shù)組
Person[] people;
記?。籂顟B(tài)變量被永久保存在區(qū)塊鏈中。所以在你的合約中創(chuàng)建動態(tài)數(shù)組來保存成結(jié)構(gòu)的數(shù)據(jù)是非常有意義的。
公共數(shù)組
Person[] public people;
定義 public 數(shù)組, Solidity 會自動創(chuàng)建 getter 方法.
定義函數(shù)
function eatHamburgers(string _name, uint _amount) {
}
eatHamburgers("vitalik", 100);
注:習(xí)慣上函數(shù)里的變量都是以(_)開頭 (但不是硬性規(guī)定) 以區(qū)別全局變量。
私有 / 公共函數(shù)
Solidity 定義的函數(shù)的屬性默認為公共。 這就意味著任何一方 (或其它合約) 都可以調(diào)用你合約里的函數(shù)。
顯然,不是什么時候都需要這樣,而且這樣的合約易于受到攻擊。 所以將自己的函數(shù)定義為私有是一個好的編程習(xí)慣,只有當(dāng)你需要外部世界調(diào)用它時才將它設(shè)置為公共。
// 定義一個私有的函數(shù), 私有函數(shù)的名字用(_)起始
uint[] numbers;
function _addToArray(uint _number) private {
numbers.push(_number);
}
函數(shù)的返回值
string greeting = "What's up dog";
function sayHello() public returns (string) {
return greeting;
}
函數(shù)的修飾符: view / pure
view: 意味著它只能讀取數(shù)據(jù)不能更改數(shù)據(jù)
pure: 不讀取區(qū)塊鏈上的數(shù)據(jù)
·