变量
- 局部变量
- 在函数内部声明
- 不存储到链上
- 状态变量
- 在函数外部声明
- 状态变量是永久地存储在链上的值。
- 全局变量
- 提供有关区块链的信息
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract Variables {
// State variables are stored on the blockchain.
string public text = "Hello";
uint public num = 123;
function doSomething() public {
// Local variables are not saved to the blockchain.
uint i = 456;
// Here are some global variables
uint timestamp = block.timestamp; // Current block timestamp
address sender = msg.sender; // address of the caller
}
}
函数
函数是代码的可执行单元。函数通常在合约内部定义,但也可以在合约外定义。
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;
contract Storage {
function set() public { // 定义函数
// ...
}
}
function OutsideFunc(uint x) pure returns (uint) {
return x * 2;
}
函数修改器(modifier)
函数 修改器modifier 可以用来以声明的方式修改函数语义。参阅 Solidity 函数章节中 函数修改器
pragma solidity >=0.8.0 <0.9.0;
contract MyContract {
address public owner;
modifier onlyOwner() { // 修改器
require(
msg.sender == owner,
"is not owner."
);
_;
}
function send() public onlyOwner { // 修改器用法
// ...
}
}
事件 Event
事件是能方便地调用EVM虚拟机日志功能的接口。
pragma solidity >=0.8.0 <0.9.0;
contract MyEvents {
event Cardbinded(address caller, string account); // 事件
function bindCard() public payable {
// ...
emit Cardbinded(msg.sender, msg.value); // 触发事件
}
}
具体参阅 Solidity 事件章节 了解如何声明和在 DApp 中使用。
错误 Errors
Solidity 为应对失败,允许用户定义 error
来描述错误的名称和数据。 跟用错误字符串相比, error
更便宜并且允许你编码额外的数据,还可以用 NatSpec 为用户去描述错误。
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;
error NotFoundUser(address account, uint256 uid);
contract Token {
mapping(address => uint256) users;
function getUser(address _account, uint256 _uid) public view {
uint256 uid = users[msg.sender];
if (uid < _uid) {
revert NotFoundUser(_account, _uid);
}
// ...
}
}
结构体
结构体是可以将几个变量分组的自定义类型
pragma solidity >=0.8.0 <0.9.0;
contract Users {
struct User { // 结构体
string nickname;
uint age;
bool state;
}
}
枚举
枚举可用来创建由一定数量的“常量值”构成的自定义类型
pragma solidity >=0.8.0 <0.9.0;
contract UserState {
enum State { Online, Offline, Unknown } // 枚举
}
接口
和其他编程语言一样,但是它们不能实现任何函数。
pragma solidity >=0.8.0 <0.9.0;标签:function,0.8,Solidity,函数,uint256,solidity,智能,合约,public From: https://blog.51cto.com/u_1540468/5897739
interface PaymentOrder {
function createOrder(string orderId) external returns (uint256);
function payOrder(string orderId) external returns (uint256);
function cancelOrder(string orderId) external returns (uint256);
}