地址类型
pragma solidity ^0.8.0;
contract AddressExample {
// 地址
address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71;
address payable public _address1 = payable(_address); // payable address,可以转账、查余额
// 地址类型的成员
uint256 public balance = _address1.balance; // balance of address
}
上面的代码展示了 Solidity 中地址类型的基本用法。地址类型存储一个 20 字节的值,即以太坊地址的大小。地址类型有两种:普通地址和可以转账 ETH 的地址(payable)。payable 修饰的地址可以执行转账操作,并具有两个额外的成员函数:`transfer` 和 `send`。在 payable 修饰的地址中,`send` 执行失败不会影响当前合约的执行,但会返回 false 值,需要开发人员检查返回值。除此之外,payable 地址还提供了 `balance` 和 `transfer()` 成员函数,用于查询 ETH 余额和执行安全转账操作。
定长字节数组
pragma solidity ^0.8.0;
contract ByteArrayExample {
// 固定长度的字节数组
bytes32 public _byte32 = "MiniSolidity";
bytes1 public _byte = _byte32[0]; // MiniSolidity变量以字节的方式存储进变量_byte32,转换成16进制为:0x4d696e69536f6c69646974790000000000000000000000000000000000000000
// _byte变量存储_byte32的第一个字节,为0x4d。
}
上面的代码演示了 Solidity 中固定长度的字节数组的基本用法。字节数组有两种:定长和不定长。定长的字节数组(如 byte
、bytes8
、bytes32
)属于数值类型,而不定长的字节数组是引用类型(稍后讲述)。
在示例中,_byte32
是一个固定长度的字节数组,存储了字符串 "MiniSolidity"。变量 _byte
存储了 _byte32
的第一个字节,即字符串 "M" 的 ASCII 码(十六进制为 0x4d
)。
枚举
pragma solidity ^0.8.0;
contract EnumExample {
// 用 enum 将 uint 0,1,2 表示为 Buy, Hold, Sell
enum ActionSet { Buy, Hold, Sell }
// 创建 enum 变量 action
ActionSet public action = ActionSet.Buy;
// enum 可以和 uint 显式的转换
function enumToUint() external view returns (uint) {
return uint(action);
}
}
上面的代码演示了 Solidity 中枚举(enum)的基本用法。枚举是 Solidity 中的用户定义数据类型,主要用于为 uint 分配名称,使程序易于阅读和维护。与 C 语言中的 enum 类似,Solidity 的枚举使用名称来代替从 0 开始的 uint。
在示例中,ActionSet
枚举类型定义了三个可能的取值:Buy
、Hold
、Sell
。通过创建 action
变量,并将其初始化为 ActionSet.Buy
,我们可以将枚举值用于实际编程中。
此外,示例中的 enumToUint
函数演示了如何将枚举值显式转换为 uint 类型。这种转换可以方便地将枚举值用于计算或存储。