版本指令
pragma solidity ^0.4.19;
状态变量
状态变量是被永久地保存在合约中。也就是说它们被写入以太币区块链中,你可以想象成写入一个数据库。
contract Example {
// 这个无符号整数将会永久的被保存在区块链中
uint myUnsignedInteger = 100;
}
无符号整数: uint
uint 无符号数据类型, 指其值不能是负数,对于有符号的整数存在名为 int 的数据类型。
注: Solidity中, uint 实际上是 uint256代名词。你也可以定义位数少的uints — uint8, uint16, uint32, 等…… 但一般来讲你愿意使用简单的 uint, 除非在某些特殊情况下。
数学运算
- 加法: x + y
- 减法: x - y,
- 乘法: x * y
- 除法: x / y
- 取模 / 求余: x % y (例如, 13 % 5 余 3, 因为13除以5,余3)
- 乘方: x ** y (x^y)
结构体
struct Person {
uint age;
string name;
}
创建新的结构体
Person[] public people;
// 创建一个新的Person:
Person satoshi = Person(172, "Satoshi");
// 将新创建的satoshi添加进people数组:
people.push(satoshi);
数组
Solidity 支持两种数组: 静态 数组和动态 数组
// 固定长度为2的静态数组:
uint[2] fixedArray;
// 固定长度为5的string类型的静态数组:
string[5] stringArray;
// 动态数组,长度不固定,可以动态添加元素:
uint[] dynamicArray;
// 结构体类型的数组
Person[] people;
记住:状态变量被永久保存在区块链中。所以在你的合约中创建动态数组来保存成结构的数据是非常有意义的。
公共数组
Person[] public people;
定义 public 数组, Solidity 会自动创建 getter 方法.
定义函数
function eatHamburgers(string _name, uint _amount) {
}
eatHamburgers("vitalik", 100);
注:习惯上函数里的变量都是以(_)开头 (但不是硬性规定) 以区别全局变量。
私有 / 公共函数
Solidity 定义的函数的属性默认为公共。 这就意味着任何一方 (或其它合约) 都可以调用你合约里的函数。
显然,不是什么时候都需要这样,而且这样的合约易于受到攻击。 所以将自己的函数定义为私有是一个好的编程习惯,只有当你需要外部世界调用它时才将它设置为公共。
// 定义一个私有的函数, 私有函数的名字用(_)起始
uint[] numbers;
function _addToArray(uint _number) private {
numbers.push(_number);
}
函数的返回值
string greeting = "What's up dog";
function sayHello() public returns (string) {
return greeting;
}
函数的修饰符: view / pure
view: 意味着它只能读取数据不能更改数据
pure: 不读取区块链上的数据
·