合约
pragma
pragma solidity ^0.4.19;
pragma solidity >0.4.23 <=0.5.0;
contract
import "./abstractcontract.sol"
contract newContract is AbstractContract {
}
contract HelloWorld {
}
//Inheritance
contract HelloChina is HelloWorld {
}
数据类型
1.uint
uint num = 123;
2.string
string str = "Hello World";
3.struct
struct Person {
uint age;
string name;
}
4.[]
Person[] people;
5.Address
address addr = 0x47422d915458ef540ade6068dfe2f44e8fa733c
6.Mapping
mapping (uint => string) public stringMapping;
stringMapping[1] = "Hello";
stringMapping[2] = "World";
string str = stringMapping[1] + stringMapping[2];
7.全局变量
msg.sender
msg.value
数据存储
storage
数据存储,在函数内更改区块链存储的数据。
Person storage person = people[index];
person.age++;
memory
数据副本,在函数内使用区块链存储的数据。
Person memory person = people[index];
person.age++;
people[index] = person;
函数
function + 函数名 + (...传参) + ...修饰符 + returns + (...返回值) {
}
修饰符
private
只能被合约内部调用
internal
合约内部和继承的合约调用
external
合约外部调用
public
任何地方调用
view
只能读取数据,不会更改和保存任何数据(合约内部调用消耗gas,外部调用不消耗gas)
pure
纯函数,不会读写区块链数据(合约内部调用消耗gas,外部调用不消耗gas)
modifier
对函数的约束逻辑
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
modifier olderThan(uint _age) {
require(age[msg.sender] >= _age);
_;
}
function test() onlyOwner olderThan(18) {
};
payable
转账相关
Require
满足条件继续执行,不满足条件抛出错误并停止执行。
function add(uint a, uint b) returns(uint) {
require(a > 0 && b > 0);
return a + b;
}
接口(Interface)
contract NumberInterface {
function getNumbers(address _myAddress) public view returns (
uint number_1;
uint number_2;
uint number_3;
);
}
contract useInterface {
NumberInterface numberContract = NumberInterface(msg.sender);
uint num3;
(,,num3) = numberContract.getNumbers(msg.sender);
}
事件
事件是合约和区块链通讯的一种机制,前端应用通过监听事件作出反应。
event contractEvent(uint x, uint y, uint result);
function add(uint _x, uint _y) public {
uint result = _x + _y;
//触发事件,通知app
contractEvent(_x, _y, result);
return result;
}