Solidity基础

210 阅读1分钟

合约

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;
}