合约结构¶
在 Solidity 语言中,合约类似于其他面向对象编程语言中的**类**。
每个合约中可以包含 状态变量、 函数、 函数 、事件 Event、 结构体、 和 枚举类型 的声明,且合约可以从其他合约继承。
专门的 合约 章节会比本节包含更多的内容,本节用于帮助我们合约包含哪些内容,做一个简单的入门。
状态变量¶
状态变量是永久地存储在合约存储中的值。
pragma solidity >=0.4.0 <0.8.0;
contract TinyStorage {
uint storedXlbData; // 状态变量
// ...
}
有效的状态变量类型参阅 类型 章节, 对状态变量可见性有可能的选择参阅 可见性和 getter 函数 。
函数¶
函数是代码的可执行单元。函数通常在合约内部定义,但也可以在合约外定义。
// SPDX-License-Identifier: GPL-3.0
pragma solidity >0.7.0 <0.8.0;
contract TinyAuction {
function Mybid() public payable { // 定义函数
// ...
}
}
// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {
return x * 2;
}
函数调用 可发生在合约内部或外部,且函数对其他合约有不同程度的可见性( 可见性和 getter 函数)。
函数 修改器¶
函数 修改器 可以用来以声明的方式修改函数语义(参阅合约章节中 函数修改器)。
Overloading, that is, having the same modifier name with different parameters, is not possible.
Like functions, modifiers can be overridden.
pragma solidity >=0.4.22 <0.8.0;
contract MyPurchase {
address public seller;
modifier onlySeller() { // 修改器
require(
msg.sender == seller,
"Only seller can call this."
);
_;
}
function abort() public onlySeller { // 修改器用法
// ...
}
}
事件 Event¶
事件是能方便地调用以太坊虚拟机日志功能的接口。
pragma solidity >=0.4.21 <0.8.0;
contract TinyAuction {
event HighestBidIncreased(address bidder, uint amount); // 事件
function bid() public payable {
// ...
emit HighestBidIncreased(msg.sender, msg.value); // 触发事件
}
}
有关如何声明事件和如何在 [DApp 中使用事件](https://learnblockchain.cn/2018/05/09/solidity-event/)的信息,参阅合约章节中的 事件 Events。