1.6.2 智能合约的组成部分

在Solidity中,智能合约很类似面向对象编程语言中的类。每个智能合约包含状态变量,函数,函数修饰符,事件,结构类型,枚举类型等的声明。一个智能合约还可以继承自其它智能合约。

1.6.2.1 状态变量(State Variables)

状态变量永久存储在智能合约的存储中。如下所示:

pragma solidity ^0.4.0;

contract SimpleStorage {

uint storedData; // 状态变量

// ...

}

1.6.2.2 函数(Functions)

函数是合约中一个可执行的代码单元。

pragma solidity ^0.4.0;

contract SimpleAuction {

function bid() public payable { // 函数

// ...

}

}

函数可以从内部或外部被调用,函数有不同的可见性。

1.6.2.3 函数修饰符(Function Modifiers)

函数修饰符可用于改变函数的语义,其用法类似函数的定义,如下所示:

pragma solidity ^0.4.0;

contract Purchase {

address public seller;

modifier onlySeller() { // 函数修饰符

require(

msg.sender == seller,

"Only seller can call this."

);

_;

}

function abort() public onlySeller { // Modifier usage

// ...

}

}

1.6.2.4 事件(Events)

事件是以太坊虚拟机的日志接口,可用于记录系统信息。

pragma solidity ^0.4.0;

contract SimpleAuction {

event HighestBidIncreased(address bidder, uint amount); // 事件

function bid() public payable {

// ...

emit HighestBidIncreased(msg.sender, msg.value); // 触发事件

}

}

1.6.2.5 结构体类型(Struct Types)

结构体是用户自定义的数据类型,可包含各种类型的数据,如下所示:

pragma solidity ^0.4.0;

contract Ballot {

struct Voter { // 结构类型

uint weight;

bool voted;

address delegate;

uint vote;

}

}

1.6.2.6 枚举类型(Enum Types)

枚举类型可被用于定义一组有限常量的集合。

pragma solidity ^0.4.0;

contract Purchase {

enum State { Created, Locked, Inactive } // 枚举类型

}

在下面的章节中我们将分别就这些具体的类型作详细介绍。